comparison ObjectiveTracker/Frame.lua @ 30:7583684becf4

- implement procedural block contents generation - redo anchor calculations to allow for transitional animation - attempt to sort out event handling quirks related to autopopup quest completion and turn-in - revise the data structures created by the different GetInfo's - start on trimming out redundant variables
author Nenue
date Thu, 14 Apr 2016 17:11:13 -0400
parents adcd7c328d07
children 48b3e3959a0a
comparison
equal deleted inserted replaced
29:adcd7c328d07 30:7583684becf4
2 -- @file-author@ 2 -- @file-author@
3 -- @project-revision@ @project-hash@ 3 -- @project-revision@ @project-hash@
4 -- @file-revision@ @file-hash@ 4 -- @file-revision@ @file-hash@
5 -- Created: 3/30/2016 12:49 AM 5 -- Created: 3/30/2016 12:49 AM
6 local B = select(2,...).frame 6 local B = select(2,...).frame
7 local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') 7 local Module = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
8 local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band 8 local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band
9 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion = IsResting, UnitXP, UnitXPMax, GetXPExhaustion 9 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion = IsResting, UnitXP, UnitXPMax, GetXPExhaustion
10 local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent 10 local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent
11 local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText 11 local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText
12 local PERCENTAGE_STRING, GetQuestProgressBarPercent = PERCENTAGE_STRING, GetQuestProgressBarPercent 12 local PERCENTAGE_STRING, GetQuestProgressBarPercent = PERCENTAGE_STRING, GetQuestProgressBarPercent
13 local Default, AutoQuest, Quest, Bonus, Cheevs = T.DefaultHandler, T.AutoQuest, T.Quest, T.Bonus, T.Cheevs 13 local Default, AutoQuest, Quest, Bonus, Cheevs = Module.DefaultHandler, Module.AutoQuest, Module.Quest, Module.Bonus, Module.Cheevs
14 local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame 14 local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame
15 local IsModifiedClick, ChatEdit_GetActiveWindow = IsModifiedClick, ChatEdit_GetActiveWindow 15 local IsModifiedClick, ChatEdit_GetActiveWindow = IsModifiedClick, ChatEdit_GetActiveWindow
16 local print = B.print('Tracker') 16 local print = B.print('Tracker')
17 local unitLevel = 1 17 local unitLevel = 1
18 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON 18 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON
19 local debug = false 19 local debug = false
20 --------------------------------------------------------------------
21 --- Global frame layout
22 --------------------------------------------------------------------
23 20
24 --- Upvalues 21 --- Upvalues
25 local Wrapper = _G.VeneerObjectiveWrapper 22 local Wrapper = _G.VeneerObjectiveWrapper
26 local Scroller = Wrapper.scrollArea 23 local Scroller = Wrapper.scrollArea
27 local Scroll = _G.VeneerObjectiveScroll 24 local Scroll = _G.VeneerObjectiveScroll
28 local orderedHandlers = T.orderedHandlers 25 local orderedHandlers = Module.orderedHandlers
29 local orderedNames = T.orderedNames 26 local orderedNames = Module.orderedNames
30 27
31 --- Temp values set during updates 28 --- Temp values set during updates
32 local wrapperWidth, wrapperHeight 29 local wrapperWidth, wrapperHeight
33 local scrollWidth, scrollHeight 30 local scrollWidth, scrollHeight
34 local previousBlock 31 local previousBlock
35 local currentBlock 32 local currentBlock
36 --- todo: source these from config 33 --- todo: source these from config
37 local itemButtonSize, itemButtonSpacing = 36, 1 34 local itemButtonSize, itemButtonSpacing = 36, 1
38 35
39 local headerHeight, headerColor, headerSpacing = 16, {1,1,1,1}, 2 36 local headerHeight, headerColor, headerSpacing = 16, {1,.75,0,1}, 2
40 local headerbg = {'VERTICAL', 1, 1, 0.5, 0.5, 1, 1, 0.5, 0} 37 local headerbg = {'VERTICAL', 1, 1, 0.5, 0.5, 1, 1, 0.5, 0}
41 local headerFont, headerSize, headerOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 14, 'OUTLINE' 38 local headerFont, headerSize, headerOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 14, 'OUTLINE'
42 39
43 local titlebg = {'HORIZONTAL', 1, 0, .7, .25, 1, 0, .7, .125} 40 local titlebg = {'HORIZONTAL', 1, 0, .7, .25, 1, 0, .7, .125}
44 local titlebg_daily = {'HORIZONTAL', 0, .7, 1, .25, 0, 1, .7, .125 } 41 local titlebg_daily = {'HORIZONTAL', 0, .7, 1, .25, 0, 1, .7, .125 }
52 49
53 50
54 local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225} 51 local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225}
55 local titleSpacing, textSpacing, blockSpacing = 3, 3, 1 52 local titleSpacing, textSpacing, blockSpacing = 3, 3, 1
56 local titleIndent, textIndent,selectionIndent = 2, 5, 50 53 local titleIndent, textIndent,selectionIndent = 2, 5, 50
54
55 local lineColors = {
56 text = {.5,.75,1},
57 }
57 58
58 local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed 59 local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed
59 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' 60 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE'
60 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0 } 61 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0 }
61 local rewardSize = 32 62 local rewardSize = 32
62 local oprint = B.print('Objectives') 63 local oprint = B.print('Objectives')
63 local bprint = B.print('Block') 64 local bprint = B.print('Block')
64 local tprint = B.print('Tracker') 65 local tprint = B.print('Tracker')
65 local lprint = B.print('Line') 66 local lprint = B.print('Line')
66 67
67 local currentPosition, anchorFrame, anchorPoint 68 Default.AddBlock = function(self, block, blockIndex)
68 69 local blockIndex = blockIndex or (self.currentBlock + 1)
69 --- Positioning and stuff
70 local tick = 0
71 function T:Update (reason, ...)
72 tick = tick + 1
73 local print = tprint
74 reason = reason or OBJECTIVE_TRACKER_UPDATE_REASON
75 local updateWrapper = 0
76 local hasStuff
77 local insertingStuff
78
79 print(format('%d |cFFFF%04X Update()', tick, lshift(reason, 4)), reason, ...)
80 currentPosition = 0
81 anchorPoint = 'TOP'
82 anchorFrame = Scroll
83
84 local wrapperHeight = 0
85 for id, handler in pairs(T.orderedHandlers) do
86 local frame = handler.frame
87
88 print(format('|cFF00FFFF%s and(%04X vs %04x+%04x) = %04X|r', handler.name, reason, handler.updateReasonModule, handler.updateReasonEvents, band(reason, handler.updateReasonModule + handler.updateReasonEvents)))
89 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then
90 handler:Update(reason, ...)
91 print(' |cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched)
92 insertingStuff = true
93 else
94 print(' |cFFFF0088'..id..'|r', 'no reason to update')
95 end
96
97 if handler.numWatched >= 1 then
98 hasStuff = true
99 currentPosition = currentPosition + 1
100 frame:SetParent(Scroll)
101 frame:SetPoint('TOP', anchorFrame, anchorPoint, 0, 0)
102 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint)
103 anchorFrame = handler.frame
104 anchorPoint = 'BOTTOM'
105
106 print('current frame height:', frame.height)
107 wrapperHeight = wrapperHeight + frame.height
108 print('|cFFFF0088total height:', wrapperHeight)
109 else
110 handler.frame:Hide()
111 end
112 end
113
114
115 if hasStuff or insertingStuff then
116 print('updating height to', wrapperHeight)
117 Wrapper:SetHeight(wrapperHeight)
118 Scroller:SetHeight(wrapperHeight)
119 Scroll:SetHeight(wrapperHeight)
120 Scroller:SetVerticalScroll(B.Conf.ObjectiveScroll or 0)
121 print('|cFFFF8800Wrapper:', Wrapper:GetSize())
122 for i = 1, Wrapper:GetNumPoints() do
123 print(' ', Wrapper:GetPoint(i))
124 end
125 print(' |cFF00FFFFScroller:', Scroller:GetSize())
126 for i = 1, Scroller:GetNumPoints() do
127 print(' ', Scroller:GetPoint(i))
128 end
129 print(' |cFF00FFFFScroll:', Scroll:GetSize())
130 for i = 1, Scroll:GetNumPoints() do
131 print(' ', Scroll:GetPoint(i))
132 end
133
134 Wrapper:Show()
135 Scroller:Show()
136 Scroll:Show()
137 end
138 Quest.GetClosest()
139 --T.UpdateActionButtons(reason)
140 end
141
142 T.AddBlock = function(self, block)
143 local print = bprint 70 local print = bprint
144 local tracker = self.frame 71 local tracker = self.frame
145 local info = block.info 72 local info = block.info
146 block:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, 0) 73
74 block.index = blockIndex
75 block:SetPoint('TOPLEFT', self.frame, 'TOPLEFT', 0, block.offset)
147 block:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) 76 block:SetPoint('RIGHT', tracker,'RIGHT', 0, 0)
77 self.currentBlock = blockIndex
148 self.currentAnchor = block 78 self.currentAnchor = block
149 print(' |cFFFFFF00'..tracker.height..'|r', '|cFF00FF00'..block:GetName()..'|r', block.height, tracker.height) 79 print(' |cFFFFFF00'..tracker.height..'|r', '|cFF00FF00'..block:GetName()..'|r', block.height, tracker.height)
150 tracker.height = tracker.height + block.height 80 tracker.height = tracker.height + block.height
151 self.numBlocks = max(self.numBlocks, info.blockIndex) 81 self.numBlocks = max(self.numBlocks, blockIndex)
152 self.actualBlocks = self.actualBlocks + 1 82 self.actualBlocks = self.actualBlocks + 1
153 end 83 end
154 84
155 --- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons) 85 --- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons)
156 T.AddTag = function (block, tagName, tagPoint, tagAnchor, tagRelative) 86 Default.AddTag = function (handler, block, tagInfo, tagPoint, tagAnchor, tagRelative)
157 local print = bprint 87 local print = bprint
158 local tag = block[tagName] 88
159 if block.info[tagName] and tag then 89 for order, tagName in ipairs(block.info.tagInfo) do
160 tag:SetTexCoord(unpack(block.info[tagName])) 90 local tag = block[tagName]
161 tag:Show() 91 if block.tagCoords[tagName] and tag then
162 tag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) 92 tag:SetTexCoord(unpack(block.tagCoords[tagName]))
163 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', tag, 'TOPLEFT' 93 tag:Show()
164 else 94 tag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0)
165 block[tagName]:Hide() 95 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', tag, 'TOPLEFT'
166 end 96 else
97 block[tagName]:Hide()
98 end
99 end
100
167 return tagPoint, tagAnchor, tagRelative 101 return tagPoint, tagAnchor, tagRelative
168 end 102 end
169 103
170 --- Adds the given line to the current content and advances the anchor pointer to that new line for the following call. 104 --- Adds the given line to the current content and advances the anchor pointer to that new line for the following call.
171 T.AddLine = function(block, line) 105 Default.AddLine = function(handler, block, text, attachment, template)
172 local print = lprint 106 local print = lprint
107 local lineIndex = block.currentLine + 1
108 local line = handler:GetLine(block)
173 line:ClearAllPoints() 109 line:ClearAllPoints()
174 line:SetPoint('LEFT', block, 'LEFT', 0, 0) 110 line:SetPoint('LEFT', block, 'LEFT', 0, 0)
175 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing) 111 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing)
176 line:SetPoint('RIGHT', block, 'RIGHT', 0, 0) 112 line:SetPoint('RIGHT', block, 'RIGHT', 0, 0)
113 line:Show()
114
115 local r, g, b, a = 1, 1, 1, 1
116 if lineColors[template] then
117 r, g, b = unpack(lineColors[template])
118 end
119
120 line.status:SetText(text)
121 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing
177 line:SetHeight(line.height) 122 line:SetHeight(line.height)
178 line:Show() 123 line.status:SetTextColor(r, g, b, a)
124
125 -- For progressbar and timer lines, status text may be used as the title heading
126 if attachment then
127 local widgetPosition = 0
128 attachment:SetPoint('TOP', line, 'TOP', 0, -block.attachmentHeight)
129 attachment:Show()
130 if text and #text >= 1 then
131 widgetPosition = line.status:GetHeight() + textSpacing
132 line.status:SetText(text)
133 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing + attachment.height
134 print(' - progressbar has text, adjust')
135 end
136 else
137 print(' |cFFFF0088no attachments')
138 end
179 139
180 block.endIndex = line.index 140 block.endIndex = line.index
181 block.numLines = block.numLines + 1
182 block.attachmentHeight = block.attachmentHeight + (line.height + textSpacing) 141 block.attachmentHeight = block.attachmentHeight + (line.height + textSpacing)
183 print(' |cFF0088FFsetting line #'..block.numLines..' for|r', block.info.title, "\n |cFF0088FFsize:|r", line.height, 142 print(' |cFF0088FFsetting line #'..lineIndex..' for|r', block.info.title, "\n |cFF0088FFsize:|r", line.height,
184 "|cFF0088FFpoint:|r", line:GetPoint(1), "|cFF0088FFwidget:|r", (line.widget and 'Y' or 'N')) 143 "|cFF0088FFpoint:|r", line:GetPoint(1), "|cFF0088FFwidget:|r", (line.widget and 'Y' or 'N'))
144 block.currentLine = lineIndex
185 block.endPoint = line 145 block.endPoint = line
186 end 146 end
187 147
188 --- Creates or retrieves a complete line data object 148 --- Creates or retrieves a complete line data object
189 T.GetLine = function(handler, block, lineIndex) 149 Default.GetLine = function(handler, block, lineIndex)
190 local print = lprint 150 local print = lprint
191 local blockIndex = block.index 151 local blockIndex = block.index
192 if not block.lines then
193 block.lines = {}
194 end
195 local lines = block.lines 152 local lines = block.lines
153 if not lineIndex then
154 lineIndex = block.currentLine + 1
155 print('fetching the "next" line:', lineIndex)
156 else
157 print('fetching explicit offset:', lineIndex)
158 end
159
160 block.numLines = max(block.numLines, lineIndex)
161 print('|cFF00FFFFnumLines:|r', block.numLines, '|cFF00FFFFcurrentLine:|r', block.currentLine)
162
196 if not lines[lineIndex] then 163 if not lines[lineIndex] then
197 print(' |cFF00FF88created line #'..lineIndex..' from for '..handler.name..' block #'..blockIndex) 164 print(' |cFF00FF88created line #'..lineIndex..' from for '..handler.name..' block #'..blockIndex)
198 lines[lineIndex] = CreateFrame('Frame', 'Vn'..handler.name .. blockIndex..'ObjectiveLine'..lineIndex, block, 'VeneerTrackerObjective') 165 lines[lineIndex] = CreateFrame('Frame', 'Vn'..handler.name .. blockIndex..'ObjectiveLine'..lineIndex, block, 'VeneerTrackerObjective')
199 local line = lines[lineIndex] 166 local line = lines[lineIndex]
200 line.index = lineIndex 167 line.index = lineIndex
218 end 185 end
219 186
220 187
221 188
222 --- Creates or retrieves a complete block frame object 189 --- Creates or retrieves a complete block frame object
223 T.GetBlock = function(handler, blockIndex) 190 Default.GetBlock = function(handler, blockIndex)
224 local print = bprint 191 local print = bprint
225 local block = handler.usedBlocks[blockIndex] 192 local block = handler.usedBlocks[blockIndex]
226 193
227 if not handler.usedBlocks[blockIndex] then 194 if not handler.usedBlocks[blockIndex] then
228 if #handler.freeBlocks >= 1 then 195 if #handler.freeBlocks >= 1 then
229 block = handler.freeBlocks[#handler.freeBlocks] 196 block = handler.freeBlocks[#handler.freeBlocks]
230 handler.freeBlocks[#handler.freeBlocks] = nil 197 handler.freeBlocks[#handler.freeBlocks] = nil
231 else 198 else
232 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock') 199 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, handler.frame, 'VeneerTrackerBlock')
233 200
234 201 local c = Module.Conf.Wrapper
235
236 local c = T.Conf.Wrapper
237 block.index = blockIndex 202 block.index = blockIndex
203 block.lines = {}
204 block.numLines = 0
205 block.currentLine = 0
238 block:SetWidth(c.Width) 206 block:SetWidth(c.Width)
239 207
240 block.title:SetSpacing(c.TitleSpacing) 208 block.title:SetSpacing(c.TitleSpacing)
241 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) 209 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing)
242 210
243 block.titlebg:SetTexture(1,1,1,1) 211 block.titlebg:SetTexture(1,1,1,1)
244 block.titlebg:SetGradientAlpha(unpack(T.colors.default.titlebg)) 212 block.titlebg:SetGradientAlpha(unpack(Module.colors.default.titlebg))
245 block.titlebg:SetPoint('TOP', block, 'TOP', 0, 0) 213 block.titlebg:SetPoint('TOP', block, 'TOP', 0, 0)
246 block.titlebg:SetPoint('BOTTOM', block.title, 'BOTTOM', 0, -titleSpacing) 214 block.titlebg:SetPoint('BOTTOM', block.title, 'BOTTOM', 0, -titleSpacing)
247 215
248 block.status:SetSpacing(c.TextSpacing) 216 block.status:SetSpacing(c.TextSpacing)
249 block.status:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, -textSpacing) 217 block.status:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, -textSpacing)
250 block.status:SetPoint('LEFT', block.titlebg, 'LEFT', textIndent, 0) 218 block.status:SetPoint('LEFT', block.titlebg, 'LEFT', textIndent, 0)
251 219
252 block.statusbg:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, 0) 220 block.statusbg:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, 0)
253 block.statusbg:SetPoint('BOTTOM', block, 'BOTTOM', 0, 0) 221 block.statusbg:SetPoint('BOTTOM', block, 'BOTTOM', 0, 0)
254 block.statusbg:SetTexture(1,1,1,1) 222 block.statusbg:SetTexture(1,1,1,1)
255 block.statusbg:SetGradientAlpha(unpack(T.colors.default.textbg)) 223 block.statusbg:SetGradientAlpha(unpack(Module.colors.default.textbg))
256 224
257 block.SelectionOverlay:SetGradientAlpha(unpack(T.colors.default.selectionbg)) 225 block.SelectionOverlay:SetGradientAlpha(unpack(Module.colors.default.selectionbg))
258 block.SelectionOverlay:SetPoint('TOPLEFT', selectionIndent, 0) 226 block.SelectionOverlay:SetPoint('TOPLEFT', selectionIndent, 0)
259 block.SelectionOverlay:SetPoint('BOTTOMRIGHT') 227 block.SelectionOverlay:SetPoint('BOTTOMRIGHT')
260 228
261 block.icon:SetSize(rewardSize, rewardSize) 229 block.icon:SetSize(rewardSize, rewardSize)
262 block.icon:SetPoint('TOPRIGHT', block, 'TOPRIGHT', -2, -2) 230 block.icon:SetPoint('TOPRIGHT', block, 'TOPRIGHT', -2, -2)
284 handler.usedBlocks[blockIndex] = block 252 handler.usedBlocks[blockIndex] = block
285 end 253 end
286 return handler.usedBlocks[blockIndex] 254 return handler.usedBlocks[blockIndex]
287 end 255 end
288 256
257 local currentPosition, anchorFrame, anchorPoint
258 --- Positioning and stuff
259 local tick = 0
260 local maxReason = 0
261 function Module:Update (reason, ...)
262 tick = tick + 1
263 -- is this the first time updating?
264 if maxReason == 0 then
265 reason = OBJECTIVE_TRACKER_UPDATE_ALL
266 elseif not reason then
267 reason = OBJECTIVE_TRACKER_UPDATE_REASON
268 end
269
270 local print = tprint
271 local updateWrapper = 0
272 local hasStuff
273 local insertingStuff
274
275 print(format('%d |cFFFF%04X Update()', tick, lshift(reason, 4)), reason, ...)
276 currentPosition = 0
277 anchorPoint = 'TOP'
278 anchorFrame = Scroll
279
280 local wrapperHeight = 0
281 for id, handler in pairs(Module.orderedHandlers) do
282 local frame = handler.frame
283
284 print(format('|cFF00FFFF%s and(%04X vs %04x+%04x) = %04X|r', handler.name, reason, handler.updateReasonModule, handler.updateReasonEvents, band(reason, handler.updateReasonModule + handler.updateReasonEvents)))
285 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then
286 handler:UpdateTracker(reason, ...)
287 print(' |cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched)
288 insertingStuff = true
289 else
290 print(' |cFFFF0088'..id..'|r', 'no reason to update')
291 end
292
293 if handler.numWatched >= 1 then
294 hasStuff = true
295 currentPosition = currentPosition + 1
296 frame.destinationOffset = -wrapperHeight
297 if frame.previousOffset ~= wrapperHeight and frame:IsVisible() then
298 print(frame.SlideIn.translation)
299 local postFrame, postPoint = anchorFrame, anchorPoint
300 local delta = frame.destinationOffset - frame.previousOffset
301 local _, _, _, _, offset = frame:GetPoint(1)
302 print(' |cFF00BBFFstart slide for', delta, 'pixels, from', frame.previousOffset, '(', offset, ')')
303 frame.SlideIn.translation:SetTarget(frame)
304 frame.SlideIn.translation:SetOffset(0, delta)
305 frame.SlideIn:Play()
306 for i, b in ipairs(handler.usedBlocks) do
307 b.SlideIn.translation:SetOffset(0, delta)
308 b.SlideIn:Play()
309 end
310 frame.SlideIn:SetScript('OnFinished', function()
311 print(' |cFF00BBFFsliding finished:', delta, 'pixels covered')
312 frame:SetParent(Scroll)
313 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset)
314 frame.previousOffset = frame.destinationOffset
315 frame.SlideIn:SetScript('OnFinished', nil)
316 if Wrapper.destinationHeight then
317 Wrapper:SetHeight(Wrapper.destinationHeight)
318 Scroller:SetHeight(Wrapper.destinationHeight)
319 Scroll:SetHeight(Wrapper.destinationHeight)
320 Wrapper.previousHeight = Wrapper.destinationHeight
321 Wrapper.destinationHeight = nil
322 end
323
324 end)
325 else
326 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint)
327 frame:SetParent(Scroll)
328 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset)
329 end
330
331 frame:Show()
332 anchorFrame = handler.frame
333 anchorPoint = 'BOTTOM'
334
335 print('current frame height:', frame.height)
336 wrapperHeight = wrapperHeight + frame.height
337 print('|cFFFF0088total height:', wrapperHeight)
338 else
339 frame:SetPoint('TOP', Scroll, 'TOP', 0, 0)
340 frame.destinationOffset = 0
341 frame.previousOffset = 0
342 handler.frame:Hide()
343 end
344 end
345
346
347 if hasStuff or insertingStuff then
348 print('updating height to', wrapperHeight)
349 if wrapperHeight > Wrapper.previousHeight then
350 Wrapper:SetHeight(wrapperHeight)
351 Scroller:SetHeight(wrapperHeight)
352 Scroll:SetHeight(wrapperHeight)
353 Wrapper.previousHeight = wrapperHeight
354 Wrapper.destinationHeight = wrapperHeight
355 end
356 Scroller:SetVerticalScroll(B.Conf.ObjectiveScroll or 0)
357 print('|cFFFF8800Wrapper:', Wrapper:GetSize())
358 for i = 1, Wrapper:GetNumPoints() do
359 print(' ', Wrapper:GetPoint(i))
360 end
361 print(' |cFF00FFFFScroller:', Scroller:GetSize())
362 for i = 1, Scroller:GetNumPoints() do
363 print(' ', Scroller:GetPoint(i))
364 end
365 print(' |cFF00FFFFScroll:', Scroll:GetSize())
366 for i = 1, Scroll:GetNumPoints() do
367 print(' ', Scroll:GetPoint(i))
368 end
369
370 Wrapper:Show()
371 Scroller:Show()
372 Scroll:Show()
373 end
374 Quest.GetClosest()
375 --Module.UpdateActionButtons(reason)
376 end
377
289 --- Content generator base 378 --- Content generator base
290 Default.Update = function (self, reason, ...) 379 Default.UpdateTracker = function (handler, reason, id, isNew)
291 local print = tprint 380 local print = tprint
292 local tracker = self.frame 381 local tracker = handler.frame
293 local blockIndex = 0 382 local blockIndex = 0
294 tracker.previousHeight = tracker.height 383 tracker.previousHeight = tracker.height
295 tracker.height = 0 384 tracker.height = 0
296 385
297 tracker.title:SetFont(headerFont, headerSize, headerOutline) 386 tracker.title:SetFont(headerFont, headerSize, headerOutline)
298 tracker.titlebg:SetHeight(headerHeight) 387 tracker.titlebg:SetHeight(headerHeight)
299 tracker.title:SetTextColor(unpack(headerColor)) 388 tracker.title:SetTextColor(unpack(headerColor))
300 389
301 self.currentAnchor = tracker.titlebg 390 handler.updateReason = reason
302 self.numWatched = self:GetNumWatched() 391 handler.numWatched = handler:GetNumWatched()
303 self.actualBlocks = 0 392 handler.currentBlock = 0
304 for watchIndex = 1, 25 do 393 handler.currentAnchor = tracker.titlebg
305 blockIndex = blockIndex + 1 394 local blockPosition = -headerHeight
306 if watchIndex <= self.numWatched then 395 for blockIndex = 1, handler.numWatched do
307 local info = self:GetInfo(watchIndex) 396 local currentBlock = handler:UpdateBlock(blockIndex, id, isNew)
308 if info then 397 if currentBlock then
309 local currentBlock = self:UpdateBlock(blockIndex, info) 398 currentBlock.offset = blockPosition
310 T.AddBlock(self, currentBlock) 399 handler:AddBlock(currentBlock)
311 else 400 blockPosition = blockPosition - currentBlock.height
312 print(' |cFFFF0000bad GetInfo data for #'..watchIndex)
313 end
314 elseif watchIndex <= self.actualBlocks then
315 local used = self.usedBlocks
316 local free = self.freeBlocks
317 print('clean up dead quest block')
318 if used[blockIndex] then
319 used[blockIndex]:Hide()
320 used[blockIndex]:ClearAllPoints()
321 free[#free+1]= used[blockIndex]
322 used[blockIndex] = nil
323 end
324 else 401 else
325 print(' |cFFFF9900END|r @', blockIndex) 402 print(' |cFFFF9900END|r @', blockIndex)
326 break -- done with quest stuff 403 break -- done with quest stuff
327 end 404 end
328 end 405 end
329 406
330 407 for i = handler.currentBlock+1, handler.numBlocks do
331 if self.actualBlocks >= 1 then 408 local used = handler.usedBlocks
409 local free = handler.freeBlocks
410 print('clean up dead quest block')
411 if used[i] then
412 used[i]:Hide()
413 used[i]:ClearAllPoints()
414 free[#free+1]= used[blockIndex]
415 used[i] = nil
416 end
417 end
418
419
420 if handler.currentBlock >= 1 then
332 tracker.height = tracker.height + headerHeight 421 tracker.height = tracker.height + headerHeight
333 tracker:Show() 422 tracker:Show()
334 423
335 if tracker.wasEmpty then 424 if tracker.wasEmpty then
336 tracker.headerFade:Play() 425 tracker.headerFade:Play()
351 --- Updates the selected block frame to display the given info batch 440 --- Updates the selected block frame to display the given info batch
352 -- If `previousBlock` is set, it will attempt to anchor to that 441 -- If `previousBlock` is set, it will attempt to anchor to that
353 -- @param blockNum the ordered block to be updated, not a watchIndex value 442 -- @param blockNum the ordered block to be updated, not a watchIndex value
354 -- @param info the reference returned by the GetXInfo functions 443 -- @param info the reference returned by the GetXInfo functions
355 -- REMEMBER: t.info and questData[questID] are the same table 444 -- REMEMBER: t.info and questData[questID] are the same table
356 Default.UpdateBlock = function (handler, blockIndex, info) 445 Default.UpdateBlock = function (handler, blockIndex, id, added)
357 local print = bprint 446 local print = bprint
358 print(' Read list item |cFF00FFFF'..blockIndex..'|r') 447 print(' Updating |cFF00FF00'..handler.displayName..'|r|cFF00FFFF'..blockIndex..'|r')
359 if not blockIndex or not info then 448 if not blockIndex then
360 return 449 return
361 end 450 end
451 local info = handler:GetInfo(blockIndex) -- should match up with whatever the internal watch list has
452 if not info then
453 return
454 end
362 local frame = handler.frame 455 local frame = handler.frame
363 local block = T.GetBlock(handler, blockIndex) 456 local block = handler:GetBlock(blockIndex)
457
458 block.questID = info.questID
459 if id == info.questID then
460 --block.questFadeIn:Play()
461 end
462
364 block.handler = handler 463 block.handler = handler
365 block.info = info 464 block.info = info
366 block.mainStyle = info.mainStyle or 'Normal' 465 block.mainStyle = info.mainStyle or 'Normal'
367 block.subStyle = info.subStyle 466 block.subStyle = info.subStyle
368 467
369 info.blockIndex = blockIndex 468 info.blockIndex = blockIndex
370 if info.questID then handler.QuestBlock[info.questID] = block end 469 if info.questID then handler.QuestBlock[info.questID] = block end
371 if info.questLogIndex then handler.LogBlock[info.questLogIndex] = block end 470 if info.questLogIndex then handler.LogBlock[info.questLogIndex] = block end
372 if info.watchIndex then handler.WatchBlock[info.watchIndex] = block end 471 if info.watchIndex then handler.WatchBlock[info.watchIndex] = block end
373 handler.BlockInfo[blockIndex] = info 472 handler.BlockInfo[blockIndex] = info
374
375 block.endPoint = block.titlebg
376 block.attachmentHeight = 0
377 handler:UpdateObjectives(block) 473 handler:UpdateObjectives(block)
378 474
379 block.title:SetText(info.title) 475 block.title:SetText(info.title)
380 local titleHeight = floor(block.title:GetHeight()+.5) 476 local titleHeight = floor(block.title:GetHeight()+.5)
477 local titlebgHeight = titleHeight + titleSpacing*2
478 block.titlebg:SetHeight(titlebgHeight)
479
381 local statusHeight = floor(block.status:GetHeight()+.5) 480 local statusHeight = floor(block.status:GetHeight()+.5)
481 local statusbgHeight = statusHeight + textSpacing*2
382 local attachmentHeight =floor(block.attachmentHeight + .5) 482 local attachmentHeight =floor(block.attachmentHeight + .5)
383 local titlebgHeight = titleHeight + titleSpacing*2
384 local statusbgHeight = statusHeight + textSpacing*2
385
386 block.titlebg:SetHeight(titlebgHeight)
387
388 483
389 print(' |cFF0088FFanchor to', handler.currentAnchor:GetName()) 484 print(' |cFF0088FFanchor to', handler.currentAnchor:GetName())
390 485 print(' |cFF00FF00attachment:|r', attachmentHeight, '|cFF00FF00title:|r', titlebgHeight, '('.. titleHeight..')')
391 print(' |cFF00FF00total sizes:') 486 --block.titlebg:SetHeight(block.title:GetHeight() + Module.Conf.Wrapper.TitleSpacing)
392 print(' attachment:', attachmentHeight)
393 print(' title:', titlebgHeight, '('.. titleHeight..')')
394 --block.titlebg:SetHeight(block.title:GetHeight() + T.Conf.Wrapper.TitleSpacing)
395 block.height = titlebgHeight + attachmentHeight 487 block.height = titlebgHeight + attachmentHeight
488
396 if statusHeight > 1 then 489 if statusHeight > 1 then
397 block.height = block.height + statusbgHeight 490 block.height = block.height + statusbgHeight
398 print(' status:', statusbgHeight, '('.. statusHeight..')') 491 print(' status:', statusbgHeight, '('.. statusHeight..')')
399 else 492 else
400 print(' |cFFFF0088 skipped') 493 print(' |cFFFF0088 skipped')
406 499
407 block:Show() 500 block:Show()
408 501
409 if info.specialItem and not info.itemButton then 502 if info.specialItem and not info.itemButton then
410 print(' - |cFF00FFFFgenerating item button for info set') 503 print(' - |cFF00FFFFgenerating item button for info set')
411 info.itemButton = T.SetItemButton(block, info) 504 info.itemButton = Module.SetItemButton(block, info)
412 else 505 else
413 --info.itemButton = nil 506 --info.itemButton = nil
414 end 507 end
415 508
416 local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block, 'TOPRIGHT' 509 local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block, 'TOPRIGHT'
435 end 528 end
436 -- workaround for scrollchild issue where layers fall out of sync: in this case, it's by 1 vertical pixel 529 -- workaround for scrollchild issue where layers fall out of sync: in this case, it's by 1 vertical pixel
437 --block.highlight:SetPoint('TOPLEFT', block, 'TOPLEFT', 0, 1) 530 --block.highlight:SetPoint('TOPLEFT', block, 'TOPLEFT', 0, 1)
438 --block.lowlight:SetPoint('BOTTOMLEFT', block, 'BOTTOMLEFT', 0, 1) 531 --block.lowlight:SetPoint('BOTTOMLEFT', block, 'BOTTOMLEFT', 0, 1)
439 532
440 tagPoint, tagAnchor, tagRelative = T.AddTag(block, 'frequencyTag', tagPoint, tagAnchor, tagRelative) 533 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'frequencyTag', tagPoint, tagAnchor, tagRelative)
441 tagPoint, tagAnchor, tagRelative = T.AddTag(block, 'typeTag', tagPoint, tagAnchor, tagRelative) 534 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'typeTag', tagPoint, tagAnchor, tagRelative)
442 tagPoint, tagAnchor, tagRelative = T.AddTag(block, 'completionTag', tagPoint, tagAnchor, tagRelative) 535 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'completionTag', tagPoint, tagAnchor, tagRelative)
443 536
444 return block 537 return block
445 end 538 end
446 539
447 540
451 -- Hooked by corresponding handler functions where additional details need to be sorted. 544 -- Hooked by corresponding handler functions where additional details need to be sorted.
452 Default.UpdateObjectives = function(handler, block) 545 Default.UpdateObjectives = function(handler, block)
453 local print = lprint 546 local print = lprint
454 local info = block.info 547 local info = block.info
455 print(' |cFF00FF00default objectives routine', block:GetName()) 548 print(' |cFF00FF00default objectives routine', block:GetName())
549 block.endPoint = block.titlebg
550 block.attachmentHeight = 0
551 block.currentLine = 0
456 552
457 -- reset the starting positions 553 -- reset the starting positions
458 block.attachmentHeight = 0 554 block.attachmentHeight = 0
459 block.endPoint = block.titlebg 555 block.endPoint = block.titlebg
460 local completionScore, completionMax = 0, 0 556 local completionScore, completionMax = 0, 0
461 local displayObjectiveHeader = false 557 local displayObjectiveHeader = false
462 558
463 559
464 --- The first line is going to be used no matter what, so it is hard-pulled. 560 --- The first line is going to be used no matter what, so it is hard-pulled.
465 -- It also ensures that we're in the right position for cleaning up the leftover lines. 561 -- It also ensures that we're in the right position for cleaning up the leftover lines.
466 local lineIndex = 1 562
467 local line = T.GetLine(handler, block, lineIndex)
468
469 block.numLines = 0
470 block.attachmentHeight = 0 563 block.attachmentHeight = 0
471 564
565 local text, attachment
472 if info.description and #info.description >= 1 then 566 if info.description and #info.description >= 1 then
473 print(' |cFF00FFFF header line:|r', info.description) 567 print(' |cFF00FFFF header line:|r', info.description)
474 line.status:SetText(info.description) 568 text = info.description
475 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing 569 handler:AddLine(block, text, nil)
476 if line.widget then
477 line.widget:Hide()
478 end
479 T.AddLine(block, line)
480
481 lineIndex = lineIndex + 1
482 line = T.GetLine(handler, block, lineIndex)
483 end 570 end
484 571
485 if (info.isComplete or info.numObjectives == 0) and info.completionText then 572 if (info.isComplete or info.numObjectives == 0) and info.completionText then
486 print(' overriding line #1 for completion text:', info.completionText) 573 print(' overriding line #1 for completion text:', info.completionText)
487 line.status:SetText(info.completionText) 574 text = info.completionText
488 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing 575 Module.AddLine(block, text, nil)
489 if line.widget then
490 line.widget:Hide()
491 end
492 T.AddLine(block, line)
493 else 576 else
494 if info.objectives then 577 if info.objectives then
495 for i, data in ipairs(info.objectives) do 578 for i, data in ipairs(info.objectives) do
496 print(' |cFF88FF00#', i, data.type, data.text) 579 local line = handler:GetLine(block)
497 displayObjectiveHeader = true 580 displayObjectiveHeader = true
498 line.height = 0 581 line.height = 0
499 handler:UpdateLine(block, line, data) 582 text, attachment = handler:UpdateLine(block, line, data)
500 583 print(' |cFF88FF00#', i, data.type, text)
501 -- For progressbar and timer lines, status text may be used as the title heading 584 handler:AddLine(block, text, attachment)
502 if line.widget then 585
503 local widgetPosition = 0
504 --- WIDGET POSITION -------------------------------------------------
505 line.widget:SetPoint('TOP', line, 'TOP', 0, -widgetPosition)
506 line.widget:Show()
507 line.height = line.widget:GetHeight() + textSpacing
508 ---------------------------------------------------------------------
509 if line.displayText and #line.displayText >= 1 then
510 widgetPosition = line.status:GetHeight() + textSpacing
511 line.status:SetText(line.displayText)
512 line.height = floor(line.status:GetStringHeight()+.5) + textSpacing + line.widget.height
513 print(' - progressbar has text, adjust')
514 end
515 elseif line.displayText then
516 line.status:SetText(line.displayText)
517 line.height = floor(line.status:GetStringHeight()+.5)
518 end
519
520 T.AddLine(block, line)
521
522 --print(' sz', line:GetWidth(), line:GetHeight(), 'pt', line:GetPoint(1))
523 --print(' |cFF44BBFF#', i, 'anchoring line, size:', line.height, 'current endpoint:', line.statusbg)
524
525 lineIndex = lineIndex + 1
526 line = T.GetLine(handler, block, lineIndex)
527 end 586 end
528 end 587 end
529 end 588 end
530 589
531 while (block.lines[lineIndex+1]) do 590 for i = block.currentLine + 1, block.numLines do
532 print(' - hide |cFFFF0088'..lineIndex..'|r') 591 print(i, block.numLines)
533 block.lines[lineIndex]:Hide() 592 print(' - hide |cFFFF0088'..i..'|r', block.lines[i])
534 lineIndex = lineIndex +1 593 block.lines[i]:ClearAllPoints()
535 end 594 block.lines[i]:Hide()
536 595 end
537 596
538 597 if block.currentLine > 0 then
539 if lineIndex > 0 then
540 block.attachmentHeight = block.attachmentHeight + textSpacing * 2 598 block.attachmentHeight = block.attachmentHeight + textSpacing * 2
541 print(' |cFF00FF00attachment:', block.attachmentHeight) 599 print(' |cFF00FF00attachment:', block.attachmentHeight)
542 end 600 end
543
544
545 --[[
546 local lines = handler.lines[block.index]
547 if lines and #lines > block.numLines then
548 print(' |cFFFF008' .. (#lines - block.numLines) .. ' extra lines to hide.')
549 for i = block.numLines + 1, #lines do
550 print(' hide', i, lines[i]:GetName())
551 lines[i]:Hide()
552 end
553 end
554 ]]
555 601
556 602
557 if debug then 603 if debug then
558 for i, region in ipairs(block.debug) do 604 for i, region in ipairs(block.debug) do
559 for j = 1, region:GetNumPoints() do 605 for j = 1, region:GetNumPoints() do
583 elseif line.quantity > 0 then 629 elseif line.quantity > 0 then
584 line.progress = 1 630 line.progress = 1
585 else 631 else
586 line.progress = 0 632 line.progress = 0
587 end 633 end
588 return line 634 return line.displayText, line.widget
589 end 635 end
590 ---------- 636 ----------
591 --- Top level methods 637 --- Top level methods
592 638
593 --- Queue any active item buttons for update for that frame 639 --- Queue any active item buttons for update for that frame
594 local iprint = B.print('ItemButton') 640 local iprint = B.print('ItemButton')
595 T.UpdateActionButtons = function(updateReason) 641 Module.UpdateActionButtons = function(updateReason)
596 local print = iprint 642 local print = iprint
597 Scroller.snap_upper = 0 643 Scroller.snap_upper = 0
598 Scroller.snap_lower = 0 644 Scroller.snap_lower = 0
599 local print = B.print('ItemButton') 645 local print = B.print('ItemButton')
600 if updateReason then 646 if updateReason then
601 print = B.print('IB_'..updateReason) 647 print = B.print('IB_'..updateReason)
602 end 648 end
603 649
604 local previousItem 650 local previousItem
605 for questID, itemButton in pairs(Quest.itemButtons) do 651 for questID, itemButton in pairs(Quest.itemButtons) do
606 local info= T.Quest.Info[questID] 652 local info= Module.Quest.Info[questID]
607 653
608 print('|cFF00FFFF'.. questID .. '|r', itemButton:GetName()) 654 print('|cFF00FFFF'.. questID .. '|r', itemButton:GetName())
609 local block = T.Quest.QuestBlock[questID] 655 local block = Module.Quest.QuestBlock[questID]
610 if block then 656 if block then
611 -- Dispatch the probe 657 -- Dispatch the probe
612 if IsQuestWatched(info.questLogIndex) then 658 if IsQuestWatched(info.questLogIndex) then
613 itemButton.previousItem = previousItem 659 itemButton.previousItem = previousItem
614 print(' |cFFFFFF00probing', block:GetName()) 660 print(' |cFFFFFF00probing', block:GetName())
615 block:SetScript('OnUpdate', function() 661 block:SetScript('OnUpdate', function()
616 if block:GetBottom() and not InCombatLockdown() then 662 if block:GetBottom() and not InCombatLockdown() then
617 print(' '..block:GetName()..' |cFF00FF00probe hit!') 663 print(' '..block:GetName()..' |cFF00FF00probe hit!')
618 T.UpdateBlockAction(block, itemButton, itemButton.previousItem) -- needs to be previousItem from this scope 664 Module.UpdateBlockAction(block, itemButton, itemButton.previousItem) -- needs to be previousItem from this scope
619 block:SetScript('OnUpdate', nil) 665 block:SetScript('OnUpdate', nil)
620 666
621 end 667 end
622 end) 668 end)
623 previousItem = itemButton 669 previousItem = itemButton
634 print(' |cFFBBBBBBignoring hidden log quest button', itemButton:GetName()) 680 print(' |cFFBBBBBBignoring hidden log quest button', itemButton:GetName())
635 end 681 end
636 end 682 end
637 end 683 end
638 684
639 T.UpdateBlockAction = function (block, itemButton) 685 Module.UpdateBlockAction = function (block, itemButton)
640 local print = iprint 686 local print = iprint
641 print('**|cFF0088FF'..itemButton:GetName(), '|r:Update()') 687 print('**|cFF0088FF'..itemButton:GetName(), '|r:Update()')
642 if itemButton.questID ~= block.info.questID then 688 if itemButton.questID ~= block.info.questID then
643 print('** |cFFFF0088mismatched block assignment', itemButton.questID,'<~>', block.info.questID) 689 print('** |cFFFF0088mismatched block assignment', itemButton.questID,'<~>', block.info.questID)
644 -- something happened between this and last frame, go back and set new probes 690 -- something happened between this and last frame, go back and set new probes
645 return T.UpdateActionButtons() 691 return Module.UpdateActionButtons()
646 end 692 end
647 693
648 local previousItem = itemButton.previousItem 694 local previousItem = itemButton.previousItem
649 local upper_bound = Scroller:GetTop() + Scroller.snap_upper 695 local upper_bound = Scroller:GetTop() + Scroller.snap_upper
650 local lower_bound = Scroller:GetBottom() + Scroller.snap_lower + itemButtonSize 696 local lower_bound = Scroller:GetBottom() + Scroller.snap_lower + itemButtonSize
689 735
690 itemButton:SetPoint(point, anchor, relative, itemButton.x, itemButton.y) 736 itemButton:SetPoint(point, anchor, relative, itemButton.x, itemButton.y)
691 itemButton:Show() 737 itemButton:Show()
692 end 738 end
693 739
694 T.UpdateItemButtonCooldown = function(button) 740 Module.UpdateItemButtonCooldown = function(button)
695 741
696 end 742 end
697 743
698 Default.Select = function(handler, block) 744 Default.Select = function(handler, block)
699 T:Update(handler.watchReasonModule) 745 Module:Update(handler.watchReasonModule)
700 end 746 end
701 Default.Open = function(handler, block) 747 Default.Open = function(handler, block)
702 T:Update(handler.watchReasonModule) 748 Module:Update(handler.watchReasonModule)
703 end 749 end
704 Default.Remove = function(handler, block) 750 Default.Remove = function(handler, block)
705 T:Update(handler.watchReasonModule) 751 Module:Update(handler.watchReasonModule)
706 end 752 end
707 Default.Report = function(handler, block) 753 Default.Report = function(handler, block)
708 print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.') 754 print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.')
709 end 755 end
710 756
722 self.Open(self.handler, self) 768 self.Open(self.handler, self)
723 end 769 end
724 self.initialButton = nil 770 self.initialButton = nil
725 self.modChatLink = nil 771 self.modChatLink = nil
726 self.modQuestWatch = nil 772 self.modQuestWatch = nil
727 T:Update(self.handler.updateReasonModule) 773 Module:Update(self.handler.updateReasonModule)
728 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r') 774 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r')
729 end 775 end
730 Default.OnMouseDown = function(self, button) 776 Default.OnMouseDown = function(self, button)
731 print(self.info.title) 777 print(self.info.title)
732 end 778 end