diff ObjectiveTracker/ObjectiveWidgets.lua @ 24:66b927b46776

Refine the XML data logic, and sort out some EnableMouse inconsistencies.
author Nenue
date Mon, 11 Apr 2016 09:07:40 -0400
parents e837384ac363
children
line wrap: on
line diff
--- a/ObjectiveTracker/ObjectiveWidgets.lua	Sun Apr 10 04:35:32 2016 -0400
+++ b/ObjectiveTracker/ObjectiveWidgets.lua	Mon Apr 11 09:07:40 2016 -0400
@@ -1,19 +1,23 @@
 local B = select(2,...).frame
-local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
+local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
 local print = B.print('WidgetFactory')
-local UIParent = UIParent
+local _G, UIParent = _G, UIParent
 local GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown = GetQuestLogSpecialItemInfo, IsQuestLogSpecialItemInRange, GetQuestLogSpecialItemCooldown
 local CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll = CooldownFrame_SetTimer, SetItemButtonTextureVertexColor, CreateFrame, VeneerObjectiveScroll
-local tremove, tinsert, tContains, pairs, setmetatable = tremove, tinsert, tContains, pairs, setmetatable
-
+local tremove, tContains, pairs, ipairs, setmetatable, floor = tremove, tContains, pairs, ipairs, setmetatable, floor
+local SetItemButtonTexture, SetItemButtonCount = SetItemButtonTexture, SetItemButtonCount
+local ToggleWorldMap, GetTrackedAchievements, GetTasksTable = ToggleWorldMap, GetTrackedAchievements, GetTasksTable
+-- GLOBALS: Veneer_QuestObjectiveItem_UpdateCooldown, Veneer_QuestObjectiveItem_OnUpdate
 --- frame refs
 local Wrapper = _G.VeneerObjectiveWrapper
 local Scroller = Wrapper.scrollArea
 local CloseButton = Wrapper.CloseButton
 local QuestMapButton = Wrapper.QuestMapButton
 local Scroll = _G.VeneerObjectiveScroll
+local usedButtons = T.Quest.itemButtons
+local freeButtons = T.Quest.freeButtons
 
