annotate Turok/Modules/Timer/Container.lua @ 6:a9b8b0866ece

clear out log jam
author Nenue
date Sun, 21 Feb 2016 08:32:53 -0500
parents
children 9400a0ff8540
rev   line source
Nenue@6 1 --- ${PACKAGE_NAME}
Nenue@6 2 -- @file-author@
Nenue@6 3 -- @project-revision@ @project-hash@
Nenue@6 4 -- @file-revision@ @file-hash@
Nenue@6 5 -- Created: 1/16/2016 12:20 AM
Nenue@6 6 local _G, CreateFrame = _G, CreateFrame
Nenue@6 7 local T, tinsert, UIParent = _G.Turok, table.insert, _G.UIParent
Nenue@6 8 local mod = T.modules.TimerControl
Nenue@6 9 local db, CollectorTray
Nenue@6 10
Nenue@6 11 local pairs, ipairs, gsub, sub, setmetatable = pairs, ipairs, string.gsub, string.sub, setmetatable
Nenue@6 12 local INVTYPE_FINGER, INVSLOT_FINGER1, INVSLOT_FINGER2, INVTYPE_TRINKET, INVSLOT_TRINKET1, INVSLOT_TRINKET2 =
Nenue@6 13 INVTYPE_FINGER, INVSLOT_FINGER1, INVSLOT_FINGER2, INVTYPE_TRINKET, INVSLOT_TRINKET1, INVSLOT_TRINKET2
Nenue@6 14 --@debug@
Nenue@6 15 local DEBUG = true
Nenue@6 16 --@end-debug@
Nenue@6 17 local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool
Nenue@6 18 local print = function(...)
Nenue@6 19 if not DEBUG then return end
Nenue@6 20 if _G.Devian and _G.DevianDB.workspace ~= 1 then
Nenue@6 21 _G.print('TimerContainer', ...)
Nenue@6 22 end
Nenue@6 23 end
Nenue@6 24 print('Peep!', ...)
Nenue@6 25
Nenue@6 26 --- defaults
Nenue@6 27 local Containers = {}
Nenue@6 28
Nenue@6 29 --- manages collections of timer displays
Nenue@6 30 local TimerContainer_Init = function(frame, cvars)
Nenue@6 31
Nenue@6 32 frame.num_timers = 0
Nenue@6 33 frame.anchor = cvars.anchor
Nenue@6 34 frame.parent = cvars.parent
Nenue@6 35 frame.anchorTo = cvars.anchorTo
Nenue@6 36 frame.x = cvars.x
Nenue@6 37 frame.y = cvars.y
Nenue@6 38 frame.name = cvars.name
Nenue@6 39 frame.padding = cvars.padding
Nenue@6 40 frame.spacing = cvars.spacing
Nenue@6 41 frame.width = cvars.width
Nenue@6 42 frame.height = cvars.height
Nenue@6 43 frame.timers = {}
Nenue@6 44 frame.childAnchor = cvars.childAnchor
Nenue@6 45 frame.childAnchorTo = cvars.childAnchorTo
Nenue@6 46
Nenue@6 47 frame:ClearAllPoints()
Nenue@6 48 frame:SetPoint(cvars.anchor, cvars.parent, cvars.anchorTo, cvars.x, cvars.y)
Nenue@6 49 frame:SetSize(cvars.width, cvars.height) -- initial values
Nenue@6 50 frame.NameText:SetText(frame.name)
Nenue@6 51 end
Nenue@6 52
Nenue@6 53 local TimerContainer_Add = function(frame, timer)
Nenue@6 54 if timer.containerHandle then
Nenue@6 55 print('stop now')
Nenue@6 56 return
Nenue@6 57 end
Nenue@6 58 timer.containerHandle = 1
Nenue@6 59
Nenue@6 60 print('adding', timer.timerName, 'to', frame.name)
Nenue@6 61 local handle = frame.num_timers + 1
Nenue@6 62 -- if the timer is ordered, start from the top and shift each item upward until they are no longer
Nenue@6 63 -- above the
Nenue@6 64 print('resulting handle:', handle)
Nenue@6 65 print(#frame.timers)
Nenue@6 66
Nenue@6 67 frame.num_timers = frame.num_timers + 1
Nenue@6 68
Nenue@6 69 tinsert(frame.timers, timer)
Nenue@6 70 timer.containerHandle = #frame.timers
Nenue@6 71 --frame.timers[handle] = timer
Nenue@6 72 end
Nenue@6 73
Nenue@6 74 local TimerContainer_Unlock = function(frame)
Nenue@6 75
Nenue@6 76 end
Nenue@6 77
Nenue@6 78 local TimerContainer_Update = function(frame)
Nenue@6 79 local frameCount, hiddenCount = 0, 0
Nenue@6 80 local w = frame.padding
Nenue@6 81 local translation_points = {}
Nenue@6 82 local dx, dy = 0, 0 -- net change in container dimensions
Nenue@6 83 for k, spirit in pairs(frame.timers) do
Nenue@6 84 hiddenCount = hiddenCount + 1
Nenue@6 85 if spirit:IsVisible() and not(spirit.trash or spirit.cvars.absolute) then
Nenue@6 86 frameCount = frameCount + 1
Nenue@6 87 spirit.index = frameCount
Nenue@6 88 print(' -', cNum(hiddenCount), cNum(frameCount), cKey(spirit:GetName()))
Nenue@6 89 --tinsert(frame.timers, spirit)
Nenue@6 90 spirit:ClearAllPoints()
Nenue@6 91 local tx = w
Nenue@6 92 local ty = 0
Nenue@6 93 if spirit.cvars.relative then
Nenue@6 94 tx = tx + spirit.cvars.x
Nenue@6 95 ty = ty + spirit.cvars.y
Nenue@6 96 else
Nenue@6 97 w = w + spirit:GetWidth() + frame.spacing
Nenue@6 98 end
Nenue@6 99 translation_points[k] = {
Nenue@6 100 x = spirit.cvars.x, y = spirit.cvars.y,
Nenue@6 101 dx = tx - spirit.cvars.x, dy = ty - spirit.cvars.y
Nenue@6 102 }
Nenue@6 103 end
Nenue@6 104
Nenue@6 105 --- track the size of in/outbound frames
Nenue@6 106 if not spirit.collected then
Nenue@6 107 if spirit.trash then
Nenue@6 108 dx = dx - spirit.width
Nenue@6 109 elseif spirit.add then
Nenue@6 110 dx = dx + spirit.width
Nenue@6 111 end
Nenue@6 112 spirit.collected = true
Nenue@6 113 end
Nenue@6 114 end
Nenue@6 115 print(cText(' dx:'), cNum(dx))
Nenue@6 116
Nenue@6 117
Nenue@6 118 frame.width = frame.width + dx
Nenue@6 119 frame:SetWidth(frame.width)
Nenue@6 120 local ddX = dx / frameCount
Nenue@6 121
Nenue@6 122 for id, a in pairs(translation_points) do
Nenue@6 123 local spirit = frame.timers[id]
Nenue@6 124
Nenue@6 125
Nenue@6 126 spirit.slide.t1:SetOffset(a.dx, a.dy)
Nenue@6 127 spirit.slide:SetScript('OnFinished', function()
Nenue@6 128 spirit.cvars.x = a.x + a.dx
Nenue@6 129 spirit.cvars.y = a.y + a.dy
Nenue@6 130 spirit:SetPoint(frame.childAnchor, frame, frame.childAnchorTo, spirit.cvars.x, spirit.cvars.y)
Nenue@6 131 end)
Nenue@6 132 spirit.slide:Play()
Nenue@6 133 end
Nenue@6 134 end
Nenue@6 135
Nenue@6 136 --- Updates the appropriate containers' object positions
Nenue@6 137 function mod.Report(self)
Nenue@6 138 if not self.container then
Nenue@6 139 self.container = 'default'
Nenue@6 140 print('reporting to default container')
Nenue@6 141 else
Nenue@6 142 print('reporting to container', self.container)
Nenue@6 143 end
Nenue@6 144
Nenue@6 145 if not Containers[self.container] then
Nenue@6 146 print('need to create')
Nenue@6 147 Containers[self.container] = CreateFrame('Frame', 'TkCollectorFrame'..self.container, UIParent, 'TkContainerTemplate')
Nenue@6 148 TimerContainer_Init(Containers[self.container], mod.db.containers[self.container] or mod.db.containers)
Nenue@6 149 end
Nenue@6 150
Nenue@6 151 if not self.containerHandle then
Nenue@6 152 TimerContainer_Add(Containers[self.container], self)
Nenue@6 153 else
Nenue@6 154 print(self.timerName, 'has a container assigned')
Nenue@6 155 end
Nenue@6 156 TimerContainer_Update(Containers[self.container])
Nenue@6 157 end