diff ObjectiveTracker/Default.lua @ 44:756e8aeb040b

- Default.lua - simplified the response to SuperTrackedQuestID changes - tag icons work again
author Nenue
date Mon, 25 Apr 2016 19:37:13 -0400
parents ObjectiveTracker/Update.lua@9480bd904f4c
children dd1ae565f559
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ObjectiveTracker/Default.lua	Mon Apr 25 19:37:13 2016 -0400
@@ -0,0 +1,287 @@
+--- ${PACKAGE_NAME}
+-- @file-author@
+-- @project-revision@ @project-hash@
+-- @file-revision@ @file-hash@
+-- Created: 4/17/2016 7:33 AM
+--- These are the first layer of methods invoked by event handlers
+
+local B = select(2,...).frame
+local T = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
+local Devian = Devian
+local _G, ipairs, max, min, unpack, floor, pairs, tostring, type, band = _G, ipairs, max, min, unpack, floor, pairs, tostring, type, bit.band
+local IsResting, UnitXP, UnitXPMax, GetXPExhaustion, tinsert, tremove = IsResting, UnitXP, UnitXPMax, GetXPExhaustion, table.insert, table.remove
+local UnitLevel, IsQuestWatched, UIParent = UnitLevel, IsQuestWatched, UIParent
+local GetAutoQuestPopUp, GetQuestLogCompletionText = GetAutoQuestPopUp, GetQuestLogCompletionText
+local PERCENTAGE_STRING, GetQuestProgressBarPercent = PERCENTAGE_STRING, GetQuestProgressBarPercent
+local Default, AutoQuest, Quest, Bonus, Cheevs = T.DefaultHandler, T.AutoQuest, T.Quest, T.Bonus, T.Cheevs
+local InCombatLockdown, format, lshift, CreateFrame = InCombatLockdown, format, bit.lshift, CreateFrame
+local IsModifiedClick, ChatEdit_GetActiveWindow = IsModifiedClick, ChatEdit_GetActiveWindow
+local print = B.print('Tracker')
+local oprint = B.print('Objectives')
+local bprint = B.print('Block')
+local tprint = B.print('Tracker')
+local lprint = B.print('Line')
+local unitLevel = 1
+local OBJECTIVE_TRACKER_UPDATE_REASON = OBJECTIVE_TRACKER_UPDATE_REASON
+local debug = false
+
+--- FRAMES
+local Wrapper = _G.VeneerObjectiveWrapper
+local Scroller = Wrapper.scrollArea
+local Scroll = _G.VeneerObjectiveScroll
+local orderedHandlers = T.orderedHandlers
+local orderedNames = T.orderedNames
+
+
+--- Placing the Update functions here since they shouldn't be messing with schema stuff
+local currentPosition, anchorFrame, anchorPoint
+--- Positioning and stuff
+local tick = 0
+local initReason = OBJECTIVE_TRACKER_UPDATE_ALL
+local requiresInit
+function T:Update (reason, ...)
+  if not B.Conf.VeneerObjectiveWrapper.enabled then
+    return
+  end
+  tick = tick + 1
+  local print = tprint
+  local hasStuff = false
+  local insertingStuff = false
+
+  if initReason then
+    reason = initReason
+    initReason = nil
+  elseif not reason then
+    reason = OBJECTIVE_TRACKER_UPDATE_ALL
+  end
+  print(format('|cFFBB0066Update:|r |cFFFF%04X%d|r  ', tick, lshift(reason, 4)), reason, ...)
+  currentPosition = 0
+
+  for id, handler in pairs(T.orderedHandlers) do
+    local frame = handler.frame
+
+    print('')
+    if band(reason, handler.updateReasonModule + handler.updateReasonEvents) > 0 then
+      insertingStuff = handler:UpdateTracker(reason, ...)
+    else
+      print('  |cFFFF4400Update:|r skipping',handler.name)
+    end
+
+    if handler.numWatched >= 1 then
+      hasStuff = true
+      currentPosition = currentPosition + 1
+      Default.AddTracker(handler, frame, currentPosition)
+      frame.wasEmpty = nil
+    else
+      frame.destinationOffset = 0
+      if not frame.wasEmpty and  not frame.fadeOut:IsPlaying() then
+        frame.fadeOut:Play()
+      end
+      frame.wasEmpty = true
+    end
+  end
+
+  -- do these whenever there is content or content is being added
+  if  hasStuff or insertingStuff then
+    T:FinishWrapper()
+  end
+  Quest.GetClosest()
+  T.UpdateActionButtons(reason)
+end
+
+Default.UpdateTracker = function (handler, reason, id, isNew)
+  local print = handler.print
+  local frame = handler.frame
+  local blockIndex = 0
+  print('MODULE:'..handler.name, 'message:', reason, 'id:', id, (isNew and '|cFF88FF88' or '|cFF555555')..'isNew|r')
+  handler.updateReason = reason
+  local numWatched, numAll, watchTable = handler:GetNumWatched(id, isNew)
+
+  if numWatched >= 1 then
+    if watchTable then
+      print('    WatchList', ' n     ID    Obj wID Log Blk')
+      for i, w in ipairs(watchTable) do
+        print('    WatchList', format('%2d => %6d %3d %3d %3s %s', i, w.id, w.numObjectives, w.watchIndex, (w.logIndex or ''), (handler.InfoBlock[w.id] and handler.InfoBlock[w.id]:GetName() or '')))
+      end
+    end
+  end
+
+  handler.numWatched = numWatched
+  handler.numAll = numAll
+  handler.numBlocks = 0
+  handler.currentBlock = 0
+  handler.currentAnchor = frame.titlebg
+  for blockIndex = 1, numWatched do
+    local currentBlock = handler:UpdateBlock(blockIndex, id, isNew)
+    if currentBlock then
+      handler:AddBlock(currentBlock)
+    else
+      print('    |cFF'..handler.internalColor..'finished|r @', blockIndex)
+      break -- done with quest stuff
+    end
+  end
+
+  local numBlocks = handler.numBlocks
+  local used = handler.usedBlocks
+  local free = handler.freeBlocks
+  print(format('#### %s ## |cFFFF8800%04X|r --- blocks |cFFFF8800%d|r, (used/free: |cFFFF8800%d|r/|cFFFF8800%d|r)', handler.name, band(reason, handler.updateReasonModule + handler.updateReasonEvents, reason), numBlocks, #used, #free))
+
+  return numWatched, numAll
+end
+
+Default.UpdateBlock = function (handler, index)
+  --@debug@
+  local print = bprint -- @end-debug@
+  if not index then
+    return
+  end
+  local info = handler.WatchList[index] -- should match up with whatever the internal watch list has
+  if not info then
+    return
+  end
+  local frame = handler.frame
+  local block = handler:GetBlock(info.id)
+
+  --@debug@
+  handler.print('UpdateBlock', '|cFF00FFFF'..index..'|r|cFF0099FF', info.id ,'|r', (block.isAnimating and 'animating' or 'static'))--@end-debug@
+  if  block.isAnimating then
+    -- Nothing to do, leave it as is
+    return block
+  end
+
+  block.handler = handler
+  block.info = info
+  info.blockIndex = index
+  --@debug@
+  local keyInfo--@end-debug@
+  if info.id then
+    handler.InfoBlock[info.id] = block
+    --@debug@
+    keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'InfoBlock[' .. info.id .. '] = *' .. block:GetName():gsub('%D', '') --@end-debug@
+  end
+  if info.logIndex then
+    handler.LogBlock[info.logIndex] = block
+    --@debug@
+    keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'LogBlock[' .. info.logIndex .. '] = ' .. block:GetName():gsub('%D', '')--@end-debug@
+  end
+  if info.watchIndex then
+    handler.WatchBlock[info.watchIndex] = block
+    --@debug@
+    keyInfo = (keyInfo and (keyInfo..', ') or '') .. 'WatchBlock[' .. info.watchIndex .. '] = ' .. block:GetName():gsub('%D', '')--@end-debug@
+  end
+  --@debug@
+  if keyInfo then print('    assigned', keyInfo) end--@end-debug@
+  handler.BlockInfo[index] = info
+  block.endPoint = block.titlebg
+  block.attachmentHeight = 0
+  block.currentLine = 0
+  local attachments, override_schema = handler:UpdateObjectives(block, block.schema)
+
+
+  block.title:SetText(info.title)
+
+  if info.specialItem and not info.itemButton then
+    --@debug@
+    print('    - |cFF00FFFFgenerating item button for info set')--@end-debug@
+    info.itemButton = T.SetItemButton(block, info)
+  end
+
+
+  if info.selected then
+    block.SelectionOverlay:Show()
+  else
+    block.SelectionOverlay:Hide()
+  end
+
+  if info.tagInfo then
+    handler:AddTags(block, info.tagInfo, info.tagCoords)
+  end
+
+  if override_schema then
+    block.schema = override_schema
+  elseif info.schema then
+    block.schema = info.schema
+  end
+  return block
+end
+
+Default.UpdateObjectives = function(handler, block, block_schema, displayObjectives)
+  local print = lprint
+  displayObjectives = displayObjectives or true
+  block_schema = block_schema or block.schema
+  local info = block.info
+  print('  |cFF00FF00default.objectives', block:GetName())
+  -- reset the starting positions
+  local text, attachment, template
+  local numAttachments = 0
+
+  if info.objectives and displayObjectives then
+    for i, data in ipairs(info.objectives) do
+      text, attachment, template = handler:UpdateLine(block, data)
+      if text or attachment then
+        local line = handler:GetLine(block)
+        line.height = 0
+        print('  |cFF88FF00#', i, data.type, text, attachment)
+        handler:AddLine(block, text, attachment, template)
+      end
+      if attachment then
+        numAttachments = numAttachments + 1
+      end
+    end
+  end
+
+  if block.currentLine < block.numLines then
+    print('  - cull', block.currentLine, block.numLines)
+    for i = block.currentLine + 1, block.numLines do
+      print('  - hide |cFFFF0088'..i..'|r', block.lines[i])
+      block.lines[i]:ClearAllPoints()
+      block.lines[i]:Hide()
+    end
+  end
+
+  if block.currentLine > 0 then
+    block.attachmentHeight = block.attachmentHeight
+    print('   |cFF00FF00attachment:', block.attachmentHeight)
+  end
+  return numAttachments, block_schema
+end
+
+Default.UpdateLine = function(handler, block, data)
+  return block.info.description, nil, 'default'
+end
+
+Default.Select = function(handler, block)
+  T:Update()
+end
+Default.Open = function(handler, block)
+  T:Update(handler.updateReasonModule)
+end
+Default.Remove = function(handler, block)
+  T:Update(handler.updateReasonModule)
+end
+Default.Report = function(handler, block)
+  print('Stats:', handler.numWatched,'items tracked,', handler.numBlocks,'blocks assigned.')
+end
+
+function Default:OnMouseUp (button)
+  print(self.handler.name, button, IsModifiedClick('CHATLINK'), IsModifiedClick("QUESTWATCHTOGGLE"))
+  if button == 'LeftButton' then
+    if IsModifiedClick("CHATLINK") and ChatEdit_GetActiveWindow() then
+      self.Link(self.handler, self)
+    elseif IsModifiedClick("QUESTWATCHTOGGLE") then
+      self.Remove(self.handler, self)
+    else
+      self.Select(self.handler, self)
+    end
+  elseif button == 'RightButton' then
+    self.Open(self.handler, self)
+  end
+  self.initialButton = nil
+  self.modChatLink = nil
+  self.modQuestWatch = nil
+  --T:Update(self.handler.updateReasonModule)
+  print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r')
+end
+function Default:OnMouseDown (button)
+  --print(self.info.title)
+end