comparison ObjectiveFrame.lua @ 7:5301c68f28d8

TrackerBlock - use IsModifiedClick function to determine appropriate OnClick actions - handle 'CHATLINK' modifier - handle 'TOGGLEQUESTWATCH' modifier TrackerBlockObjectives - use a generic framework to manage frame creation for various criteria tracker types: - ProgressBar when Blizzard flag data indicates so - skip when Blizzard flag data indicates so - DynamicText otherwise - events related to the criteria are registered in the criteria frame, and unregistered when the frame is hidden, either by destruction of its parent or completion
author Nenue
date Fri, 01 Apr 2016 12:27:05 -0400
parents 589de8ea05b9
children 7923243ae972
comparison
equal deleted inserted replaced
6:589de8ea05b9 7:5301c68f28d8
81 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, 81 Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
82 }, 82 },
83 }, 83 },
84 Active = { 84 Active = {
85 Title = { 85 Title = {
86 Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, 1}, }, 86 Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .4}, },
87 Font = {titleFont, titleSize, titleOutline}, 87 Font = {titleFont, titleSize, titleOutline},
88 Spacing = titleSpacing, 88 Spacing = titleSpacing,
89 BackgroundFullWidth = true 89 BackgroundFullWidth = true
90 }, 90 },
91 Text = { 91 Text = {
92 Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, 1}, }, 92 Gradient = { MinColor = {0.2, .4, 1, 1}, MaxColor = {0.2, .4, 1, .2}, },
93 Font = {textFont, textSize, textOutline}, 93 Font = {textFont, textSize, textOutline},
94 Spacing = textSpacing, 94 Spacing = textSpacing,
95 BackgroundFullWidth = true 95 BackgroundFullWidth = true
96 } 96 }
97 }, 97 },
105 Gradient = { MinColor = {0, 1, 0, .25}, MaxColor = {0, 1, 0, 0.12}, }, 105 Gradient = { MinColor = {0, 1, 0, .25}, MaxColor = {0, 1, 0, 0.12}, },
106 Font = {textFont, textSize, textOutline}, Spacing = textSpacing, 106 Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
107 BackgroundFullWidth = true 107 BackgroundFullWidth = true
108 } 108 }
109 }, 109 },
110 CheevNormal = {
111
112 Title = {
113 Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
114 Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
115 },
116 Text = {
117 Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
118 Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
119 },
120 },
121 CheevComplete = {
122
123 Title = {
124 Gradient = { MinColor = {0.2, .4, 1, 0.45}, MaxColor = {.7, 0, 0.9, .19}},
125 Font = {titleFont, titleSize, titleOutline}, Spacing = titleSpacing,
126 },
127 Text = {
128 Gradient = { MinColor = {0.2, .4, 1, 0.25}, MaxColor = {.7, 0, 0.9, .12}},
129 Font = {textFont, textSize, textOutline}, Spacing = textSpacing,
130 },
131 }
110 } 132 }
111 } 133 }
112 134
113 local FontBank = { 135 local FontBank = {
114 ['Normal'] = VeneerCriteriaFontNormal, 136 ['Normal'] = VeneerCriteriaFontNormal,
135 end 157 end
136 end 158 end
137 159
138 local Scroller_OnMouseWheel = function(self, delta) 160 local Scroller_OnMouseWheel = function(self, delta)
139 local r = Scroll:GetHeight() - Scroller:GetHeight() 161 local r = Scroll:GetHeight() - Scroller:GetHeight()
140 local s = self:GetVerticalScroll() - delta * floor(r/5+.5) 162 local s = B.Conf.ObjectiveScroll - delta * floor(r/5+.5)
163 local from = self:GetVerticalScroll()
141 if r == 0 then return end 164 if r == 0 then return end
142 if s >= r then 165 if s >= r then
143 s = r 166 s = r
144 elseif s < 1 then 167 elseif s < 1 then
145 s = 0 168 s = 0
146 end 169 end
147 self:SetVerticalScroll(s) 170 self:SetVerticalScroll(s)
148 print(s, r, self:GetVerticalScroll()) 171 B.Conf.ObjectiveScroll = s
172 print('|cFF00FF00OnMouseWheel', 'from = ', from, 'scroll =', s, ' range =', r, 'current =', self:GetVerticalScroll())
149 173
150 mod.UpdateActionButtons('SCROLLING') 174 mod.UpdateActionButtons('SCROLLING')
151 end 175 end
152 176
153 local WrapperCloseButton_OnClick = function(self) 177 local WrapperCloseButton_OnClick = function(self)
320 end 344 end
321 block.title:SetSpacing(titleSpacing) 345 block.title:SetSpacing(titleSpacing)
322 block.objectives:SetSpacing(textSpacing) 346 block.objectives:SetSpacing(textSpacing)
323 block.objectives:SetWordWrap(true) 347 block.objectives:SetWordWrap(true)
324 348
325 local titleHeight, textHeight = block.title:GetStringHeight(), block.objectives:GetStringHeight() 349 local titleHeight, textHeight = block.title:GetStringHeight(), block.objectives:GetStringHeight() + block.attachmentHeight
326 local blockHeight = titleHeight + titleSpacing2 + textHeight + textSpacing2 350 local blockHeight = titleHeight + titleSpacing2 + textHeight + textSpacing2
327 local blockWidth = wrapperMaxWidth 351 local blockWidth = wrapperMaxWidth
328 352
329 block.titlebg:SetSize(min(w1, w2), titleHeight + titleSpacing2) 353 block.titlebg:SetSize(min(w1, w2), titleHeight + titleSpacing2)
330 block.bg:SetSize(w1, textHeight + textSpacing2) 354 block.bg:SetSize(w1, textHeight + textSpacing2)
385 if info.questLogIndex then handler.LogBlock[info.questLogIndex] = t end 409 if info.questLogIndex then handler.LogBlock[info.questLogIndex] = t end
386 if info.watchIndex then handler.WatchBlock[info.watchIndex] = t end 410 if info.watchIndex then handler.WatchBlock[info.watchIndex] = t end
387 411
388 info.blockIndex = blockIndex 412 info.blockIndex = blockIndex
389 handler.BlockInfo[blockIndex] = info 413 handler.BlockInfo[blockIndex] = info
414
390 t.Select = handler.Select 415 t.Select = handler.Select
391 t.Open = handler.Open 416 t.Open = handler.Open
392 t.Remove = handler.Remove 417 t.Remove = handler.Remove
393 t.Link = handler.Link 418 t.Link = handler.Link
394 t:SetScript('OnMouseUp', handler.OnMouseUp) 419 t:SetScript('OnMouseUp', handler.OnMouseUp)
395 t:SetScript('OnMouseDown', handler.OnMouseDown) 420 t:SetScript('OnMouseDown', handler.OnMouseDown)
396 t.title:SetText(info.title) 421 t.title:SetText(info.title)
397 422
423 t.attachmentHeight = 0
398 if info.isComplete then 424 if info.isComplete then
399 t.objectives:Show() 425 t.objectives:Show()
400 t.objectives:SetText(info.completionText) 426 t.objectives:SetText(info.completionText)
401 elseif info.numObjectives >= 1 then 427 elseif info.numObjectives >= 1 then
428 t.attachmentHeight = textSpacing
402 t.objectives:Show() 429 t.objectives:Show()
403 print(' - objective lines:', info.numObjectives, 'can wrap:', t.objectives:CanWordWrap()) 430 print(' - objective lines:', info.numObjectives, 'can wrap:', t.objectives:CanWordWrap())
404 431
405 local text = '' 432 local text = ''
406 if info.description then
407 print(' -- has description text:', select('#', info.description), info.description)
408 text = info.description
409 end
410 433
411 --- todo: implement objective displays 434 --- todo: implement objective displays
412 -- in an accumulator loop, call upon handler for the appropriate display frame, each defining: 435 -- in an accumulator loop, call upon handler for the appropriate display frame, each defining:
413 -- * height of whatever display widget is involved in conveying the task 436 -- * height of whatever display widget is involved in conveying the task
414 -- * number of non-wrapped text lines to account for line space; may be discarded depending on things 437 -- * number of non-wrapped text lines to account for line space; may be discarded depending on things
452 print(' |cFF00FFFF)|r -> ', t, t:GetHeight()) 475 print(' |cFF00FFFF)|r -> ', t, t:GetHeight())
453 return t 476 return t
454 end 477 end
455 478
456 mod.UpdateObjectives = function(block, info, text) 479 mod.UpdateObjectives = function(block, info, text)
457 local attachmentHeight = 0 480 local attachmentHeight = block.attachmentHeight
481 if info.description then
482 print(' -- has description text:', select('#', info.description), info.description)
483 text = info.description
484 end
458 for o, obj in ipairs(info.objectives) do 485 for o, obj in ipairs(info.objectives) do
459 --- achievement criteria 486 --- achievement criteria
460 if obj.flags then 487 if obj.flags then
461 488
462 489
463 if bit.band(obj.flags, 0x00000001) > 0 then 490 if bit.band(obj.flags, 0x00000001) > 0 then
464 obj.type = 'ProgressBar' 491 obj.type = 'ProgressBar'
465 obj.widget = mod.SetWidget(obj, info)
466 elseif bit.band(obj.flags, 0x00000002) then 492 elseif bit.band(obj.flags, 0x00000002) then
467 obj.type = 'Hidden' 493 obj.type = 'Hidden'
468 obj.widget = nil 494 obj.widget = nil
469 else 495 else
470 obj.type = 'Text' 496 obj.type = 'Text'
471 obj.widget = nil 497 obj.widget = nil
472 text = text .. ((text == '') and "" or "\n") .. obj.text 498 text = text .. ((text == '') and "" or "\n") .. obj.text
473 end 499 end
474 500
475 print(obj.type, obj.text, obj.quantityString) 501 print('obj.type =', obj.type)
502 print(' ** qtyStr:', obj.quantityString, 'qty:', obj.quantity, 'assetID:', obj.assetID)
503 obj.widget = mod.SetWidget(obj, info)
476 --- none of the above (most quests) 504 --- none of the above (most quests)
477 else 505 else
478 local line = obj.text 506 local line = obj.text
479 local color = '00FFFF' 507 local color = '00FFFF'
480 if obj.finished then 508 if obj.finished then
488 end 516 end
489 text = text .. ((text == '') and "" or "\n") .. '|cFF'..color.. line .. '|r' 517 text = text .. ((text == '') and "" or "\n") .. '|cFF'..color.. line .. '|r'
490 end 518 end
491 519
492 if obj.widget then 520 if obj.widget then
521
522 obj.widget:Show()
523 obj.widget:SetPoint('TOPLEFT', block.objectives, 'BOTTOMLEFT', 0, -attachmentHeight)
524 print('have a widget, height is', obj.widget.height)
493 attachmentHeight = attachmentHeight + obj.widget.height 525 attachmentHeight = attachmentHeight + obj.widget.height
494 end 526 end
495 527
496 end 528 end
497 return attachmentHeight, text 529 return attachmentHeight, text
618 650
619 Scroller:SetSize(wrapperWidth, wrapperHeight) 651 Scroller:SetSize(wrapperWidth, wrapperHeight)
620 Scroller:SetPoint('TOPLEFT', Wrapper, 'TOPLEFT', 0, -headerHeight) 652 Scroller:SetPoint('TOPLEFT', Wrapper, 'TOPLEFT', 0, -headerHeight)
621 Scroller:SetPoint('BOTTOMRIGHT', Wrapper, 'BOTTOMRIGHT') 653 Scroller:SetPoint('BOTTOMRIGHT', Wrapper, 'BOTTOMRIGHT')
622 654
655
623 Scroll:SetSize(scrollWidth, scrollHeight) 656 Scroll:SetSize(scrollWidth, scrollHeight)
624 Scroll:SetPoint('TOPLEFT', Scroller, 'TOPLEFT', 0, 0) 657 Scroll:SetPoint('TOPLEFT', Scroller, 'TOPLEFT', 0, B.Conf.ObjectiveScroll or 0)
625 Scroll:SetPoint('RIGHT', Scroller, 'RIGHT') 658 Scroll:SetPoint('RIGHT', Scroller, 'RIGHT')
626 659
627 --Scroller:UpdateScrollChildRect() 660 --Scroller:UpdateScrollChildRect()
628 Wrapper:SetSize(wrapperWidth, wrapperHeight + headerHeight) 661 Wrapper:SetSize(wrapperWidth, wrapperHeight + headerHeight)
629 662