-local panelButtons = {
+T.buttons = {
   CloseButton = {
     closedSwatch = {
       [[Interface\Buttons\UI-Panel-QuestHideButton]],
@@ -47,8 +51,8 @@
 
 local Scroller_OnShow = function()
   Wrapper.watchMoneyReasons = 0;
-  --mod:Update()
-  --mod:OnInitialize()
+  --T:Update()
+  --T:OnInitialize()
   for i, region in ipairs(Wrapper.headerComplex) do
     region:Show()
   end
@@ -77,12 +81,13 @@
   B.Conf.ObjectiveScroll = s
   print('|cFF00FF00OnMouseWheel', 'from = ', from, 'scroll =', s, ' range =', r, 'current =', self:GetVerticalScroll())
 
-  mod.UpdateActionButtons('SCROLLING')
+  T.UpdateActionButtons('SCROLLING')
 end
 
 local UpdatePanelButton = function (self, state)
-  state = state and B.Conf.FrameState[state] or 1
-  local swatch = (state == 1) and self.openSwatch or self.closedSwatch
+  state = state or true
+  local swatch = (state == true) and self.openSwatch or self.closedSwatch
+  print((state ~= true) and 'closedSwatch' or 'openSwatch')
   self:SetNormalTexture(swatch[1])
   self:SetPushedTexture(swatch[2])
   if #swatch >= 6 then
@@ -96,8 +101,8 @@
 
 local OnClick = {}
 OnClick.CloseButton = function(self)
-  Wrapper:Minimize()
-  UpdatePanelButton(self, self.parent)
+  T:SetEnabled()
+  UpdatePanelButton(self, T.Conf.enabled)
 end
 
 OnClick.QuestMapButton = function()
@@ -105,7 +110,8 @@
 end
 
 
-mod.InitializeWidgets = function()
+T.InitializeWidgets = function()
+  local panelButtons = T.buttons
   --- tracker scroll
   Scroller:SetScript('OnMouseWheel', Scroller_OnMouseWheel)
   Scroller:SetScript('OnShow', Scroller_OnShow)
@@ -119,25 +125,20 @@
     if OnClick[name] then
       button:SetScript('OnClick', OnClick[name])
     end
-    UpdatePanelButton(button, button.parent)
+    UpdatePanelButton(button, T.Conf.enabled)
   end
 end
 
 ----------------------------------------------------------------------------------------
---- XML and script code lifted from "QuestKing 2" by Barjack,
----   found at http://mods.curse.com/addons/wow/questking
+--- modified version of the itemButton initializer used by Barjack's 'QuestKing 2' addon,
+--- url: http://mods.curse.com/addons/wow/questking
 ----------------------------------------------------------------------------------------
-local usedButtons = mod.Quest.itemButtons
-local freeButtons = mod.Quest.freeButtons
-mod.SetItemButton = function(block, info)
+T.SetItemButton = function(block, info)
   local itemInfo = info.specialItem
   if not itemInfo then
     return
   end
 
-  --- Quest.GetInfo().specialItem :: {link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable}
-
-
   local itemButton
   if not info.itemButton then
     if #freeButtons >= 1 then
@@ -149,14 +150,14 @@
         itemButton.block = nil
       end
     else
-      local buttonIndex = mod.Quest.numButtons + #freeButtons + 1
+      local buttonIndex = T.Quest.numButtons + #freeButtons + 1
       itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
       itemButton.buttonIndex = buttonIndex
       itemButton:SetSize(36, 36)
       itemButton:GetNormalTexture():SetSize(36 * (5/3), 36 * (5/3))
       print('    |cFFFF4400starting new button', itemButton:GetName())
     end
-    mod.Quest.numButtons = mod.Quest.numButtons + 1
+    T.Quest.numButtons = T.Quest.numButtons + 1
   else
     itemButton = info.itemButton
     print('    |cFF00FF00found assigned button', itemButton:GetName())
@@ -188,20 +189,20 @@
   return itemButton
 end
 --- Clear an itemButton from the given block
-mod.FreeItemButtons = function(block)
+T.FreeItemButtons = function(block)
 
   if block.itemButton then
     local itemButton = block.itemButton
     if itemButton.questID ~= block.info.questID then
       block.itemButton = nil
-      itemButton.block = mod.Quest.InfoBlock[itemButton.questID]
+      itemButton.block = T.Quest.InfoBlock[itemButton.questID]
     else
       itemButton.block = nil
       itemButton:Hide()
 
       usedButtons[itemButton.questID] = nil
       freeButtons[#freeButtons + 1] = itemButton
-      mod.Quest.numButtons = mod.Quest.numButtons - 1
+      T.Quest.numButtons = T.Quest.numButtons - 1
       print('|cFFFF0088released', itemButton:GetName(),'and', block:GetName())
     end
   end
@@ -215,7 +216,7 @@
     if (rangeTimer <= 0) then
       local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
       if ((not charges) or (charges ~= self.charges)) then
-        mod:Update()
+        T:Update()
         return
       end
 
@@ -265,12 +266,12 @@
       criteriaID = criteriaID,
 ]]
 local newWidgetID = 0
-mod.WidgetRegistry = {}
-local wr = mod.WidgetRegistry
+T.WidgetRegistry = {}
+local wr = T.WidgetRegistry
 
 --- Get a usable widget for the given achievement criteria set.
 -- Returns a frame object with dimensioning parameters needed to size the receiving tracker block
-mod.SetWidget = function(line, data, objectiveType, objectiveKey)
+T.SetWidget = function(line, data, objectiveType, objectiveKey)
   local print = B.print('ObjectiveWidgets')
   local widgetType = objectiveType
   local widget
@@ -291,12 +292,12 @@
   widget.line = line
   widget.objective = data
   widget.key = objectiveKey
-  mod.InitializeWidget(widget)
+  T.InitializeWidget(widget)
   return widget
 end
 
 --- WidgetTemplate 'OnLoad'
-mod.RegisterWidget = function(frame)
+T.RegisterWidget = function(frame)
   local print = B.print('ObjectiveWidgets')
   local widgetType = frame.widgetType
   if not wr[frame.widgetType] then
@@ -309,24 +310,24 @@
 end
 
 --- WidgetTemplate 'OnShow'
-mod.InitializeWidget = setmetatable({}, {
+T.InitializeWidget = setmetatable({}, {
   __call = function(t, frame)
     -- todo: config pull
 
-    frame:SetWidth(mod.Conf.Wrapper.Width - mod.Conf.Style.Format.status.Indent * 2)
-    frame:SetScript('OnEvent', mod.UpdateWidget[frame.widgetType])
+    frame:SetWidth(T.Conf.Wrapper.Width - T.Conf.Style.Format.status.Indent * 2)
+    frame:SetScript('OnEvent', T.UpdateWidget[frame.widgetType])
     frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE')
     frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED')
     frame:RegisterEvent('CRITERIA_UPDATE')
     frame:RegisterEvent('CRITERIA_COMPLETE')
     frame:RegisterEvent('CRITERIA_EARNED')
     t[frame.widgetType](frame)
-    mod.UpdateWidget[frame.widgetType](frame)
+    T.UpdateWidget[frame.widgetType](frame)
   end,
 })
 
 --- WidgetTemplate 'OnEvent'
-mod.UpdateWidget = setmetatable({}, {
+T.UpdateWidget = setmetatable({}, {
   __call = function(t, frame)
     if not frame.widgetType then
       error('Invalid widget template, needs .widgetType')
@@ -338,7 +339,7 @@
 })
 
 --- WidgetTemplate 'OnHide'
-mod.ReleaseWidget = function(frame)
+T.ReleaseWidget = function(frame)
   --[[
   local print = B.print('ObjectiveWidgets')
   local reg = wr[frame.widgetType]
@@ -354,11 +355,11 @@
 end
 
 --- RemoveTrackedAchievement post-hook
-mod.CleanWidgets = function()
+T.CleanWidgets = function()
   local print = B.print('ObjectiveWidgets')
   local tracked = {GetTrackedAchievements() }
   local tasks = GetTasksTable()
-  for type, reg in pairs(mod.WidgetRegistry) do
+  for type, reg in pairs(T.WidgetRegistry) do
     print('collecting', type)
     for key, frame in pairs(reg.used) do
       if frame.objective.cheevID then
@@ -378,7 +379,7 @@
 
 
 
-mod.defaults.WidgetStyle = {
+T.defaults.WidgetStyle = {
 
 }
 
@@ -388,8 +389,8 @@
 local progressFont = _G.VeneerCriteriaFontNormal
 
 
-mod.InitializeWidget.ProgressBar = function(self)
-  local c = mod.Conf.Wrapper
+T.InitializeWidget.ProgressBar = function(self)
+  local c = T.Conf.Wrapper
   self.height = progressHeight + c.TextSpacing
   self.width = c.Width - c.TextSpacing
   self.indent = progressIndent
@@ -404,7 +405,7 @@
   self.status:SetText(self.objective.quantityString)
 end
 
-mod.UpdateWidget.ProgressBar = function (self)
+T.UpdateWidget.ProgressBar = function (self)
   local quantity, requiredQuantity = self.objective.value, self.objective.maxValue
   print('update vals:')
   for k,v in pairs(self.line) do
@@ -431,9 +432,9 @@
 end
 
 
-mod.InitializeWidget.Hidden = function (self)
+T.InitializeWidget.Hidden = function (self)
   self.height = 0
 end
-mod.UpdateWidget.Hidden = function (self)
+T.UpdateWidget.Hidden = function (self)
   self.height=  0
 end
\ No newline at end of file