From 201addb153c36a88a3a215e2727eec1136a46a84 Mon Sep 17 00:00:00 2001 From: Steven Jackson Date: Sat, 6 Dec 2014 01:59:20 -0600 Subject: [PATCH] 5.3.26 --- Interface/AddOns/SVUI/data/defaults.lua | 4 + .../AddOns/SVUI/framework/api/api_templates.lua | 33 +- .../AddOns/SVUI/framework/movers/mover_dragger.lua | 461 ++++++++++---------- .../AddOns/SVUI/framework/movers/mover_mentalo.lua | 4 +- Interface/AddOns/SVUI/packages/_load.xml | 1 + Interface/AddOns/SVUI/packages/chat/SVChat.lua | 60 ++- .../SVUI/packages/tools/components/questwatch.lua | 8 +- Interface/AddOns/SVUI/scripts/sounds.lua | 34 ++ Interface/AddOns/SVUI/setup/installer.lua | 12 +- .../SVUI_StyleOMatic/components/addons/ACP.lua | 4 +- .../components/blizzard/achievement.lua | 2 +- .../SVUI_StyleOMatic/components/blizzard/alert.lua | 26 +- .../SVUI_StyleOMatic/components/blizzard/lfd.lua | 28 +- 13 files changed, 369 insertions(+), 308 deletions(-) create mode 100644 Interface/AddOns/SVUI/scripts/sounds.lua diff --git a/Interface/AddOns/SVUI/data/defaults.lua b/Interface/AddOns/SVUI/data/defaults.lua index d874ce6..98e07dc 100644 --- a/Interface/AddOns/SVUI/data/defaults.lua +++ b/Interface/AddOns/SVUI/data/defaults.lua @@ -675,6 +675,10 @@ SV.defaults["SVPlate"] = { }, }; +SV.defaults["SVQuest"] = { + ["enable"] = true, +} + SV.defaults["SVStats"] = { ["enable"] = true, ["font"] = "SVUI Number Font", diff --git a/Interface/AddOns/SVUI/framework/api/api_templates.lua b/Interface/AddOns/SVUI/framework/api/api_templates.lua index d07785f..443ea05 100644 --- a/Interface/AddOns/SVUI/framework/api/api_templates.lua +++ b/Interface/AddOns/SVUI/framework/api/api_templates.lua @@ -732,8 +732,8 @@ local function SetCheckboxTemplate(self, shrink, x, y) local width, height = self:GetSize() if(shrink) then - x = x or -7 - y = y or -7 + x = x or 0 + y = y or 0 end width = width + (x or 0) @@ -742,6 +742,33 @@ local function SetCheckboxTemplate(self, shrink, x, y) self:SetSize(width, height) CreatePanelTemplate(self, "Inset", true, true, 1, x, y) + + if(self.SetNormalTexture) then + self:SetNormalTexture("") + end + + if(self.SetPushedTexture) then + self:SetPushedTexture("") + end + + if(self.SetHighlightTexture) then + if(not self.hover) then + local hover = self:CreateTexture(nil, "OVERLAY") + hover:FillInner(self.Panel) + self.hover = hover; + end + local color = SV.Media.color.highlight + self.hover:SetTexture(color[1], color[2], color[3], 0.5) + self:SetHighlightTexture(self.hover) + end + + if(self.SetCheckedTexture) then + self:SetCheckedTexture([[Interface\Buttons\UI-CheckBox-Check]]) + end + + if(self.SetDisabledCheckedTexture) then + self:SetDisabledCheckedTexture([[Interface\Buttons\UI-CheckBox-Check-Disabled]]) + end end local function SetColorCheckboxTemplate(self, underlay, x, y) @@ -757,7 +784,7 @@ local function SetColorCheckboxTemplate(self, underlay, x, y) hooksecurefunc(self, "SetChecked", function(self,checked) local r,g,b = 0,0,0 - if(checked == 1 or checked == true) then + if(checked) then r,g,b = self:GetCheckedTexture():GetVertexColor() end self:SetBackdropBorderColor(r,g,b) diff --git a/Interface/AddOns/SVUI/framework/movers/mover_dragger.lua b/Interface/AddOns/SVUI/framework/movers/mover_dragger.lua index 275d2fd..c3dd21d 100644 --- a/Interface/AddOns/SVUI/framework/movers/mover_dragger.lua +++ b/Interface/AddOns/SVUI/framework/movers/mover_dragger.lua @@ -48,261 +48,181 @@ Dragger.Frames = {}; local UIPanels = {}; -UIPanels["AchievementFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["AuctionFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["ArchaeologyFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["BattlefieldMinimap"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["BarberShopFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["BlackMarketFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["CalendarFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["CharacterFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["ClassTrainerFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["DressUpFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["DraenorZoneAbilityFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["EncounterJournal"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["FriendsFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["GMSurveyFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["GossipFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["GuildFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["GuildBankFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["GuildRegistrarFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["GarrisonLandingPage"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["GarrisonMissionFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["GarrisonCapacitiveDisplayFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["HelpFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["InterfaceOptionsFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["ItemUpgradeFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["KeyBindingFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["LFGDungeonReadyPopup"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["MacOptionsFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["MacroFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["MailFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["MerchantFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["PlayerTalentFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["PetJournalParent"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["PetStableFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["PVEFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["PVPFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["QuestFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["QuestLogFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["RaidBrowserFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["ReadyCheckFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["ReforgingFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["ReportCheatingDialog"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["ReportPlayerNameDialog"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["RolePollPopup"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["SpellBookFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TabardFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TaxiFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TimeManagerFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TradeSkillFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TradeFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TransmogrifyFrame"] = { point = 'TBD', snap = false, centered = false }; -UIPanels["TutorialFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["VideoOptionsFrame"] = { point = 'TBD', snap = false, centered = true }; -UIPanels["VoidStorageFrame"] = { point = 'TBD', snap = false, centered = false }; - -UIPanels["ScrollOfResurrectionSelectionFrame"] = { point = 'TBD', snap = false, centered = false }; +UIPanels["AchievementFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["AuctionFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["ArchaeologyFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["BattlefieldMinimap"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["BarberShopFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["BlackMarketFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["CalendarFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["CharacterFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["ClassTrainerFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["DressUpFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["DraenorZoneAbilityFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["EncounterJournal"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["FriendsFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["GMSurveyFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["GossipFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["GuildFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["GuildBankFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["GuildRegistrarFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["GarrisonLandingPage"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["GarrisonMissionFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["GarrisonCapacitiveDisplayFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["HelpFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["InterfaceOptionsFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["ItemUpgradeFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["KeyBindingFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["LFGDungeonReadyPopup"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["MacOptionsFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["MacroFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["MailFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["MerchantFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["PlayerTalentFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["PetJournalParent"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["PetStableFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["PVEFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["PVPFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["QuestFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["QuestLogFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["RaidBrowserFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["ReadyCheckFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["ReforgingFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["ReportCheatingDialog"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["ReportPlayerNameDialog"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["RolePollPopup"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["SpellBookFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TabardFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TaxiFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TimeManagerFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TradeSkillFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TradeFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TransmogrifyFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; +UIPanels["TutorialFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["VideoOptionsFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = true }; +UIPanels["VoidStorageFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; + +UIPanels["ScrollOfResurrectionSelectionFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; --[[ ########################################################## LOCAL FUNCTIONS ########################################################## ]]-- -local function Pinpoint(parent) - local centerX, centerY = parent:GetCenter() - local screenWidth = GetScreenWidth() - local screenHeight = GetScreenHeight() - local result; - if not centerX or not centerY then - return "CENTER" - end - local heightTop = screenHeight * 0.75; - local heightBottom = screenHeight * 0.25; - local widthLeft = screenWidth * 0.25; - local widthRight = screenWidth * 0.75; - if(((centerX > widthLeft) and (centerX < widthRight)) and (centerY > heightTop)) then - result = "TOP" - elseif((centerX < widthLeft) and (centerY > heightTop)) then - result = "TOPLEFT" - elseif((centerX > widthRight) and (centerY > heightTop)) then - result = "TOPRIGHT" - elseif(((centerX > widthLeft) and (centerX < widthRight)) and centerY < heightBottom) then - result = "BOTTOM" - elseif((centerX < widthLeft) and (centerY < heightBottom)) then - result = "BOTTOMLEFT" - elseif((centerX > widthRight) and (centerY < heightBottom)) then - result = "BOTTOMRIGHT" - elseif((centerX < widthLeft) and (centerY > heightBottom) and (centerY < heightTop)) then - result = "LEFT" - elseif((centerX > widthRight) and (centerY < heightTop) and (centerY > heightBottom)) then - result = "RIGHT" - else - result = "CENTER" - end - return result +local function SetDraggablePoint(frame, data) + if((not frame) or (not data)) then return; end + local frameName = frame:GetName() + local point = Dragger.Frames[frameName]; + if(point and (type(point) == "string") and (point ~= 'TBD')) then + local anchor1, parent, anchor2, x, y = split("\031", point); + data.cansetpoint = true; + data.snapped = false; + frame:ClearAllPoints(); + frame:SetPoint(anchor1, parent, anchor2, x, y); + end end -local function CurrentPosition(frame) +local function SaveCurrentPosition(frame) if not frame then return end + local frameName = frame:GetName() local anchor1, parent, anchor2, x, y = frame:GetPoint() if((not anchor1) or (not anchor2) or (not x) or (not y)) then - return "TBD" - end - - local parentName - if(not parent or (parent and (not parent:GetName()))) then - parentName = "UIParent" + Dragger.Frames[frameName] = "TBD"; else - parentName = parent:GetName() + local parentName + if(not parent or (parent and (not parent:GetName()))) then + parentName = "UIParent" + else + parentName = parent:GetName() + end + Dragger.Frames[frameName] = ("%s\031%s\031%s\031%d\031%d"):format(anchor1, parentName, anchor2, parsefloat(x), parsefloat(y)) end - return ("%s\031%s\031%s\031%d\031%d"):format(anchor1, parentName, anchor2, parsefloat(x), parsefloat(y)) end --[[ ########################################################## -CONSTRUCTS +SCRIPT AND EVENT HANDLERS ########################################################## ]]-- -function Dragger:New(frameName) - if(not UIPanels[frameName]) then - UIPanels[frameName] = { point = 'TBD', snap = false, centered = false }; - if(not self.EventsActive) then - self:RegisterEvent("ADDON_LOADED") - self:RegisterEvent("LFG_UPDATE") - self:RegisterEvent("ROLE_POLL_BEGIN") - self:RegisterEvent("READY_CHECK") - self:RegisterEvent("UPDATE_WORLD_STATES") - self:RegisterEvent("WORLD_STATE_TIMER_START") - self:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") - self:SetScript("OnEvent", self.EventHandler) - self.EventsActive = true; - end +local DraggerFrame_OnDragStart = function(self) + if(not self:IsMovable()) then return; end + self:StartMoving(); + local data = UIPanels[self:GetName()]; + if(data) then + data.moving = true; + data.snapped = false; + data.canupdate = false; end -end - -function Dragger:SavePoint(frameName) - if((not _G[frameName]) or (not SV.cache.UIPanels)) then return end - SV.cache.UIPanels[frameName] = CurrentPosition(_G[frameName]) end -function Dragger:SetPositions() - for frameName, point in pairs(Dragger.Frames) do - local frame = _G[frameName]; - local anchor1, parent, anchor2, x, y; - if(frame) then - if (SV.cache.UIPanels and SV.cache.UIPanels[frameName] and (type(SV.cache.UIPanels[frameName]) == "string")) then - local saved = SV.cache.UIPanels[frameName] - if(saved ~= 'TBD') then - local anchor1, parent, anchor2, x, y = split("\031", saved) - frame:ClearAllPoints() - frame:SetPoint(anchor1, parent, anchor2, x, y) - end - elseif(point and (type(point) == "string") and (point ~= 'TBD')) then - anchor1, parent, anchor2, x, y = split("\031", point) - frame:ClearAllPoints() - frame:SetPoint(anchor1, parent, anchor2, x, y) - end - end +local DraggerFrame_OnDragStop = function(self) + if(not self:IsMovable()) then return; end + self:StopMovingOrSizing(); + local data = UIPanels[self:GetName()]; + if(data) then + data.moving = false; + data.snapped = false; + data.canupdate = true; + SaveCurrentPosition(self); end end -function Dragger:Reset() - for frameName, point in pairs(self.Frames) do - if(SV.cache.UIPanels and SV.cache.UIPanels[frameName]) then - SV.cache.UIPanels[frameName] = nil - end +local _hook_DraggerFrame_OnShow = function(self) + if(InCombatLockdown() or (not self:IsMovable())) then return; end + local data = UIPanels[self:GetName()]; + if(data and (not data.snapped)) then + SetDraggablePoint(self, data) end - ReloadUI() -end ---[[ -########################################################## -SCRIPT AND EVENT HANDLERS -########################################################## -]]-- -local DraggerFrame_OnDragStart = function(self) - if(not self:IsMovable()) then return end - self:StartMoving() - self.IsMoving = true end -local DraggerFrame_OnDragStop = function(self) - if(not self:IsMovable()) then return end - local frameName = self:GetName(); - self.IsMoving = false; - self.CanUpdate = true; - self:StopMovingOrSizing() - local anchor1, parent, anchor2, x, y = self:GetPoint() - parent = self:GetParent():GetName() - self:ClearAllPoints() - self:SetPoint(anchor1, parent, anchor2, x, y) - Dragger.Frames[frameName] = CurrentPosition(self) - if(UIPanels[frameName] and UIPanels[frameName].saved) then - Dragger:SavePoint(frameName) +local _hook_DraggerFrame_OnHide = function(self) + if(InCombatLockdown() or (not self:IsMovable())) then return; end + local data = UIPanels[self:GetName()]; + if(data) then + data.moving = false; + data.snapped = false; + data.canupdate = true; end end -local DraggerFrame_OnShow = function(self) - if(not self:IsMovable()) then return end - local frameName = self:GetName(); - if(UIPanels[frameName] and UIPanels[frameName].saved and (SV.cache.UIPanels and SV.cache.UIPanels[frameName] and (type(SV.cache.UIPanels[frameName]) == "string"))) then - local saved = SV.cache.UIPanels[frameName] - if(saved ~= 'TBD') then - local anchor1, parent, anchor2, x, y = split("\031", saved) - self:ClearAllPoints() - self:SetPoint(anchor1, parent, anchor2, x, y) - self.CanUpdate = false; - end - else - local defaultPoint = Dragger.Frames[frameName] - if(defaultPoint and (type(defaultPoint) == "string") and (defaultPoint ~= 'TBD')) then - local anchor1, parent, anchor2, x, y = split("\031", defaultPoint) - self:ClearAllPoints() - self:SetPoint(anchor1, parent, anchor2, x, y) - self.CanUpdate = false; - end +local _hook_DraggerFrame_OnUpdate = function(self) + if(InCombatLockdown()) then return; end + local data = UIPanels[self:GetName()]; + if(data and (not data.moving) and (not data.snapped)) then + SetDraggablePoint(self, data) end end -local DraggerFrame_OnAttributeChanged = function(self) - if(self.IsMoving) then return end - self.CanUpdate = false; -end - -local DraggerFrame_PostSetPoint = function(self) - if(self.IsMoving) then return end - self.CanUpdate = true; +local _hook_DraggerFrame_OnSetPoint = function(self) + if(not self:IsMovable()) then return; end + local data = UIPanels[self:GetName()]; + if(data and (not data.moving)) then + if(not data.cansetpoint) then + data.snapped = true; + data.canupdate = false; + end + end end -local DraggerFrame_OnUpdate = function(self) - if(InCombatLockdown() or (self.IsMoving)) then return end - local frameName = self:GetName(); - if(self.CanUpdate) then - if(UIPanels[frameName] and UIPanels[frameName].saved and (SV.cache.UIPanels and SV.cache.UIPanels[frameName] and (type(SV.cache.UIPanels[frameName]) == "string"))) then - local saved = SV.cache.UIPanels[frameName] - if(saved ~= 'TBD') then - local anchor1, parent, anchor2, x, y = split("\031", saved) - self:ClearAllPoints() - self:SetPoint(anchor1, parent, anchor2, x, y) - self.CanUpdate = false; - end - else - local defaultPoint = Dragger.Frames[frameName] - if(defaultPoint and (type(defaultPoint) == "string") and (defaultPoint ~= 'TBD')) then - local anchor1, parent, anchor2, x, y = split("\031", defaultPoint) - self:ClearAllPoints() - self:SetPoint(anchor1, parent, anchor2, x, y) - self.CanUpdate = false; - end +local _hook_UIParent_ManageFramePositions = function() + for frameName, point in pairs(Dragger.Frames) do + local data = UIPanels[frameName] + if(data and (not data.snapped)) then + SetDraggablePoint(_G[frameName], data) end end end -function Dragger:EventHandler(event, ...) +local DraggerEventHandler = function(self, event, ...) if(InCombatLockdown()) then return end local noMoreChanges = true; + local allCentered = SV.db.general.multiMonitor for frameName, data in pairs(UIPanels) do - if((not self.Frames[frameName]) or (self.Frames[frameName] and (self.Frames[frameName] == "TBD"))) then + if(not self.Frames[frameName] or (self.Frames[frameName] and type(self.Frames[frameName]) ~= 'string')) then + self.Frames[frameName] = 'TBD' + noMoreChanges = false; + end + if(not data.initialized) then local frame = _G[frameName] if(frame) then frame:EnableMouse(true) @@ -314,21 +234,33 @@ function Dragger:EventHandler(event, ...) frame:SetMovable(true) frame:RegisterForDrag("LeftButton") frame:SetClampedToScreen(true) - frame:HookScript("OnUpdate", DraggerFrame_OnUpdate) - frame:HookScript("OnShow", DraggerFrame_OnShow) - frame:SetScript("OnDragStart", DraggerFrame_OnDragStart) - frame:SetScript("OnDragStop", DraggerFrame_OnDragStop) - if(self.CenterEverything) then + if(allCentered) then frame:ClearAllPoints() frame:SetPoint('TOP', SV.Screen, 'TOP', 0, -180) + data.centered = true + end + + if(self.Frames[frameName] == 'TBD') then + SaveCurrentPosition(frame); end - self.Frames[frameName] = CurrentPosition(frame) - else - self.Frames[frameName] = 'TBD' + data.canupdate = true + + frame:SetScript("OnDragStart", DraggerFrame_OnDragStart) + frame:SetScript("OnDragStop", DraggerFrame_OnDragStop) + + frame:HookScript("OnUpdate", _hook_DraggerFrame_OnUpdate) + hooksecurefunc(frame, "SetPoint", _hook_DraggerFrame_OnSetPoint) + + if(SV.db.general.saveDraggable) then + frame:HookScript("OnShow", _hook_DraggerFrame_OnShow) + frame:HookScript("OnHide", _hook_DraggerFrame_OnHide) + end + + data.initialized = true end - noMoreChanges = false; + noMoreChanges = false; end end @@ -346,18 +278,86 @@ function Dragger:EventHandler(event, ...) end --[[ ########################################################## -Initialize +CORE FUNCTIONS +########################################################## +]]-- +function Dragger:New(frameName) + if(not UIPanels[frameName]) then + UIPanels[frameName] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; + if(not self.EventsActive) then + self:RegisterEvent("ADDON_LOADED") + self:RegisterEvent("LFG_UPDATE") + self:RegisterEvent("ROLE_POLL_BEGIN") + self:RegisterEvent("READY_CHECK") + self:RegisterEvent("UPDATE_WORLD_STATES") + self:RegisterEvent("WORLD_STATE_TIMER_START") + self:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") + self:SetScript("OnEvent", DraggerEventHandler) + self.EventsActive = true; + end + end +end + +function Dragger:SetPositions() + for frameName, point in pairs(Dragger.Frames) do + local data = UIPanels[frameName] + if(data and (not data.snapped)) then + SetDraggablePoint(_G[frameName], point, data) + end + end +end + +function Dragger:Reset() + if(SV.db.general.saveDraggable) then + for frameName, data in pairs(UIPanels) do + if(SV.cache.Draggables[frameName]) then + SV.cache.Draggables[frameName] = nil + end + data.initialized = nil + end + self.Frames = SV.cache.Draggables + else + for frameName, data in pairs(UIPanels) do + if(self.Frames[frameName]) then + self.Frames[frameName] = nil + end + data.initialized = nil + end + end + + if(not self.EventsActive) then + self:RegisterEvent("ADDON_LOADED") + self:RegisterEvent("LFG_UPDATE") + self:RegisterEvent("ROLE_POLL_BEGIN") + self:RegisterEvent("READY_CHECK") + self:RegisterEvent("UPDATE_WORLD_STATES") + self:RegisterEvent("WORLD_STATE_TIMER_START") + self:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") + self:SetScript("OnEvent", DraggerEventHandler) + self.EventsActive = true; + end + + ReloadUI() +end +--[[ +########################################################## +INITIALIZE ########################################################## ]]-- function Dragger:Initialize() - SV.cache.UIPanels = SV.cache.UIPanels or {} + if(SV.db.general.saveDraggable) then + SV.cache.Draggables = SV.cache.Draggables or {} + self.Frames = SV.cache.Draggables + else + SV.cache.Draggables = {} + self.Frames = {} + end if(not SV.db.general.questWatch) then - UIPanels["ObjectiveTrackerFrame"] = { point = 'TBD', snap = false, centered = false }; + UIPanels["ObjectiveTrackerFrame"] = { moving = false, snapped = false, canupdate = false, cansetpoint = false, centered = false }; end self.EventsActive = true - self.CenterEverything = SV.db.general.multiMonitor self:RegisterEvent("ADDON_LOADED") self:RegisterEvent("LFG_UPDATE") @@ -367,17 +367,12 @@ function Dragger:Initialize() self:RegisterEvent("WORLD_STATE_TIMER_START") self:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") - self:EventHandler() - self:SetScript("OnEvent", self.EventHandler) + DraggerEventHandler(self) + self:SetScript("OnEvent", DraggerEventHandler) if(SV.db.general.saveDraggable) then - for frameName, data in pairs(UIPanels) do - data.saved = true - end - self:SetPositions() + hooksecurefunc("UIParent_ManageFramePositions", _hook_UIParent_ManageFramePositions) end - - hooksecurefunc("UIParent_ManageFramePositions", Dragger.SetPositions) end SV.Dragger = Dragger \ No newline at end of file diff --git a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua index a2ecc02..74796a0 100644 --- a/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua +++ b/Interface/AddOns/SVUI/framework/movers/mover_mentalo.lua @@ -804,6 +804,8 @@ Initialize ########################################################## ]]-- function Mentalo:Initialize() + SV.cache.Anchors = SV.cache.Anchors or {} + SVUI_Mentalo:SetFixedPanelTemplate("Component") SVUI_Mentalo:SetPanelColor("yellow") SVUI_Mentalo:RegisterForDrag("LeftButton") @@ -828,8 +830,6 @@ function Mentalo:Initialize() SVUI_MentaloPrecisionDownButton:SetButtonTemplate() SVUI_MentaloPrecisionLeftButton:SetButtonTemplate() SVUI_MentaloPrecisionRightButton:SetButtonTemplate() - - SV.cache.Anchors = SV.cache.Anchors or {} self:SetPositions() diff --git a/Interface/AddOns/SVUI/packages/_load.xml b/Interface/AddOns/SVUI/packages/_load.xml index e4cc54e..c8f5432 100644 --- a/Interface/AddOns/SVUI/packages/_load.xml +++ b/Interface/AddOns/SVUI/packages/_load.xml @@ -13,4 +13,5 @@