comparison ObjectiveTracker/Widgets.lua @ 34:9856ebc63fa4

- half solution to Update being fired multiple times during load - change securefunc handlers to dispense a reason code; catch that reason code in the enclosure passed to hooksecurefunc, and decide whether to update or not from there.
author Nenue
date Sun, 17 Apr 2016 00:21:45 -0400
parents 64f2a9bbea79
children 69d03f8e293e
comparison
equal deleted inserted replaced
33:64f2a9bbea79 34:9856ebc63fa4
100 end 100 end
101 101
102 local OnClick = {} 102 local OnClick = {}
103 OnClick.CloseButton = function(self) 103 OnClick.CloseButton = function(self)
104 T:SetEnabled() 104 T:SetEnabled()
105 if T.Conf.enabled then
106 T:Update()
107 end
108
105 UpdatePanelButton(self, T.Conf.enabled) 109 UpdatePanelButton(self, T.Conf.enabled)
106 end 110 end
107 111
108 OnClick.QuestMapButton = function() 112 OnClick.QuestMapButton = function()
109 ToggleWorldMap() 113 ToggleWorldMap()
175 179
176 itemButton:SetAttribute("type", "item") 180 itemButton:SetAttribute("type", "item")
177 itemButton:SetAttribute("item", itemInfo.link) 181 itemButton:SetAttribute("item", itemInfo.link)
178 182
179 itemButton.questID = info.questID 183 itemButton.questID = info.questID
180 itemButton.questLogIndex = info.questLogIndex 184 itemButton.logIndex = info.logIndex
181 itemButton.charges = itemInfo.charges 185 itemButton.charges = itemInfo.charges
182 itemButton.rangeTimer = -1 186 itemButton.rangeTimer = -1
183 itemButton.block = block 187 itemButton.block = block
184 188
185 SetItemButtonTexture(itemButton, itemInfo.icon) 189 SetItemButtonTexture(itemButton, itemInfo.icon)
212 -- Handle range indicator 216 -- Handle range indicator
213 local rangeTimer = self.rangeTimer 217 local rangeTimer = self.rangeTimer
214 if (rangeTimer) then 218 if (rangeTimer) then
215 rangeTimer = rangeTimer - elapsed 219 rangeTimer = rangeTimer - elapsed
216 if (rangeTimer <= 0) then 220 if (rangeTimer <= 0) then
217 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex) 221 local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.logIndex)
218 if ((not charges) or (charges ~= self.charges)) then 222 if ((not charges) or (charges ~= self.charges)) then
219 T:Update() 223 T:Update()
220 return 224 return
221 end 225 end
222 226
223 local count = self.HotKey 227 local count = self.HotKey
224 local valid = IsQuestLogSpecialItemInRange(self.questLogIndex) 228 local valid = IsQuestLogSpecialItemInRange(self.logIndex)
225 if (valid == 0) then 229 if (valid == 0) then
226 count:Show() 230 count:Show()
227 count:SetVertexColor(1.0, 0.1, 0.1) 231 count:SetVertexColor(1.0, 0.1, 0.1)
228 elseif (valid == 1) then 232 elseif (valid == 1) then
229 count:Show() 233 count:Show()
237 self.rangeTimer = rangeTimer 241 self.rangeTimer = rangeTimer
238 end 242 end
239 end 243 end
240 244
241 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton) 245 function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
242 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex) 246 local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.logIndex)
243 if (start) then 247 if (start) then
244 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable) 248 CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
245 if (duration > 0 and enable == 0) then 249 if (duration > 0 and enable == 0) then
246 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4) 250 SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
247 else 251 else
318 textIndent = T.Conf.Wrapper.TextIndent 322 textIndent = T.Conf.Wrapper.TextIndent
319 end 323 end
320 324
321 frame:SetWidth(wrapperWidth - textIndent * 2) 325 frame:SetWidth(wrapperWidth - textIndent * 2)
322 frame:SetScript('OnEvent', T.UpdateWidget[frame.widgetType]) 326 frame:SetScript('OnEvent', T.UpdateWidget[frame.widgetType])
327 frame:RegisterEvent('QUEST_LOG_UPDATE')
323 frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE') 328 frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE')
324 frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED') 329 frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED')
325 frame:RegisterEvent('CRITERIA_UPDATE') 330 frame:RegisterEvent('CRITERIA_UPDATE')
326 frame:RegisterEvent('CRITERIA_COMPLETE') 331 frame:RegisterEvent('CRITERIA_COMPLETE')
327 frame:RegisterEvent('CRITERIA_EARNED') 332 frame:RegisterEvent('CRITERIA_EARNED')
385 390
386 T.defaults.WidgetStyle = { 391 T.defaults.WidgetStyle = {
387 392
388 } 393 }
389 394
390 local progressHeight = 16 395 local progressHeight = 8
391 local progressBorder = 1 396 local progressBorder = 1
392 local progressIndent = 3
393 local progressFont = _G.VeneerCriteriaFontNormal 397 local progressFont = _G.VeneerCriteriaFontNormal
394 398
395 399 local lprint = B.print('Line')
396 T.InitializeWidget.ProgressBar = function(self) 400 T.InitializeWidget.ProgressBar = function(self)
401 local print = lprint
397 local c = T.Conf.Wrapper 402 local c = T.Conf.Wrapper
398 self.height = progressHeight + c.TextSpacing 403 self.height = progressHeight + c.TextSpacing
399 self.width = c.Width - c.TextSpacing 404 self.width = c.Width - c.TextSpacing
400 self.indent = progressIndent 405 self.value = self.value or 1
401 self.value = 1 406 self.maxValue = self.maxValue or 1
402 self.maxValue = 1
403 407
404 self:SetHeight(progressHeight) 408 self:SetHeight(progressHeight)
405 self.bg:SetHeight(progressHeight) 409 self.bg:SetHeight(progressHeight)
406 self.bg:SetWidth(self.width) 410 self.bg:SetWidth(self.width)
407 self.fg:ClearAllPoints() 411 self.fg:ClearAllPoints()
408 self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', progressBorder, progressBorder) 412 self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', progressBorder, progressBorder)
409 self.fg:SetHeight(progressHeight - progressBorder * 2) 413 self.fg:SetHeight(progressHeight - progressBorder * 2)
414
410 self.status:SetFontObject(progressFont) 415 self.status:SetFontObject(progressFont)
411 self.status:SetText(self.objective.quantityString) 416 self.status:SetText(self.objective.quantityString)
412 end 417 end
413 418
414 T.UpdateWidget.ProgressBar = function (self) 419 T.UpdateWidget.ProgressBar = function (self)
415 local quantity, requiredQuantity = self.value, self.maxValue 420 local quantity, requiredQuantity = self.value, self.maxValue
416 print('update vals:') 421 print('update vals:')
417 for k,v in pairs(self.line) do 422 for k,v in pairs(self.line) do
418 print(k, v) 423 print(k, v)
419 end
420
421 if self.line.format then
422 self.status:SetFormattedText(self.line.format, quantity, requiredQuantity)
423 end 424 end
424 425
425 local progress = (quantity / requiredQuantity) 426 local progress = (quantity / requiredQuantity)
426 if progress >= 1 then 427 if progress >= 1 then
427 self.fg:Show() 428 self.fg:Show()