Mercurial > wow > buffalo2
comparison ObjectiveTracker/Frame.lua @ 38:1f8f9cc3d956
- module integration brought up to speed with current frame management structure
author | Nenue |
---|---|
date | Thu, 21 Apr 2016 11:36:41 -0400 |
parents | e84d645c8ab8 |
children | 92534dc793f2 |
comparison
equal
deleted
inserted
replaced
37:e84d645c8ab8 | 38:1f8f9cc3d956 |
---|---|
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 = T.DefaultHandler, T.AutoQuest, T.Quest, T.Bonus, T.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 band, bor = bit.band, bit.bor | |
16 local print = B.print('Layout') | 17 local print = B.print('Layout') |
17 local oprint = B.print('Objectives') | 18 local oprint = B.print('Objectives') |
18 local bprint = B.print('Block') | 19 local bprint = B.print('Block') |
19 local tprint = B.print('Tracker') | 20 local tprint = B.print('Tracker') |
20 local lprint = B.print('Layout') | 21 local lprint = B.print('Layout') |
21 local unitLevel = 1 | 22 local unitLevel = 1 |
22 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON | 23 |
23 local debug = false | 24 local ANIM_STATE = 'Animation: %04X' |
25 local INIT_STATE = 'Init: %04X' | |
26 | |
27 --- Bitfields of import | |
28 --- control value for everything | |
29 local OBJECTIVE_TRACKER_UPDATE_REASON = _G.OBJECTIVE_TRACKER_UPDATE_REASON | |
30 --- flags reason categories where frame layout requires initializing (starts high) | |
31 local initReason = 0xFFFF | |
32 --- flags reason categories where frame anchor updates must be delayed because of an ongoing animation (starts low) | |
33 local animateReason = 0x0000 | |
24 | 34 |
25 --- FRAMES | 35 --- FRAMES |
26 local Wrapper = _G.VeneerObjectiveWrapper | 36 local Wrapper = _G.VeneerObjectiveWrapper |
27 local Scroller = Wrapper.scrollArea | 37 local Scroller = Wrapper.scrollArea |
28 local Scroll = _G.VeneerObjectiveScroll | 38 local Scroll = _G.VeneerObjectiveScroll |
62 local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225} | 72 local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225} |
63 local titleSpacing, textSpacing, blockSpacing = 3, 3, 1 | 73 local titleSpacing, textSpacing, blockSpacing = 3, 3, 1 |
64 local titleIndent, textIndent,selectionIndent = 2, 5, 50 | 74 local titleIndent, textIndent,selectionIndent = 2, 5, 50 |
65 --- END SCHEMA | 75 --- END SCHEMA |
66 local blockPosition | 76 local blockPosition |
77 | |
78 | |
79 local SetAnimate = function(reason, animate) | |
80 print('comparing', animateReason, reason) | |
81 if animate then | |
82 if band(animateReason, reason) == 0 then | |
83 animateReason = animateReason + reason | |
84 end | |
85 else | |
86 if band(animateReason, reason) > 0 then | |
87 animateReason = animateReason - reason | |
88 end | |
89 end | |
90 Wrapper.AnimState:SetFormattedText(ANIM_STATE, animateReason) | |
91 end | |
92 | |
67 | 93 |
68 --- schema swapper | 94 --- schema swapper |
69 T.UpdateSchema = function(layer, newSchema) | 95 T.UpdateSchema = function(layer, newSchema) |
70 if not (T.Conf.Schema[layer] and T.Conf.Schema[layer][newSchema]) then | 96 if not (T.Conf.Schema[layer] and T.Conf.Schema[layer][newSchema]) then |
71 return | 97 return |
98 blockSchema = newSchema | 124 blockSchema = newSchema |
99 elseif layer == 'line' then | 125 elseif layer == 'line' then |
100 textColor = c.textColor | 126 textColor = c.textColor |
101 lineSchema = newSchema | 127 lineSchema = newSchema |
102 end | 128 end |
103 tprint('|cFFFF0088UpdateSchema:|r', layer, lastSchema[layer], '->', newSchema) | 129 tprint('|cFFFF0088 Schema:|r', layer, lastSchema[layer], '->', newSchema) |
104 end | 130 end |
105 -- todo: figure out why objectives go invisible | 131 -- todo: figure out why objectives go invisible |
106 local anchorPoint, anchorFrame | 132 local anchorPoint, anchorFrame |
107 local abs, GetTime = math.abs, GetTime | 133 local abs, GetTime = math.abs, GetTime |
108 Default.AddTracker = function(handler, frame, index) | 134 Default.AddTracker = function(handler, frame, index) |
135 local isInitialized = true | |
136 if initReason and (band(initReason, handler.updateReason) > 0 ) then | |
137 isInitialized = false | |
138 initReason = initReason - handler.updateReason | |
139 print('|cFF00FF00%%% initialization status update:', format('%04X', initReason)) | |
140 | |
141 frame.SlideIn:SetScript('OnPlay', function() | |
142 SetAnimate(handler.updateReasonModule, true) | |
143 end) | |
144 | |
145 frame.SlideIn:SetScript('OnFinished', function() | |
146 SetAnimate(handler.updateReasonModule, false) | |
147 end) | |
148 | |
149 if initReason == 0 then | |
150 initReason = nil | |
151 end | |
152 end | |
153 | |
109 if index == 1 then | 154 if index == 1 then |
110 print('|cFF00FF00### beginning wrapper layout -----------------') | 155 print('|cFF00FF00### beginning wrapper layout -----------------') |
111 anchorPoint, anchorFrame = 'TOP', Scroll | 156 anchorPoint, anchorFrame = 'TOP', Scroll |
112 wrapperHeight = 0 | 157 wrapperHeight = 0 |
113 end | 158 end |
114 | 159 |
115 frame.destinationOffset = -wrapperHeight | 160 frame.destinationOffset = -wrapperHeight |
116 print(frame.destinationOffset, frame.previousOffset) | 161 print(frame.destinationOffset, frame.previousOffset) |
117 if handler.initialized and (abs(frame.previousOffset - frame.destinationOffset) > 0.9) and frame:IsVisible() then | 162 if isInitialized and (abs(frame.previousOffset - frame.destinationOffset) > 0.9) and frame:IsVisible() then |
118 if frame.wasEmpty then | 163 if frame.wasEmpty then |
119 frame.previousOffset = -Wrapper:GetHeight() | 164 frame.previousOffset = -Wrapper:GetHeight() |
120 end | 165 end |
121 | 166 |
122 local postFrame, postPoint = anchorFrame, anchorPoint | 167 local postFrame, postPoint = anchorFrame, anchorPoint |
150 print(' |cFF00BBFFpinning '..handler.name..' to', anchorFrame:GetName(), anchorPoint, '|rcurrent frame height:', frame.height) | 195 print(' |cFF00BBFFpinning '..handler.name..' to', anchorFrame:GetName(), anchorPoint, '|rcurrent frame height:', frame.height) |
151 print(' |cFFFF0088total height:', wrapperHeight) | 196 print(' |cFFFF0088total height:', wrapperHeight) |
152 frame:ClearAllPoints() | 197 frame:ClearAllPoints() |
153 frame:SetParent(Scroll) | 198 frame:SetParent(Scroll) |
154 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset) | 199 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset) |
200 frame:SetPoint('LEFT', Scroll, 'LEFT') | |
201 frame:SetPoint('RIGHT', Scroll, 'RIGHT') | |
155 frame.previousOffset = frame.destinationOffset | 202 frame.previousOffset = frame.destinationOffset |
156 handler.initialized = true | 203 handler.initialized = true |
157 end | 204 end |
158 | 205 |
159 frame.title:SetFont(headerFont, headerSize, headerOutline) | 206 frame.title:SetFont(headerFont, headerSize, headerOutline) |
185 block.index = blockIndex | 232 block.index = blockIndex |
186 | 233 |
187 print('blockschema', blockSchema, block.schema) | 234 print('blockschema', blockSchema, block.schema) |
188 if blockSchema ~= block.schema then | 235 if blockSchema ~= block.schema then |
189 T.UpdateSchema('block', block.schema) | 236 T.UpdateSchema('block', block.schema) |
190 print('new schema detected, applicating...') | 237 print(' ### activating block schema:|cFF0088FF', block.schema) |
191 end | 238 end |
192 | 239 |
193 block:SetWidth(T.Conf.Wrapper.Width) | 240 block:SetWidth(T.Conf.Wrapper.Width) |
194 block.title:SetSpacing(titleSpacing) | 241 block.title:SetSpacing(titleSpacing) |
195 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) | 242 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) |
258 self.currentBlock = blockIndex | 305 self.currentBlock = blockIndex |
259 self.currentAnchor = block | 306 self.currentAnchor = block |
260 | 307 |
261 block:SetPoint('TOPLEFT', self.frame, 'TOPLEFT', 0, blockPosition) | 308 block:SetPoint('TOPLEFT', self.frame, 'TOPLEFT', 0, blockPosition) |
262 block:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) | 309 block:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) |
310 block:Show() | |
263 self.numBlocks = self.numBlocks + 1 | 311 self.numBlocks = self.numBlocks + 1 |
264 print(' |cFFFFFF00'..tracker.height..'|r', '|cFF00FF00'..block:GetName()..'|r', block.height, tracker.height) | 312 print(' |cFFFFFF00'..tracker.height..'|r', '|cFF00FF00'..block:GetName()..'|r', block.height, tracker.height) |
265 tracker.height = tracker.height + block.height | 313 tracker.height = tracker.height + block.height |
266 blockPosition = blockPosition - block.height | 314 blockPosition = blockPosition - block.height |
315 | |
316 | |
317 | |
318 if Devian and Devian.InWorkspace() then | |
319 block.DebugTab:SetParent(UIParent) | |
320 block.DebugTab:SetPoint('TOPRIGHT', block, 'TOPLEFT', 0, 0) | |
321 block.DebugTab.status:SetText(tostring(block.schema) .. ' @|cFF00FF00' .. tostring(block.posIndex) .. '|r #|cFFFFFF00'.. tostring(info.logIndex or info.id) .. '|r'.. | |
322 ' H|cFFFFFF00' .. tostring(block.height) .. ' L|cFF00FFFF' .. tostring(block.numLines) ..'|r') | |
323 block.DebugTab:Show() | |
324 end | |
267 end | 325 end |
268 | 326 |
269 --- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons) | 327 --- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons) |
270 Default.AddTag = function (handler, block, tagInfo, tagPoint, tagAnchor, tagRelative) | 328 Default.AddTag = function (handler, block, tagInfo, tagPoint, tagAnchor, tagRelative) |
271 local print = bprint | 329 local print = bprint |
283 end | 341 end |
284 | 342 |
285 return tagPoint, tagAnchor, tagRelative | 343 return tagPoint, tagAnchor, tagRelative |
286 end | 344 end |
287 | 345 |
346 Default.AddReward = function(handler, block, rewardInfo, tagPoint, tagAnchor, tagRelative) | |
347 local print = bprint | |
348 | |
349 for order, reward in ipairs(rewardInfo) do | |
350 | |
351 end | |
352 end | |
353 | |
288 --- Adds the given line to the current content and advances the anchor pointer to that new line for the following call. | 354 --- Adds the given line to the current content and advances the anchor pointer to that new line for the following call. |
289 Default.AddLine = function(handler, block, text, attachment, template) | 355 Default.AddLine = function(handler, block, text, attachment, template) |
290 local print = lprint | 356 local print = lprint |
291 local lineIndex = block.currentLine + 1 | 357 local lineIndex = block.currentLine + 1 |
292 local line = handler:GetLine(block, lineIndex) | 358 local line = handler:GetLine(block, lineIndex) |
293 | 359 |
294 line.index = lineIndex | 360 line.index = lineIndex |
295 if template then | 361 template = template or 'default' |
296 if line.schema ~= template then | 362 if template and lineSchema ~= template then |
297 print(' |cFF00FF00change schema', template) | 363 print(' |cFF00FF00change schema', template) |
298 T.UpdateSchema('line', template) | 364 T.UpdateSchema('line', template) |
299 line.status:SetSpacing(textSpacing) | 365 end |
300 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) | 366 line.status:SetSpacing(textSpacing) |
301 line.status:SetPoint('RIGHT', line, 'RIGHT',0, 0) | 367 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) |
302 line.status:SetTextColor(unpack(textColor)) | 368 line.status:SetPoint('RIGHT', line, 'RIGHT',0, 0) |
303 line.schema = template | 369 line.status:SetTextColor(unpack(textColor)) |
304 else | |
305 print(' |cFFFFFF00keep schema', line.schema) | |
306 end | |
307 end | |
308 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing) | 370 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing) |
309 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) | 371 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) |
310 line:SetPoint('LEFT', block, 'LEFT') | 372 line:SetPoint('LEFT', block, 'LEFT') |
311 line:SetPoint('RIGHT', block, 'RIGHT') | 373 line:SetPoint('RIGHT', block, 'RIGHT') |
312 line:Show() | 374 line:Show() |
375 line:SetScript('OnMouseUp', function(self, button) | |
376 handler.OnMouseUp(block, button) | |
377 end) | |
313 | 378 |
314 | 379 |
315 tprint(' |cFF0088FFAddLine|r (|cFF00FFFF'..tostring(line.schema)..'|r):', line:GetName()) | 380 tprint(' |cFF0088FFAddLine|r (|cFF00FFFF'..tostring(line.schema)..'|r):', line:GetName()) |
381 --[[ | |
382 for i = 1, line:GetNumPoints() do | |
383 tprint(' - ', line:GetPoint(i)) | |
384 end | |
385 tprint(' - ', line:GetSize()) | |
386 tprint(' - ', line:GetParent(), line:GetParent():IsVisible()) | |
387 tprint(' - ', line:IsVisible()) | |
388 --]] | |
389 | |
390 | |
316 | 391 |
317 | 392 |
318 -- fill in the text, then derive pixel-rounded height | 393 -- fill in the text, then derive pixel-rounded height |
319 line.status:SetText(text) | 394 line.status:SetText(text) |
320 line.height = floor(line.status:GetStringHeight()+.5) | 395 line.height = floor(line.status:GetStringHeight()+.5) |
321 | 396 |
322 -- For progressbar and timer lines, status text may be used as the title heading | 397 -- For progressbar and timer lines, status text may be used as the title heading |
323 if attachment then | 398 if attachment then |
399 attachment:SetPoint('TOP', line, 'TOP') | |
400 attachment:SetPoint('LEFT', line, 'LEFT', textIndent, 0) | |
401 attachment:SetPoint('RIGHT', line, 'RIGHT') | |
324 print(' |cFFFF0088doing things with a widget', attachment:GetSize()) | 402 print(' |cFFFF0088doing things with a widget', attachment:GetSize()) |
325 line.height = attachment:GetHeight() | 403 line.height = attachment:GetHeight() |
326 if text then | 404 if text then |
327 line.height = max(line.height, line.status:GetStringHeight()) | 405 line.height = max(line.height, line.status:GetStringHeight()) |
328 end | 406 end |
437 block.posIndex = #used | 515 block.posIndex = #used |
438 end | 516 end |
439 end | 517 end |
440 return block | 518 return block |
441 end | 519 end |
442 | |
443 | 520 |
444 | 521 |
445 | 522 |
446 ---------- | 523 ---------- |
447 --- Top level methods | 524 --- Top level methods |
526 end | 603 end |
527 for i = 1, Scroll:GetNumPoints() do | 604 for i = 1, Scroll:GetNumPoints() do |
528 print('|cFF00FF00 ', Scroll:GetPoint(i)) | 605 print('|cFF00FF00 ', Scroll:GetPoint(i)) |
529 end | 606 end |
530 | 607 |
608 if Devian and Devian.InWorkspace() then | |
609 Wrapper.AnimState:SetFormattedText(ANIM_STATE, animateReason) | |
610 end | |
611 | |
531 Wrapper:Show() | 612 Wrapper:Show() |
532 Scroller:Show() | 613 Scroller:Show() |
533 Scroll:Show() | 614 Scroll:Show() |
534 end | 615 end |
535 | 616 |