diff WorldQuests.lua @ 75:78d78dc77822

update conditional tweaks
author Nenue
date Mon, 10 Apr 2017 07:13:29 -0400
parents 2ba11b25aa7f
children 836cd54c84b3
line wrap: on
line diff
--- a/WorldQuests.lua	Sat Apr 08 17:07:58 2017 -0400
+++ b/WorldQuests.lua	Mon Apr 10 07:13:29 2017 -0400
@@ -3,11 +3,11 @@
 -- Created: 11/2/2016 3:40 PM
 -- %file-revision%
 
-local print = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or function() end
-local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or function() end
-local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or function() end
-local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or function() end
-local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or function() end
+local print = DEVIAN_WORKSPACE and function(...) _G.print('WorldQuests', ...) end or nop
+local rprint = DEVIAN_WORKSPACE and function(...) _G.print('WQRefresh', ...) end or nop
+local qprint = DEVIAN_WORKSPACE and function(...) _G.print('POI', ...) end or nop
+local wprint = DEVIAN_WORKSPACE and function(...) _G.print('WP', ...) end or nop
+local mprint = DEVIAN_WORKSPACE and function(...) _G.print('Canvas', ...) end or nop
 local _, db = ...
 local Module = WorldPlanQuestsMixin
 
@@ -17,6 +17,7 @@
 local TQ_GetQuestsForPlayerByMapID = C_TaskQuest.GetQuestsForPlayerByMapID -- This function is not yet documented
 local TQ_GetQuestZoneID = C_TaskQuest.GetQuestZoneID
 local TQ_IsActive = C_TaskQuest.IsActive
+local TQ_RequestPreloadRewardData = C_TaskQuest.RequestPreloadRewardData
 local pairs, ipairs, tinsert, tremove, wipe = pairs, ipairs, tinsert, tremove, table.wipe
 local GetTaskInfo, GetTasksTable, HaveQuestData = GetTaskInfo, GetTasksTable, HaveQuestData
 local GetTime = GetTime
@@ -44,6 +45,8 @@
 local BountyBoard = WorldMapFrame.UIElementsFrame.BountyBoard
 local ActionButton = WorldMapFrame.UIElementsFrame.ActionButton
 
+local pinBaseIndex = 1500
+local overlayBaseIndex = 1580
 local layoutDirty = true
 local bountiesDirty = true
 local currentScale = WorldMapDetailFrame:GetScale()
@@ -64,30 +67,18 @@
   end)
 end
 
