flickerstreak@28
|
1 --[[
|
flickerstreak@53
|
2 ReAction Pet Action button module
|
flickerstreak@53
|
3
|
flickerstreak@53
|
4 The button module implements standard action button functionality by wrapping Blizzard's
|
flickerstreak@77
|
5 PetActionButton frame and associated functions.
|
flickerstreak@28
|
6
|
flickerstreak@28
|
7 --]]
|
flickerstreak@28
|
8
|
flickerstreak@28
|
9 -- local imports
|
flickerstreak@175
|
10 local addonName, addonTable = ...
|
flickerstreak@175
|
11 local ReAction = addonTable.ReAction
|
flickerstreak@28
|
12 local L = ReAction.L
|
flickerstreak@28
|
13 local _G = _G
|
flickerstreak@53
|
14 local CreateFrame = CreateFrame
|
flickerstreak@95
|
15 local format = string.format
|
flickerstreak@28
|
16
|
flickerstreak@28
|
17 -- module declaration
|
flickerstreak@28
|
18 local moduleID = "PetAction"
|
flickerstreak@28
|
19 local module = ReAction:NewModule( moduleID )
|
flickerstreak@28
|
20
|
flickerstreak@130
|
21 -- Button class
|
flickerstreak@130
|
22 local Button = ReAction.Button.PetAction
|
flickerstreak@77
|
23
|
flickerstreak@102
|
24 -- private
|
flickerstreak@102
|
25 local function UpdateButtonLock(bar)
|
flickerstreak@102
|
26 local f = bar:GetFrame()
|
flickerstreak@102
|
27 f:SetAttribute("lockbuttons",bar.config.lockButtons)
|
flickerstreak@102
|
28 f:SetAttribute("lockbuttonscombat",bar.config.lockButtonsCombat)
|
flickerstreak@102
|
29 f:Execute(
|
flickerstreak@102
|
30 [[
|
flickerstreak@102
|
31 lockButtons = self:GetAttribute("lockbuttons")
|
flickerstreak@102
|
32 lockButtonsCombat = self:GetAttribute("lockbuttonscombat")
|
flickerstreak@102
|
33 ]])
|
flickerstreak@102
|
34 end
|
flickerstreak@102
|
35
|
flickerstreak@28
|
36 -- module methods
|
flickerstreak@28
|
37 function module:OnInitialize()
|
flickerstreak@53
|
38 self.buttons = { }
|
flickerstreak@63
|
39
|
flickerstreak@63
|
40 ReAction:RegisterBarOptionGenerator(self, "GetBarOptions")
|
flickerstreak@63
|
41
|
flickerstreak@63
|
42 ReAction.RegisterCallback(self, "OnCreateBar")
|
flickerstreak@63
|
43 ReAction.RegisterCallback(self, "OnDestroyBar")
|
flickerstreak@63
|
44 ReAction.RegisterCallback(self, "OnRefreshBar")
|
flickerstreak@28
|
45 end
|
flickerstreak@28
|
46
|
flickerstreak@28
|
47 function module:OnEnable()
|
flickerstreak@218
|
48 ReAction:RegisterBarType(Button)
|
flickerstreak@28
|
49 end
|
flickerstreak@28
|
50
|
flickerstreak@28
|
51 function module:OnDisable()
|
flickerstreak@218
|
52 ReAction:UnregisterBarType(Button)
|
flickerstreak@28
|
53 end
|
flickerstreak@28
|
54
|
flickerstreak@63
|
55 function module:OnCreateBar(event, bar, name)
|
flickerstreak@53
|
56 if bar.config.type == moduleID then
|
flickerstreak@53
|
57 -- auto show/hide when pet exists
|
flickerstreak@148
|
58 bar:RegisterUnitWatch("pet",true)
|
flickerstreak@63
|
59 self:OnRefreshBar(event, bar, name)
|
flickerstreak@28
|
60 end
|
flickerstreak@28
|
61 end
|
flickerstreak@28
|
62
|
flickerstreak@63
|
63 function module:OnRefreshBar(event, bar, name)
|
flickerstreak@222
|
64 local config = bar:GetConfig()
|
flickerstreak@222
|
65 if config.type == moduleID then
|
flickerstreak@53
|
66 if self.buttons[bar] == nil then
|
flickerstreak@53
|
67 self.buttons[bar] = { }
|
flickerstreak@53
|
68 end
|
flickerstreak@53
|
69 local btns = self.buttons[bar]
|
flickerstreak@222
|
70 if not config.buttons then
|
flickerstreak@222
|
71 config.buttons = { }
|
flickerstreak@53
|
72 end
|
flickerstreak@222
|
73 local btnCfg = config.buttons
|
flickerstreak@53
|
74
|
flickerstreak@53
|
75 local r, c = bar:GetButtonGrid()
|
flickerstreak@53
|
76 local n = r*c
|
flickerstreak@53
|
77 for i = 1, n do
|
flickerstreak@53
|
78 if btnCfg[i] == nil then
|
flickerstreak@53
|
79 btnCfg[i] = {}
|
flickerstreak@53
|
80 end
|
flickerstreak@53
|
81 if btns[i] == nil then
|
flickerstreak@130
|
82 local success, r = pcall(Button.New,Button,i,btnCfg[i],bar,i>1 and btnCfg[i-1].actionID)
|
flickerstreak@94
|
83 if success and r then
|
flickerstreak@94
|
84 btns[i] = r
|
flickerstreak@94
|
85 bar:AddButton(i,r)
|
flickerstreak@94
|
86 else
|
flickerstreak@94
|
87 n = i - 1
|
flickerstreak@94
|
88 bar:ClipNButtons(n)
|
flickerstreak@94
|
89 break
|
flickerstreak@94
|
90 end
|
flickerstreak@53
|
91 end
|
flickerstreak@77
|
92 btns[i]:Refresh()
|
flickerstreak@53
|
93 end
|
flickerstreak@53
|
94 for i = n+1, #btns do
|
flickerstreak@53
|
95 if btns[i] then
|
flickerstreak@77
|
96 bar:RemoveButton(btns[i])
|
flickerstreak@53
|
97 btns[i] = btns[i]:Destroy()
|
flickerstreak@53
|
98 if btnCfg[i] then
|
flickerstreak@53
|
99 btnCfg[i] = nil
|
flickerstreak@53
|
100 end
|
flickerstreak@53
|
101 end
|
flickerstreak@53
|
102 end
|
flickerstreak@102
|
103 UpdateButtonLock(bar)
|
flickerstreak@53
|
104 end
|
flickerstreak@53
|
105 end
|
flickerstreak@53
|
106
|
flickerstreak@63
|
107 function module:OnDestroyBar(event, bar, name)
|
flickerstreak@53
|
108 if self.buttons[bar] then
|
flickerstreak@53
|
109 local btns = self.buttons[bar]
|
flickerstreak@53
|
110 for _,b in pairs(btns) do
|
flickerstreak@53
|
111 if b then
|
flickerstreak@53
|
112 b:Destroy()
|
flickerstreak@53
|
113 end
|
flickerstreak@53
|
114 end
|
flickerstreak@53
|
115 self.buttons[bar] = nil
|
flickerstreak@53
|
116 end
|
flickerstreak@53
|
117 end
|
flickerstreak@53
|
118
|
flickerstreak@53
|
119
|
flickerstreak@53
|
120
|
flickerstreak@60
|
121 ---- Options ----
|
flickerstreak@102
|
122 local Handler = { }
|
flickerstreak@102
|
123 local meta = { __index = Handler }
|
flickerstreak@102
|
124
|
flickerstreak@102
|
125 function Handler:New(bar)
|
flickerstreak@102
|
126 return setmetatable(
|
flickerstreak@102
|
127 {
|
flickerstreak@102
|
128 bar = bar,
|
flickerstreak@102
|
129 config = bar.config
|
flickerstreak@102
|
130 }, meta)
|
flickerstreak@102
|
131 end
|
flickerstreak@102
|
132
|
flickerstreak@102
|
133 function Handler:GetLockButtons()
|
flickerstreak@130
|
134 return self.config.lockButtons
|
flickerstreak@102
|
135 end
|
flickerstreak@102
|
136
|
flickerstreak@102
|
137 function Handler:SetLockButtons(info, value)
|
flickerstreak@102
|
138 self.config.lockButtons = value
|
flickerstreak@102
|
139 UpdateButtonLock(self.bar)
|
flickerstreak@102
|
140 end
|
flickerstreak@102
|
141
|
flickerstreak@102
|
142 function Handler:GetLockButtonsCombat()
|
flickerstreak@102
|
143 return self.config.lockButtonsCombat
|
flickerstreak@102
|
144 end
|
flickerstreak@102
|
145
|
flickerstreak@102
|
146 function Handler:SetLockButtonsCombat(info, value)
|
flickerstreak@102
|
147 self.config.lockButtonsCombat = value
|
flickerstreak@102
|
148 UpdateButtonLock(self.bar)
|
flickerstreak@102
|
149 end
|
flickerstreak@102
|
150
|
flickerstreak@102
|
151 function Handler:LockButtonsCombatDisabled()
|
flickerstreak@130
|
152 return not self.config.lockButtons
|
flickerstreak@102
|
153 end
|
flickerstreak@102
|
154
|
flickerstreak@102
|
155
|
flickerstreak@60
|
156 function module:GetBarOptions(bar)
|
flickerstreak@91
|
157 if bar.config.type == moduleID then
|
flickerstreak@91
|
158 return {
|
flickerstreak@91
|
159 type = "group",
|
flickerstreak@91
|
160 name = L["Pet Buttons"],
|
flickerstreak@102
|
161 handler = Handler:New(bar),
|
flickerstreak@91
|
162 args = {
|
flickerstreak@102
|
163 lockButtons = {
|
flickerstreak@102
|
164 name = L["Lock Buttons"],
|
flickerstreak@147
|
165 desc = L["Prevents picking up/dragging actions (use SHIFT to override this behavior)"],
|
flickerstreak@102
|
166 order = 2,
|
flickerstreak@102
|
167 type = "toggle",
|
flickerstreak@102
|
168 get = "GetLockButtons",
|
flickerstreak@102
|
169 set = "SetLockButtons",
|
flickerstreak@102
|
170 },
|
flickerstreak@102
|
171 lockOnlyCombat = {
|
flickerstreak@102
|
172 name = L["Only in Combat"],
|
flickerstreak@102
|
173 desc = L["Only lock the buttons when in combat"],
|
flickerstreak@102
|
174 order = 3,
|
flickerstreak@102
|
175 type = "toggle",
|
flickerstreak@102
|
176 disabled = "LockButtonsCombatDisabled",
|
flickerstreak@102
|
177 get = "GetLockButtonsCombat",
|
flickerstreak@102
|
178 set = "SetLockButtonsCombat",
|
flickerstreak@102
|
179 },
|
flickerstreak@91
|
180 }
|
flickerstreak@60
|
181 }
|
flickerstreak@91
|
182 end
|
flickerstreak@59
|
183 end
|
flickerstreak@59
|
184
|
flickerstreak@53
|
185
|