Mercurial > wow > reaction
diff modules/Action.lua @ 234:0e20f65375d5
Reworked button creation to not use goofy event driven semantics.
author | Flick |
---|---|
date | Tue, 22 Mar 2011 17:05:51 -0700 |
parents | c4b134512c50 |
children | 704f4a05a1d7 |
line wrap: on
line diff
--- a/modules/Action.lua Tue Mar 22 11:48:09 2011 -0700 +++ b/modules/Action.lua Tue Mar 22 17:05:51 2011 -0700 @@ -2,7 +2,6 @@ local ReAction = addonTable.ReAction local L = ReAction.L local _G = _G -local CreateFrame = CreateFrame local format = string.format local wipe = wipe @@ -22,10 +21,6 @@ self.handles = setmetatable({ }, weak) ReAction:RegisterBarOptionGenerator(self, "GetBarOptions") - - ReAction.RegisterCallback(self, "OnCreateBar") - ReAction.RegisterCallback(self, "OnRefreshBar") - ReAction.RegisterCallback(self, "OnDestroyBar") end function module:OnEnable() @@ -36,34 +31,12 @@ ReAction:GetModule("State"):UnregisterStateProperty("page") end -function module:OnCreateBar(event, bar, name) - if bar.config.type == moduleID then - if self.handles[bar] == nil then - self.handles[bar] = Handle:New(bar) - end - end -end - -function module:OnRefreshBar(event, bar, name) - if self.handles[bar] then - self.handles[bar]:Refresh() - end -end - -function module:OnDestroyBar(event, bar, name) - if self.handles[bar] then - self.handles[bar]:Destroy() - self.handles[bar] = nil - end -end ---- Interface ---- function module:GetBarOptions(bar) - local h = self.handles[bar] - if h then - return h:GetOptions() - end + self.handles[bar] = self.handles[bar] or Handle:New(bar) + return self.handles[bar]:GetOptions() end @@ -204,61 +177,16 @@ local meta = { __index = Handle } function Handle:New( bar ) - local config = bar:GetConfig() - local self = setmetatable( + return setmetatable( { bar = bar, - config = config, - btns = { } + config = bar:GetConfig(), }, meta) - - if self.config.buttons == nil then - self.config.buttons = { } - end - self:Refresh() - return self end function Handle:Refresh() - local r, c = self.bar:GetButtonGrid() - local n = r*c - local btnCfg = self.config.buttons - if n ~= #self.btns then - for i = 1, n do - if btnCfg[i] == nil then - btnCfg[i] = {} - end - if self.btns[i] == nil then - local lastButton = self:GetLastButton() - local hint = lastButton and lastButton.config.actionID - local b = Button:New(i, self.config, self.bar, hint) - self.btns[i] = b - self.bar:AddButton(i,b) - end - end - for i = n+1, #self.btns do - if self.btns[i] then - self.bar:RemoveButton(self.btns[i]) - self.btns[i]:Destroy() - self.btns[i] = nil - btnCfg[i] = nil - end - end - end - for _, b in ipairs(self.btns) do - b:Refresh() - end - Button.SetupBarHeader(self.bar,self.config) - self:UpdateButtonLock() - end - - function Handle:Destroy() - for _,b in pairs(self.btns) do - if b then - b:Destroy() - end - end + Button:SetupBar(bar) end function Handle:UpdateButtonLock() @@ -266,7 +194,7 @@ end function Handle:GetLastButton() - return self.btns[#self.btns] + return self.bar:GetButton(self.bar:GetNumButtons()) end -- options handlers @@ -282,7 +210,7 @@ function Handle:SetHideEmpty(info, value) if value ~= self.config.hideEmpty then self.config.hideEmpty = value - for _, b in pairs(self.btns) do + for _, b in self.bar:IterateButtons() do b:ShowGrid(not value) end end @@ -439,7 +367,7 @@ local col = self.selectedColumn or 1 local r, c = self.bar:GetButtonGrid() local n = (row-1) * c + col - local btn = self.btns[n] + local btn = self.bar:GetButton(n) if btn then return tostring(btn:GetActionID(self.selectedPage or 1)) end @@ -450,7 +378,7 @@ local col = self.selectedColumn or 1 local r, c = self.bar:GetButtonGrid() local n = (row-1) * c + col - local btn = self.btns[n] + local btn = self.bar:GetButton(n) if btn then btn:SetActionID(tonumber(value), self.selectedPage or 1) end @@ -472,7 +400,7 @@ local p = { } for i = 1, self.config.nPages or 1 do local b = { } - for _, btn in ipairs(self.btns) do + for _, btn in self.bar:IterateButtons() do table.insert(b, btn:GetActionID(i)) end table.insert(p, table.concat(b,",")) @@ -501,17 +429,17 @@ end function Handle:SetMultiID(info, value) - local p = ParseMultiID(#self.btns, self.config.nPages or 1, value) + local p = ParseMultiID(self.bar:GetNumButtons(), self.config.nPages or 1, value) for page, b in ipairs(p) do for button, id in ipairs(b) do - self.btns[button]:SetActionID(id, page) + self.bar:GetButton(button):SetActionID(id, page) end end end function Handle:ValidateMultiID(info, value) local bad = L["Invalid action ID list string"] - if value == nil or ParseMultiID(#self.btns, self.config.nPages or 1, value) == nil then + if value == nil or ParseMultiID(self.bar:GetNumButtons(), self.config.nPages or 1, value) == nil then return bad end return true