comparison SkeletonKey/KeyButton.lua @ 52:81a7c71c4483

- fixed safety override - fixed pet journal drag/drop - fixed confirmation cancel button
author Nenue
date Fri, 19 Aug 2016 10:46:36 -0400
parents 1aba8a6fd4a9
children c416c9e6d212
comparison
equal deleted inserted replaced
51:d0ee4553061a 52:81a7c71c4483
1 -- SkeletonKey 1 -- SkeletonKey
2 -- KeyButton.lua 2 -- KeyButton.lua
3 -- Created: 7/28/2016 11:26 PM 3 -- Created: 7/28/2016 11:26 PM
4 -- %file-revision% 4 -- %file-revision%
5 -- Code dealing with the slot button innards; they are invoked by frame script and should only chain to Set/Release 5 -- Deals with display and manipulation of binding slots
6 6
7 local kb, print = LibStub('LibKraken').register(KeyBinder, 'Slot') 7 local kb, print = LibStub('LibKraken').register(KeyBinder, 'Slot')
8 local L = kb.L 8 local L = kb.L
9 local type, tonumber, tostring, tinsert, tremove, ipairs, pairs = type, tonumber, tostring, tinsert, tremove, ipairs, pairs
10 local _G, unpack, select, tostring = _G, unpack, select, tostring
11 local GetSpellBookItemName, GetSpellBookItemTexture, GetSpellBookItemInfo, GetPetActionInfo = GetSpellBookItemName, GetSpellBookItemTexture, GetSpellBookItemInfo, GetPetActionInfo
12 local GetSpellInfo, GetMacroInfo, GetItemInfo, GetItemIcon = GetSpellInfo, GetMacroInfo, GetItemInfo, GetItemIcon
13 local GetCursorInfo, ClearCursor, ResetCursor = GetCursorInfo, ClearCursor, ResetCursor
14 local GetSpellTexture, IsTalentSpell, GetMacroIndexByName, IsAltKeyDown, IsControlKeyDown, IsShiftKeyDown = GetSpellTexture, IsTalentSpell, GetMacroIndexByName, IsAltKeyDown, IsControlKeyDown,IsShiftKeyDown
15 local GetBindingKey, GetProfessionInfo = GetBindingKey, GetProfessionInfo
16 local GetMountInfoByID, GetPetInfoByPetID = C_MountJournal.GetMountInfoByID, C_PetJournal.GetPetInfoByPetID
17
9 local CURSOR_SPELLSLOT, CURSOR_BOOKTYPE, CURSOR_PETACTION, CURSOR_TEXTURE 18 local CURSOR_SPELLSLOT, CURSOR_BOOKTYPE, CURSOR_PETACTION, CURSOR_TEXTURE
10 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544 19 local SUMMON_RANDOM_FAVORITE_MOUNT_SPELL = 150544
11 local BORDER_UNASSIGNED = {0.2,0.2,0.2,1} 20 local BORDER_UNASSIGNED = {0.2,0.2,0.2,1}
12 local BORDER_ASSIGNED = {1,1,1,1} 21 local BORDER_ASSIGNED = {1,1,1,1}
13 local BORDER_DYNAMIC = {1,1,0,1} 22 local BORDER_DYNAMIC = {1,1,0,1}
126 elseif actionType == 'mount' then 135 elseif actionType == 'mount' then
127 if subType == 0 then 136 if subType == 0 then
128 name, _, icon = GetSpellInfo(SUMMON_RANDOM_FAVORITE_MOUNT_SPELL) 137 name, _, icon = GetSpellInfo(SUMMON_RANDOM_FAVORITE_MOUNT_SPELL)
129 actionID = 0 138 actionID = 0
130 else 139 else
131 name, _, icon = C_MountJournal.GetMountInfoByID(actionID) 140 name, _, icon = GetMountInfoByID(actionID)
132 end 141 end
133 elseif actionType == 'item' then 142 elseif actionType == 'item' then
134 name = GetItemInfo(actionID) 143 name = GetItemInfo(actionID)
135 icon = GetItemIcon(actionID) 144 icon = GetItemIcon(actionID)
136 actionID = name 145 actionID = name
137 elseif actionType == 'battlepet' then 146 elseif actionType == 'battlepet' then
138 147
139 local speciesID, customName, level, xp, maxXp, displayID, isFavorite, petName, petIcon, petType, creatureID = C_PetJournal.GetPetInfoByPetID(detail); 148 local speciesID, customName, level, xp, maxXp, displayID, isFavorite, petName, petIcon, petType, creatureID = GetPetInfoByPetID(actionID)
140 name = customName or petName 149 name = customName or petName
141 icon = petIcon 150 icon = petIcon
142 151
143 end 152 end
144 local macroName, macroText, command = kb.RegisterAction(actionType, actionID, name) 153 local macroName, macroText, command = kb.RegisterAction(actionType, actionID, name)
198 kb.UpdateSlot(self) 207 kb.UpdateSlot(self)
199 end 208 end
200 end 209 end
201 end 210 end
202 211
203 kb.UnbindSlot = function(self) 212
204
205 local keys = {GetBindingKey(self.command) }
206 if #keys >= 1 then
207 kb.UpdateBindingsCache(self.actionType, self.actionID, {})
208 end
209
210
211 --print('detected', #keys, 'bindings')
212 for i, key in pairs(keys) do
213 --print('clearing', key)
214 SetBinding(key, nil)
215 SaveBindings(GetCurrentBindingSet())
216 if kb.currentProfile.bindings[key] then
217 --kb:print(L('BINDING_REMOVED', self.actionName, kb.currentHeader))
218 kb.currentProfile.bindings[key] = nil
219 end
220 if kb.currentProfile.talents[self.actionName] then
221 kb.currentProfile.talents[self.actionName] = nil
222 end
223
224 kb.bindings[tostring(self.actionType)..'_'..tostring(self.actionID)] = nil
225 end
226 if kb.currentProfile.bound[self.command] then
227 kb.currentProfile.bound[self.command] = nil
228 --kb:print(BINDING_REMOVED:format(self.actionName, configHeaders[db.bindMode]))
229 end
230
231
232 self.active = false
233 kb.UpdateSlot(self, true)
234 end
235
236 --- Updates the current KeyBinding for the button's command
237 kb.SaveSlot = function(self, key)
238
239 if not self.command then
240 return
241 end
242 print('|cFFFFFF00received|cFFFFFF00', self:GetID(), '|cFF00FFFF', key)
243
244 local modifier = ''
245 if IsAltKeyDown() then
246 modifier = 'ALT-'
247 end
248 if IsControlKeyDown() then
249 modifier = modifier.. 'CTRL-'
250 end
251 if IsShiftKeyDown() then
252 modifier = modifier..'SHIFT-'
253 end
254 local binding = modifier..key
255
256 if key == 'ESCAPE' then
257 else
258 if kb.SystemBindings[binding] then
259 kb.statustext:SetText(L('BINDING_FAILED_PROTECTED', binding, kb.SystemBindings[binding]))
260 return
261 end
262
263
264 if self.command then
265
266 local previousCommand = GetBindingAction(binding)
267 if previousCommand ~= "" and previousCommand ~= self.command then
268 if kb.SystemBindings[binding] then
269 -- bounce out if trying to use a protected key
270 kb.statustext:SetText(L('BINDING_FAILED_PROTECTED', key, GetBindingAction(binding)))
271 kb.bindingstext:SetText(nil)
272 return false
273 end
274
275 local actionType, actionID, name = kb.GetCommandAction(previousCommand)
276 if actionType then
277 local keys = {GetBindingKey(previousCommand) }
278 local i = 1
279 while keys[i] do
280 if keys[i] == binding then
281 table.remove(keys, i)
282 kb.UpdateBindingsCache(actionType, actionID, keys)
283 break
284 end
285 i = i + 1
286 end
287 end
288 end
289
290 local currentHotKeys = {GetBindingKey(self.command)}
291 local found
292 for i, key in ipairs(currentHotKeys) do
293 if key == binding then
294 found = true
295 kb:print('hotkey already assigned')
296 end
297 end
298 if not found then
299 table.insert(currentHotKeys, 1, binding)
300 kb.UpdateBindingsCache(self.actionType, self.actionID, currentHotKeys)
301 end
302
303 self.binding = binding
304
305
306 print('SetBinding', binding, self.command)
307 SetBinding(self.binding, self.command)
308 SaveBindings(GetCurrentBindingSet())
309
310
311
312 local talentInfo
313 if self.actionType == 'spell' and kb.TalentCache[self.actionID] then
314 print('conditional binding (talent = "'..self.actionName..'")')
315 talentInfo = {self.macroName, self.actionName, self.actionType, self.actionID}
316 local bindings = {GetBindingKey(self.command) }
317 for i, key in ipairs(bindings) do
318 tinsert(talentInfo, key)
319 end
320 end
321
322 for level, profile in ipairs(kb.orderedProfiles) do
323 if (level == kb.db.bindMode) then
324 profile.bound[self.command] = true
325 if talentInfo then
326 profile.bindings[self.binding] = nil
327 else
328 profile.bindings[self.binding] = self.command
329 end
330 profile.talents[self.actionName] = talentInfo
331 else
332 profile.bindings[self.binding] = nil
333 profile.bound[self.command] = nil
334 kb.currentProfile.talents[self.actionName] = nil
335 end
336 if kb.currentProfile.talents[self.actionID] then
337 kb.currentProfile.talents[self.actionID] = nil
338 end
339 end
340
341 kb:print(L('BINDING_ASSIGNED', self.binding, self.actionName, kb.currentHeader))
342 end
343 end
344 kb.UpdateSlot(self, true)
345 return true
346 end
347 213
348 214
349 --- Updates profile assignment and button contents 215 --- Updates profile assignment and button contents
350 kb.UpdateSlot = function(self, force) 216 kb.UpdateSlot = function(self, force)
351 local slot = self:GetID() 217 local slot = self:GetID()
667 end 533 end
668 end 534 end
669 end 535 end
670 end 536 end
671 537
672
673 --- Add to blizzard interfaces
674 StaticPopupDialogs["SKELETONKEY_CONFIRM_ASSIGN_SLOT"] = {
675 text = "Confirm moving an assigned command.",
676 button1 = OKAY,
677 button2 = CANCEL,
678 timeout = 0,
679 whileDead = 1,
680 showAlert = 1,
681 OnAccept = kb.AcceptAssignment,
682 OnCancel = function() kb:SetScript('OnMouseWheel', KeyBinder_OnMouseWheel) end
683 }