comparison ObjectiveWidgets.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
65 65
66 local Scroller_OnMouseWheel = function(self, delta) 66 local Scroller_OnMouseWheel = function(self, delta)
67 local r = Scroll:GetHeight() - Scroller:GetHeight() 67 local r = Scroll:GetHeight() - Scroller:GetHeight()
68 local s = B.Conf.ObjectiveScroll - delta * floor(r/5+.5) 68 local s = B.Conf.ObjectiveScroll - delta * floor(r/5+.5)
69 local from = self:GetVerticalScroll() 69 local from = self:GetVerticalScroll()
70 print('|cFF00FF00OnMouseWheel', 'scroll =', s)
70 if s >= r then 71 if s >= r then
71 s = r 72 s = r
72 elseif s < 1 then 73 elseif s < 1 then
73 s = 0 74 s = 0
74 end 75 end
266 mod.WidgetRegistry = {} 267 mod.WidgetRegistry = {}
267 local wr = mod.WidgetRegistry 268 local wr = mod.WidgetRegistry
268 269
269 --- Get a usable widget for the given achievement criteria set. 270 --- Get a usable widget for the given achievement criteria set.
270 -- Returns a frame object with dimensioning parameters needed to size the receiving tracker block 271 -- Returns a frame object with dimensioning parameters needed to size the receiving tracker block
271 mod.SetWidget = function(line, info, objectiveType, objectiveKey) 272 mod.SetWidget = function(line, data, objectiveType, objectiveKey)
272 local print = B.print('ObjectiveWidgets') 273 local print = B.print('ObjectiveWidgets')
273 local widgetType = objectiveType 274 local widgetType = objectiveType
274 local widget 275 local widget
275 if wr[widgetType] and wr[widgetType].used[objectiveKey] then 276 if wr[widgetType] and wr[widgetType].used[objectiveKey] then
276 widget = wr[widgetType].used[objectiveKey] 277 widget = wr[widgetType].used[objectiveKey]
285 end 286 end
286 287
287 288
288 wr[widgetType].used[objectiveKey] = widget 289 wr[widgetType].used[objectiveKey] = widget
289 widget.line = line 290 widget.line = line
290 widget.info = info 291 widget.objective = data
291 widget.key = objectiveKey 292 widget.key = objectiveKey
292 mod.InitializeWidget(widget) 293 mod.InitializeWidget(widget)
293 return widget 294 return widget
294 end 295 end
295 296
311 __call = function(t, frame) 312 __call = function(t, frame)
312 -- todo: config pull 313 -- todo: config pull
313 314
314 frame:SetWidth(mod.Conf.Wrapper.Width - mod.Conf.Style.Format.status.Indent * 2) 315 frame:SetWidth(mod.Conf.Wrapper.Width - mod.Conf.Style.Format.status.Indent * 2)
315 frame:SetScript('OnEvent', mod.UpdateWidget[frame.widgetType]) 316 frame:SetScript('OnEvent', mod.UpdateWidget[frame.widgetType])
316 if frame.info.isCurrency then
317 frame:RegisterEvent('CHAT_MSG_CURRENCY')
318 frame:RegisterEvent('CURRENCY_LIST_UPDATE')
319 end
320 frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE') 317 frame:RegisterEvent('TRACKED_ACHIEVEMENT_UPDATE')
321 frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED') 318 frame:RegisterEvent('TRACKED_ACHIEVEMENT_LIST_CHANGED')
322 frame:RegisterEvent('CRITERIA_UPDATE') 319 frame:RegisterEvent('CRITERIA_UPDATE')
323 frame:RegisterEvent('CRITERIA_COMPLETE') 320 frame:RegisterEvent('CRITERIA_COMPLETE')
324 frame:RegisterEvent('CRITERIA_EARNED') 321 frame:RegisterEvent('CRITERIA_EARNED')
361 local tracked = {GetTrackedAchievements() } 358 local tracked = {GetTrackedAchievements() }
362 local tasks = GetTasksTable() 359 local tasks = GetTasksTable()
363 for type, reg in pairs(mod.WidgetRegistry) do 360 for type, reg in pairs(mod.WidgetRegistry) do
364 print('collecting', type) 361 print('collecting', type)
365 for key, frame in pairs(reg.used) do 362 for key, frame in pairs(reg.used) do
366 if frame.info.cheevID then 363 if frame.objective.cheevID then
367 local id = frame.info.cheevID 364 local id = frame.objective.cheevID
368 365
369 if id and not tContains(tracked, id) then 366 if id and not tContains(tracked, id) then
370 367
371 print(' untracked achievement', id, 'associated with', key, frame:GetName()) 368 print(' untracked achievement', id, 'associated with', key, frame:GetName())
372 frame:Hide() 369 frame:Hide()
373 end 370 end
374 elseif frame.info.questID then 371 elseif frame.objective.questID then
375 -- do something for quest task 372 -- do something for quest task
376 end 373 end
377 end 374 end
378 end 375 end
379 end 376 end
380 377
381 378
382 379
383 mod.defaults.WidgetStyle = { 380 mod.defaults.WidgetStyle = {
384 ProgressBar = { 381
385 Spacing = 4,
386 bg = {
387 Height = 20,
388 },
389 fg = {
390 Height = 16,
391 },
392 status = {
393 FontObject = _G.VeneerCriteriaFontNormal
394 }
395 }
396 } 382 }
383
384 local progressHeight = 16
385 local progressBorder = 2
386 local progressIndent = 3
387 local progressFont = _G.VeneerCriteriaFontNormal
388
389
397 mod.InitializeWidget.ProgressBar = function(self) 390 mod.InitializeWidget.ProgressBar = function(self)
398 local c = mod.defaults.WidgetStyle.ProgressBar 391 local c = mod.Conf.Wrapper
399 self.height = c.bg.Height + c.Spacing 392 self.height = progressHeight + c.TextSpacing
400 self:SetHeight(c.bg.Height) 393 self.width = c.Width - c.TextSpacing
401 self.bg:SetHeight(c.bg.Height) 394 self.indent = progressIndent
395
396 self:SetHeight(progressHeight)
397 self.bg:SetHeight(progressHeight)
398 self.bg:SetWidth(self.width)
402 self.fg:ClearAllPoints() 399 self.fg:ClearAllPoints()
403 self.indent = (c.bg.Height - c.fg.Height) / 2
404 self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', self.indent, self.indent) 400 self.fg:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', self.indent, self.indent)
405 self.fg:SetHeight(c.fg.Height) 401 self.fg:SetHeight(progressHeight - progressIndent * 2)
406 self.status:SetFontObject(c.status.FontObject) 402 self.status:SetFontObject(progressFont)
407 self.status:SetText(self.info.quantityString) 403 self.status:SetText(self.objective.quantityString)
408 end 404 end
409 405
410 mod.UpdateWidget.ProgressBar = function (self) 406 mod.UpdateWidget.ProgressBar = function (self)
411 local quantity, requiredQuantity = self.line.value, self.line.maxValue 407 local quantity, requiredQuantity = self.objective.value, self.objective.maxValue
412 print('update vals:') 408 print('update vals:')
413 for k,v in pairs(self.line) do 409 for k,v in pairs(self.line) do
414 print(k, v) 410 print(k, v)
415 end 411 end
416 412
417 if self.line.format then 413 if self.line.format then
418 self.status:SetFormattedText(self.line.format, self.line.value, self.line.maxValue) 414 self.status:SetFormattedText(self.line.format, quantity, requiredQuantity)
419 end 415 end
420 416
421 417 local progress = (quantity / requiredQuantity)
422 if quantity == 0 then 418 if progress >= 1 then
419 self.fg:Show()
420 self.fg:SetWidth(self.width - self.indent)
421 elseif progress > 0 then
422 self.fg:Show()
423 print('color:', 1-progress*2 , progress*2 - 1,0,1)
424 print('width:', (self.width -self.indent) * progress)
425 self.fg:SetTexture(1-progress*2 , progress*2,0,1)
426 self.fg:SetWidth((self.width -self.indent) * progress)
427 else
423 self.fg:Hide() 428 self.fg:Hide()
424 elseif quantity >= requiredQuantity then
425 self.fg:SetWidth(self.bg:GetWidth() - self.indent)
426 else
427 self.fg:Show()
428 self.fg:SetWidth((self.bg:GetWidth() -self.indent) * (quantity / requiredQuantity))
429 end 429 end
430 end 430 end
431 431
432 432
433 mod.InitializeWidget.Hidden = function (self) 433 mod.InitializeWidget.Hidden = function (self)