diff ObjectiveUI.lua @ 1:b0447b382f36

sorting client events from maintenance logic implemented all that action buttons entail for quest items
author Nenue
date Wed, 30 Mar 2016 16:30:49 -0400
parents 3dbcad2b387d
children a2396b03ce63
line wrap: on
line diff
--- a/ObjectiveUI.lua	Wed Mar 30 02:24:56 2016 -0400
+++ b/ObjectiveUI.lua	Wed Mar 30 16:30:49 2016 -0400
@@ -20,16 +20,24 @@
 end
 
 Tracker.OnMouseUp = function(self, button)
-  if button == 'LeftButton' then
+
+  if self.initialButton == 'LeftButton' then
     self:Select()
     mod.UpdateWrapper()
+    if self.modShift then
+      self:Remove()
+    end
   elseif button == 'RightButton' then
     self:Open()
   end
+  self.initialButton = nil
+  self.modShift = nil
   print('|cFFFF8800'..tostring(self:GetName())..':MouseUp()|r ->',self.info.trackingID)
 end
 
 Tracker.OnMouseDown = function(self, button)
+  self.initialButton = button
+  self.modShift = IsShiftKeyDown()
   if button == 'LeftButton' then
     self:SetStyle('Active')
   end
@@ -48,9 +56,12 @@
   SetSuperTrackedQuestID(self.info.questID)
 end
 Quest.Open = function(self)
-  print('something something quest log')
-  QuestMapFrame_ShowQuestDetails(self.info.questID)
-  ToggleQuestLog()
+  QuestMapFrame_OpenToQuestDetails(self.info.questID)
+end
+
+Quest.Remove = function(self)
+  RemoveQuestWatch(self.info.questIndex)
+  QuestPOIUpdateIcons()
 end
 
 
@@ -62,3 +73,115 @@
 Cheevs.Open = function(self)
 end
 
+----------------------------------------------------------------------------------------
+--- frame template and scripts lifted from "QuestKing 2" by Barjack
+--- url: http://mods.curse.com/addons/wow/questking
+----------------------------------------------------------------------------------------
+local usedButtons = mod.Quest.itemButtons
+local freeButtons = mod.Quest.freeButtons
+mod.SetItemButton = function(block, info)
+  local itemInfo = info.specialItem
+  if not itemInfo then
+    return
+  end
+  --- .specialItem :: {link = link, charges = charges, icon = icon, start = start, duration = duration, enable = enable}
+
+
+  local itemButton
+  if not info.itemButton then
+    if #freeButtons >= 1 then
+      print('|cFF00FFFFfound a free button')
+      itemButton = freeButtons[#freeButtons]
+      freeButtons[#freeButtons] = nil
+    else
+      print('|cFFFF4400starting new button')
+      local buttonIndex = mod.Quest.numButtons + #freeButtons + 1
+      itemButton = CreateFrame('Button', 'VeneerQuestItemButton' .. buttonIndex, UIParent, 'VeneerItemButtonTemplate')
+      itemButton.buttonIndex = buttonIndex
+      itemButton:SetSize(48, 48)
+      itemButton:GetNormalTexture():SetSize(80,80)
+    end
+    mod.Quest.numButtons = mod.Quest.numButtons + 1
+  else
+    print('|cFF00FF00found assigned button')
+    itemButton = info.itemButton
+  end
+  -- set values
+  info.itemButton = itemButton
+  block.itemButton = itemButton
+  usedButtons[info.questLogIndex] = itemButton
+
+  itemButton:SetAttribute("type", "item")
+  itemButton:SetAttribute("item", itemInfo.link)
+
+  itemButton.questLogIndex = info.questLogIndex
+  itemButton.charges = itemInfo.charges
+  itemButton.rangeTimer = -1
+  itemButton.block = block
+
+  SetItemButtonTexture(itemButton, itemInfo.icon)
+  SetItemButtonCount(itemButton, itemInfo.charges)
+  Veneer_QuestObjectiveItem_UpdateCooldown(itemButton);
+
+  return itemButton
+end
+--- Clear an itemButton from the given block
+mod.FreeItemButton = function(block, itemButton)
+  if block.itemButton ~= itemButton then
+    print('|cFFFF0088trying to release mismatched action button')
+    return
+  end
+
+  block.itemButton = nil
+  block.icon:Hide()
+
+  itemButton.block = nil
+  itemButton:Hide()
+
+  usedButtons[itemButton.questLogIndex] = nil
+  freeButtons[#freeButtons + 1] = itemButton
+  mod.Quest.numButtons = mod.Quest.numButtons - 1
+  print('|cFFFF0088released', itemButton:GetName(),'from', block:GetName())
+end
+
+function Veneer_QuestObjectiveItem_OnUpdate (self, elapsed)
+  -- Handle range indicator
+  local rangeTimer = self.rangeTimer
+  if (rangeTimer) then
+    rangeTimer = rangeTimer - elapsed
+    if (rangeTimer <= 0) then
+      local link, item, charges, showItemWhenComplete = GetQuestLogSpecialItemInfo(self.questLogIndex)
+      if ((not charges) or (charges ~= self.charges)) then
+        QuestKing:UpdateTracker()
+        return
+      end
+
+      local count = self.HotKey
+      local valid = IsQuestLogSpecialItemInRange(self.questLogIndex)
+      if (valid == 0) then
+        count:Show()
+        count:SetVertexColor(1.0, 0.1, 0.1)
+      elseif (valid == 1) then
+        count:Show()
+        count:SetVertexColor(0.6, 0.6, 0.6)
+      else
+        count:Hide()
+      end
+      rangeTimer = TOOLTIP_UPDATE_TIME
+    end
+
+    self.rangeTimer = rangeTimer
+  end
+end
+
+function Veneer_QuestObjectiveItem_UpdateCooldown (itemButton)
+  local start, duration, enable = GetQuestLogSpecialItemCooldown(itemButton.questLogIndex)
+  if (start) then
+    CooldownFrame_SetTimer(itemButton.Cooldown, start, duration, enable)
+    if (duration > 0 and enable == 0) then
+      SetItemButtonTextureVertexColor(itemButton, 0.4, 0.4, 0.4)
+    else
+      SetItemButtonTextureVertexColor(itemButton, 1, 1, 1)
+    end
+  end
+end
\ No newline at end of file