flickerstreak@182
|
1 local addonName, addonTable = ...
|
flickerstreak@182
|
2 local ReAction = addonTable.ReAction
|
flickerstreak@182
|
3 local L = ReAction.L
|
flickerstreak@182
|
4 local InCombatLockdown = InCombatLockdown
|
flickerstreak@182
|
5
|
flickerstreak@182
|
6
|
flickerstreak@182
|
7 local configID = "ReAction"
|
flickerstreak@184
|
8 local displayName = L["ReAction"]
|
flickerstreak@182
|
9
|
flickerstreak@182
|
10
|
flickerstreak@182
|
11 function ReAction:InitializeOptions()
|
flickerstreak@184
|
12 local AceConfigReg = LibStub("AceConfigRegistry-3.0")
|
flickerstreak@182
|
13 local AceConfigDialog = LibStub("AceConfigDialog-3.0")
|
flickerstreak@182
|
14
|
flickerstreak@184
|
15 local options = {
|
flickerstreak@184
|
16 type = "group",
|
flickerstreak@184
|
17 name = displayName,
|
flickerstreak@184
|
18 handler = self,
|
flickerstreak@184
|
19 args = {
|
flickerstreak@184
|
20 general = {
|
flickerstreak@184
|
21 type = "group",
|
flickerstreak@184
|
22 name = displayName,
|
flickerstreak@184
|
23 args = {
|
flickerstreak@184
|
24 _desc = {
|
flickerstreak@184
|
25 type = "description",
|
flickerstreak@184
|
26 name = L["Customizable replacement for Blizzard's Action Bars"],
|
flickerstreak@184
|
27 order = 1,
|
flickerstreak@184
|
28 },
|
flickerstreak@184
|
29 unlock = {
|
flickerstreak@184
|
30 type = "toggle",
|
flickerstreak@184
|
31 name = L["Unlock Bars"],
|
flickerstreak@184
|
32 desc = L["Unlock bars for dragging and resizing with the mouse"],
|
flickerstreak@184
|
33 get = "GetConfigMode",
|
flickerstreak@184
|
34 set = "OptionSetConfigMode",
|
flickerstreak@184
|
35 width = "full",
|
flickerstreak@184
|
36 disabled = InCombatLockdown,
|
flickerstreak@184
|
37 order = 2,
|
flickerstreak@184
|
38 },
|
flickerstreak@184
|
39 hide = {
|
flickerstreak@184
|
40 type = "toggle",
|
flickerstreak@184
|
41 name = L["Hide Blizzard Action Bars"],
|
flickerstreak@184
|
42 desc = L["Hide the default main bar and extra action bars"],
|
flickerstreak@211
|
43 get = "OptionGetHideBlizzardBars",
|
flickerstreak@211
|
44 set = "OptionSetHideBlizzardBars",
|
flickerstreak@211
|
45 disabled = InCombatLockdown,
|
flickerstreak@184
|
46 width = "full",
|
flickerstreak@184
|
47 order = 3,
|
flickerstreak@184
|
48 },
|
flickerstreak@184
|
49 hideVehicle = {
|
flickerstreak@184
|
50 type = "toggle",
|
flickerstreak@184
|
51 name = L["Hide Blizzard Vehicle Bar"],
|
flickerstreak@184
|
52 desc = L["Hide the default vechicle action bar"],
|
flickerstreak@211
|
53 get = "OptionGetHideBlizzardVehicleBar",
|
flickerstreak@211
|
54 set = "OptionSetHideBlizzardVehicleBar",
|
flickerstreak@211
|
55 disabled = function() return InCombatLockdown() or ReAction:OptionGetHideBlizzardBars() == false end,
|
flickerstreak@184
|
56 width = "full",
|
flickerstreak@184
|
57 order = 4,
|
flickerstreak@184
|
58 },
|
flickerstreak@184
|
59 edit = {
|
flickerstreak@184
|
60 type = "execute",
|
flickerstreak@184
|
61 name = L["Edit Bars..."],
|
flickerstreak@184
|
62 desc = L["Show the ReAction Bar Editor dialogue"],
|
flickerstreak@184
|
63 func = "OptionShowEditor",
|
flickerstreak@184
|
64 order = 5,
|
flickerstreak@184
|
65 },
|
flickerstreak@184
|
66 keybind = {
|
flickerstreak@184
|
67 type = "execute",
|
flickerstreak@184
|
68 name = L["Key Bindings"],
|
flickerstreak@184
|
69 desc = L["Show the keybinding dialogue"],
|
flickerstreak@184
|
70 func = "OptionLaunchKeybindMode",
|
flickerstreak@194
|
71 order = 6,
|
flickerstreak@184
|
72 },
|
flickerstreak@184
|
73 skipProfileWarning = {
|
flickerstreak@184
|
74 type = "toggle",
|
flickerstreak@184
|
75 name = L["Skip profile keybind warning"],
|
flickerstreak@184
|
76 desc = L["Don't show a warning about updating keybinds when switching profiles"],
|
flickerstreak@184
|
77 get = "OptionGetSkipKeybindWarning",
|
flickerstreak@184
|
78 set = "OptionSetSkipKeybindWarning",
|
flickerstreak@184
|
79 width = "double",
|
flickerstreak@194
|
80 order = 7,
|
flickerstreak@184
|
81 },
|
flickerstreak@184
|
82 }
|
flickerstreak@184
|
83 },
|
flickerstreak@184
|
84 profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db),
|
flickerstreak@184
|
85 }
|
flickerstreak@184
|
86 }
|
flickerstreak@182
|
87
|
flickerstreak@184
|
88 AceConfigReg:RegisterOptionsTable(configID,options)
|
flickerstreak@182
|
89
|
flickerstreak@184
|
90 local f = AceConfigDialog:AddToBlizOptions(configID, displayName, nil, "general")
|
flickerstreak@184
|
91
|
flickerstreak@184
|
92 if f and f.obj then
|
flickerstreak@184
|
93 f.obj:SetCallback("default",
|
flickerstreak@184
|
94 function()
|
flickerstreak@184
|
95 self.db:ResetProfile()
|
flickerstreak@184
|
96 AceConfigReg:NotifyChange(configID)
|
flickerstreak@184
|
97 end )
|
flickerstreak@184
|
98 end
|
flickerstreak@184
|
99
|
flickerstreak@184
|
100 AceConfigDialog:AddToBlizOptions(configID, options.args.profiles.name, configID, "profiles")
|
flickerstreak@182
|
101
|
flickerstreak@182
|
102 self.db.RegisterCallback(self,"OnProfileChanged")
|
flickerstreak@182
|
103 self.db.RegisterCallback(self,"OnProfileReset", "OnProfileChanged")
|
flickerstreak@182
|
104 self.db.RegisterCallback(self,"OnProfileCopied","OnProfileChanged")
|
flickerstreak@182
|
105
|
flickerstreak@184
|
106 SlashCmdList["REACTION"] = function(option)
|
flickerstreak@184
|
107 option = string.match(option or "", "^%s*(%S+)")
|
flickerstreak@184
|
108 if option == "config" or option == "options" then
|
flickerstreak@184
|
109 ReAction:ShowOptions()
|
flickerstreak@184
|
110 elseif option == "edit" then
|
flickerstreak@184
|
111 ReAction:ShowEditor()
|
flickerstreak@184
|
112 elseif option == "unlock" then
|
flickerstreak@184
|
113 ReAction:SetConfigMode(true)
|
flickerstreak@184
|
114 elseif option == "lock" then
|
flickerstreak@184
|
115 ReAction:SetConfigMode(false)
|
flickerstreak@184
|
116 elseif option == "kb" then
|
flickerstreak@184
|
117 ReAction:SetKeybindMode(true)
|
flickerstreak@184
|
118 else
|
flickerstreak@185
|
119 print(("%s %s %s"):format(L["ReAction"], ReAction.version, L["Usage:"]))
|
flickerstreak@184
|
120 print("/rxn config")
|
flickerstreak@184
|
121 print("/rxn edit")
|
flickerstreak@184
|
122 print("/rxn lock")
|
flickerstreak@184
|
123 print("/rxn unlock")
|
flickerstreak@184
|
124 print("/rxn kb")
|
flickerstreak@184
|
125 end
|
flickerstreak@184
|
126 end
|
flickerstreak@184
|
127
|
flickerstreak@182
|
128 _G["SLASH_REACTION1"] = "/reaction"
|
flickerstreak@182
|
129 _G["SLASH_REACTION2"] = "/rxn"
|
flickerstreak@182
|
130
|
flickerstreak@182
|
131 StaticPopupDialogs["REACTION_KB_WARN"] = {
|
flickerstreak@182
|
132 text = L["ReAction profile changed: check your keybinds, they may need to be updated."],
|
flickerstreak@182
|
133 button1 = L["OK"],
|
flickerstreak@182
|
134 hideOnEscape = true,
|
flickerstreak@182
|
135 enterClicksFirstButton = true,
|
flickerstreak@182
|
136 timeout = 0,
|
flickerstreak@182
|
137 showAlert = true,
|
flickerstreak@182
|
138 whileDead = true,
|
flickerstreak@182
|
139 }
|
flickerstreak@211
|
140
|
flickerstreak@211
|
141 -- reroute blizzard action bar config to ReAction config window
|
flickerstreak@211
|
142 InterfaceOptionsActionBarsPanel:HookScript("OnShow",
|
flickerstreak@211
|
143 function()
|
flickerstreak@211
|
144 if ReAction:OptionGetHideBlizzardBars() then
|
flickerstreak@211
|
145 ReAction:ShowOptions()
|
flickerstreak@211
|
146 end
|
flickerstreak@211
|
147 end )
|
flickerstreak@182
|
148 end
|
flickerstreak@182
|
149
|
flickerstreak@182
|
150
|
flickerstreak@182
|
151 function ReAction:ShowOptions()
|
flickerstreak@182
|
152 InterfaceOptionsFrame_OpenToCategory(configID)
|
flickerstreak@182
|
153 end
|
flickerstreak@182
|
154
|
flickerstreak@182
|
155
|
flickerstreak@184
|
156 function ReAction:OnProfileChanged()
|
flickerstreak@184
|
157 self:RebuildAll()
|
flickerstreak@182
|
158 if not self.db.global.skipKeybindWarning then
|
flickerstreak@182
|
159 StaticPopup_Show("REACTION_KB_WARN")
|
flickerstreak@182
|
160 end
|
flickerstreak@182
|
161 end
|
flickerstreak@182
|
162
|
flickerstreak@184
|
163
|
flickerstreak@184
|
164 function ReAction:OptionSetConfigMode(info, value)
|
flickerstreak@184
|
165 self:SetConfigMode(value)
|
flickerstreak@182
|
166 end
|
flickerstreak@182
|
167
|
flickerstreak@182
|
168
|
flickerstreak@184
|
169 function ReAction:OptionShowEditor()
|
flickerstreak@184
|
170 self:ShowEditor()
|
flickerstreak@194
|
171 InterfaceOptionsFrame:Hide()
|
flickerstreak@184
|
172 end
|
flickerstreak@184
|
173
|
flickerstreak@184
|
174
|
flickerstreak@184
|
175 function ReAction:OptionLaunchKeybindMode()
|
flickerstreak@184
|
176 self:SetKeybindMode(true)
|
flickerstreak@184
|
177 end
|
flickerstreak@184
|
178
|
flickerstreak@184
|
179
|
flickerstreak@184
|
180 function ReAction:OptionGetSkipKeybindWarning()
|
flickerstreak@184
|
181 return self.db.global.skipKeybindWarning
|
flickerstreak@184
|
182 end
|
flickerstreak@184
|
183
|
flickerstreak@184
|
184
|
flickerstreak@184
|
185 function ReAction:OptionSetSkipKeybindWarning(info, value)
|
flickerstreak@184
|
186 self.db.global.skipKeybindWarning = value
|
flickerstreak@184
|
187 end
|
flickerstreak@184
|
188
|
flickerstreak@184
|
189
|
flickerstreak@211
|
190 function ReAction:OptionSetHideBlizzardBars( info, hide )
|
flickerstreak@211
|
191 self.db.profile.options.hideBlizzardBars = hide
|
flickerstreak@211
|
192 self:ManageBlizzardBars()
|
flickerstreak@211
|
193 end
|
flickerstreak@211
|
194
|
flickerstreak@211
|
195 function ReAction:OptionGetHideBlizzardBars()
|
flickerstreak@211
|
196 return self.db.profile.options.hideBlizzardBars
|
flickerstreak@211
|
197 end
|
flickerstreak@211
|
198
|
flickerstreak@211
|
199 function ReAction:OptionSetHideBlizzardVehicleBar( info, hide )
|
flickerstreak@211
|
200 self.db.profile.options.hideBlizzardVehicleBar = hide
|
flickerstreak@211
|
201 self:ManageBlizzardBars()
|
flickerstreak@211
|
202 end
|
flickerstreak@211
|
203
|
flickerstreak@211
|
204 function ReAction:OptionGetHideBlizzardVehicleBar()
|
flickerstreak@211
|
205 return self.db.profile.options.hideBlizzardVehicleBar
|
flickerstreak@211
|
206 end
|
flickerstreak@211
|
207
|
flickerstreak@211
|
208
|
flickerstreak@182
|
209 -- export to LDB
|
flickerstreak@184
|
210 local LDB = LibStub:GetLibrary("LibDataBroker-1.1")
|
flickerstreak@184
|
211 if LDB then
|
flickerstreak@184
|
212 LDB:NewDataObject( "ReAction",
|
flickerstreak@182
|
213 {
|
flickerstreak@182
|
214 type = "launcher",
|
flickerstreak@182
|
215 icon = "Interface\\Icons\\INV_Qiraj_JewelEncased",
|
flickerstreak@182
|
216
|
flickerstreak@182
|
217 OnClick = function( frame, button )
|
flickerstreak@182
|
218 if not InCombatLockdown() then
|
flickerstreak@182
|
219 if IsAltKeyDown() then
|
flickerstreak@182
|
220 ReAction:SetKeybindMode( not ReAction:GetKeybindMode() )
|
flickerstreak@182
|
221 elseif IsShiftKeyDown() then
|
flickerstreak@182
|
222 ReAction:SetConfigMode( not ReAction:GetConfigMode() )
|
flickerstreak@182
|
223 elseif button == "RightButton" then
|
flickerstreak@182
|
224 ReAction:ShowEditor()
|
flickerstreak@182
|
225 else
|
flickerstreak@182
|
226 ReAction:ShowOptions()
|
flickerstreak@182
|
227 end
|
flickerstreak@182
|
228 else
|
flickerstreak@182
|
229 ReAction:UserError(L["ReAction: can't configure in combat"])
|
flickerstreak@182
|
230 end
|
flickerstreak@182
|
231 end,
|
flickerstreak@182
|
232
|
flickerstreak@182
|
233 -- this isn't included in the 'launcher' type LDB spec but it seems all launcher displays use it
|
flickerstreak@182
|
234 OnTooltipShow = function( tooltip )
|
flickerstreak@182
|
235 tooltip:AddLine(format("|cffffffff%s|r %s",L["Click"],L["for options"]))
|
flickerstreak@182
|
236 tooltip:AddLine(format("|cffffd200%s|r %s",L["Right-click"],L["for bar editor dialog"]))
|
flickerstreak@182
|
237 tooltip:AddLine(format("|cff00ff00%s|r %s",L["Shift-click"],L["to unlock bars"]))
|
flickerstreak@182
|
238 tooltip:AddLine(format("|cff00cccc%s|r %s",L["Alt-click"],L["for keybind mode"]))
|
flickerstreak@182
|
239 end,
|
flickerstreak@182
|
240
|
flickerstreak@184
|
241 })
|
flickerstreak@184
|
242 end
|