comparison ObjectiveTracker/Update.lua @ 35:69d03f8e293e

- separated layout and data logic between Frame.lua and Update.lua - solved disappearing tracker mystery
author Nenue
date Sun, 17 Apr 2016 11:07:48 -0400
parents
children
comparison
equal deleted inserted replaced
34:9856ebc63fa4 35:69d03f8e293e
1 --- ${PACKAGE_NAME}
2 -- @file-author@
3 -- @project-revision@ @project-hash@
4 -- @file-revision@ @file-hash@
5 -- Created: 4/17/2016 7:33 AM
6 local B = select(2,...).frame
7 local T = 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
9 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion, tinsert, tremove = IsResting, UnitXP, UnitXPMax, GetXPExhaustion, table.insert, table.remove
10 local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent
11 local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText
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
14 local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame
15 local IsModifiedClick, ChatEdit_GetActiveWindow = IsModifiedClick, ChatEdit_GetActiveWindow
16 local print = B.print('Tracker')
17 local oprint = B.print('Objectives')
18 local bprint = B.print('Block')
19 local tprint = B.print('Tracker')
20 local lprint = B.print('Line')
21 local unitLevel = 1
22 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON
23 local debug = false
24
25 --- FRAMES
26 local Wrapper = _G.VeneerObjectiveWrapper
27 local Scroller = Wrapper.scrollArea
28 local Scroll = _G.VeneerObjectiveScroll
29 local orderedHandlers = T.orderedHandlers
30 local orderedNames = T.orderedNames
31
32
33 --- Placing the Update functions here since they shouldn't be messing with schema stuff
34 local currentPosition, anchorFrame, anchorPoint
35 --- Positioning and stuff
36 local tick = 0
37 local firstUpdate = true
38 function T:Update (reason, ...)
39 if not B.Conf.VeneerObjectiveWrapper.enabled then
40 return
41 end
42
43 tick = tick + 1
44 if firstUpdate or not reason then
45 reason = _G.OBJECTIVE_TRACKER_UPDATE_ALL
46 end
47
48 local print = tprint
49 local hasStuff = false
50 local insertingStuff = false
51
52 print(format('|cFFBB0066Update:|r |cFFFF%04X%d|r ', tick, lshift(reason, 4)), reason, ...)
53 currentPosition = 0
54
55 for id, handler in pairs(T.orderedHandlers) do
56 local frame = handler.frame
57
58
59 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then
60 insertingStuff = handler:UpdateTracker(reason, ...)
61 else
62 print(' |cFFFF4400Update:|r skipping',handler.name)
63 end
64
65 if handler.numWatched >= 1 then
66 hasStuff = true
67 currentPosition = currentPosition + 1
68 Default.AddTracker(handler, frame, currentPosition)
69
70 else
71 frame:ClearAllPoints()
72 frame:SetPoint('BOTTOM', Scroll, 'BOTTOM', 0, 0)
73 frame.destinationOffset = 0
74 frame:Hide()
75 frame.wasEmpty = true
76 end
77 end
78
79 -- do these whenever there is content or content is being added
80 if hasStuff or insertingStuff then
81 T:FinishWrapper()
82 end
83 Quest.GetClosest()
84 --T.UpdateActionButtons(reason)
85 if firstUpdate then
86 firstUpdate = nil
87 end
88 end
89
90 Default.UpdateTracker = function (handler, reason, id, isNew)
91 local print = tprint
92 local tracker = handler.frame
93 local blockIndex = 0
94
95 handler.updateReason = reason
96 handler.numWatched = handler:GetNumWatched()
97 if handler.numWatched >= 1 then
98
99 print(' |cFF00FF88GetNumWatched:|r',handler.name, handler.numWatched, 'of', handler.numAll)
100 end
101
102 handler.numBlocks = 0
103 handler.currentBlock = 0
104 handler.currentAnchor = tracker.titlebg
105 for blockIndex = 1, handler.numWatched do
106 local currentBlock = handler:UpdateBlock(blockIndex, id, isNew)
107 if currentBlock then
108 handler:AddBlock(currentBlock)
109 else
110 print(' |cFFFF9900finished|r @', blockIndex)
111 break -- done with quest stuff
112 end
113 end
114
115
116 local numBlocks = handler.numBlocks
117 local used = handler.usedBlocks
118 local free = handler.freeBlocks
119 print(format(' |cFFFF8800UpdateTracker|r(%s): |cFFFF8800%04X|r --- blocks |cFFFF8800%d|r, (used/free: |cFFFF8800%d|r/|cFFFF8800%d|r)', handler.name, band(reason, handler.updateReasonModule + handler.updateReasonEvents, reason), numBlocks, #used, #free))
120 return tracker.numWatched, tracker.numAll
121 end
122
123 Default.UpdateBlock = function (handler, blockIndex, id, added)
124 local print = bprint
125 if not blockIndex then
126 return
127 end
128 local info = handler:GetInfo(blockIndex) -- should match up with whatever the internal watch list has
129 if not info then
130 return
131 end
132 print(' Updating |cFF00FF00'..handler.displayName..'|r|cFF00FFFF'..blockIndex..'|r|cFF0099FF', info.id ,'|r')
133 local frame = handler.frame
134 local block = handler:GetBlock(info.id)
135
136 if added then
137 -- do something if the block is being assigned a new thing
138 end
139
140 block.handler = handler
141 block.info = info
142
143 info.blockIndex = blockIndex
144 if info.questID then handler.QuestBlock[info.questID] = block end
145 if info.logIndex then handler.LogBlock[info.logIndex] = block end
146 if info.watchIndex then handler.WatchBlock[info.watchIndex] = block end
147 handler.BlockInfo[blockIndex] = info
148 local newSchema = handler:UpdateObjectives(block)
149 if newSchema and newSchema ~= blockSchema then
150 T.UpdateSchema('block', newSchema)
151 end
152
153 block.title:SetText(info.title)
154
155 print(' |cFFFFFF00height|r:', block.height)
156 print(' |cFF00FFFF)|r -> ', block, block:GetHeight())
157
158 block:Show()
159
160 if info.specialItem and not info.itemButton then
161 print(' - |cFF00FFFFgenerating item button for info set')
162 info.itemButton = T.SetItemButton(block, info)
163 else
164 --info.itemButton = nil
165 end
166
167 local tagPoint, tagAnchor, tagRelative, x, y = 'TOPRIGHT', block, 'TOPRIGHT', -2, -2
168
169 local numCurrency = 0
170 for i, rewardTile in ipairs(block.rewardTile) do
171 if info.rewardInfo and info.rewardInfo[i] then
172 local reward = info.rewardInfo[i]
173 --rewardTile:SetPoint(tagPoint, tagAnchor, tagRelative, -2, -2)
174 rewardTile:SetTexture(reward.texture)
175 rewardTile:Show()
176
177 print('updating reward tile #'.. i, reward.type, reward.count, reward.text, reward.texture)
178 if reward.count and reward.count > 1 then
179 block.rewardLabel[i]:SetText(reward.count)
180 block.rewardLabel[i]:Show()
181 end
182
183 rewardTile:ClearAllPoints()
184 rewardTile:SetPoint(tagPoint, tagAnchor, tagRelative, x, y)
185 tagPoint, tagAnchor, tagRelative, x, y = 'TOPRIGHT', rewardTile, 'TOPLEFT', -2, 0
186 else
187 rewardTile:Hide()
188 block.rewardLabel[i]:Hide()
189 end
190 end
191
192 if info.selected then
193 block.SelectionOverlay:Show()
194 else
195 block.SelectionOverlay:Hide()
196 end
197
198 if info.tagInfo then
199 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'frequencyTag', tagPoint, tagAnchor, tagRelative)
200 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'typeTag', tagPoint, tagAnchor, tagRelative)
201 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'completionTag', tagPoint, tagAnchor, tagRelative)
202 end
203
204 if info.statusKey and (Devian and Devian.InWorkspace()) then
205 block.debugText:SetText(info.statusKey)
206 block.debugText:Show()
207 end
208 return block
209 end
210
211 Default.UpdateObjectives = function(handler, block, block_schema)
212 local print = lprint
213 local info = block.info
214 print(' |cFF00FF00default.objectives', block:GetName())
215 -- reset the starting positions
216 block.endPoint = block.titlebg
217 block.attachmentHeight = 0
218 block.currentLine = 0
219
220 local displayObjectiveHeader = false
221
222 block.attachmentHeight = 0
223 local text, attachment, template
224
225
226 if info.description and #info.description >= 1 then
227 print(' |cFF00FFFF header line:|r', info.description)
228 text = info.description
229 handler:AddLine(block, text, nil)
230 end
231
232 if (info.isComplete or info.numObjectives == 0) and info.completionText then
233 print(' overriding line #1 for completion text:', info.completionText)
234 text = info.completionText
235 handler:AddLine(block, text, nil, 'completed')
236 else
237 if info.objectives then
238 for i, data in ipairs(info.objectives) do
239 local line = handler:GetLine(block)
240 displayObjectiveHeader = true
241 line.height = 0
242 text, attachment, template = handler:UpdateLine(block, line, data)
243 print(' |cFF88FF00#', i, data.type, text, attachment)
244 handler:AddLine(block, text, attachment, template)
245
246 end
247 end
248 end
249
250
251 if block.currentLine < block.numLines then
252 print(' - cull', block.currentLine, block.numLines)
253 for i = block.currentLine + 1, block.numLines do
254 print(' - hide |cFFFF0088'..i..'|r', block.lines[i])
255 block.lines[i]:ClearAllPoints()
256 block.lines[i]:Hide()
257 end
258 end
259
260 if block.currentLine > 0 then
261 block.attachmentHeight = block.attachmentHeight
262 print(' |cFF00FF00attachment:', block.attachmentHeight)
263 end
264 return block_schema
265 end
266
267 Default.UpdateLine = function(handler, block, line, data)
268 if line.finished then
269 line.progress = 2
270 elseif line.quantity > 0 then
271 line.progress = 1
272 else
273 line.progress = 0
274 end
275 return data.text, line.widget, 'normal'
276 end
277
278 Default.Select = function(handler, block)
279 T:Update()
280 end
281 Default.Open = function(handler, block)
282 T:Update(handler.watchReasonModule)
283 end
284 Default.Remove = function(handler, block)
285 T:Update(handler.watchReasonModule)
286 end
287 Default.Report = function(handler, block)
288 print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.')
289 end
290
291 Default.OnMouseUp = function(self, button)
292 print(self.handler.name, self.mainStyle, self.subStyle)
293 if button == 'LeftButton' then
294 if IsModifiedClick("CHATLINK") and ChatEdit_GetActiveWindow() then
295 self.Link(self.handler, self)
296 elseif IsModifiedClick("QUESTWATCHTOGGLE") then
297 self.Remove(self.handler, self)
298 else
299 self.Select(self.handler, self)
300 end
301 elseif button == 'RightButton' then
302 self.Open(self.handler, self)
303 end
304 self.initialButton = nil
305 self.modChatLink = nil
306 self.modQuestWatch = nil
307 T:Update(self.handler.updateReasonModule)
308 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r')
309 end
310 Default.OnMouseDown = function(self, button)
311 print(self.info.title)
312 end