Mercurial > wow > buffalo2
comparison ObjectiveTracker/Frame.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 | 9856ebc63fa4 |
| children | a487841050be |
comparison
equal
deleted
inserted
replaced
| 34:9856ebc63fa4 | 35:69d03f8e293e |
|---|---|
| 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 Module = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | 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 | 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 | 9 local IsResting, UnitXP, UnitXPMax, GetXPExhaustion, tinsert, tremove = IsResting, UnitXP, UnitXPMax, GetXPExhaustion, table.insert, table.remove |
| 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 = Module.DefaultHandler, Module.AutoQuest, Module.Quest, Module.Bonus, Module.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 print = B.print('Tracker') | 16 local print = B.print('Layout') |
| 17 local oprint = B.print('Objectives') | 17 local oprint = B.print('Objectives') |
| 18 local bprint = B.print('Block') | 18 local bprint = B.print('Block') |
| 19 local tprint = B.print('Tracker') | 19 local tprint = B.print('Tracker') |
| 20 local lprint = B.print('Line') | 20 local lprint = B.print('Layout') |
| 21 local unitLevel = 1 | 21 local unitLevel = 1 |
| 22 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON | 22 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON |
| 23 local debug = false | 23 local debug = false |
| 24 | 24 |
| 25 --- FRAMES | 25 --- FRAMES |
| 26 local Wrapper = _G.VeneerObjectiveWrapper | 26 local Wrapper = _G.VeneerObjectiveWrapper |
| 27 local Scroller = Wrapper.scrollArea | 27 local Scroller = Wrapper.scrollArea |
| 28 local Scroll = _G.VeneerObjectiveScroll | 28 local Scroll = _G.VeneerObjectiveScroll |
| 29 local orderedHandlers = Module.orderedHandlers | 29 local orderedHandlers = T.orderedHandlers |
| 30 local orderedNames = Module.orderedNames | 30 local orderedNames = T.orderedNames |
| 31 | 31 |
| 32 --- FRAME TEMP VARIABLES | 32 --- FRAME TEMP VARIABLES |
| 33 local wrapperWidth, wrapperHeight | 33 local wrapperWidth, wrapperHeight |
| 34 local scrollWidth, scrollHeight | 34 local scrollWidth, scrollHeight |
| 35 | 35 |
| 61 | 61 |
| 62 local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225} | 62 local selectionbg = {'HORIZONTAL', 1, 1, 1, 0, 1, 1, 1, 0.225} |
| 63 local titleSpacing, textSpacing, blockSpacing = 3, 3, 1 | 63 local titleSpacing, textSpacing, blockSpacing = 3, 3, 1 |
| 64 local titleIndent, textIndent,selectionIndent = 2, 5, 50 | 64 local titleIndent, textIndent,selectionIndent = 2, 5, 50 |
| 65 --- END SCHEMA | 65 --- END SCHEMA |
| 66 local blockPosition | |
| 67 | |
| 66 --- schema swapper | 68 --- schema swapper |
| 67 Module.UpdateSchema = function(layer, newSchema) | 69 T.UpdateSchema = function(layer, newSchema) |
| 68 if not (Module.Conf.Schema[layer] and Module.Conf.Schema[layer][newSchema]) then | 70 if not (T.Conf.Schema[layer] and T.Conf.Schema[layer][newSchema]) then |
| 69 return | 71 return |
| 70 elseif schemaName[layer] == newSchema then | 72 elseif schemaName[layer] == newSchema then |
| 71 return | 73 return |
| 72 end | 74 end |
| 73 lastSchema[layer] = schemaName[layer] | 75 lastSchema[layer] = schemaName[layer] |
| 74 schemaName[layer] = newSchema | 76 schemaName[layer] = newSchema |
| 75 local c = Module.Conf.Schema[layer][newSchema] | 77 local c = T.Conf.Schema[layer][newSchema] |
| 76 | 78 |
| 77 if layer == 'tracker' then | 79 if layer == 'tracker' then |
| 78 headerHeight, headerSpacing = c.headerHeight, c.headerSpacing | 80 headerHeight, headerSpacing = c.headerHeight, c.headerSpacing |
| 79 headerColor = c.headerColor | 81 headerColor = c.headerColor |
| 80 headerbg = c.headerbg | 82 headerbg = c.headerbg |
| 97 textColor = c.textColor | 99 textColor = c.textColor |
| 98 lineSchema = newSchema | 100 lineSchema = newSchema |
| 99 end | 101 end |
| 100 print('|cFFFF0088UpdateSchema:|r', layer, lastSchema[layer], '->', newSchema) | 102 print('|cFFFF0088UpdateSchema:|r', layer, lastSchema[layer], '->', newSchema) |
| 101 end | 103 end |
| 104 -- todo: figure out why objectives go invisible | |
| 105 local anchorPoint, anchorFrame | |
| 106 local abs, GetTime = math.abs, GetTime | |
| 107 Default.AddTracker = function(handler, frame, index) | |
| 108 if index == 1 then | |
| 109 print('|cFF00FF00### beginning wrapper layout -----------------') | |
| 110 anchorPoint, anchorFrame = 'TOP', Scroll | |
| 111 wrapperHeight = 0 | |
| 112 end | |
| 113 | |
| 114 frame.destinationOffset = -wrapperHeight | |
| 115 print(frame.destinationOffset, frame.previousOffset) | |
| 116 if handler.initialized and (abs(frame.previousOffset - frame.destinationOffset) > 0.9) and frame:IsVisible() then | |
| 117 if frame.wasEmpty then | |
| 118 frame.previousOffset = -Wrapper:GetHeight() | |
| 119 end | |
| 120 | |
| 121 local postFrame, postPoint = anchorFrame, anchorPoint | |
| 122 local delta = frame.destinationOffset - frame.previousOffset | |
| 123 local _, _, _, _, offset = frame:GetPoint(1) | |
| 124 print(' |cFF00FFBBpushing', frame:GetName(), delta, 'pixels, from', frame.previousOffset, '(', offset, ')') | |
| 125 frame.SlideIn.translation:SetTarget(frame) | |
| 126 frame.SlideIn.translation:SetOffset(0, delta) | |
| 127 frame.SlideIn:Play() | |
| 128 --for i, b in ipairs(handler.usedBlocks) do | |
| 129 --b.SlideIn.translation:SetOffset(0, delta) | |
| 130 -- b.SlideIn:Play() | |
| 131 --end | |
| 132 local start = GetTime() | |
| 133 frame.SlideIn:SetScript('OnFinished', function() | |
| 134 print(' |cFF00BBFF'..frame:GetName(), 'moved', delta, 'over duration of ', GetTime()-start) | |
| 135 frame:SetParent(Scroll) | |
| 136 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset) | |
| 137 frame.previousOffset = frame.destinationOffset | |
| 138 frame.SlideIn:SetScript('OnFinished', nil) | |
| 139 if Wrapper.destinationHeight then | |
| 140 Wrapper:SetHeight(Wrapper.destinationHeight) | |
| 141 Scroller:SetHeight(Wrapper.destinationHeight) | |
| 142 Scroll:SetHeight(Wrapper.destinationHeight) | |
| 143 Wrapper.previousHeight = Wrapper.destinationHeight | |
| 144 Wrapper.destinationHeight = nil | |
| 145 end | |
| 146 | |
| 147 end) | |
| 148 else | |
| 149 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint, '|rcurrent frame height:', frame.height) | |
| 150 print(' |cFFFF0088total height:', wrapperHeight) | |
| 151 frame:ClearAllPoints() | |
| 152 frame:SetParent(Scroll) | |
| 153 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset) | |
| 154 frame.previousOffset = frame.destinationOffset | |
| 155 handler.initialized = true | |
| 156 end | |
| 157 | |
| 158 frame.title:SetFont(headerFont, headerSize, headerOutline) | |
| 159 frame.titlebg:SetHeight(headerHeight) | |
| 160 frame.title:SetTextColor(unpack(headerColor)) | |
| 161 | |
| 162 if frame.height ~= frame.previousHeight then | |
| 163 frame:SetHeight(frame.height) | |
| 164 end | |
| 165 | |
| 166 frame:Show() | |
| 167 if frame.wasEmpty then | |
| 168 frame.headerFade:Play() | |
| 169 frame.wasEmpty = nil | |
| 170 end | |
| 171 | |
| 172 wrapperHeight = wrapperHeight + frame.height | |
| 173 anchorFrame = handler.frame | |
| 174 anchorPoint = 'BOTTOM' | |
| 175 | |
| 176 end | |
| 102 | 177 |
| 103 Default.AddBlock = function(self, block, blockIndex) | 178 Default.AddBlock = function(self, block, blockIndex) |
| 104 local blockIndex = blockIndex or (self.currentBlock + 1) | 179 local blockIndex = blockIndex or (self.currentBlock + 1) |
| 105 local print = bprint | 180 local print = bprint |
| 106 local tracker = self.frame | 181 local tracker = self.frame |
| 107 local info = block.info | 182 local info = block.info |
| 108 | 183 |
| 184 block.index = blockIndex | |
| 185 | |
| 109 if blockSchema ~= block.schema then | 186 if blockSchema ~= block.schema then |
| 110 print('new schema detected, applicating...') | 187 print('new schema detected, applicating...') |
| 111 block.schema = blockSchema | 188 block.schema = blockSchema |
| 112 block:SetWidth(Module.Conf.Wrapper.Width) | 189 block:SetWidth(T.Conf.Wrapper.Width) |
| 113 block.title:SetSpacing(titleSpacing) | 190 block.title:SetSpacing(titleSpacing) |
| 114 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) | 191 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) |
| 115 block.title:SetPoint('LEFT', block, 'LEFT', titleIndent, 0) | 192 block.title:SetPoint('LEFT', block, 'LEFT', titleIndent, 0) |
| 116 block.titlebg:SetTexture(1,1,1,1) | 193 block.titlebg:SetTexture(1,1,1,1) |
| 117 block.titlebg:SetGradientAlpha(unpack(titlebg)) | 194 block.titlebg:SetGradientAlpha(unpack(titlebg)) |
| 137 block.rewardLabel[i]:SetPoint('TOP', tile, 'TOP', 0, 0) | 214 block.rewardLabel[i]:SetPoint('TOP', tile, 'TOP', 0, 0) |
| 138 anchor, target, point, x, y = 'TOPRIGHT', tile, 'TOPLEFT', -2, 0 | 215 anchor, target, point, x, y = 'TOPRIGHT', tile, 'TOPLEFT', -2, 0 |
| 139 end | 216 end |
| 140 end | 217 end |
| 141 | 218 |
| 219 | |
| 220 local titleHeight = floor(block.title:GetHeight()+.5) | |
| 221 local titlebgHeight = titleHeight + titleSpacing*2 | |
| 222 block.titlebg:SetHeight(titlebgHeight) | |
| 223 | |
| 224 local statusHeight = floor(block.status:GetHeight()+.5) | |
| 225 local statusbgHeight = statusHeight + textSpacing*2 | |
| 226 local attachmentHeight =floor(block.attachmentHeight + .5) | |
| 227 | |
| 228 print(' |cFF0088FFanchor to', self.currentAnchor:GetName()) | |
| 229 print(' |cFF00FF00attachment:|r', attachmentHeight, '|cFF00FF00title:|r', titlebgHeight, '('.. titleHeight..')') | |
| 230 if attachmentHeight > 0 then | |
| 231 attachmentHeight = attachmentHeight + textSpacing | |
| 232 end | |
| 233 | |
| 234 block.height = titlebgHeight + attachmentHeight | |
| 235 block:SetHeight(block.height) | |
| 236 | |
| 142 if block.debug then | 237 if block.debug then |
| 143 local func = (B.Conf.GuidesMode == true) and 'Show' or 'Hide' | 238 local func = (B.Conf.GuidesMode == true) and 'Show' or 'Hide' |
| 144 for _, region in ipairs(block.debug) do | 239 for _, region in ipairs(block.debug) do |
| 145 region[func]() | 240 region[func]() |
| 146 end | 241 end |
| 147 end | 242 end |
| 148 | 243 |
| 149 -- positioned by offset since they tend to swap contents | 244 --- Handler vars |
| 150 block.index = blockIndex | 245 if blockIndex == 1 then |
| 151 block:SetPoint('TOPLEFT', self.frame, 'TOPLEFT', 0, block.offset) | 246 tracker.previousHeight = tracker.height |
| 152 block:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) | 247 tracker.height = headerHeight |
| 248 blockPosition = -headerHeight | |
| 249 tprint(' |cFF88FF00AddBlock:|r new layout: headerHeight =', headerHeight, 'previousHeight =', tracker.previousHeight) | |
| 250 else | |
| 251 blockPosition = blockPosition | |
| 252 tprint(' |cFF8888FFAddBlock:|r advancing: height =', tracker.height) | |
| 253 end | |
| 153 self.currentBlock = blockIndex | 254 self.currentBlock = blockIndex |
| 154 self.currentAnchor = block | 255 self.currentAnchor = block |
| 256 | |
| 257 block:SetPoint('TOPLEFT', self.frame, 'TOPLEFT', 0, blockPosition) | |
| 258 block:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) | |
| 259 self.numBlocks = self.numBlocks + 1 | |
| 155 print(' |cFFFFFF00'..tracker.height..'|r', '|cFF00FF00'..block:GetName()..'|r', block.height, tracker.height) | 260 print(' |cFFFFFF00'..tracker.height..'|r', '|cFF00FF00'..block:GetName()..'|r', block.height, tracker.height) |
| 156 tracker.height = tracker.height + block.height | 261 tracker.height = tracker.height + block.height |
| 157 self.actualBlocks = self.actualBlocks + 1 | 262 blockPosition = blockPosition - block.height |
| 158 end | 263 end |
| 159 | 264 |
| 160 --- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons) | 265 --- Used as an iterator of sorts for cascaded tag icon placements (the daily/faction/account icons) |
| 161 Default.AddTag = function (handler, block, tagInfo, tagPoint, tagAnchor, tagRelative) | 266 Default.AddTag = function (handler, block, tagInfo, tagPoint, tagAnchor, tagRelative) |
| 162 local print = bprint | 267 local print = bprint |
| 180 Default.AddLine = function(handler, block, text, attachment, template) | 285 Default.AddLine = function(handler, block, text, attachment, template) |
| 181 local print = lprint | 286 local print = lprint |
| 182 local lineIndex = block.currentLine + 1 | 287 local lineIndex = block.currentLine + 1 |
| 183 local line = handler:GetLine(block, lineIndex) | 288 local line = handler:GetLine(block, lineIndex) |
| 184 line.index = lineIndex | 289 line.index = lineIndex |
| 185 if line.schema ~= template then | 290 if template then |
| 186 print(' |cFF00FF00change schema', template) | 291 if line.schema ~= template then |
| 187 Module.UpdateSchema('line', template) | 292 print(' |cFF00FF00change schema', template) |
| 188 line.status:SetSpacing(textSpacing) | 293 T.UpdateSchema('line', template) |
| 189 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) | 294 line.status:SetSpacing(textSpacing) |
| 190 line.status:SetPoint('RIGHT', line, 'RIGHT', -textIndent, 0) | 295 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) |
| 191 line.status:SetTextColor(unpack(textColor)) | 296 line.status:SetPoint('RIGHT', line, 'RIGHT',0, 0) |
| 192 line.schema = template | 297 line.status:SetTextColor(unpack(textColor)) |
| 193 else | 298 line.schema = template |
| 194 print(' |cFFFFFF00keep schema', template) | 299 else |
| 300 print(' |cFFFFFF00keep schema', line.schema) | |
| 301 end | |
| 195 end | 302 end |
| 196 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing) | 303 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, -textSpacing) |
| 197 line:Show() | 304 line:Show() |
| 198 | 305 |
| 199 | 306 |
| 200 print(' |cFF0088FFAddLine >>|r', block, '::', block.endPoint:GetName(),'"'.. text .. '"', attachment, template) | 307 tprint(' |cFF0088FFAddLine|r (|cFF00FFFF'..tostring(line.schema)..'|r):', line:GetName()) |
| 201 | 308 |
| 202 | 309 |
| 203 -- fill in the text, then derive pixel-rounded height | 310 -- fill in the text, then derive pixel-rounded height |
| 204 line.status:SetText(text) | 311 line.status:SetText(text) |
| 205 line.height = floor(line.status:GetStringHeight()+.5) | 312 line.height = floor(line.status:GetStringHeight()+.5) |
| 206 | 313 |
| 207 -- For progressbar and timer lines, status text may be used as the title heading | 314 -- For progressbar and timer lines, status text may be used as the title heading |
| 208 if attachment then | 315 if attachment then |
| 209 print(' |cFFFF0088doing things with a widget', attachment:GetSize()) | 316 print(' |cFFFF0088doing things with a widget', attachment:GetSize()) |
| 210 line.height = attachment:GetHeight() | 317 line.height = attachment:GetHeight() |
| 211 if text then | 318 if text then |
| 212 line.height = max(line.height, line.status:GetStringHeight()) | 319 line.height = max(line.height, line.status:GetStringHeight()) |
| 213 end | 320 end |
| 214 if attachment.status:GetText() then | 321 if attachment.status:GetText() then |
| 217 attachment:Show() | 324 attachment:Show() |
| 218 end | 325 end |
| 219 | 326 |
| 220 line:SetHeight(line.height) | 327 line:SetHeight(line.height) |
| 221 block.attachmentHeight = block.attachmentHeight + line.height + textSpacing | 328 block.attachmentHeight = block.attachmentHeight + line.height + textSpacing |
| 222 print(' |cFF0088FFsetting line #'..lineIndex..' for|r', block.info.title, "\n |cFF0088FFsize:|r", line.height, | 329 |
| 223 "|cFF0088FFpoint:|r", line:GetPoint(1), "|cFF0088FFwidget:|r", (line.widget and 'Y' or 'N')) | 330 local debug_points = '' |
| 331 for i = 1, line:GetNumPoints() do | |
| 332 local point, parent, anchor = line:GetPoint(i) | |
| 333 debug_points = debug_points .. tostring(parent:GetName()) .. ', ' .. anchor .. ' ' | |
| 334 end | |
| 335 | |
| 336 print(' |cFF0088FFsetting line #'..lineIndex..' for|r', block.info.title, "\n |cFF0088FFsize:|r", line.height, | |
| 337 "|cFF0088FFpoint:|r", debug_points, "|cFF0088FFwidget:|r", (line.widget and 'Y' or 'N')) | |
| 224 block.currentLine = lineIndex | 338 block.currentLine = lineIndex |
| 225 block.endPoint = line.statusbg -- edge used for the next block | 339 block.endPoint = line.statusbg -- edge used for the next block |
| 226 | 340 |
| 227 return lineIndex | 341 return lineIndex |
| 228 end | 342 end |
| 243 print(' |cFF00FF88created line #'..lineIndex..' from for '..handler.name..' block #'..blockIndex) | 357 print(' |cFF00FF88created line #'..lineIndex..' from for '..handler.name..' block #'..blockIndex) |
| 244 lines[lineIndex] = CreateFrame('Frame', 'Vn'..handler.name .. blockIndex..'ObjectiveLine'..lineIndex, block, 'VeneerTrackerObjective') | 358 lines[lineIndex] = CreateFrame('Frame', 'Vn'..handler.name .. blockIndex..'ObjectiveLine'..lineIndex, block, 'VeneerTrackerObjective') |
| 245 local line = lines[lineIndex] | 359 local line = lines[lineIndex] |
| 246 line.index = lineIndex | 360 line.index = lineIndex |
| 247 line.height = 0 | 361 line.height = 0 |
| 362 line.schema = 'default' | |
| 248 B.SetConfigLayers(line) | 363 B.SetConfigLayers(line) |
| 249 | 364 |
| 250 if debug then | 365 if debug then |
| 251 for _, region in ipairs(lines[lineIndex].debug) do | 366 for _, region in ipairs(lines[lineIndex].debug) do |
| 252 region:Show() | 367 region:Show() |
| 261 | 376 |
| 262 --- Creates or retrieves a complete block frame object | 377 --- Creates or retrieves a complete block frame object |
| 263 --- todo: make it use data index to avoid re-coloring every block | 378 --- todo: make it use data index to avoid re-coloring every block |
| 264 Default.GetBlock = function(handler, logIndex) | 379 Default.GetBlock = function(handler, logIndex) |
| 265 local print = bprint | 380 local print = bprint |
| 266 print('|cFFFFFF00getting a block for logID', logIndex ..',', #handler.usedBlocks,'used', #handler.freeBlocks, 'free') | 381 print('|cFF0088FFgetting a block for logID', logIndex ..',', #handler.usedBlocks,'used', #handler.freeBlocks, 'free') |
| 267 local block = handler.LogBlock[logIndex] | 382 local block = handler.LogBlock[logIndex] |
| 383 local used = handler.usedBlocks | |
| 268 | 384 |
| 269 if not block then | 385 if not block then |
| 270 if #handler.freeBlocks >= 1 then | 386 if #handler.freeBlocks >= 1 then |
| 271 block = tremove(handler.freeBlocks) | 387 block = tremove(handler.freeBlocks) |
| 272 print(' assigning from free heap|cFF00FFFF', block:GetName()) | 388 tinsert(handler.usedBlocks, block) |
| 389 block.posIndex = #handler.usedBlocks | |
| 390 print(' |cFF00FF00 assigning from free heap', block:GetName()) | |
| 273 else | 391 else |
| 274 | 392 |
| 275 local blockIndex = handler.numBlocks + 1 | 393 local blockIndex = (#handler.usedBlocks + #handler.freeBlocks) + 1 |
| 276 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, handler.frame, 'VeneerTrackerBlock') | 394 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, handler.frame, 'VeneerTrackerBlock') |
| 395 --block:SetParent() | |
| 277 block.lines = {} | 396 block.lines = {} |
| 278 block.numLines = 0 | 397 block.numLines = 0 |
| 279 block.currentLine = 0 | 398 block.currentLine = 0 |
| 280 block.attachmentHeight = 0 | 399 block.attachmentHeight = 0 |
| 400 block.offset = 0 | |
| 281 B.SetConfigLayers(block) | 401 B.SetConfigLayers(block) |
| 282 --- methods for event handlers | 402 --- methods for event handlers |
| 283 | 403 |
| 284 block.Select = handler.Select | 404 block.Select = handler.Select |
| 285 block.Open = handler.Open | 405 block.Open = handler.Open |
| 287 block.Link = handler.Link | 407 block.Link = handler.Link |
| 288 block.clickZone:SetScript('OnMouseUp', function(self, ...) handler.OnMouseUp(block, ...) end) | 408 block.clickZone:SetScript('OnMouseUp', function(self, ...) handler.OnMouseUp(block, ...) end) |
| 289 block.clickZone:SetScript('OnMouseDown', function(self, ...) handler.OnMouseDown(block, ...) end) | 409 block.clickZone:SetScript('OnMouseDown', function(self, ...) handler.OnMouseDown(block, ...) end) |
| 290 block:ClearAllPoints() | 410 block:ClearAllPoints() |
| 291 block.index = blockIndex | 411 block.index = blockIndex |
| 292 handler.numBlocks = max(handler.numBlocks, blockIndex) | 412 print(' |cFF00FFBBcreating new|r', block:GetName()) |
| 293 | |
| 294 print(' |cFFFFFF00creating new|r', block:GetName()) | |
| 295 end | 413 end |
| 296 handler.LogBlock[logIndex] = block | 414 handler.LogBlock[logIndex] = block |
| 297 tinsert(handler.usedBlocks, block) | 415 tinsert(handler.usedBlocks, block) |
| 416 block.posIndex = #handler.usedBlocks | |
| 298 else | 417 else |
| 299 print(' |cFFFFFF00use existing block|r', block:GetName()) | 418 print(' |cFFFFFF00use existing block|r', block:GetName()) |
| 419 local found = false | |
| 420 for i, entry in ipairs(used) do | |
| 421 if entry == block then | |
| 422 found = true | |
| 423 break | |
| 424 end | |
| 425 end | |
| 426 if not found then | |
| 427 tinsert(used, block) | |
| 428 block.posIndex = #used | |
| 429 end | |
| 300 end | 430 end |
| 301 return block | 431 return block |
| 302 end | 432 end |
| 303 | 433 |
| 304 local currentPosition, anchorFrame, anchorPoint | 434 |
| 305 --- Positioning and stuff | 435 |
| 306 local tick = 0 | 436 |
| 307 local firstUpdate = true | |
| 308 function Module:Update (reason, ...) | |
| 309 if not B.Conf.VeneerObjectiveWrapper.enabled then | |
| 310 return | |
| 311 end | |
| 312 | |
| 313 tick = tick + 1 | |
| 314 if firstUpdate or not reason then | |
| 315 reason = _G.OBJECTIVE_TRACKER_UPDATE_ALL | |
| 316 end | |
| 317 | |
| 318 local print = tprint | |
| 319 local updateWrapper = 0 | |
| 320 local hasStuff | |
| 321 local insertingStuff | |
| 322 | |
| 323 print(format('|cFFBB0066Update:|r |cFFFF%04X%d|r ', tick, lshift(reason, 4)), reason, ...) | |
| 324 currentPosition = 0 | |
| 325 anchorPoint = 'TOP' | |
| 326 anchorFrame = Scroll | |
| 327 | |
| 328 local wrapperHeight = 0 | |
| 329 for id, handler in pairs(Module.orderedHandlers) do | |
| 330 local frame = handler.frame | |
| 331 | |
| 332 | |
| 333 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then | |
| 334 handler:UpdateTracker(reason, ...) | |
| 335 insertingStuff = true | |
| 336 else | |
| 337 print(' |cFFFF0088'..id..'|r', 'no reason to update') | |
| 338 end | |
| 339 | |
| 340 if handler.numWatched >= 1 then | |
| 341 | |
| 342 print(format('|cFF88FFBB%s and(%04X, %04x+%04x) = %04X|r', handler.name, reason, handler.updateReasonModule, handler.updateReasonEvents, band(reason, handler.updateReasonModule + handler.updateReasonEvents))) | |
| 343 hasStuff = true | |
| 344 currentPosition = currentPosition + 1 | |
| 345 frame.destinationOffset = -wrapperHeight | |
| 346 if (not firstUpdate) and frame.previousOffset ~= wrapperHeight and frame:IsVisible() then | |
| 347 print(frame.SlideIn.translation) | |
| 348 local postFrame, postPoint = anchorFrame, anchorPoint | |
| 349 local delta = frame.destinationOffset - frame.previousOffset | |
| 350 local _, _, _, _, offset = frame:GetPoint(1) | |
| 351 print(' |cFF00BBFFstart slide for', delta, 'pixels, from', frame.previousOffset, '(', offset, ')') | |
| 352 frame.SlideIn.translation:SetTarget(frame) | |
| 353 frame.SlideIn.translation:SetOffset(0, delta) | |
| 354 frame.SlideIn:Play() | |
| 355 for i, b in ipairs(handler.usedBlocks) do | |
| 356 b.SlideIn.translation:SetOffset(0, delta) | |
| 357 b.SlideIn:Play() | |
| 358 end | |
| 359 local start = GetTime() | |
| 360 frame.SlideIn:SetScript('OnFinished', function() | |
| 361 print(' |cFF00BBFFsliding finished:', delta, 'pixels covered; duration:', GetTime()-start) | |
| 362 frame:SetParent(Scroll) | |
| 363 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset) | |
| 364 frame.previousOffset = frame.destinationOffset | |
| 365 frame.SlideIn:SetScript('OnFinished', nil) | |
| 366 if Wrapper.destinationHeight then | |
| 367 Wrapper:SetHeight(Wrapper.destinationHeight) | |
| 368 Scroller:SetHeight(Wrapper.destinationHeight) | |
| 369 Scroll:SetHeight(Wrapper.destinationHeight) | |
| 370 Wrapper.previousHeight = Wrapper.destinationHeight | |
| 371 Wrapper.destinationHeight = nil | |
| 372 end | |
| 373 | |
| 374 end) | |
| 375 else | |
| 376 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint, '|rcurrent frame height:', frame.height) | |
| 377 print(' |cFFFF0088total height:', wrapperHeight) | |
| 378 frame:SetParent(Scroll) | |
| 379 frame:SetPoint('TOP', Scroll, 'TOP', 0, frame.destinationOffset) | |
| 380 end | |
| 381 | |
| 382 frame:Show() | |
| 383 anchorFrame = handler.frame | |
| 384 anchorPoint = 'BOTTOM' | |
| 385 | |
| 386 wrapperHeight = wrapperHeight + frame.height | |
| 387 else | |
| 388 | |
| 389 print(' |cFFFF4400GetNumWatched:|r',handler.name, '0') | |
| 390 frame:SetPoint('TOP', Scroll, 'TOP', 0, 0) | |
| 391 frame.destinationOffset = 0 | |
| 392 frame.previousOffset = 0 | |
| 393 handler.frame:Hide() | |
| 394 end | |
| 395 end | |
| 396 | |
| 397 | |
| 398 if hasStuff or insertingStuff then | |
| 399 print('updating height to', wrapperHeight) | |
| 400 if wrapperHeight > Wrapper.previousHeight then | |
| 401 Wrapper:SetHeight(wrapperHeight) | |
| 402 Scroller:SetHeight(wrapperHeight) | |
| 403 Scroll:SetHeight(wrapperHeight) | |
| 404 Wrapper.previousHeight = wrapperHeight | |
| 405 Wrapper.destinationHeight = wrapperHeight | |
| 406 end | |
| 407 Scroller:SetVerticalScroll(B.Conf.ObjectiveScroll or 0) | |
| 408 print('|cFFFF8800Wrapper:', Wrapper:GetSize()) | |
| 409 for i = 1, Wrapper:GetNumPoints() do | |
| 410 print(' ', Wrapper:GetPoint(i)) | |
| 411 end | |
| 412 print(' |cFF00FFFFScroller:', Scroller:GetSize()) | |
| 413 for i = 1, Scroller:GetNumPoints() do | |
| 414 print(' ', Scroller:GetPoint(i)) | |
| 415 end | |
| 416 print(' |cFF00FFFFScroll:', Scroll:GetSize()) | |
| 417 for i = 1, Scroll:GetNumPoints() do | |
| 418 print(' ', Scroll:GetPoint(i)) | |
| 419 end | |
| 420 | |
| 421 Wrapper:Show() | |
| 422 Scroller:Show() | |
| 423 Scroll:Show() | |
| 424 end | |
| 425 Quest.GetClosest() | |
| 426 --Module.UpdateActionButtons(reason) | |
| 427 if firstUpdate then | |
| 428 firstUpdate = nil | |
| 429 end | |
| 430 end | |
| 431 | |
| 432 --- Content generator base | |
| 433 Default.UpdateTracker = function (handler, reason, id, isNew) | |
| 434 local print = tprint | |
| 435 local tracker = handler.frame | |
| 436 local blockIndex = 0 | |
| 437 tracker.previousHeight = tracker.height | |
| 438 tracker.height = 0 | |
| 439 | |
| 440 tracker.title:SetFont(headerFont, headerSize, headerOutline) | |
| 441 tracker.titlebg:SetHeight(headerHeight) | |
| 442 tracker.title:SetTextColor(unpack(headerColor)) | |
| 443 | |
| 444 handler.updateReason = reason | |
| 445 handler.numWatched = handler:GetNumWatched() | |
| 446 if handler.numWatched >= 1 then | |
| 447 | |
| 448 print(' |cFF00FF88GetNumWatched:|r',handler.name, handler.numWatched, 'of', handler.numAll) | |
| 449 end | |
| 450 | |
| 451 handler.currentBlock = 0 | |
| 452 handler.currentAnchor = tracker.titlebg | |
| 453 local blockPosition = -headerHeight | |
| 454 for blockIndex = 1, handler.numWatched do | |
| 455 local currentBlock = handler:UpdateBlock(blockIndex, id, isNew) | |
| 456 if currentBlock then | |
| 457 currentBlock.offset = blockPosition | |
| 458 handler:AddBlock(currentBlock) | |
| 459 blockPosition = blockPosition - currentBlock.height | |
| 460 else | |
| 461 print(' |cFFFF9900END|r @', blockIndex) | |
| 462 break -- done with quest stuff | |
| 463 end | |
| 464 end | |
| 465 | |
| 466 | |
| 467 local numBlocks = handler.numBlocks | |
| 468 local used = handler.usedBlocks | |
| 469 if numBlocks < #used then | |
| 470 print(' |cFF0088FFcull the dead: showing|r', numBlocks, '|cFF0088FF out of|r', #used) | |
| 471 local free = handler.freeBlocks | |
| 472 local remaining = #used | |
| 473 for i = #used, 1, -1 do | |
| 474 print(' -', 'i='.. i, 'watchIndex='..used[i].info.watchIndex) | |
| 475 if used[i].info.watchIndex > numBlocks then | |
| 476 print(' clean up dead quest block') | |
| 477 local released = tremove(used, i) | |
| 478 released:Hide() | |
| 479 released:ClearAllPoints() | |
| 480 tinsert(free, used[blockIndex]) | |
| 481 end | |
| 482 end | |
| 483 end | |
| 484 | |
| 485 | |
| 486 if handler.currentBlock >= 1 then | |
| 487 tracker.height = tracker.height + headerHeight | |
| 488 tracker:Show() | |
| 489 | |
| 490 if tracker.wasEmpty then | |
| 491 tracker.headerFade:Play() | |
| 492 tracker.wasEmpty = nil | |
| 493 end | |
| 494 if tracker.height ~= tracker.previousHeight then | |
| 495 tracker:SetHeight(tracker.height) | |
| 496 end | |
| 497 print(' |cFFFFFF00', tracker.height, tracker:GetWidth()) | |
| 498 else | |
| 499 tracker:Hide() | |
| 500 tracker.wasEmpty = true | |
| 501 end | |
| 502 | |
| 503 return tracker.numWatched, tracker.numAll | |
| 504 end | |
| 505 | |
| 506 | |
| 507 --- Updates the selected block frame to display the given info batch | |
| 508 -- If `previousBlock` is set, it will attempt to anchor to that | |
| 509 -- @param blockNum the ordered block to be updated, not a watchIndex value | |
| 510 -- @param info the reference returned by the GetXInfo functions | |
| 511 -- REMEMBER: t.info and questData[questID] are the same table | |
| 512 Default.UpdateBlock = function (handler, blockIndex, id, added) | |
| 513 local print = bprint | |
| 514 if not blockIndex then | |
| 515 return | |
| 516 end | |
| 517 local info = handler:GetInfo(blockIndex) -- should match up with whatever the internal watch list has | |
| 518 if not info then | |
| 519 return | |
| 520 end | |
| 521 print(' Updating |cFF00FF00'..handler.displayName..'|r|cFF00FFFF'..blockIndex..'|r|cFF0099FF', info.id ,'|r') | |
| 522 local frame = handler.frame | |
| 523 local block = handler:GetBlock(info.id) | |
| 524 | |
| 525 if added then | |
| 526 -- do something if the block is being assigned a new thing | |
| 527 end | |
| 528 | |
| 529 block.handler = handler | |
| 530 block.info = info | |
| 531 | |
| 532 info.blockIndex = blockIndex | |
| 533 if info.questID then handler.QuestBlock[info.questID] = block end | |
| 534 if info.logIndex then handler.LogBlock[info.logIndex] = block end | |
| 535 if info.watchIndex then handler.WatchBlock[info.watchIndex] = block end | |
| 536 handler.BlockInfo[blockIndex] = info | |
| 537 local newSchema = handler:UpdateObjectives(block) | |
| 538 if newSchema and newSchema ~= blockSchema then | |
| 539 Module.UpdateSchema('block', newSchema) | |
| 540 end | |
| 541 | |
| 542 block.title:SetText(info.title) | |
| 543 local titleHeight = floor(block.title:GetHeight()+.5) | |
| 544 local titlebgHeight = titleHeight + titleSpacing*2 | |
| 545 block.titlebg:SetHeight(titlebgHeight) | |
| 546 | |
| 547 local statusHeight = floor(block.status:GetHeight()+.5) | |
| 548 local statusbgHeight = statusHeight + textSpacing*2 | |
| 549 local attachmentHeight =floor(block.attachmentHeight + .5) | |
| 550 | |
| 551 print(' |cFF0088FFanchor to', handler.currentAnchor:GetName()) | |
| 552 print(' |cFF00FF00attachment:|r', attachmentHeight, '|cFF00FF00title:|r', titlebgHeight, '('.. titleHeight..')') | |
| 553 if attachmentHeight > 0 then | |
| 554 attachmentHeight = attachmentHeight + textSpacing | |
| 555 end | |
| 556 | |
| 557 block.height = titlebgHeight + attachmentHeight | |
| 558 | |
| 559 block:SetHeight(block.height) | |
| 560 | |
| 561 print(' |cFFFFFF00height|r:', block.height) | |
| 562 print(' |cFF00FFFF)|r -> ', block, block:GetHeight()) | |
| 563 | |
| 564 block:Show() | |
| 565 | |
| 566 if info.specialItem and not info.itemButton then | |
| 567 print(' - |cFF00FFFFgenerating item button for info set') | |
| 568 info.itemButton = Module.SetItemButton(block, info) | |
| 569 else | |
| 570 --info.itemButton = nil | |
| 571 end | |
| 572 | |
| 573 local tagPoint, tagAnchor, tagRelative, x, y = 'TOPRIGHT', block, 'TOPRIGHT', -2, -2 | |
| 574 | |
| 575 local numCurrency = 0 | |
| 576 for i, rewardTile in ipairs(block.rewardTile) do | |
| 577 if info.rewardInfo and info.rewardInfo[i] then | |
| 578 local reward = info.rewardInfo[i] | |
| 579 --rewardTile:SetPoint(tagPoint, tagAnchor, tagRelative, -2, -2) | |
| 580 rewardTile:SetTexture(reward.texture) | |
| 581 rewardTile:Show() | |
| 582 | |
| 583 print('updating reward tile #'.. i, reward.type, reward.count, reward.text, reward.texture) | |
| 584 if reward.count and reward.count > 1 then | |
| 585 block.rewardLabel[i]:SetText(reward.count) | |
| 586 block.rewardLabel[i]:Show() | |
| 587 end | |
| 588 | |
| 589 rewardTile:ClearAllPoints() | |
| 590 rewardTile:SetPoint(tagPoint, tagAnchor, tagRelative, x, y) | |
| 591 tagPoint, tagAnchor, tagRelative, x, y = 'TOPRIGHT', rewardTile, 'TOPLEFT', -2, 0 | |
| 592 else | |
| 593 rewardTile:Hide() | |
| 594 block.rewardLabel[i]:Hide() | |
| 595 end | |
| 596 end | |
| 597 | |
| 598 if info.selected then | |
| 599 block.SelectionOverlay:Show() | |
| 600 else | |
| 601 block.SelectionOverlay:Hide() | |
| 602 end | |
| 603 -- workaround for scrollchild issue where layers fall out of sync: in this case, it's by 1 vertical pixel | |
| 604 --block.highlight:SetPoint('TOPLEFT', block, 'TOPLEFT', 0, 1) | |
| 605 --block.lowlight:SetPoint('BOTTOMLEFT', block, 'BOTTOMLEFT', 0, 1) | |
| 606 | |
| 607 if info.tagInfo then | |
| 608 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'frequencyTag', tagPoint, tagAnchor, tagRelative) | |
| 609 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'typeTag', tagPoint, tagAnchor, tagRelative) | |
| 610 tagPoint, tagAnchor, tagRelative = handler:AddTag(block, 'completionTag', tagPoint, tagAnchor, tagRelative) | |
| 611 end | |
| 612 | |
| 613 if info.statusKey and (Devian and Devian.InWorkspace()) then | |
| 614 block.debugText:SetText(info.statusKey) | |
| 615 block.debugText:Show() | |
| 616 end | |
| 617 return block | |
| 618 end | |
| 619 | |
| 620 | |
| 621 | |
| 622 | |
| 623 --- Does the main iterations for populating block content. | |
| 624 -- Hooked by corresponding handler functions where additional details need to be sorted. | |
| 625 Default.UpdateObjectives = function(handler, block, block_schema) | |
| 626 local print = lprint | |
| 627 local info = block.info | |
| 628 print('|cFF00FF00default.objectives', block:GetName()) | |
| 629 -- reset the starting positions | |
| 630 block.endPoint = block.titlebg | |
| 631 block.attachmentHeight = 0 | |
| 632 block.currentLine = 0 | |
| 633 | |
| 634 local displayObjectiveHeader = false | |
| 635 | |
| 636 block.attachmentHeight = 0 | |
| 637 local text, attachment, template | |
| 638 | |
| 639 | |
| 640 if info.description and #info.description >= 1 then | |
| 641 print(' |cFF00FFFF header line:|r', info.description) | |
| 642 text = info.description | |
| 643 handler:AddLine(block, text, nil) | |
| 644 end | |
| 645 | |
| 646 if (info.isComplete or info.numObjectives == 0) and info.completionText then | |
| 647 print(' overriding line #1 for completion text:', info.completionText) | |
| 648 text = info.completionText | |
| 649 handler:AddLine(block, text, nil, 'completed') | |
| 650 else | |
| 651 if info.objectives then | |
| 652 for i, data in ipairs(info.objectives) do | |
| 653 local line = handler:GetLine(block) | |
| 654 displayObjectiveHeader = true | |
| 655 line.height = 0 | |
| 656 text, attachment, template = handler:UpdateLine(block, line, data) | |
| 657 print(' |cFF88FF00#', i, data.type, text, attachment) | |
| 658 handler:AddLine(block, text, attachment, template) | |
| 659 | |
| 660 end | |
| 661 end | |
| 662 end | |
| 663 | |
| 664 | |
| 665 if block.currentLine < block.numLines then | |
| 666 print(' - cull', block.currentLine, block.numLines) | |
| 667 for i = block.currentLine + 1, block.numLines do | |
| 668 print(' - hide |cFFFF0088'..i..'|r', block.lines[i]) | |
| 669 block.lines[i]:ClearAllPoints() | |
| 670 block.lines[i]:Hide() | |
| 671 end | |
| 672 end | |
| 673 | |
| 674 if block.currentLine > 0 then | |
| 675 block.attachmentHeight = block.attachmentHeight + textSpacing | |
| 676 print(' |cFF00FF00attachment:', block.attachmentHeight) | |
| 677 end | |
| 678 return block_schema | |
| 679 end | |
| 680 | |
| 681 | |
| 682 --- Module-specific display variables | |
| 683 -- * height - height of whatever display widget is involved in conveying the task | |
| 684 -- * money - boolean that determines listening for money events or not | |
| 685 -- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively | |
| 686 | |
| 687 | |
| 688 Default.UpdateLine = function(handler, block, line, data) | |
| 689 if line.finished then | |
| 690 line.progress = 2 | |
| 691 elseif line.quantity > 0 then | |
| 692 line.progress = 1 | |
| 693 else | |
| 694 line.progress = 0 | |
| 695 end | |
| 696 return data.text, line.widget, 'normal' | |
| 697 end | |
| 698 ---------- | 437 ---------- |
| 699 --- Top level methods | 438 --- Top level methods |
| 700 | 439 |
| 701 --- Queue any active item buttons for update for that frame | 440 |
| 702 local iprint = B.print('ItemButton') | 441 T.UpdateBlockAction = function (block, itemButton) |
| 703 Module.UpdateActionButtons = function(updateReason) | 442 local print = bprint |
| 704 local print = iprint | |
| 705 Scroller.snap_upper = 0 | |
| 706 Scroller.snap_lower = 0 | |
| 707 local print = B.print('ItemButton') | |
| 708 if updateReason then | |
| 709 print = B.print('IB_'..updateReason) | |
| 710 end | |
| 711 | |
| 712 local previousItem | |
| 713 for questID, itemButton in pairs(Quest.itemButtons) do | |
| 714 local info= Module.Quest.Info[questID] | |
| 715 | |
| 716 print('|cFF00FFFF'.. questID .. '|r', itemButton:GetName()) | |
| 717 local block = Module.Quest.QuestBlock[questID] | |
| 718 if block then | |
| 719 -- Dispatch the probe | |
| 720 if IsQuestWatched(info.logIndex) then | |
| 721 itemButton.previousItem = previousItem | |
| 722 print(' |cFFFFFF00probing', block:GetName()) | |
| 723 block:SetScript('OnUpdate', function() | |
| 724 if block:GetBottom() and not InCombatLockdown() then | |
| 725 print(' '..block:GetName()..' |cFF00FF00probe hit!') | |
| 726 Module.UpdateBlockAction(block, itemButton, itemButton.previousItem) -- needs to be previousItem from this scope | |
| 727 block:SetScript('OnUpdate', nil) | |
| 728 | |
| 729 end | |
| 730 end) | |
| 731 previousItem = itemButton | |
| 732 else | |
| 733 print('hidden block or unwatched quest') | |
| 734 itemButton.previousItem = nil | |
| 735 itemButton:Hide() | |
| 736 end | |
| 737 elseif itemButton:IsVisible() then | |
| 738 print(' |cFFFF0088hiding unwatched quest button', itemButton:GetName()) | |
| 739 itemButton.previousItem = nil | |
| 740 itemButton:Hide() | |
| 741 else | |
| 742 print(' |cFFBBBBBBignoring hidden log quest button', itemButton:GetName()) | |
| 743 end | |
| 744 end | |
| 745 end | |
| 746 | |
| 747 Module.UpdateBlockAction = function (block, itemButton) | |
| 748 local print = iprint | |
| 749 print('**|cFF0088FF'..itemButton:GetName(), '|r:Update()') | 443 print('**|cFF0088FF'..itemButton:GetName(), '|r:Update()') |
| 750 if itemButton.questID ~= block.info.questID then | 444 if itemButton.questID ~= block.info.questID then |
| 751 print('** |cFFFF0088mismatched block assignment', itemButton.questID,'<~>', block.info.questID) | 445 print('** |cFFFF0088mismatched block assignment', itemButton.questID,'<~>', block.info.questID) |
| 752 -- something happened between this and last frame, go back and set new probes | 446 -- something happened between this and last frame, go back and set new probes |
| 753 return Module.UpdateActionButtons() | 447 return T.UpdateActionButtons() |
| 754 end | 448 end |
| 755 | 449 |
| 756 local previousItem = itemButton.previousItem | 450 local previousItem = itemButton.previousItem |
| 757 local upper_bound = Scroller:GetTop() + Scroller.snap_upper | 451 local upper_bound = Scroller:GetTop() + Scroller.snap_upper |
| 758 local lower_bound = Scroller:GetBottom() + Scroller.snap_lower + itemButtonSize | 452 local lower_bound = Scroller:GetBottom() + Scroller.snap_lower + itemButtonSize |
| 797 | 491 |
| 798 itemButton:SetPoint(point, anchor, relative, itemButton.x, itemButton.y) | 492 itemButton:SetPoint(point, anchor, relative, itemButton.x, itemButton.y) |
| 799 itemButton:Show() | 493 itemButton:Show() |
| 800 end | 494 end |
| 801 | 495 |
| 802 Module.UpdateItemButtonCooldown = function(button) | 496 T.UpdateItemButtonCooldown = function(button) |
| 803 | 497 |
| 804 end | 498 end |
| 805 | 499 |
| 806 | 500 function T:FinishWrapper () |
| 807 Default.Select = function(handler, block) | 501 if wrapperHeight > Wrapper.previousHeight then |
| 808 Module:Update(handler.watchReasonModule) | 502 Wrapper:SetHeight(wrapperHeight) |
| 809 end | 503 Scroller:SetHeight(wrapperHeight*3) |
| 810 Default.Open = function(handler, block) | 504 Scroll:SetHeight(wrapperHeight) |
| 811 Module:Update(handler.watchReasonModule) | 505 Wrapper.previousHeight = wrapperHeight |
| 812 end | 506 Wrapper.destinationHeight = wrapperHeight |
| 813 Default.Remove = function(handler, block) | 507 end |
| 814 Module:Update(handler.watchReasonModule) | 508 Scroller:SetVerticalScroll(B.Conf.ObjectiveScroll or 0) |
| 815 end | 509 print('|cFF00FF00### end of wrapper layout', Wrapper:GetSize()) |
| 816 Default.Report = function(handler, block) | 510 print(' |cFF00FF00Scroller:', Scroller:GetSize()) |
| 817 print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.') | 511 print(' |cFF00FF00Scroll:', Scroll:GetSize()) |
| 818 end | 512 for i = 1, Wrapper:GetNumPoints() do |
| 819 | 513 print('|cFF00FF00 ', Wrapper:GetPoint(i)) |
| 820 Default.OnMouseUp = function(self, button) | 514 end |
| 821 print(self.handler.name, self.mainStyle, self.subStyle) | 515 for i = 1, Scroller:GetNumPoints() do |
| 822 if button == 'LeftButton' then | 516 print('|cFF00FF00 ', Scroller:GetPoint(i)) |
| 823 if IsModifiedClick("CHATLINK") and ChatEdit_GetActiveWindow() then | 517 end |
| 824 self.Link(self.handler, self) | 518 for i = 1, Scroll:GetNumPoints() do |
| 825 elseif IsModifiedClick("QUESTWATCHTOGGLE") then | 519 print('|cFF00FF00 ', Scroll:GetPoint(i)) |
| 826 self.Remove(self.handler, self) | 520 end |
| 827 else | 521 |
| 828 self.Select(self.handler, self) | 522 Wrapper:Show() |
| 829 end | 523 Scroller:Show() |
| 830 elseif button == 'RightButton' then | 524 Scroll:Show() |
| 831 self.Open(self.handler, self) | 525 end |
| 832 end | 526 |
| 833 self.initialButton = nil | |
| 834 self.modChatLink = nil | |
| 835 self.modQuestWatch = nil | |
| 836 Module:Update(self.handler.updateReasonModule) | |
| 837 print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r') | |
| 838 end | |
| 839 Default.OnMouseDown = function(self, button) | |
| 840 print(self.info.title) | |
| 841 end |
