diff ObjectiveCore.lua @ 14:ed642234f017

ObjectiveFrame - implement proper tracker name text - expanded tracker prototypes to cover "objective lines" formatting and accommodation of widget variables - implement the progress bars for bonus objectives ObjectiveStyle - moved `UpdateWrapperStyle` over and renamed it to fit semantics - change the formula for block.`height` to measure non-widget content only - allows widgets to position relative to text - size FontString `status` to match block.`height` - full block height is acquired by adding block.`height` and block.`attachmentHeight` which is calculated during objective parsing ObjectiveWidgets - use string keys for generated widgets to deal with multiple objectives under the same questID, and maybe dungeon objectives - wrapper buttons use a common code path - specialized handlers for wheel scrolling moved over to fit semantics
author Nenue
date Mon, 04 Apr 2016 03:16:22 -0400
parents 9455693fc290
children 880828018bf4
line wrap: on
line diff
--- a/ObjectiveCore.lua	Sat Apr 02 17:46:52 2016 -0400
+++ b/ObjectiveCore.lua	Mon Apr 04 03:16:22 2016 -0400
@@ -4,11 +4,9 @@
 -- @file-revision@ @file-hash@
 -- Created: 3/26/2016 1:51 AM
 local B = select(2,...).frame
-local wipe, pairs, ipairs, min, max, unpack = table.wipe, pairs, ipairs, min, max, unpack
-local setmetatable, type = setmetatable, type
-local GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo = GetNumQuestLeaderBoards, GetAchievementNumCriteria, GetQuestLogLeaderBoard, GetAchievementCriteriaInfo
-local GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo = GetQuestLogIndexByID, GetSuperTrackedQuestID, SetSuperTrackedQuestID, GetQuestWatchInfo
-local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
+local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring
+local format = string.format
+local M = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
 local print = B.print('Objectives')
 local ObjectiveTrackerFrame = ObjectiveTrackerFrame
 
@@ -33,29 +31,36 @@
 local Scroll = _G.VeneerObjectiveScroll
 
 --- Baseline defaults
-mod.defaults = {
+M.defaults = {
 
 }
 
 --- list used to make things happen
-mod.orderedNames = {[1] = 'AutoQuest',  [2] = 'Quest', [3] = 'Cheevs'}
+M.orderedNames = {'Bonus', 'AutoQuest', 'Quest', 'Cheevs'}
 
 --- ipairs() list of handlers for wrapper update
-mod.orderedHandlers = {}
-mod.orderedTrackers = {}
-mod.indexedTrackers = {}
+M.orderedHandlers = {}
+M.orderedTrackers = {}
+M.indexedTrackers = {}
 --- pairs() list of handler frames for tracker updates
-mod.namedTrackers = {}
+M.namedTrackers = {}
 
 --- Handler stubs
-mod.AutoQuest = {
-  name = "AutoQuest"
+M.AutoQuest = {
+  name = "AutoQuest",
+  displayName = "Local Quests",
 }
-mod.Quest = {
-  name = "Quest"
+M.Quest = {
+  name = "Quest",
+  displayName = "Quests",
 }
-mod.Cheevs = {
-  name = "Cheevs"
+M.Cheevs = {
+  name = "Cheevs",
+  displayName = "Achievements",
+}
+M.Bonus = {
+  name = "Bonus",
+  displayName = "Bonus Objectives",
 }
 
 
@@ -100,15 +105,15 @@
   print(self, name)
   local handler = setmetatable({}, {
     __tostring = function() return name end,
-    __call = function (self) mod.UpdateTracker(self) end
+    __call = function (self) M.UpdateTracker(self) end
   })
-  if type(mod.orderedHandlers[index]) == 'table' then
-    return mod.orderedHandlers[index]
+  if type(M.orderedHandlers[index]) == 'table' then
+    return M.orderedHandlers[index]
   end
 
   print('take up locals first')
   local preset = {}
-  for k,v in pairs(mod[name]) do
+  for k,v in pairs(M[name]) do
     preset[k] = true
     if type(v) == 'table' then
       handler[k] = {}
@@ -124,7 +129,7 @@
         -- assume all tables to be local data; don't inherit or ref
         handler[k] = {}
       else
-        handler[k] = mod.Tracker[k]
+        handler[k] = M.Tracker[k]
       end
     else
       print(name, 'has its own', k)
@@ -134,16 +139,16 @@
   for k, v in pairs(handler) do
     print(string.format("%24s %8s %s", (preset[k] and '|cFFFFFFFF' or '|cFFFFFF00') .. k .. '|r', type(v), tostring(v)))
   end
-  mod[name] = handler
-  mod.orderedHandlers[index] = handler
+  M[name] = handler
+  M.orderedHandlers[index] = handler
   return true
 end
 
-mod.Tracker = setmetatable({}, {
+M.Tracker = setmetatable({}, {
   __call = CreateHandler,
   __tostring = function() return 'DEFAULT_TRACKING_HANDLER' end
 })
-local Tracker = mod.Tracker
+local Tracker = M.Tracker
 Tracker.numWatched = 0   --- number of entries being handled
 Tracker.numBlocks = 0    --- number of blocks created
 Tracker.actualBlocks = 0 --- number of blocks in use
@@ -169,8 +174,14 @@
       handler.freeBlocks[#handler.freeBlocks] = nil
     else
       block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock')
-      block.SetStyle = mod.SetBlockStyle
-      block:ClearAllPoints() -- making sure the anchors are clear in case they get added for some other template usage
+      block.SetStyle = M.SetBlockStyle
+      block.Select = handler.Select
+      block.Open = handler.Open
+      block.Remove = handler.Remove
+      block.Link = handler.Link
+      block:SetScript('OnMouseUp', handler.OnMouseUp)
+      block:SetScript('OnMouseDown', handler.OnMouseDown)
+      block:ClearAllPoints()
     end
 
     handler.usedBlocks[blockIndex] = block
@@ -178,10 +189,10 @@
   return handler.usedBlocks[blockIndex]
 end
 
-function mod:OnInitialize()
-  self.InitializeTrackers()
+function M:OnInitialize()
+  self.InitializeWrapper()
   self.InitializeXPTracker()
-  mod.SetEvents()
+  M.SetEvents()
   ObjectiveTrackerFrame:UnregisterAllEvents()
   ObjectiveTrackerFrame:Hide()