comparison ReAction.lua @ 1:c11ca1d8ed91

Version 0.1
author Flick <flickerstreak@gmail.com>
date Tue, 20 Mar 2007 21:03:57 +0000
parents
children 8e0ff8ae4c08
comparison
equal deleted inserted replaced
0:4e2ce2894c21 1:c11ca1d8ed91
1 -- ReAction.lua
2 --
3 -- Top-level file for the ReAction Action Bar add-on
4 --
5 -- ReAction is implemented in terms of the Ace 2 library: http://www.wowace.com
6 --
7
8 -- key binding label constants
9 BINDING_HEADER_REACTION = "ReAction"
10 BINDING_NAME_REACTION_TOGGLELOCK = "Lock/Unlock ReAction"
11
12 -- ReAction addon setup via Ace 2
13 ReAction = AceLibrary("AceAddon-2.0"):new(
14 "AceConsole-2.0",
15 "AceEvent-2.0",
16 "AceDB-2.0",
17 "FuBarPlugin-2.0"
18 )
19
20 -- FuBar plugin setup
21 ReAction.hasIcon = false
22 ReAction.hasNoColor = true
23 ReAction.defaultPosition = "RIGHT"
24 ReAction.defaultMinimapPosition = 240 -- degrees
25 ReAction.OnMenuRequest = ReActionGlobalMenuOptions
26
27 -- initial non-persistent state
28 ReAction.locked = true
29
30 -- localization
31 -- local L = AceLibrary("AceLocale-2.0"):new("ReAction")
32
33
34
35 -- Event handling
36 function ReAction:OnInitialize()
37 self:RegisterChatCommand( {"/reaction", "/rxn"}, ReActionConsoleOptions, "REACTION" )
38
39 self:RegisterDB("ReActionDB","ReActionDBPC")
40 self:RegisterDefaults("profile", ReActionProfileDefaults)
41 self:RegisterEvent("PLAYER_REGEN_DISABLED","CombatLockdown")
42
43 AceLibrary("Dewdrop-2.0"):InjectAceOptionsTable(self, ReActionProfileMenuOptions)
44 end
45
46 function ReAction:OnEnable()
47 if self.db.profile.firstRunDone ~= true then
48 -- Do some "first-run" setup
49 self.db.profile.firstRunDone = true
50 elseif self.db.profile.disabled == true then
51 -- print some kind of a warning
52 else
53 self:SetupBars()
54 end
55 end
56
57 function ReAction:OnDisable()
58 self:Lock()
59 end
60
61 function ReAction:OnProfileEnable()
62 -- handle profile switching
63 self:SetupBars()
64 self:Lock()
65 end
66
67 function ReAction:CombatLockdown()
68 if not self:IsLocked() then
69 self:Lock()
70 UIErrorsFrame:AddMessage("ReAction bars locked when in combat")
71 end
72 end
73
74
75 -- lock/unlock ReAction
76 function ReAction:SetLocked( lock )
77 self.locked = lock and true or false -- force data integrity
78 if not self.locked then
79 self:Print("Buttons disabled while unlocked")
80 end
81 for _, bar in ipairs(self.bars) do
82 if self.locked then bar:HideControls() else bar:ShowControls() end
83 end
84 end
85
86 function ReAction:IsLocked()
87 return self.locked
88 end
89
90 function ReAction:Lock()
91 self:SetLocked(true)
92 end
93
94 function ReAction:Unlock()
95 self:SetLocked(false)
96 end
97
98 function ReAction:ToggleLocked()
99 ReAction:SetLocked( not(self.locked) )
100 end
101
102
103
104 -- Hide the default Blizzard main bar artwork
105 function ReAction:HideArt()
106 if self.db.profile.hideArt then
107 MainMenuBar:Hide() -- this also hides the bags, xp bar, lag meter, and micro menu buttons.
108 else
109 MainMenuBar:Show()
110 end
111 end
112
113 function ReAction:IsArtHidden()
114 return self.db.profile.hideArt
115 end
116
117 function ReAction:SetHideArt( hide )
118 self.db.profile.hideArt = hide and true or false -- force data integrity
119 self:HideArt()
120 end
121
122 function ReAction:ToggleHideArt()
123 self:SetHideArt( not self:IsArtHidden() )
124 end
125
126
127
128 -- Keybinding color coding
129 function ReAction:SetKeyColorCoding( cc )
130 self.db.profile.keyColorCode = cc
131 end
132
133 function ReAction:IsKeyColorCodeEnabled()
134 return self.db.profile.keyColorCode
135 end
136
137 function ReAction:ToggleKeyColorCoding()
138 self:SetKeyColorCoding(not self.db.profile.keyColorCode)
139 end
140
141
142
143 -- Hide default Blizzard bars
144 local blizzDefaultBars = {
145 ActionButton1,
146 ActionButton2,
147 ActionButton3,
148 ActionButton4,
149 ActionButton5,
150 ActionButton6,
151 ActionButton7,
152 ActionButton8,
153 ActionButton9,
154 ActionButton10,
155 ActionButton11,
156 ActionButton12,
157 BonusActionBarFrame,
158 MultiBarLeft,
159 MultiBarRight,
160 MultiBarBottomLeft,
161 MultiBarBottomRight
162 }
163
164 function ReAction:HideDefaultBars()
165 for _, f in pairs(blizzDefaultBars) do
166 f:Hide()
167 f:ClearAllPoints()
168 f:SetParent(ReActionButtonRecycler)
169 f:UnregisterAllEvents()
170 end
171 end
172
173
174 -- Reset bars to defaults
175 function ReAction:ResetBars()
176 self.db.profile.bars = ReActionProfileDefaults.bars
177 self:SetupBars()
178 end
179
180
181 -- re-sync action IDs
182 function ReAction:ResyncActionIDs()
183 -- TODO
184 end
185
186
187
188 -- Bar manipulation
189 ReAction.bars = { }
190
191 function ReAction:SetupBars()
192 -- hide the default Blizzard art, if configued
193 self:HideArt()
194 -- hide the default Blizzard bars
195 self:HideDefaultBars()
196
197 -- set up the bars from the profile
198 for id, info in ipairs(self.db.profile.bars) do
199 if self.bars[id] then self.bars[id]:Destroy() end -- remove old version of bar if switching profiles
200 self.bars[id] = ReBar:new(info, id)
201 end
202
203 -- remove excess bars
204 while #self.bars > #self.db.profile.bars do
205 table.remove(self.bars):Destroy()
206 end
207
208 -- anchor the bars, have to do this in a second pass because
209 -- they might be anchored to each other in a non-ordered way
210 for _, bar in ipairs(self.bars) do
211 bar:ApplyAnchor()
212 end
213 end
214
215
216 function ReAction:NewBar()
217 local c = ReActionBarConfigDefaults
218 table.insert(self.bars, ReBar:new(c, #self.bars + 1))
219 table.insert(self.db.profile.bars, c)
220 self:Unlock()
221 end
222
223
224 function ReAction:DeleteBar(id)
225 if self.bars[id] then
226 table.remove(self.bars, id):Destroy()
227 table.remove( self.db.profile.bars, id )
228 end
229 end
230
231 function ReAction:ToggleActionID()
232 if self.showActionIDs then
233 ReActionButton:HideAllActionIDs()
234 else
235 ReActionButton:ShowAllActionIDs()
236 end
237 self.showActionIDs = not self.showActionIDs
238 end
239
240 function ReAction:IsActionIDVisible()
241 return self.showActionIDs
242 end
243
244
245
246 -- FuBar plugin methods
247 local tablet = AceLibrary("Tablet-2.0")
248
249 function ReAction:OnTooltipUpdate()
250 local c = tablet:AddCategory("columns", 2)
251 c:AddLine("text", "ReAction bar lock", "text2", self.locked and "|cffcc0000Locked|r" or "|cff00cc00Unlocked|r")
252 tablet:SetHint("|cffcc6600Shift-Click|r to toggle action bar lock. Right-click for options.")
253 end
254
255 function ReAction:OnClick(button)
256 if IsShiftKeyDown() then
257 self:ToggleLocked()
258 end
259 self:UpdateDisplay()
260 end