diff classes/MultiCastButton.lua @ 163:ab5c37989986

- totem bar now stores which page was selected across sessions - totem bar shouldn't be messed up if resized around on non-shaman toons now
author Flick <flickerstreak@gmail.com>
date Sat, 22 Aug 2009 00:12:44 +0000
parents fc08372f0c7a
children 8241be11dcc0
line wrap: on
line diff
--- a/classes/MultiCastButton.lua	Fri Aug 21 23:50:17 2009 +0000
+++ b/classes/MultiCastButton.lua	Sat Aug 22 00:12:44 2009 +0000
@@ -104,7 +104,7 @@
   flyoutChildren       = newtable()
   nMultiCastSlots      = self:GetAttribute("nMultiCastSlots")
   baseActionID         = self:GetAttribute("baseActionID")
-  currentMultiCastPage = currentMultiCastPage or 1
+  currentMultiCastPage = currentMultiCastPage or self:GetAttribute("lastSummon") or 1
   multiCastSpellList   = newtable()
   for i = 1, nMultiCastSlots do
     tinsert(multiCastSpellList, newtable())
@@ -114,6 +114,7 @@
 local _onstate_multispellpage = -- function(self, stateid, newstate)
 [[
   currentMultiCastPage = tonumber(newstate)
+  control:CallMethod("UpdateLastSummon",currentMultiCastPage)
   control:ChildUpdate()
 ]]
 
@@ -261,6 +262,10 @@
     error("Multicast button index out of range")
   end
 
+  if idx > bar.nMultiCastSlots then
+    return false
+  end
+
   local name = format("ReAction_%s_Action_%d",bar:GetName(),idx)
  
   self = Super.New(self, name, btnConfig, bar, idx, "SecureActionButtonTemplate, ActionButtonTemplate" )
@@ -269,22 +274,20 @@
   local f = self:GetFrame()
 
   -- attributes
+  local page = (idx == NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2) and 1 or (bar:GetConfig().lastSummon or 1)
   if idx == 1 or idx == NUM_MULTI_CAST_BUTTONS_PER_PAGE + 2 then
     f:SetAttribute("type","spell")
     local spells = idx == 1 and TOTEM_MULTI_CAST_SUMMON_SPELLS or TOTEM_MULTI_CAST_RECALL_SPELLS
+    f:SetAttribute("spell",spells[page])
     for i, spell in ipairs(spells) do 
       if spell and IsSpellKnown(spell) then
         f:SetAttribute("spell-page"..i, spell)
-        if i == 1 then
-          -- TODO: store/restore last used summon
-          f:SetAttribute("spell",spell)
-        end
       end
     end
   else
     local baseAction = barFrame:GetAttribute("baseActionID") + TOTEM_PRIORITIES[idx-1]
     f:SetAttribute("type","action")
-    f:SetAttribute("action", baseAction)
+    f:SetAttribute("action", baseAction + (page - 1) * NUM_MULTI_CAST_BUTTONS_PER_PAGE)
     for i = 1, NUM_MULTI_CAST_PAGES do
       f:SetAttribute("action-page"..i, baseAction + (i-1) * NUM_MULTI_CAST_BUTTONS_PER_PAGE)
     end
@@ -537,7 +540,8 @@
 	end
 
   if #summon == 0 and #recall == 0 then
-    return 0 -- no multicast capability
+    bar.nMultiCastSlots = 0 -- no multicast capability
+    return
   end
 
   local slots = { }
@@ -555,11 +559,16 @@
   local barFrame = bar:GetFrame()
 
   -- init bar secure environment
+  barFrame:SetAttribute("lastSummon",bar:GetConfig().lastSummon)
   barFrame:SetAttribute("nMultiCastSlots",#slots)
   barFrame:SetAttribute("baseActionID", (NUM_ACTIONBAR_PAGES + GetMultiCastBarOffset() - 1)*NUM_ACTIONBAR_BUTTONS)
   barFrame:SetAttribute("_onstate-multispellpage", _onstate_multispellpage)
   barFrame:Execute(_bar_init)
 
+  function barFrame:UpdateLastSummon(value)
+    bar:GetConfig().lastSummon = value
+  end
+
   for i, p in ipairs(TOTEM_PRIORITIES) do
     barFrame:SetAttribute("TOTEM_PRIORITY_"..i,p)
   end
@@ -629,6 +638,6 @@
     end
   end
 
-  return #slots
+  bar.nMultiCastSlots = #slots
 end