Mercurial > wow > reaction
diff Buttons.lua @ 7:f920db5fc6b1
version 0.3
author | Flick <flickerstreak@gmail.com> |
---|---|
date | Tue, 20 Mar 2007 21:25:29 +0000 |
parents | |
children | c05fd3e18b4f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Buttons.lua Tue Mar 20 21:25:29 2007 +0000 @@ -0,0 +1,271 @@ +-- Buttons.lua +-- +-- Defines button types for use with the ReAction AddOn +-- + +local AceOO = AceLibrary("AceOO-2.0") + +local Action = AceOO.Class( + ReAction, + ReAction.ActionType, + ReAction.ActionDisplay, + ReAction.DefaultColorScheme +) + +local PetAction = AceOO.Class( + ReAction, + ReAction.PetActionType, + ReAction.PetActionDisplay, + ReAction.DefaultColorScheme +) + + +ReAction:AddButtonType( "Action", Action, 120 ) +ReAction:AddButtonType( "Pet Action", PetAction, 10 ) + + + +----------------------- +-- static class members +----------------------- +Action.defaultProfile = { + type = "ReAction", + subtype = "Action", + ids = { }, + selfcast = nil, + keyBindLoc = "TOPRIGHT", + stackCountLoc = "BOTTOMRIGHT", + showKeyBind = true, + showStackCount = true, + showMacroText = true, + showGrid = false, + showBorder = true, + keyBindColorCode = false, +} + +PetAction.defaultProfile = { + type = "ReAction", + subtype = "Pet Action", + ids = { }, + keyBindLoc = "TOPRIGHT", + showKeyBind = false, + showGrid = false, + showBorder = true, + keyBindColorCode = false, +} + + + +----------------------- +-- static class methods +----------------------- +function Action:GetDefaultProfile() + return self.defaultProfile +end + +function PetAction:GetDefaultProfile() + return self.defaultProfile +end + + + +local labelPlacementOptions = { + "TOP", + "BOTTOM", + "LEFT", + "RIGHT", + "TOPLEFT", + "TOPRIGHT", + "BOTTOMLEFT", + "BOTTOMRIGHT" +} + + +function Action:GenerateOptionsTable( config, buttonListFunc ) + + local function refresh() + for _, b in pairs(buttonListFunc()) do + b:UpdateAction() + b:UpdateTooltip() + b:UpdateDisplay() + end + end + + return { + type = "group", + args = { + selfcast = { + type = "text", + name = "Self Cast", + desc = "Choose a modifier key to hold down or an alternate button to click to self-cast spells. ".. + "'default' uses the settings in the Interface Options Advanced panel (use this to achieve 'smart self cast'). ".. + "'right-click' self-casting is not supported for multi-page bars.", + get = function() return config.selfcast or "default" end, + set = function(opt) + if opt == "default" then opt = nil end + config.selfcast = opt + for _, b in pairs(buttonListFunc()) do + b:UpdateSelfcast() + end + end, + validate = { "default", "none", "alt", "ctrl", "shift", "right-click" }, + }, + + keyloc = { + type = "text", + name = "Hotkey Location", + desc = "Sets hotkey location", + get = function() return config.keyBindLoc end, + set = function(loc) config.keyBindLoc = loc ; refresh() end, + validate = labelPlacementOptions, + }, + + stackloc = { + type = "text", + name = "Stack Count Location", + desc = "Sets stack count location", + get = function() return config.stackCountLoc end, + set = function(loc) config.stackCountLoc = loc ; refresh() end, + validate = labelPlacementOptions, + }, + + showkeybind = { + type = "toggle", + name = "Show Hotkey", + desc = "Toggle show/hide hot key labels", + get = function() return config.showKeyBind end, + set = function() config.showKeyBind = not config.showKeyBind ; refresh() end, + }, + + showstackcount = { + type = "toggle", + name = "Show Stack Count", + desc = "Toggle show/hide stack count labels", + get = function() return config.showStackCount end, + set = function() config.showStackCount = not config.showStackCount ; refresh() end, + }, + + showmacrotext = { + type = "toggle", + name = "Show Macro Names", + desc = "Toggle show/hide macro name labels", + get = function() return config.showMacroText end, + set = function() config.showMacroText = not config.showMacroText ; refresh() end, + }, + + showgrid = { + type = "toggle", + name = "Always Show Buttons", + desc = "Show button placeholders when no action is assigned or on the cursor. Note that buttons are always shown when bars are unlocked.", + get = function() return config.showGrid end, + set = function() config.showGrid = not config.showGrid ; refresh() end, + }, + + colorhotkeys = { + type = "toggle", + name = "Colorize Hotkeys", + desc = "Toggles coloring hotkeys based on the modifier key. Out-of-range coloring is always enabled.", + get = function() return config.keyBindColorCode end, + set = function() config.keyBindColorCode = not config.keyBindColorCode ; refresh() end, + }, + + --[[ + hideborder = { + type = "toggle", + name = "Hide Border", + desc = "Toggles hiding of the button border frame.", + get = function() return not config.showBorder end, + set = function() config.showBorder = not config.showBorder ; refresh() end, + },]] + } + } +end + + +function PetAction:GenerateOptionsTable( config, buttonListFunc ) + + local function refresh() + for _, b in pairs(buttonListFunc()) do + b:UpdateAction() + b:UpdateTooltip() + b:UpdateDisplay() + end + end + + return { + type = "group", + args = { + keyloc = { + type = "text", + name = "Hotkey Location", + desc = "Sets hotkey location", + get = function() return config.keyBindLoc end, + set = function(loc) config.keyBindLoc = loc ; refresh() end, + validate = { "TOP", "BOTTOM", "LEFT", "RIGHT", "TOPLEFT", "TOPRIGHT", "BOTTOMLEFT", "BOTTOMRIGHT" }, + }, + + showkeybind = { + type = "toggle", + name = "Show Hotkey", + desc = "Toggle show/hide hot key labels", + get = function() return config.showKeyBind end, + set = function() config.showKeyBind = not config.showGrid ; refresh() end, + }, + + showgrid = { + type = "toggle", + name = "Always Show Buttons", + desc = "Show button placeholders when no action is assigned or on the cursor. Note that buttons are always shown when bars are unlocked.", + get = function() return config.showGrid end, + set = function() config.showGrid = not config.showGrid ; refresh() end, + }, + + colorhotkeys = { + type = "toggle", + name = "Colorize Hotkeys", + desc = "Toggles coloring hotkeys based on the modifier key. Out-of-range coloring is always enabled.", + get = function() return config.keyBindColorCode end, + set = function() config.keyBindColorCode = not config.keyBindColorCode ; refresh() end, + }, + + --[[ + hideborder = { + type = "toggle", + name = "Hide Border", + desc = "Toggles hiding of the button border frame.", + get = function() return not config.showBorder end, + set = function() config.showBorder = not config.showBorder ; refresh() end, + },]] + } + } +end + + + +---------------------- +-- Instance methods +---------------------- +function Action.prototype:init( id ) + Action.super.prototype.init(self) + + self:SetupDisplay("ReActionButton"..id) + self:SetupAction() + + -- register button with ReBound for keybinding + if ReBound then + ReBound:AddKeybindTarget(self:GetActionFrame()) + end +end + +function PetAction.prototype:init( id ) + Action.super.prototype.init(self) + + self:SetupDisplay("ReActionPetButton"..id) + self:SetupAction() + + -- register button with ReBound for keybinding + if ReBound then + ReBound:AddKeybindTarget(self:GetActionFrame()) + end +end +