-function Module:OnUpdate(sinceLast)
-
-  if self.filtersDirty or self.isStale then
-    self:Refresh()
-  end
-  if #db.UpdatedPins >= 1 then
-    print('|cFF00FF88pending updates', #db.UpdatedPins)
-    self:RefreshIfQueued()
-  end
-
-end
-
 
 function Module:Setup()
-  print('|cFFFF4400'..self:GetName()..':Setup()')
+  --print('|cFFFF4400'..self:GetName()..':Setup()')
   for mapID, mapName in pairs(WORLD_QUEST_MAPS) do
     db.QuestsByZone[mapID] = {}
   end
   for target, arg in pairs(callbacks) do
-    print(type(target))
+    --print(type(target))
     if type(target) == 'table' then
       local callerName = target:GetName() or tostring(target)
       for name, method  in pairs(arg) do
-        print(callerName, arg)
+        --print(callerName, arg)
         hooksecurefunc(target, name, function(...)
           self:OnSecureHook(callerName .. '.' .. name, method, ...)
         end)
@@ -100,8 +91,8 @@
   end
 
   self.Status = CreateFrame('Frame', nil, self)
-  self.Status:SetPoint('TOPLEFT', WorldMapPOIFrame, 'TOPLEFT', 0, 0)
-  self.Status:SetPoint('BOTTOMRIGHT', WorldMapPOIFrame, 'TOPRIGHT', 0, -4)
+  self.Status:SetPoint('TOPLEFT', WorldMapFrame.UIElementsFrame, 'TOPLEFT', 0, 0)
+  self.Status:SetPoint('BOTTOMRIGHT', WorldMapFrame.UIElementsFrame, 'TOPRIGHT', 0, -4)
   self.Status.t = self.Status:CreateTexture(nil, 'OVERLAY')
   self.Status.b = self.Status:CreateTexture(nil, 'BACKGROUND')
   self.Status.b:SetColorTexture(0,0,0,.25)
@@ -114,15 +105,15 @@
   self.Status:SetScript('OnUpdate', function(status)
     local translateTo
     if numLoaded < numShown then
-      translateTo = numLoaded/numShown * status:GetWidth()
+      translateTo = (numLoaded/numShown) * status:GetWidth()
       status.t:SetWidth(translateTo)
     else
-      translateTo = numShown * status:GetWidth()
+      translateTo = status:GetWidth()
       status.t:SetWidth(translateTo)
     end
   end)
 
-  self:SetAllPoints(WorldMapPOIFrame)
+  self:SetAllPoints(WorldMapFrame.UIElementsFrame)
   for k,v in pairs( ToggleButton) do
     self.Toggle:SetScript(k,v)
   end
@@ -138,10 +129,10 @@
   WorldQuests:UpdateTaskPOIs()
 end
 callbacks.WorldMapFrame_UpdateMap = function(WorldQuests)
-  WorldQuests:RefreshIfChanged()
+  WorldQuests:RefreshIfChanged('WMF_UPDATE')
 end
 callbacks.WorldMapScrollFrame_ReanchorQuestPOIs = function (WorldQuests)
-  WorldQuests:RefreshIfChanged()
+  WorldQuests:RefreshIfChanged('WMF_REANCHOR')
 end
 
 callbacks[BountyBoard] = {}
@@ -156,7 +147,7 @@
 end
 
 function Module:OnConfigUpdate()
-  print('|cFFFFFF00OnConfigUpdate()|r')
+  --print('|cFFFFFF00OnConfigUpdate()|r')
   if db.Config.FadeWhileGrouped then
     db.PinAlpha = 0.15
   else
@@ -179,29 +170,17 @@
   button:Show()
 end
 
-db.UsedPOIs = {}
-function Module:UpdateTaskPOIs()
-  canTargetQuests = SpellCanTargetQuest()
-  local func = canTargetQuests and 'Show' or 'Hide'
-  for i = 1, NUM_WORLDMAP_TASK_POIS do
-    local button = _G['WorldMapFrameTaskPOI'..i]
-    if button and button.worldQuest then
-      button[func](button)
-    end
-  end
-end
-
 function Module:OnSecureHook(callbackName, func, ...)
-  rprint('|cFFFF4400'..callbackName..'|r', ...)
+  --rprint('|cFFFF4400'..callbackName..'|r', ...)
   func(self, ...)
 end
 
 local defaults = {}
 local REWARD_UNKNOWN = 768
 function Module:OnLoad()
-  print('|cFFFF4400'..self:GetName()..':OnLoad()')
+  --print('|cFFFF4400'..self:GetName()..':OnLoad()')
 
-  self:SetParent(WorldMapPOIFrame)
+  self:SetParent(WorldMapFrame.UIElementsFrame)
   WorldPlan:AddHandler(self, defaults)
 
   for areaID, fileName in pairs(WORLD_QUEST_MAPS) do
@@ -212,7 +191,7 @@
   self:RegisterEvent('WORLD_QUEST_COMPLETED_BY_SPELL')
   self:RegisterEvent('SUPER_TRACKED_QUEST_CHANGED')
   self:RegisterEvent('SKILL_LINES_CHANGED')
-  self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED')
+  --self:RegisterEvent('CURRENT_SPELL_CAST_CHANGED')
   self:RegisterEvent('ARTIFACT_UPDATE')
   self:RegisterEvent('QUEST_LOG_UPDATE')
 end
@@ -221,15 +200,14 @@
 local superTrackedQuestID
 function Module:OnEvent (event, ...)
 
-  print('|cFFFFFF00'..self:GetName()..':OnEvent() '..event..'|r', GetTime(), ...)
+  print('|cFFFFFF00OnEvent() '..event..'|r', GetTime(), ...)
   if (event == 'QUEST_LOG_UPDATE') then
     self:UpdateBounties(event)
-    self:RefreshIfChanged(event)
   elseif event == 'WORLD_QUEST_COMPLETED_BY_SPELL' then
     local questID = ...
-    self:UpdateBounties(event)
     if questID and db.QuestsByID[questID] then
       db.QuestsByID[questID].complete = true
+      self:ReleasePin(db.QuestsByID[questID])
     end
     self:Refresh(event)
   elseif event == 'SKILL_LINES_CHANGED' or event == 'CURRENT_SPELL_CAST_CHANGED' then
@@ -238,7 +216,7 @@
     local akCheck = C_ArtifactUI.GetArtifactKnowledgeMultiplier()
     if akCheck and (akCheck ~= artifactKnowledgeMultiplier) then
       if artifactKnowledgeMultiplier then
-        print('push artifact knowledge update', artifactKnowledgeMultiplier, 'to', akCheck)
+        --print('push artifact knowledge update', artifactKnowledgeMultiplier, 'to', akCheck)
         for index, pin in pairs( db.QuestsByID) do
           if pin.rewardType == REWARD_ARTIFACT_POWER then
             db.log(pin.questID .. ' ' .. tostring(pin.title) .. ' Flagged for artifact power.')
@@ -264,52 +242,85 @@
 end
 
 
+function Module:OnUpdate(sinceLast)
+
+  if self.refreshBenchMarkTicker then
+    --print(self.refreshBenchMarkTicker)
+    self.refreshBenchMarkTicker =   self.refreshBenchMarkTicker - 1
+
+    if self.refreshBenchMarkTicker == 0 then
+
+      self.refreshTime = floor((GetTime() - self.refreshBenchMark) * 1000)/1000
+      self.debugMessage:SetText(self.refreshTime)
+      self.refreshBenchMarkTicker = nil
+    end
+  else
+    self.refreshBenchMark = GetTime()
+  end
+
+  if self.filtersDirty or self.isStale then
+    self:Refresh()
+  end
+  if #db.UpdatedPins >= 1 then
+    --print('|cFF00FF88pending update', #db.UpdatedPins)
+    self:UpdateNext()
+  end
+
+end
+
+function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen)
+  if isNewMap then
+    print('|cFF0088FFOnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
+    layoutDirty = true
+    self:Refresh('WORLD_MAP_CHANGED')
+  else
+
+    --print('|cFFFFFF00'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
+  end
+end
+
+
+function Module:UpdateTaskPOIs()
+  canTargetQuests = SpellCanTargetQuest()
+  local func = canTargetQuests and 'Show' or 'Hide'
+  for i = 1, NUM_WORLDMAP_TASK_POIS do
+    local button = _G['WorldMapFrameTaskPOI'..i]
+    if button and button.worldQuest then
+      button[func](button)
+    end
+  end
+end
 
 local bountyQuests = {}
 local bountyInfo = {}
+
 local bountyDisplayLocation, bountyLockedQuestID, selectedBountyIndex, selectedBountyQuestID
 function Module:UpdateBounties(...)
-  print('|cFF00FF88BountyInfo()|r', ...)
+    print('|cFF00FF88BountyInfo()|r', ...)
   wipe(db.BountiesByFactionID)
-  wipe(bountyQuests)
+  wipe(db.BountiesByQuestID)
 
   db.selectedBounty = nil
   selectedBountyIndex = BountyBoard:GetSelectedBountyIndex()
-  bountyInfo, bountyDisplayLocation, bountyLockedQuestID = GetQuestBountyInfoForMapID(db.currentMapID, bountyInfo)
+  db.Bounties, bountyDisplayLocation, bountyLockedQuestID = GetQuestBountyInfoForMapID(db.currentMapID, db.Bounties)
   local numBounties = 0
-  for index, info in ipairs(bountyInfo) do
-    if info.factionID then
+  for index, info in ipairs(db.Bounties) do
       numBounties = numBounties + 1
       info.index = index
       info.complete =  IsQuestComplete(info.questID)
       if not info.complete then
         db.BountiesByFactionID[info.factionID] = info
+        db.BountiesByQuestID[info.questID] = info
         if index == selectedBountyIndex then
           db.selectedBounty = info
           selectedBountyQuestID = info.questID
         end
         print(' ', index, info.factionID, GetQuestLogTitle(GetQuestLogIndexByID(info.questID)), info.complete, (index == selectedBountyIndex) and 'SELECTED' or '')
-        bountyQuests[info.questID] = info
       end
-    end
   end
   bountiesDirty = nil
 end
 
-function Module:OnMapInfo(isBrokenIsle, isZoomedOut, mapAreaID, isNewMap, isMapOpen)
-  if isNewMap then
-    print('|cFF00FF88OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
-    if isMapOpen then
-      self:Refresh(true)
-    else
-      self.isStale = true
-    end
-  else
-
-    rprint('|cFFFFFF00'..self:GetName()..':OnMapInfo()|r, mapAreaID =', mapAreaID,'visible =', isMapOpen, 'changed =', isNewMap)
-  end
-end
-
 
 local totalPins = 0
 local TQ_GetQuestLocation = C_TaskQuest.GetQuestLocation
@@ -336,21 +347,19 @@
       --print('|cFF00FF00Creating', name)
       pin = CreateFrame('Frame', name, WorldMapPOIFrame, 'WorldPlanQuestPin')
 
+      pin:SetID(totalPins)
       pin:SetFrameStrata('HIGH')
-      pin.GetTypeInfo = function(frame, typeID)
-        return self:GetTypeInfo(typeID)
-      end
-      pin:SetID(totalPins)
       numOverlays = numOverlays + 1
       --pin.iconBorder:SetVertexColor(0,0,0,1)
     end
     pin.questID = questID
     pin.worldQuest = true
-    pin.throttle = 1
+    pin.throttle = pin.updateRate
     pin.isNew = true
     pin.currentWidth = nil
     db.QuestsByID[questID] = pin
     tinsert(db.UsedPins, pin)
+
   end
 
   if pin and info then
@@ -358,12 +367,22 @@
     pin.floor = info.floor
     pin.numObjectives = info.numObjectives or 0
     if info.x and info.y then
-      pin.x = info.x or pin.x
-      pin.y = info.y or pin.y
-      --rprint('|cFFFF4400coords|r', info.x, info.y)
+      if (info.x ~= pin.x) or (info.y ~= pin.y) then
+        pin.isStale = true
+        --rprint('|cFFFF4400SetCoords|r', info.x, info.y)
+      end
+
     end
   end
 
+  pin.x = info.x or pin.x
+  pin.y = info.y or pin.y
+
+  if not HaveQuestData(questID) then
+    TQ_RequestPreloadRewardData(questID);
+  end
+
+
   if (not pin.dataLoaded) then
     local dataLoaded = pin:GetData()
     isDataLoaded = (isDataLoaded and dataLoaded)
@@ -372,8 +391,9 @@
 
 
   pin.isActive = TQ_IsActive(questID)
+  pin:GetCriteriaState()
   pin:CheckFilterRules()
-  rprint(pin:GetID(), pin.filtered, pin.used)
+  --rprint(pin:GetID(), pin.filtered, pin.used)
 
   return pin
 end
@@ -386,7 +406,7 @@
     db.QuestsByID[id] = nil
 
     for i, zone in pairs(db.QuestsByZone) do
-      print('-', i, zone[i])
+      --print('-', i, zone[i])
       zone[id] = nil
     end
     db.TasksByID[id] = nil
@@ -397,49 +417,53 @@
   tinsert(db.FreePins, pin)
 
   WorldPlan.dataFlush = true
-  print('|cFF00FF00-'.. (pin.mapID and GetMapNameByID(pin.mapID) or '???') ..'|r', id, pin.title)
+  --print('|cFF00FF00-'.. (pin.mapID and GetMapNameByID(pin.mapID) or '???') ..'|r', id, pin.title)
 end
 
 -- re-anchors and scales pins that have had either of these changed due to data loading delays
-function Module:RefreshIfQueued()
-  print('|cFF00FF88RefreshIfQueued()')
+function Module:UpdateNext()
+  --print('|cFF00FF88UpdateNext()')
   local pin = tremove(db.UpdatedPins)
-  while pin do
     pin:CheckFilterRules()
 
-    local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
-    print(pin.title, pin.dataLoaded  and not pin.filtered, scaleFactor)
-    if pin.used then
-      pin:SetAnchor(nil, pin.x, pin.y, self.hostWidth, self.hostHeight, scaleFactor)
-      if pin.isNew then
-        pin:OnShow()
-      end
-    end
+  local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
+  --print(pin.title, pin.dataLoaded  and not pin.filtered, scaleFactor)
+  if pin.used then
+    pin:SetAnchor(nil, pin.x, pin.y, self.hostWidth, self.hostHeight, scaleFactor)
+    pin:OnShow()
+  end
 
-    pin = tremove(db.UpdatedPins)
 
-  end
 end
 
+function Module:Debug(...)
+  print(...)
+end
 
 local msg = '|cFF00FF88WorldQuests:Refresh()|r|cFF00FFFF'
+local lastRefresh
 function Module:Refresh(...)
+  --
 
-  rprint(msg, ...)
   if not self:IsVisible() then
-    rprint('|cFF00FF88WorldQuests:Refresh()|r', ...)
-    self.isStale = true
-    return self:MarkAllPins()
+    print('|cFFFF4400Refresh()|r', ...)
+    --layoutDirty = true
+    return
   else
-    rprint('|cFF00FF88WorldQuests:Refresh()|r', ...)
-    print('|cFF00FF88WorldQuests:Refresh()|r', ...)
+    --
+    if lastRefresh == GetTime() then
+      print('|cFFFF4400multiple refreshes tried')
+    end
+    lastRefresh = GetTime()
+    --rprint(msg, ...)
+    print(msg, lastRefresh, ...)
   end
 
   if not db.Config.EnablePins then
     numShown = 0
     return
   end
-  wprint('  '..msg)
+  --wprint('  '..msg)
 
   scaleConstant = db.isContinentMap and 2 or 3
   canTargetQuests = SpellCanTargetQuest()
@@ -449,10 +473,12 @@
   end
 
   self:UpdateAnchors()
+--[[
   if bountiesDirty then
-    print('  bounties dirty, pushing that')
+    --print('  bounties dirty, pushing that')
     self:UpdateBounties()
   end
+  --]]
 
 
   -- calculate quests shown
@@ -462,9 +488,11 @@
     local oV = pin:IsShown()
     if pin.used then
       pin.throttle = 1
+      --[[
       if oV == false then
-        rprint('|cFF00FF00cleanup +|r', questID, pin.title)
+        --rprint('|cFF00FF00cleanup +|r', questID, pin.title)
       end
+      --]]
       pin:SetShown(true)
       numShown = numShown + 1
       if pin.dataLoaded then
@@ -472,36 +500,47 @@
       end
 
     else
+      --[[
       if oV == true then
         rprint('|cFFFF4400 -|r', questID, pin.title)
       end
+      --]]
       pin.hideReason = "Not used in map area " .. (db.currentMapID)
-      pin:HideFrames()
+      pin:SetShown(false)
     end
   end
 
 
-
-  print(' ', numShown, 'shown,', numLoaded, 'with data')
+  --print('flags ', layoutDirty, self.isStale)
+  --print(' ', numShown, 'shown,', numLoaded, 'with data')
   if numShown > numLoaded then
     self.Status:Show()
   end
 
+--
+  if layoutDirty or self.isStale then
+
+    self.refreshBenchMark = GetTime()
+    self.refreshBenchMarkTicker = 2
+    print('starting bench', self.refreshBenchMark)
+  end
+--
 
   layoutDirty = nil
   self.isStale = nil
   self.sizesDirty = nil
   self.isZoomDirty = nil
+
 end
 
 local refreshReason
-function Module:RefreshIfChanged()
+function Module:RefreshIfChanged(event)
   local scaleCheck = WorldMapDetailFrame:GetScale()
   refreshReason = nil
   if scaleCheck ~= currentScale then
     refreshReason = 'map scale updated'
-    self:Refresh('WORLD_MAP_SCALE_CHANGED')
     currentScale = scaleCheck
+    layoutDirty = true
   elseif self.isStale or layoutDirty then
     refreshReason = 'layout is marked dirty'
   end
@@ -512,70 +551,56 @@
 
   if self:IsVisible() then
     print('|cFF00FFFFRefreshIfChanged()|r', refreshReason)
-    self:Refresh('WORLDMAP_QUEUED')
+    self:Refresh(event)
   else
-    rprint('|cFF00FFFFRefreshIfChanged()|r flagging for later refresh', refreshReason)
+    print('|cFF00FFFFRefreshIfChanged()|r', refreshReason)
     self.isStale = true
   end
 end
 
 -- update visibility states of all pins
 function Module:MarkAllPins(pins)
-  print('  |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins)
+  --print('  |cFFFFFF00'..self:GetName()..':MarkAllPins()|r', pins)
   pins = pins or db.QuestsByID
   for questID, pin in pairs(pins) do
     pin.isStale =  true
-    rprint('|cFF00FF00filter', pin.questID, pin.filtered, 'used:', pin.used)
-  end
-end
-
-function Module:UpdateQuestButton(info, mapID)
-  local questID, x, y = info.questId, info.x, info.y
-  local pin = self:AcquirePin(info)
-  if not pin then
-    return
-  end
-
-
-  local doUpdate = pin:GetCriteriaState() or pin.isStale
-  --print('  |- ', pin.questID, pin.title)
-  rprint('|cFF00FF00update|r', pin.questID, pin.title)
-
-  print(doUpdate)
-
-  if x and y then
-    local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
-    pin:SetFrameLevel(PinBaseIndex+pin:GetID())
-    pin.owningFrame = WorldMapFrame
-    pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
-    doUpdate = true
-    --tinsert(self.UsedPositions, pin)
-  end
-
-  if doUpdate then
-    print(' changed', pin.title, pin.isCriteria, pin.isBounty, pin.scaleFactor)
-    if pin:IsVisible() then
-      --numUpdated = numUpdated + 1
-      pin:Refresh('WORLDMAP_REFRESH')
-    else
-      --numHidden = numHidden + 1
-      pin.isStale = true
-    end
-  end
-
-  if mapID then
-    if not db.QuestsByZone[mapID] then
-      db.QuestsByZone[mapID] = {}
-    end
-    db.QuestsByZone[mapID][questID] = pin
+    --rprint('|cFF00FF00filter', pin.questID, pin.filtered, 'used:', pin.used)
   end
 end
 
 -- Updates quest markers in taskInfo while associating them with the given map
 function Module:UpdateQuestsForMap(taskInfo, mapID)
-  rprint('Map', GetMapNameByID(mapID), GetMapNameByID(db.currentMapID))
+  if mapID then
+    db.QuestsByZone[mapID] = db.QuestsByZone[mapID] or {}
+    wipe(db.QuestsByZone[mapID])
+  end
+  print('UpdateQuestsForMap()', GetMapNameByID(mapID), GetMapNameByID(db.currentMapID), layoutDirty)
   for index, info in pairs(taskInfo) do
-    self:UpdateQuestButton(info, mapID)
+
+    local questID, x, y = info.questId, info.x, info.y
+    local pin = self:AcquirePin(info)
+    if pin then
+      print(pin.title, pin.isStale)
+      if pin:IsShown() and (layoutDirty or pin.isStale) then
+        local scaleFactor = SCALE_FACTORS[(pin.dataLoaded and not pin.filtered) and scaleConstant or 1]
+        pin.owningFrame = WorldMapFrame
+        pin:SetFrameLevel(PinBaseIndex+pin:GetID())
+        pin.Overlay:SetFrameLevel(overlayBaseIndex+pin:GetID())
+        pin:SetAnchor(WorldMapPOIFrame, x, y, self.hostWidth, self.hostHeight, scaleFactor)
+        if pin.isStale then
+          pin:Refresh('WORLDMAP_REFRESH ' .. GetTime())
+        end
+        if mapID then
+          db.QuestsByZone[mapID][questID] = pin
+        end
+      else
+        if layoutDirty then
+          pin.isStale = true
+        end
+      end
+
+
+    end
   end
 end
 
@@ -591,7 +616,7 @@
   end
 
 
-  rprint('|cFF00FF00'..self:GetName()..':UpdateAnchors()')
+  --rprint('|cFF00FF00'..self:GetName()..':UpdateAnchors()')
   local mapFileName, textureHeight, textureWidth, isMicroDungeon, microDungeonMapName = GetMapInfo()
   if isMicroDungeon then
     return
@@ -618,7 +643,7 @@
   self:SetChecked(db.Config.EnablePins and true or false)
 end
 function ToggleButton:OnClick()
-  print(self:GetChecked())
+  --print(self:GetChecked())
   db.Config.EnablePins = self:GetChecked()
   _G.WorldPlan:OnConfigUpdate()
 end
\ No newline at end of file