Mercurial > wow > reaction
changeset 24:9e1984088124
added *more* missing files from 1.0 dev tree...
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Fri, 07 Mar 2008 22:18:23 +0000 |
parents | dba04d85c799 |
children | bf997ea151ca |
files | modules/ReAction_Action/ReAction_Action.lua modules/ReAction_Action/ReAction_Action.toc |
diffstat | 2 files changed, 262 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/ReAction_Action/ReAction_Action.lua Fri Mar 07 22:18:23 2008 +0000 @@ -0,0 +1,251 @@ +--[[ + ReAction Action-button module. + + The button module implements standard action button functionality by wrapping Blizzard's + ActionButton frame and associated functions. It also provides some button layout + modification tools. + +--]] + +-- local imports +local ReAction = ReAction +local L = ReAction.L +local _G = _G +local AceOO = AceLibrary("AceOO-2.0") +local CreateFrame = CreateFrame +local print = ReAction.print + +-- module declaration +local moduleID = "Action" +local module = ReAction:NewModule( moduleID, + "AceEvent-2.0" +) + +-- +-- action button class declaration +-- +local BtnClass = AceOO.Class() +local Button = BtnClass.prototype +module.BtnClass = BtnClass + + + +-- module methods +function module:OnInitialize() + self.db = ReAction:AcquireDBNamespace(moduleID) + ReAction:RegisterDefaults(moduleID,"profile", + { + buttons = { } + } + ) + + self.buttons = { } +end + +function module:OnEnable() +end + +function module:OnDisable() +end + +function module:OnProfileEnable() +end + +function module:ApplyToBar(bar) + self:RefreshBar(bar) +end + +function module:RefreshBar(bar) + if self.buttons[bar] == nil then + self.buttons[bar] = { } + end + local btns = self.buttons[bar] + local profile = self.db.profile + local barName = bar:GetName() + if profile.buttons[barName] == nil then + profile.buttons[barName] = {} + end + local btnCfg = profile.buttons[barName] + + local r, c = bar:GetButtonGrid() + local n = r*c + for i = 1, n do + if btnCfg[i] == nil then + btnCfg[i] = {} + end + if btns[i] == nil then + btns[i] = self.BtnClass:new(bar,i,btnCfg[i]) + else + btns[i]:Refresh(bar,i) + end + end + for i = n+1, #btns do + btns[i] = btns[i]:Destroy() + if btnCfg[i] then + btnCfg[i] = nil + end + end +end + +function module:RemoveFromBar(bar) + if self.buttons[bar] then + local btns = self.buttons[bar] + for _,b in pairs(btns) do + if b then + b:Destroy() + end + end + self.buttons[bar] = nil + end +end + +function module:EraseBarConfig(barName) + self.db.profile.buttons[barName] = nil +end + +function module:ApplyConfigMode(mode,bars) + for _, btns in pairs(self.buttons) do + if btn then + for _, b in pairs(btns) do + if b then + if mode then + if not b.actionIDLabel then + local label = b:GetFrame():CreateFontString(nil,"OVERLAY","GameFontNormalLarge") + label:SetAllPoints() + label:SetJustifyH("CENTER") + label:SetShadowColor(0,0,0,1) + label:SetShadowOffset(2,-2) + label:SetText(tostring(b:GetActionID())) + b.actionIDLabel = label + end + b.actionIDLabel:Show() + elseif b.actionIDLabel then + b.actionIDLabel:Hide() + end + end + end + end + end +end + +function module:GetGlobalBarOptions(opts) + if self.globalBarOpts == nil then + self.globalBarOpts = { + newActionBar = { + type = "execute", + name = L["New Action Bar"], + desc = L["Create a new bar of standard action buttons"], + func = function() + ReAction:GetModule("Bar"):CreateBar() + end, + disabled = InCombatLockdown, + } + } + end + return self.globalBarOpts +end + +function module:GetBarMenuOptions(bar) + if not bar.modMenuOpts[moduleID] then + bar.modMenuOpts[moduleID] = { + } + end + return bar.modMenuOpts[moduleID] +end + +function module:GetBarConfigOptions(bar) + if not bar.modConfigOpts[moduleID] then + bar.modConfigOpts[moduleID] = { + } + end + return bar.modConfigOpts[moduleID] +end + + + +-- use-count of action IDs +local ActionIDList = setmetatable( {}, { + __index = function(self, idx) + if idx == nil then + for i = 1, 120 do + if rawget(self,i) == nil then + rawset(self,i,1) + return i + end + end + else + local c = rawget(self,idx) or 0 + rawset(self,idx,c+1) + return idx + end + end, + __newindex = function(self,idx,value) + if value == nil then + value = rawget(self,idx) + if value == 1 then + value = nil + elseif value then + value = value - 1 + end + end + rawset(self,idx,value) + end +}) + + + +-- button class methods +function Button:init( bar, idx, config ) + BtnClass.super.prototype.init(self) + self.bar, self.idx, self.config = bar, idx, config + + local barFrame = bar:GetFrame() + + self.name = config.name or "ReAction_"..bar:GetName().."_"..idx + config.actionID = ActionIDList[config.actionID] -- gets a free one if none configured + + local f = CreateFrame("CheckButton", self.name, barFrame, "ActionBarButtonTemplate") + -- TODO: re-implement ActionButton event handlers that don't do secure stuff + + -- this will probably cause taint, using right now for display/debugging purposes + f:SetScript("OnAttributeChanged", + function() + ActionButton_UpdateAction() + end + ) + f:SetAttribute("action", config.actionID) + barFrame:SetAttribute("addchild",f) + self.frame = f + self:Refresh(bar,idx) +end + +function Button:Destroy() + local f = self.frame + f:UnregisterAllEvents() + f:Hide() + f:SetParent(UIParent) + f:ClearAllPoints() + if self.config.name then + _G[self.config.name] = nil + end + ActionIDList[self.config.actionID] = nil + self.frame = nil + self.config = nil + self.bar = nil +end + +function Button:Refresh(bar,idx) + bar:PlaceButton(self.frame, idx, 36, 36) +end + +function Button:GetFrame() + return self.frame +end + +function Button:GetName() + return self.name +end + +function Button:GetActionID() + return self.config.actionID +end
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/ReAction_Action/ReAction_Action.toc Fri Mar 07 22:18:23 2008 +0000 @@ -0,0 +1,11 @@ +## Interface: 20300 +## Title: ReAction: Action +## Notes: Action button module for ReAction +## DefaultState: enabled +## LoadOnDemand: 1 +## Author: Flick +## Version: 1.0 +## X-Category: Action Bars +## Dependencies: ReAction + +ReAction_Action.lua