Mercurial > wow > buffalo2
comparison ObjectiveFrame.lua @ 21:d5ee940de273
use hardcoded aesthetic manipulations over loadstring cramming
| author | Nenue |
|---|---|
| date | Fri, 08 Apr 2016 06:12:05 -0400 |
| parents | 605e8f0e46db |
| children | 9b3fa734abff |
comparison
equal
deleted
inserted
replaced
| 20:6bd2102d340b | 21:d5ee940de273 |
|---|---|
| 6 local B = select(2,...).frame | 6 local B = select(2,...).frame |
| 7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') | 7 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame') |
| 8 local ipairs, max, min, unpack, floor, pairs, tostring, type, band = ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band | 8 local ipairs, max, min, unpack, floor, pairs, tostring, type, band = 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 DefaultTracker, Quest, Bonus, Cheevs = mod.DefaultTracker, mod.Quest, mod.Bonus, mod.Cheevs | 11 local Default, AutoQuest, Quest, Bonus, Cheevs = mod.DefaultHandler, mod.AutoQuest, mod.Quest, mod.Bonus, mod.Cheevs |
| 12 local CreateFrame = CreateFrame | 12 local CreateFrame = CreateFrame |
| 13 local print = B.print('ObjWrapper') | 13 local print = B.print('Tracker') |
| 14 local unitLevel = 1 | 14 local unitLevel = 1 |
| 15 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON | 15 local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON |
| 16 local debug = false | |
| 16 -------------------------------------------------------------------- | 17 -------------------------------------------------------------------- |
| 17 --- Global frame layout | 18 --- Global frame layout |
| 18 -------------------------------------------------------------------- | 19 -------------------------------------------------------------------- |
| 19 | 20 |
| 20 --- Upvalues | 21 --- Upvalues |
| 30 local previousBlock | 31 local previousBlock |
| 31 local currentBlock | 32 local currentBlock |
| 32 --- todo: source these from config | 33 --- todo: source these from config |
| 33 local itemButtonSize, itemButtonSpacing = 36, 1 | 34 local itemButtonSize, itemButtonSpacing = 36, 1 |
| 34 local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]] | 35 local titleFont, textFont = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Regular.ttf]] |
| 35 local titleSize, textSize = 15, 15 | 36 local titleSize, textSize = 16, 16 |
| 37 local titlebg, textbg = {'HORIZONTAL', 1, 0, .7, .25, 1, 0, .7, .125}, {'HORIZONTAL', 0, 0, 0, 0.4, 0, 0, 0, 0} | |
| 36 local titleOutline, textOutline = "OUTLINE", "OUTLINE" | 38 local titleOutline, textOutline = "OUTLINE", "OUTLINE" |
| 37 local titleSpacing, textSpacing = 4, 3 | 39 local titleSpacing, textSpacing = 3, 3 |
| 38 local textIndent = 5 | 40 local titleIndent, textIndent = 2, 5 |
| 41 local blockSpacing = 1 | |
| 39 local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed | 42 local wrapperMaxWidth, wrapperMaxHeight = 270, 490 -- these are the hard bounds, actual *Height variables are changed |
| 40 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' | 43 local wrapperHeadFont, wrapperHeadSize, wrapperHeadOutline = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 16, 'NONE' |
| 41 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24 | 44 local headerFont, headerSize, headerHeight = [[Interface\Addons\SharedMedia_MyMedia\font\ArchivoNarrow-Bold.ttf]], 18, 24 |
| 42 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2 | 45 local headerOutline, headerColor, headerSpacing = 'OUTLINE', {1,1,1,1}, 2 |
| 43 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0} | 46 local wrapperPosition = {'RIGHT', UIParent, 'RIGHT', -84, 0} |
| 47 local oprint = B.print('Objectives') | |
| 48 local bprint = B.print('Block') | |
| 49 local tprint = B.print('Tracker') | |
| 50 local lprint = B.print('Line') | |
| 44 | 51 |
| 45 local band = bit.band | 52 local band = bit.band |
| 46 local currentPosition, anchorFrame, anchorPoint | 53 local currentPosition, anchorFrame, anchorPoint |
| 47 function mod:Update (reason, dataID) | 54 |
| 48 local updateWrapper = 0 | 55 Default.GetLine = function(handler, blockIndex, lineIndex) |
| 49 local hasStuff | 56 local print = lprint |
| 50 local insertingStuff | 57 if not handler.lines[blockIndex] then |
| 51 reason = reason or OBJECTIVE_TRACKER_UPDATE_REASON | 58 handler.lines[blockIndex] = {} |
| 52 currentPosition = 0 | 59 end |
| 53 anchorPoint = 'TOPLEFT' | 60 local lines = handler.lines[blockIndex] |
| 54 anchorFrame = Scroll | 61 if not lines[lineIndex] then |
| 55 | 62 print(' |cFF00FF88created line #'..lineIndex..' from for '..handler.name..' block #'..blockIndex) |
| 56 local wrapperHeight = 0 | 63 lines[lineIndex] = CreateFrame('Frame', 'Vn'..handler.name .. blockIndex..'ObjectiveLine'..lineIndex, handler:GetBlock(blockIndex), 'VeneerTrackerObjective') |
| 57 for id, handler in pairs(mod.orderedHandlers) do | 64 local line = lines[lineIndex] |
| 58 local frame = handler.frame | 65 line.index = lineIndex |
| 59 | 66 line.height = 0 |
| 60 print(format('|cFF00FFFFbitcheck (%04X vs %04x+%04x):|r', reason, handler.updateReasonModule, handler.updateReasonEvents), band(reason, handler.updateReasonModule + handler.updateReasonEvents)) | 67 line.status:SetSpacing(textSpacing) |
| 61 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then | 68 line.status:SetPoint('LEFT', line, 'LEFT', textIndent, 0) |
| 62 handler:Update(reason, dataID) | 69 B.SetConfigLayers(line) |
| 63 print('|cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched) | 70 |
| 64 insertingStuff = true | 71 if lines[lineIndex+1] then |
| 65 else | 72 lines[lineIndex+1]:ClearAllPoints() |
| 66 print('|cFFFF0088'..id..'|r', 'no reason') | 73 end |
| 67 end | 74 |
| 68 | 75 if debug then |
| 69 if handler.numWatched >= 1 then | 76 for _, region in ipairs(lines[lineIndex].debug) do |
| 70 hasStuff = true | 77 region:Show() |
| 71 currentPosition = currentPosition + 1 | 78 end |
| 72 frame:SetParent(Scroll) | 79 end |
| 73 frame:SetPoint('TOPLEFT', anchorFrame, anchorPoint, 0, 0) | 80 |
| 74 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint) | 81 end |
| 75 anchorFrame = handler.frame | 82 return lines[lineIndex] |
| 76 anchorPoint = 'BOTTOMLEFT' | 83 end |
| 77 | 84 |
| 78 print('current frame height:', frame.height) | 85 Default.GetBlock = function(handler, blockIndex) |
| 79 wrapperHeight = wrapperHeight + frame.height | 86 local print = bprint |
| 80 print('|cFFFF0088total height:', wrapperHeight) | |
| 81 else | |
| 82 handler.frame:Hide() | |
| 83 end | |
| 84 end | |
| 85 | |
| 86 | |
| 87 if hasStuff or insertingStuff then | |
| 88 | |
| 89 print('updating height to', wrapperHeight) | |
| 90 Wrapper:SetHeight(wrapperHeight) | |
| 91 Scroller:SetHeight(wrapperHeight) | |
| 92 Scroll:SetHeight(wrapperHeight) | |
| 93 print('|cFFFF8800Wrapper:', Wrapper:GetSize()) | |
| 94 for i = 1, Wrapper:GetNumPoints() do | |
| 95 print(' ', Wrapper:GetPoint(i)) | |
| 96 end | |
| 97 print(' |cFF00FFFFScroller:', Scroller:GetSize()) | |
| 98 for i = 1, Scroller:GetNumPoints() do | |
| 99 print(' ', Scroller:GetPoint(i)) | |
| 100 end | |
| 101 print(' |cFF00FFFFScroll:', Scroll:GetSize()) | |
| 102 for i = 1, Scroll:GetNumPoints() do | |
| 103 print(' ', Scroll:GetPoint(i)) | |
| 104 end | |
| 105 | |
| 106 Wrapper:Show() | |
| 107 Scroller:Show() | |
| 108 Scroll:Show() | |
| 109 end | |
| 110 | |
| 111 end | |
| 112 | |
| 113 DefaultTracker.GetBlock = function(handler, blockIndex) | |
| 114 local block = handler.usedBlocks[blockIndex] | 87 local block = handler.usedBlocks[blockIndex] |
| 88 | |
| 115 if not handler.usedBlocks[blockIndex] then | 89 if not handler.usedBlocks[blockIndex] then |
| 116 if #handler.freeBlocks >= 1 then | 90 if #handler.freeBlocks >= 1 then |
| 117 block = handler.freeBlocks[#handler.freeBlocks] | 91 block = handler.freeBlocks[#handler.freeBlocks] |
| 118 handler.freeBlocks[#handler.freeBlocks] = nil | 92 handler.freeBlocks[#handler.freeBlocks] = nil |
| 119 else | 93 else |
| 120 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock') | 94 block = CreateFrame('Frame', 'Veneer'..tostring(handler)..'Block'..blockIndex, Scroll, 'VeneerTrackerBlock') |
| 95 block.GetLine = function(block, lineIndex, data) return handler:GetLine(blockIndex, lineIndex, data) end | |
| 96 block.UpdateLine = function(block, lineIndex, data) return handler:UpdateLine(block, lineIndex, data) end | |
| 97 block.UpdateObjectives = function(block) return handler:UpdateObjectives(block) end | |
| 98 block.SetTag = function(block, ...) return handler.SetTag(block, ...) end | |
| 99 | |
| 100 local c = mod.Conf.Wrapper | |
| 101 block.blockIndex = blockIndex | |
| 121 block.SetStyle = mod.SetBlockStyle | 102 block.SetStyle = mod.SetBlockStyle |
| 103 block:SetWidth(c.Width) | |
| 104 | |
| 105 block.title:SetSpacing(c.TitleSpacing) | |
| 106 block.title:SetPoint('TOP', block, 'TOP', 0, -titleSpacing) | |
| 107 | |
| 108 block.titlebg:SetTexture(1,1,1,1) | |
| 109 block.titlebg:SetGradientAlpha(unpack(titlebg)) | |
| 110 block.titlebg:SetPoint('TOP', block, 'TOP', 0, 0) | |
| 111 block.titlebg:SetPoint('BOTTOM', block.title, 'BOTTOM', 0, -titleSpacing) | |
| 112 | |
| 113 block.status:SetSpacing(c.TextSpacing) | |
| 114 block.status:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, -textSpacing) | |
| 115 block.status:SetPoint('LEFT', block.titlebg, 'LEFT', textIndent, 0) | |
| 116 | |
| 117 block.statusbg:SetPoint('TOP', block.titlebg, 'BOTTOM', 0, 0) | |
| 118 block.statusbg:SetPoint('BOTTOM', block, 'BOTTOM', 0, 0) | |
| 119 block.statusbg:SetTexture(1,1,1,1) | |
| 120 block.statusbg:SetGradientAlpha(unpack(textbg)) | |
| 121 | |
| 122 block.SelectionOverlay:SetPoint('TOPLEFT') | |
| 123 block.SelectionOverlay:SetPoint('BOTTOMRIGHT') | |
| 124 | |
| 125 | |
| 126 | |
| 127 --- methods for event handlers | |
| 128 | |
| 122 block.Select = handler.Select | 129 block.Select = handler.Select |
| 123 block.Open = handler.Open | 130 block.Open = handler.Open |
| 124 block.Remove = handler.Remove | 131 block.Remove = handler.Remove |
| 125 block.Link = handler.Link | 132 block.Link = handler.Link |
| 126 block:SetScript('OnMouseUp', handler.OnMouseUp) | 133 block:SetScript('OnMouseUp', handler.OnMouseUp) |
| 127 block:SetScript('OnMouseDown', handler.OnMouseDown) | 134 block:SetScript('OnMouseDown', handler.OnMouseDown) |
| 128 block.attachmentHeight = 0 | 135 block.attachmentHeight = 0 |
| 129 block:ClearAllPoints() | 136 block:ClearAllPoints() |
| 130 end | 137 |
| 131 | 138 B.SetConfigLayers(block) |
| 139 | |
| 140 if debug then | |
| 141 for _, region in ipairs(block.debug) do | |
| 142 region:Show() | |
| 143 end | |
| 144 end | |
| 145 end | |
| 132 handler.usedBlocks[blockIndex] = block | 146 handler.usedBlocks[blockIndex] = block |
| 133 end | 147 end |
| 134 return handler.usedBlocks[blockIndex] | 148 return handler.usedBlocks[blockIndex] |
| 135 end | 149 end |
| 136 | 150 |
| 137 DefaultTracker.Update = function (self, reason, dataID) | 151 Default.SetTag = function (block, tagName, tagPoint, tagAnchor, tagRelative) |
| 138 local tracker = self.frame | 152 local print = bprint |
| 139 print('|cFFFF4400'..tracker:GetName().. '|r:Update()') | 153 local tag = block[tagName] |
| 140 local blockIndex = 0 | 154 if block.info[tagName] and tag then |
| 141 local trackerHeight = 0 | 155 tag:SetTexCoord(unpack(block.info[tagName])) |
| 142 | 156 tag:Show() |
| 143 | 157 tag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) |
| 144 self.currentAnchor = tracker.titlebg | 158 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', tag, 'TOPLEFT' |
| 145 local numWatched = self:GetNumWatched() | 159 else |
| 146 local numBlocks = self.numBlocks | 160 block[tagName]:Hide() |
| 147 local actualBlocks = 0 | 161 end |
| 148 for watchIndex = 1, 25 do | 162 return tagPoint, tagAnchor, tagRelative |
| 149 blockIndex = blockIndex + 1 | 163 end |
| 150 if watchIndex <= numWatched then | 164 |
| 151 local info = self:GetInfo(watchIndex) | 165 Default.UpdateObjectives = function(handler, block) |
| 152 if info then | 166 local print = lprint |
| 153 local currentBlock = self:UpdateBlock(blockIndex, info) | 167 local info = block.info |
| 154 self.currentAnchor = currentBlock | 168 |
| 155 print(' |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height) | 169 print(' |cFF00FF00doing objectives', block:GetName()) |
| 156 print(currentBlock:IsVisible()) | 170 |
| 157 print(currentBlock:GetPoint(1)) | 171 -- set the starting positions |
| 158 trackerHeight = trackerHeight + currentBlock.height | 172 block.endPoint = block.status |
| 159 numBlocks = max(numBlocks, watchIndex) | 173 local completionScore, completionMax = 0, 0 |
| 160 actualBlocks = actualBlocks + 1 | 174 local displayObjectiveHeader = false |
| 161 else | 175 |
| 162 print(' |cFFFF0000Failed to draw info for index #'..watchIndex) | 176 if info.description and #info.description >= 1 then |
| 177 print(' |cFF00FFFF header line:|r', info.description) | |
| 178 block.status:SetText(info.description) | |
| 179 displayObjectiveHeader = true | |
| 180 end | |
| 181 | |
| 182 local attachmentHeight = 0 | |
| 183 if info.objectives then | |
| 184 for i, data in ipairs(info.objectives) do | |
| 185 print(' |cFF88FF00#', i, data.type, data.text) | |
| 186 displayObjectiveHeader = true | |
| 187 local line = block:GetLine(i) | |
| 188 line.height = 0 | |
| 189 block:UpdateLine(line, data) | |
| 190 | |
| 191 line:ClearAllPoints() | |
| 192 if line.displayText then | |
| 193 line.status:SetText(line.displayText) | |
| 194 line.height = floor(line.status:GetStringHeight()+.5) | |
| 163 end | 195 end |
| 164 | 196 |
| 165 elseif watchIndex <= numBlocks then | 197 if line.widget then |
| 166 local used = self.usedBlocks | 198 line.widget:SetPoint('TOP', line, 'TOP', 0, 0) |
| 167 local free = self.freeBlocks | 199 line.widget:Show() |
| 168 print('clean up dead quest block') | |
| 169 if used[blockIndex] then | |
| 170 used[blockIndex]:Hide() | |
| 171 used[blockIndex]:ClearAllPoints() | |
| 172 free[#free+1]= used[blockIndex] | |
| 173 used[blockIndex] = nil | |
| 174 end | 200 end |
| 175 else | 201 |
| 176 print(' |cFFFF9900END|r @', blockIndex) | 202 |
| 177 break -- done with quest stuff | 203 line:Show() |
| 178 end | 204 |
| 179 end | 205 line:SetPoint('LEFT', block, 'LEFT', 0, 0) |
| 180 self.numWatched = numWatched | 206 line:SetPoint('TOP', block.endPoint, 'BOTTOM', 0, 0) |
| 181 self.numBlocks = numBlocks | 207 line:SetPoint('RIGHT', block, 'RIGHT', 0, 0) |
| 182 self.actualBlocks = actualBlocks | 208 line:SetHeight(line.height) |
| 183 self:Report() | 209 |
| 184 | 210 attachmentHeight = attachmentHeight + line.height |
| 185 tracker.previousHeight = tracker.height | 211 print(' sz', line:GetSize()) |
| 186 if numBlocks >= 1 then | 212 print(' pt', line:GetPoint(1)) |
| 187 previousBlock = nil | 213 print(' |cFF44BBFF#', i, 'anchoring line, size:', line.height, 'current endpoint:', line.statusbg) |
| 188 | 214 |
| 189 tracker.height = trackerHeight + tracker.titlebg:GetHeight() | 215 block.endPoint = line |
| 190 tracker:SetHeight(tracker.height) | 216 end |
| 191 tracker:Show() | 217 |
| 192 | 218 if attachmentHeight > 0 then |
| 193 print(tracker.height) | 219 block.attachmentHeight = attachmentHeight + textSpacing * 2 |
| 194 | 220 print(' |cFF00FF00attachment:', block.attachmentHeight) |
| 195 else | 221 end |
| 196 tracker.height = 0 | 222 |
| 197 tracker:Hide() | 223 local lines = handler.lines[block.blockIndex] |
| 198 end | 224 local numObjectives = info.numObjectives |
| 199 | 225 local numLines = #lines |
| 200 return tracker.numWatched, tracker.numAll | 226 if numLines > numObjectives then |
| 201 end | 227 print(' has extra lines, need to clean up;', numLines, numObjectives) |
| 202 | 228 for i = numObjectives+1, numLines do |
| 203 --- Updates the selected block frame to display the given info batch | 229 print(' hide', i, lines[i]:GetName()) |
| 204 -- If `previousBlock` is set, it will attempt to anchor to that | 230 lines[i]:Hide() |
| 205 -- @param blockNum the ordered block to be updated, not a watchIndex value | |
| 206 -- @param info the reference returned by the GetXInfo functions | |
| 207 -- REMEMBER: t.info and questData[questID] are the same table | |
| 208 DefaultTracker.UpdateBlock = function (self, blockIndex, info) | |
| 209 local print = B.print('BlockParse') | |
| 210 print(' Read list item |cFF00FFFF'..blockIndex..'|r') | |
| 211 if not blockIndex or not info then | |
| 212 return | |
| 213 end | |
| 214 local frame = self.frame | |
| 215 local t = self:GetBlock(blockIndex) | |
| 216 t.handler = self | |
| 217 t.info = info | |
| 218 t.mainStyle = info.mainStyle or 'Normal' | |
| 219 t.subStyle = info.subStyle | |
| 220 | |
| 221 info.blockIndex = blockIndex | |
| 222 if info.questID then self.QuestBlock[info.questID] = t end | |
| 223 if info.questLogIndex then self.LogBlock[info.questLogIndex] = t end | |
| 224 if info.watchIndex then self.WatchBlock[info.watchIndex] = t end | |
| 225 self.BlockInfo[blockIndex] = info | |
| 226 | |
| 227 t.attachmentHeight = 0 | |
| 228 if info.isComplete then | |
| 229 if mod.AutoQuest.Info[info.questID] then | |
| 230 t.status:SetText('(Click to Complete)') | |
| 231 t.status:Show() | |
| 232 else | |
| 233 t.status:SetText('Ready to turn in') | |
| 234 t.status:Show() | |
| 235 end | |
| 236 elseif info.completed then | |
| 237 t.status:SetText(nil) | |
| 238 t.status:Hide() | |
| 239 elseif info.numObjectives >= 1 then | |
| 240 t.attachmentHeight = 0 | |
| 241 t.status:Show() | |
| 242 print(' lines to parse:', info.numObjectives) | |
| 243 local text = '' | |
| 244 | |
| 245 mod.UpdateObjectives(t, info, text) | |
| 246 print(' |cFF00FF00attachment', t.attachmentHeight) | |
| 247 elseif info.description then | |
| 248 t.status:SetText(info.description) | |
| 249 t.status:Show() | |
| 250 else | |
| 251 t.status:SetText(nil) | |
| 252 t.status:Show() | |
| 253 end | |
| 254 t.title:SetText(info.title) | |
| 255 | |
| 256 | |
| 257 if info.specialItem and not info.itemButton then | |
| 258 print(' - |cFF00FFFFgenerating item button for info set') | |
| 259 info.itemButton = mod.SetItemButton(t, info) | |
| 260 else | |
| 261 --info.itemButton = nil | |
| 262 end | |
| 263 | |
| 264 if self.currentAnchor then | |
| 265 t:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, 0) | |
| 266 t:SetPoint('RIGHT', frame,'RIGHT', 0, 0) | |
| 267 print(' anchor to|cFF0088FF', self.currentAnchor:GetName()) | |
| 268 end | |
| 269 | |
| 270 | |
| 271 --- metrics are calculated in SetStyle | |
| 272 t:SetStyle('TrackerBlock', self.name, t.mainStyle, t.subStyle) | |
| 273 print(' |cFFFFFF00height|r', t.height) | |
| 274 t:Show() | |
| 275 | |
| 276 print(' |cFF00FFFF)|r -> ', t, t:GetHeight()) | |
| 277 | |
| 278 local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t, 'TOPRIGHT' | |
| 279 if info.rewardInfo then | |
| 280 print('has immediate reward') | |
| 281 if info.rewardInfo[1].type == 'currency' or info.rewardInfo[1].type == 'item' then | |
| 282 t.icon:Show() | |
| 283 t.iconLabel:SetText(info.rewardInfo[1].count) | |
| 284 t.icon:SetSize(t.height, t.height) | |
| 285 t.icon:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) | |
| 286 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t.icon, 'TOPLEFT' | |
| 287 t.icon:SetTexture(info.rewardInfo[1].texture) | |
| 288 end | |
| 289 else | |
| 290 t.icon:Hide() | |
| 291 end | |
| 292 | |
| 293 if info.selected then | |
| 294 t.SelectionOverlay:Show() | |
| 295 else | |
| 296 t.SelectionOverlay:Hide() | |
| 297 end | |
| 298 | |
| 299 if info.frequencyTag then | |
| 300 t.FrequencyTag:SetTexCoord(unpack(info.frequencyTag)) | |
| 301 t.FrequencyTag:Show() | |
| 302 t.FrequencyTag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) | |
| 303 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t.FrequencyTag, 'TOPLEFT' | |
| 304 else | |
| 305 t.FrequencyTag:Hide() | |
| 306 end | |
| 307 if info.typeTag then | |
| 308 t.TypeTag:SetTexCoord(unpack(info.typeTag)) | |
| 309 t.TypeTag:Show() | |
| 310 t.TypeTag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) | |
| 311 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t.TypeTag, 'TOPLEFT' | |
| 312 else | |
| 313 t.TypeTag:Hide() | |
| 314 end | |
| 315 if info.completionTag then | |
| 316 t.CompletionTag:SetTexCoord(unpack(info.completionTag)) | |
| 317 t.CompletionTag:Show() | |
| 318 t.CompletionTag:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) | |
| 319 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', t.CompletionTag, 'TOPLEFT' | |
| 320 else | |
| 321 t.CompletionTag:Hide() | |
| 322 end | |
| 323 | |
| 324 --[[if Devian and Devian.InWorkspace() then | |
| 325 t.debugText:Show() | |
| 326 t.debugText:SetText(tostring(blockIndex) .. '\n' .. tostring(info.itemButton and info.itemButton:GetName()) .. "\n" .. (tostring(t.mainStyle) .. '/' .. tostring(t.subStyle))) | |
| 327 end]] | |
| 328 return t | |
| 329 end | |
| 330 | |
| 331 | |
| 332 | |
| 333 mod.UpdateObjectives = function(block, info, text) | |
| 334 local print = B.print('BlockLine') | |
| 335 print(' |cFF00FF00objective updates for', block:GetName()) | |
| 336 | |
| 337 local attachmentHeight = block.attachmentHeight | |
| 338 print(attachmentHeight) | |
| 339 if info.description and not(info.earnedBy or info.isComplete) then | |
| 340 print(' -- has description text:', select('#', info.description), info.description) | |
| 341 text = info.description | |
| 342 end | |
| 343 local completionScore, completionMax = 0, 0 | |
| 344 | |
| 345 for i, line in ipairs(info.objectives) do | |
| 346 print(attachmentHeight) | |
| 347 print(' |cFF88FF00objective', i) | |
| 348 block.handler.ParseObjective(line, info) | |
| 349 | |
| 350 if line.title then | |
| 351 info.title = line.title | |
| 352 line.title = nil | |
| 353 end | |
| 354 | |
| 355 if line.widget then | |
| 356 if attachmentHeight == 0 then | |
| 357 attachmentHeight = (block.status.spacing or block.status:GetSpacing()) * 2 | |
| 358 --print(attachmentHeight) | |
| 359 end | 231 end |
| 360 line.widget:Show() | 232 end |
| 361 line.widget:SetParent(block) | 233 end |
| 362 line.widget:SetPoint('TOPLEFT', block.status, 'BOTTOMLEFT', 0, -attachmentHeight ) | 234 |
| 363 print(' has a widget, height is', line.widget.height) | 235 |
| 364 attachmentHeight = attachmentHeight + line.widget.height | 236 |
| 365 completionScore = completionScore + line.progress | 237 print(' displayHeader:', displayObjectiveHeader) |
| 366 completionMax = completionMax + 2 | 238 |
| 367 end | 239 if debug then |
| 368 | 240 for i, region in ipairs(block.debug) do |
| 369 if line.displayText then | 241 for j = 1, region:GetNumPoints() do |
| 370 print(' has text') | 242 local _, target = region:GetPoint(j) |
| 371 text = text .. ((text == '') and "" or "\n") .. '|cFF'..line.displayColor.. line.displayText .. '|r' | 243 if target:IsVisible() then |
| 372 end | 244 region:Hide() |
| 373 end | 245 else |
| 374 | 246 region:Show() |
| 375 | 247 end |
| 248 end | |
| 249 end | |
| 250 end | |
| 376 | 251 |
| 377 block.completionScore = completionScore / completionMax | 252 block.completionScore = completionScore / completionMax |
| 378 block.attachmentHeight = attachmentHeight | 253 end |
| 379 | 254 |
| 380 if #text >= 1 then | 255 Bonus.UpdateObjectives = function(handler, block) |
| 381 block.status:SetText(text) | 256 Default.UpdateObjectives(handler, block) |
| 382 block.status:SetWordWrap(true) | 257 end |
| 383 else | 258 |
| 384 block.status:SetText(nil) | 259 local CLICK_TO_COMPLETE = 'Click to Complete' |
| 385 block.status:Hide() | 260 local CLICK_TO_ACCEPT = 'Click to Accept' |
| 386 end | 261 |
| 387 | 262 AutoQuest.UpdateObjectives = function(handler, block) |
| 388 end | 263 local print = lprint |
| 389 | 264 if block.info.type == 'OFFER' then |
| 390 --- Objective parsers | 265 block.status:SetText(CLICK_TO_ACCEPT) |
| 391 -- defines the following variables | 266 end |
| 267 | |
| 268 end | |
| 269 | |
| 270 Quest.UpdateObjectives = function(handler, block) | |
| 271 local print = lprint | |
| 272 print('|cFF00FFFFUpdateObjectives()') | |
| 273 Default.UpdateObjectives(handler, block) | |
| 274 local info = block.info | |
| 275 local completionText | |
| 276 if info.isAutoComplete then | |
| 277 local questID, popupType = GetAutoQuestPopUp(info.questLogIndex) | |
| 278 if popupType == 'COMPLETE' then | |
| 279 completionText = CLICK_TO_COMPLETE | |
| 280 end | |
| 281 end | |
| 282 if not completionText then | |
| 283 completionText = GetQuestLogCompletionText(info.questLogIndex) | |
| 284 end | |
| 285 | |
| 286 block.status:SetText() | |
| 287 end | |
| 288 | |
| 289 --- Module-specific display variables | |
| 392 -- * height - height of whatever display widget is involved in conveying the task | 290 -- * height - height of whatever display widget is involved in conveying the task |
| 393 -- * lines - number of non-wrapped text lines to account for line space; may be discarded depending on things | |
| 394 -- * money - boolean that determines listening for money events or not | 291 -- * money - boolean that determines listening for money events or not |
| 395 -- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively | 292 -- * progress - number ranging 0 to 2 indicating none/partial/full completion respectively |
| 396 DefaultTracker.ParseObjective = function(line, info) | 293 |
| 397 | 294 Quest.UpdateLine = function(handler, block, line, data) |
| 398 if line.finished then | 295 local print = lprint |
| 296 print(' |cFFFF0088', block:GetName(), line.index, data.type) | |
| 297 local objectiveType = data.type | |
| 298 local r, g, b, a = 0, 1, 1, 1 | |
| 299 line.progress = 0 | |
| 300 if data.finished then | |
| 399 line.progress = 2 | 301 line.progress = 2 |
| 400 elseif line.quantity > 0 then | 302 r, g, b, a = 0, 1, 0, 1 |
| 401 line.progress = 1 | 303 elseif objectiveType == 'monster' then |
| 402 else | 304 r, g, b, a = 1, 0, .45, 1 |
| 403 line.progress = 0 | 305 elseif objectiveType == 'item' then |
| 404 end | 306 r, g, b, a = .8, .8, .8, 1 |
| 405 | 307 elseif objectiveType == 'object' then |
| 406 end | 308 r, g, b, a = 1, 1, 1, 1 |
| 407 | 309 elseif objectiveType == 'player' then |
| 408 Bonus.ParseObjective = function(line, info) | 310 r, g, b, a = 0, 0.8, 1, 1 |
| 409 local print = B.print('BonusLine') | 311 end |
| 312 | |
| 313 line.displayColor = {r, g, b, a} | |
| 314 line.status:SetTextColor(r, g, b, a) | |
| 315 line.displayText = data.text | |
| 316 return line | |
| 317 end | |
| 318 | |
| 319 Bonus.UpdateLine = function(handler, block, line, data) | |
| 320 local info = block.info | |
| 321 local print = lprint | |
| 410 | 322 |
| 411 | 323 |
| 412 line.displayColor = 'FFFFFF' | 324 line.displayColor = 'FFFFFF' |
| 413 if line.text and not info.title then | 325 if data.text and not info.title then |
| 414 line.title = line.text | 326 print('using first text item as title') |
| 415 else | 327 info.title = data.text |
| 416 line.displayText = line.text | 328 else |
| 329 line.displayText = data.text | |
| 417 end | 330 end |
| 418 | 331 |
| 419 line.progress = 0 | 332 line.progress = 0 |
| 420 print(' ', line.index,'|cFFFF0088-|r', line.objectiveType, line.text) | 333 print(' ', data.objectiveIndex,'|cFFFF0088-|r', data.objectiveType, data.text) |
| 421 if line.objectiveType == 'progressbar' then | 334 if data.objectiveType == 'progressbar' then |
| 422 line.widgetType = 'ProgressBar' | 335 line.widgetType = 'ProgressBar' |
| 423 print(' |cFFFF44DDpercent='..tostring(GetQuestProgressBarPercent(info.questID))) | 336 print(' |cFFFF44DDpercent='..tostring(GetQuestProgressBarPercent(info.questID))) |
| 424 line.value = GetQuestProgressBarPercent(info.questID) or 0 | 337 data.value = GetQuestProgressBarPercent(info.questID) or 0 |
| 425 line.maxValue = 100 | 338 data.maxValue = 100 |
| 426 if line.value >= line.maxValue then | 339 if data.value >= data.maxValue then |
| 427 line.progress = 1 | 340 line.progress = 1 |
| 428 elseif line.value > 0 then | 341 elseif data.value > 0 then |
| 429 line.progress = 2 | 342 line.progress = 2 |
| 430 end | 343 end |
| 431 line.format = PERCENTAGE_STRING | 344 line.format = PERCENTAGE_STRING |
| 432 line.widget = mod.SetWidget(line, info, 'ProgressBar', info.questID..'-'..line.index) | 345 local widget = mod.SetWidget(line, data, 'ProgressBar', info.questID..'-'..data.objectiveIndex) |
| 433 print(' ** text:', line.text, 'value:', line.value, 'max:', line.maxValue) | 346 print(' |cFFFF0022** text:|r', data.text, '|cFFFF0022value:|r', data.value, '|cFFFF0022max:|r', data.maxValue) |
| 434 else | 347 widget:SetPoint('CENTER', line, 'CENTER', 0, 0) |
| 348 | |
| 349 line.widget = widget | |
| 350 line.height = widget.height | |
| 351 else | |
| 352 line.displayText = data.text | |
| 435 line.widget = nil | 353 line.widget = nil |
| 436 end | 354 end |
| 437 end | 355 return line |
| 438 | 356 end |
| 439 Cheevs.ParseObjective = function(line, info) | 357 |
| 358 Cheevs.UpdateLine = function(handler, block, line, data) | |
| 440 local print = B.print('CheevsLine') | 359 local print = B.print('CheevsLine') |
| 441 line.progress = 0 | 360 line.progress = 0 |
| 442 if line.flags then | 361 print(' ', data.objectiveIndex,'|cFF0088FF-|r', data.objectiveType, data.text) |
| 443 if band(line.flags, 0x00000001) > 0 then | 362 if data.flags then |
| 363 if band(data.flags, 0x00000001) > 0 then | |
| 444 line.format = "%d/%d" | 364 line.format = "%d/%d" |
| 445 line.widget = mod.SetWidget(line, info, 'ProgressBar', line.criteriaID) | 365 line.widget = mod.SetWidget(line, data, 'ProgressBar', data.criteriaID) |
| 446 elseif band(line.flags, 0x00000002) then | 366 line.height = line.widget.height |
| 367 elseif band(data.flags, 0x00000002) then | |
| 447 line.widget = nil | 368 line.widget = nil |
| 448 else | 369 else |
| 449 line.widget = nil | 370 line.widget = nil |
| 450 line.displayColor = 'FFFFFF' | 371 line.displayColor = 'FFFFFF' |
| 451 line.displayText = line.text | 372 line.displayText = line.text |
| 452 | 373 |
| 453 end | 374 end |
| 454 end | 375 else |
| 455 print('line.type =', line.type) | 376 |
| 456 print(' ** qtyStr:', line.quantityString, 'qty:', line.quantity, 'assetID:', line.assetID) | 377 line.displayText = data.text |
| 457 end | 378 end |
| 458 | 379 print('line.type =', data.type) |
| 459 Quest.ParseObjective = function(line) | 380 print(' ** qtyStr:', data.quantityString, 'qty:', data.quantity, 'assetID:', data.assetID) |
| 460 local print = B.print('QuestLine') | 381 end |
| 461 print(' |cFFFF0088', line.type) | 382 Default.UpdateLine = function(block, line) |
| 462 local color = '00FFFF' | |
| 463 line.progress = 0 | |
| 464 if line.finished then | 383 if line.finished then |
| 465 line.progress = 2 | 384 line.progress = 2 |
| 466 color = 'FFFFFF' | 385 elseif line.quantity > 0 then |
| 467 elseif line.type == 'monster' then | 386 line.progress = 1 |
| 468 color = 'FFFF00' | 387 else |
| 469 elseif line.type == 'item' then | 388 line.progress = 0 |
| 470 color = '44DDFF' | 389 end |
| 471 elseif line.type == 'object' then | 390 return line |
| 472 color = 'FF44DD' | |
| 473 end | |
| 474 line.displayColor = color | |
| 475 line.displayText = line.text | |
| 476 end | 391 end |
| 477 | 392 |
| 478 | 393 |
| 479 mod.Quest.numButtons = 0 | 394 mod.Quest.numButtons = 0 |
| 480 local usedButtons = mod.Quest.itemButtons | 395 local usedButtons = mod.Quest.itemButtons |
| 558 --]] | 473 --]] |
| 559 mod.UpdateActionButtons() | 474 mod.UpdateActionButtons() |
| 560 | 475 |
| 561 end | 476 end |
| 562 --]=] | 477 --]=] |
| 478 | |
| 479 | |
| 480 Default.Update = function (self, reason, ...) | |
| 481 local print = tprint | |
| 482 local tracker = self.frame | |
| 483 print('|cFFFF4400'..tracker:GetName().. '|r:Update()', reason, ...) | |
| 484 local blockIndex = 0 | |
| 485 local trackerHeight = floor(tracker.titlebg:GetHeight()+.5) | |
| 486 | |
| 487 self.currentAnchor = tracker.titlebg | |
| 488 local numWatched = self:GetNumWatched() | |
| 489 local numBlocks = self.numBlocks | |
| 490 local actualBlocks = 0 | |
| 491 for watchIndex = 1, 25 do | |
| 492 blockIndex = blockIndex + 1 | |
| 493 if watchIndex <= numWatched then | |
| 494 local info = self:GetInfo(watchIndex) | |
| 495 if info then | |
| 496 local currentBlock = self:UpdateBlock(blockIndex, info) | |
| 497 currentBlock:SetPoint('TOPLEFT', self.currentAnchor, 'BOTTOMLEFT', 0, -1) | |
| 498 currentBlock:SetPoint('RIGHT', tracker,'RIGHT', 0, 0) | |
| 499 self.currentAnchor = currentBlock | |
| 500 print(' |cFFFFFF00'..watchIndex..'|r', '|cFF00FF00'..currentBlock:GetName()..'|r', currentBlock.height) | |
| 501 trackerHeight = trackerHeight + currentBlock.height | |
| 502 numBlocks = max(numBlocks, watchIndex) | |
| 503 actualBlocks = actualBlocks + 1 | |
| 504 else | |
| 505 print(' |cFFFF0000bad GetInfo data for #'..watchIndex) | |
| 506 end | |
| 507 | |
| 508 elseif watchIndex <= numBlocks then | |
| 509 local used = self.usedBlocks | |
| 510 local free = self.freeBlocks | |
| 511 print('clean up dead quest block') | |
| 512 if used[blockIndex] then | |
| 513 used[blockIndex]:Hide() | |
| 514 used[blockIndex]:ClearAllPoints() | |
| 515 free[#free+1]= used[blockIndex] | |
| 516 used[blockIndex] = nil | |
| 517 end | |
| 518 else | |
| 519 print(' |cFFFF9900END|r @', blockIndex) | |
| 520 break -- done with quest stuff | |
| 521 end | |
| 522 end | |
| 523 self.numWatched = numWatched | |
| 524 self.numBlocks = numBlocks | |
| 525 self.actualBlocks = actualBlocks | |
| 526 | |
| 527 tracker.previousHeight = tracker.height | |
| 528 if numBlocks >= 1 then | |
| 529 previousBlock = nil | |
| 530 | |
| 531 tracker.height = trackerHeight + tracker.titlebg:GetHeight() | |
| 532 tracker:SetHeight(tracker.height) | |
| 533 tracker:Show() | |
| 534 | |
| 535 | |
| 536 else | |
| 537 tracker.height = 0 | |
| 538 tracker:Hide() | |
| 539 end | |
| 540 | |
| 541 return tracker.numWatched, tracker.numAll | |
| 542 end | |
| 543 | |
| 544 --- Updates the selected block frame to display the given info batch | |
| 545 -- If `previousBlock` is set, it will attempt to anchor to that | |
| 546 -- @param blockNum the ordered block to be updated, not a watchIndex value | |
| 547 -- @param info the reference returned by the GetXInfo functions | |
| 548 -- REMEMBER: t.info and questData[questID] are the same table | |
| 549 Default.UpdateBlock = function (self, blockIndex, info) | |
| 550 local print = bprint | |
| 551 print(' Read list item |cFF00FFFF'..blockIndex..'|r') | |
| 552 if not blockIndex or not info then | |
| 553 return | |
| 554 end | |
| 555 local frame = self.frame | |
| 556 local block = self:GetBlock(blockIndex) | |
| 557 block.handler = self | |
| 558 block.info = info | |
| 559 block.mainStyle = info.mainStyle or 'Normal' | |
| 560 block.subStyle = info.subStyle | |
| 561 | |
| 562 info.blockIndex = blockIndex | |
| 563 if info.questID then self.QuestBlock[info.questID] = block end | |
| 564 if info.questLogIndex then self.LogBlock[info.questLogIndex] = block end | |
| 565 if info.watchIndex then self.WatchBlock[info.watchIndex] = block end | |
| 566 self.BlockInfo[blockIndex] = info | |
| 567 | |
| 568 block.endPoint = block.titlebg | |
| 569 block.attachmentHeight = 0 | |
| 570 block:UpdateObjectives() | |
| 571 | |
| 572 block.title:SetText(info.title) | |
| 573 local titleHeight = floor(block.title:GetHeight()+.5) | |
| 574 local statusHeight = floor(block.status:GetHeight()+.5) | |
| 575 local attachmentHeight =floor(block.attachmentHeight + .5) | |
| 576 local titlebgHeight = titleHeight + titleSpacing*2 | |
| 577 local statusbgHeight = statusHeight + textSpacing*2 | |
| 578 | |
| 579 block.titlebg:SetHeight(titlebgHeight) | |
| 580 | |
| 581 | |
| 582 print(' |cFF0088FFanchor to', self.currentAnchor:GetName()) | |
| 583 | |
| 584 print(' |cFF00FF00total sizes:') | |
| 585 print(' attachment:', attachmentHeight) | |
| 586 print(' title:', titlebgHeight, '('.. titleHeight..')') | |
| 587 --block.titlebg:SetHeight(block.title:GetHeight() + mod.Conf.Wrapper.TitleSpacing) | |
| 588 block.height = titlebgHeight + attachmentHeight | |
| 589 if statusHeight > 1 then | |
| 590 block.height = block.height + statusbgHeight | |
| 591 print(' status:', statusbgHeight, '('.. statusHeight..')') | |
| 592 else | |
| 593 print(' |cFFFF0088 skipped') | |
| 594 end | |
| 595 block:SetHeight(block.height) | |
| 596 | |
| 597 print(' |cFFFFFF00height|r:', block.height) | |
| 598 print(' |cFF00FFFF)|r -> ', block, block:GetHeight()) | |
| 599 | |
| 600 block:Show() | |
| 601 | |
| 602 | |
| 603 if info.specialItem and not info.itemButton then | |
| 604 print(' - |cFF00FFFFgenerating item button for info set') | |
| 605 info.itemButton = mod.SetItemButton(block, info) | |
| 606 else | |
| 607 --info.itemButton = nil | |
| 608 end | |
| 609 | |
| 610 local tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block, 'TOPRIGHT' | |
| 611 if info.rewardInfo then | |
| 612 print('has immediate reward') | |
| 613 if info.rewardInfo[1].type == 'currency' or info.rewardInfo[1].type == 'item' then | |
| 614 block.icon:Show() | |
| 615 block.iconLabel:SetText(info.rewardInfo[1].count) | |
| 616 block.icon:SetSize(block.height, block.height) | |
| 617 block.icon:SetPoint(tagPoint, tagAnchor, tagRelative, 0, 0) | |
| 618 tagPoint, tagAnchor, tagRelative = 'TOPRIGHT', block.icon, 'TOPLEFT' | |
| 619 block.icon:SetTexture(info.rewardInfo[1].texture) | |
| 620 end | |
| 621 else | |
| 622 block.icon:Hide() | |
| 623 end | |
| 624 | |
| 625 if info.selected then | |
| 626 block.SelectionOverlay:Show() | |
| 627 else | |
| 628 block.SelectionOverlay:Hide() | |
| 629 end | |
| 630 | |
| 631 -- workaround for scrollchild issue where layers fall out of sync: in this case, it's by 1 vertical pixel | |
| 632 block.highlight:SetPoint('TOPLEFT', block, 'TOPLEFT', 0, 1) | |
| 633 block.lowlight:SetPoint('BOTTOMLEFT', block, 'BOTTOMLEFT', 0, 1) | |
| 634 | |
| 635 tagPoint, tagAnchor, tagRelative = block:SetTag('frequencyTag', tagPoint, tagAnchor, tagRelative) | |
| 636 tagPoint, tagAnchor, tagRelative = block:SetTag('typeTag', tagPoint, tagAnchor, tagRelative) | |
| 637 tagPoint, tagAnchor, tagRelative = block:SetTag('completionTag', tagPoint, tagAnchor, tagRelative) | |
| 638 | |
| 639 return block | |
| 640 end | |
| 641 ---------- | |
| 642 --- Top level methods | |
| 643 | |
| 644 local tick = 0 | |
| 645 function mod:Update (reason, ...) | |
| 646 tick = tick + 1 | |
| 647 local print = tprint | |
| 648 reason = reason or OBJECTIVE_TRACKER_UPDATE_REASON | |
| 649 local updateWrapper = 0 | |
| 650 local hasStuff | |
| 651 local insertingStuff | |
| 652 | |
| 653 print(format('%d |cFFFF%04X Update()', tick, bit.lshift(reason, 4)), reason, ...) | |
| 654 currentPosition = 0 | |
| 655 anchorPoint = 'TOP' | |
| 656 anchorFrame = Scroll | |
| 657 | |
| 658 local wrapperHeight = 0 | |
| 659 for id, handler in pairs(mod.orderedHandlers) do | |
| 660 local frame = handler.frame | |
| 661 | |
| 662 print(format(' |cFF00FFFFbitcheck (%04X vs %04x+%04x):|r', reason, handler.updateReasonModule, handler.updateReasonEvents), band(reason, handler.updateReasonModule + handler.updateReasonEvents)) | |
| 663 if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then | |
| 664 handler:Update(reason, ...) | |
| 665 print(' |cFF00FF00'..id..'|r', handler.displayName, 'count:', handler.numWatched) | |
| 666 insertingStuff = true | |
| 667 else | |
| 668 print(' |cFFFF0088'..id..'|r', 'no reason to update') | |
| 669 end | |
| 670 | |
| 671 if handler.numWatched >= 1 then | |
| 672 hasStuff = true | |
| 673 currentPosition = currentPosition + 1 | |
| 674 frame:SetParent(Scroll) | |
| 675 frame:SetPoint('TOP', anchorFrame, anchorPoint, 0, 0) | |
| 676 print(' |cFF00BBFFpinning to', anchorFrame:GetName(), anchorPoint) | |
| 677 anchorFrame = handler.frame | |
| 678 anchorPoint = 'BOTTOM' | |
| 679 | |
| 680 print('current frame height:', frame.height) | |
| 681 wrapperHeight = wrapperHeight + frame.height | |
| 682 print('|cFFFF0088total height:', wrapperHeight) | |
| 683 else | |
| 684 handler.frame:Hide() | |
| 685 end | |
| 686 end | |
| 687 | |
| 688 | |
| 689 if hasStuff or insertingStuff then | |
| 690 print('updating height to', wrapperHeight) | |
| 691 Wrapper:SetHeight(wrapperHeight) | |
| 692 Scroller:SetHeight(wrapperHeight) | |
| 693 Scroll:SetHeight(wrapperHeight) | |
| 694 Scroller:SetVerticalScroll(B.Conf.ObjectiveScroll or 0) | |
| 695 print('|cFFFF8800Wrapper:', Wrapper:GetSize()) | |
| 696 for i = 1, Wrapper:GetNumPoints() do | |
| 697 print(' ', Wrapper:GetPoint(i)) | |
| 698 end | |
| 699 print(' |cFF00FFFFScroller:', Scroller:GetSize()) | |
| 700 for i = 1, Scroller:GetNumPoints() do | |
| 701 print(' ', Scroller:GetPoint(i)) | |
| 702 end | |
| 703 print(' |cFF00FFFFScroll:', Scroll:GetSize()) | |
| 704 for i = 1, Scroll:GetNumPoints() do | |
| 705 print(' ', Scroll:GetPoint(i)) | |
| 706 end | |
| 707 | |
| 708 Wrapper:Show() | |
| 709 Scroller:Show() | |
| 710 Scroll:Show() | |
| 711 end | |
| 712 | |
| 713 end | |
| 563 | 714 |
| 564 --- Queue any active item buttons for update for that frame | 715 --- Queue any active item buttons for update for that frame |
| 565 mod.UpdateActionButtons = function(updateReason) | 716 mod.UpdateActionButtons = function(updateReason) |
| 566 Scroller.snap_upper = 0 | 717 Scroller.snap_upper = 0 |
| 567 Scroller.snap_lower = 0 | 718 Scroller.snap_lower = 0 |
