comparison SkeletonKey.lua @ 74:9824d524a661

- binding slot mixin: - store key binding definitions under their slot's data table - apply action button attributes when a slot is assigned - obtain correct macro body text when a macro is slotted - fix algorithm for resolving renamed macro indices - move spell detail lookup code out of mixin script - event chains: - initialize addon from PLAYER_LOGIN - reload keybinds from PLAYER_SPECIALIZATION_CHANGED, after spec profile is resolved - refresh interface content from SPELLS_CHANGED - hotkey text: - restore communication and detection of key binding updates and reflect them accordingly - properly respond to dynamic bindings that result from talent updates
author Nenue
date Sat, 14 Jan 2017 02:29:33 -0500
parents c48913c5924c
children 6623b7f2c1ca
comparison
equal deleted inserted replaced
73:68365bda5ab5 74:9824d524a661
149 kb.BindingString = function(...) 149 kb.BindingString = function(...)
150 local stack = {} 150 local stack = {}
151 for i = 1, select('#', ...) do 151 for i = 1, select('#', ...) do
152 local key = select(i, ...) 152 local key = select(i, ...)
153 if type(key) == 'string' then 153 if type(key) == 'string' then
154 stack[i] = key:gsub('SHIFT', 's'):gsub('ALT', 'a'):gsub('CTRL', 'c'):gsub('SPACE', 'Sp'):gsub('BUTTON', 'M '):gsub('NUMPAD', '# ') 154 stack[i] = key:gsub('SHIFT', 's'):gsub('ALT', 'a'):gsub('CTRL', 'c'):gsub('SPACE', 'Sp'):gsub('BUTTON', 'M '):gsub('NUMPAD', '# ')
155 end 155 end
156 end 156 end
157 157
158 if #stack >= 1 then 158 if #stack >= 1 then
159 return concat(stack, ',') 159 return concat(stack, ',')
160 else 160 else
241 kb.SelectProfileSet = function(name) 241 kb.SelectProfileSet = function(name)
242 242
243 local defaultMode 243 local defaultMode
244 --- General info 244 --- General info
245 classHeader, className, classID = UnitClass('player') 245 classHeader, className, classID = UnitClass('player')
246 print('|cFF00FF00profile:|r', name) 246 --kb:print('|cFF00FF00profile:|r', name)
247 print('|cFF00FF00class:|r', UnitClass('player')) 247 --kb:print('|cFF00FF00class:|r', UnitClass('player'))
248 248
249 defaultMode = BINDING_TYPE_GLOBAL 249 defaultMode = BINDING_TYPE_GLOBAL
250 if db[name] then 250 if db[name] then
251 defaultMode = BINDING_TYPE_CHARACTER 251 defaultMode = BINDING_TYPE_CHARACTER
252 if db[name][kb.specInfo.id] then 252 if db[name][kb.specInfo.id] then
285 285
286 setmetatable(kb.loadedProfiles[BINDING_TYPE_GLOBAL], {__tostring =function() return kb.configHeaders[BINDING_TYPE_GLOBAL] end}) 286 setmetatable(kb.loadedProfiles[BINDING_TYPE_GLOBAL], {__tostring =function() return kb.configHeaders[BINDING_TYPE_GLOBAL] end})
287 setmetatable(kb.loadedProfiles[BINDING_TYPE_CHARACTER], {__tostring =function() return kb.configHeaders[BINDING_TYPE_CHARACTER] end}) 287 setmetatable(kb.loadedProfiles[BINDING_TYPE_CHARACTER], {__tostring =function() return kb.configHeaders[BINDING_TYPE_CHARACTER] end})
288 setmetatable(kb.loadedProfiles[BINDING_TYPE_SPECIALIZATION], {__tostring =function() return kb.configHeaders[BINDING_TYPE_SPECIALIZATION] end}) 288 setmetatable(kb.loadedProfiles[BINDING_TYPE_SPECIALIZATION], {__tostring =function() return kb.configHeaders[BINDING_TYPE_SPECIALIZATION] end})
289 289
290 print('|cFF00FF00bindMode:|r', db.bindMode)
291 kb.currentProfile = kb.loadedProfiles[db.bindMode] 290 kb.currentProfile = kb.loadedProfiles[db.bindMode]
292 kb.currentHeader = kb.configHeaders[db.bindMode] 291 kb.currentHeader = kb.configHeaders[db.bindMode]
292
293 print('|cFF88FF00SelectProfile()|r', kb.profileName, classHeader, kb.specInfo.name)
293 end 294 end
294 295
295 296
296 function SkeletonKeyMixin:SetTab (id) 297 function SkeletonKeyMixin:SetTab (id)
297 self.scrollCache[db.bindMode] = kb.scrollOffset 298 self.scrollCache[db.bindMode] = kb.scrollOffset
315 function SkeletonKeyMixin:OnLoad() 316 function SkeletonKeyMixin:OnLoad()
316 kb.frame = self 317 kb.frame = self
317 print('|cFF0088FF'..self:GetName()..':OnLoad()') 318 print('|cFF0088FF'..self:GetName()..':OnLoad()')
318 319
319 self.CloseButton:SetScript('OnClick', CloseButton_OnClick) 320 self.CloseButton:SetScript('OnClick', CloseButton_OnClick)
320 self:RegisterEvent('PLAYER_LOGIN')
321 self:RegisterEvent('PLAYER_ENTERING_WORLD') 321 self:RegisterEvent('PLAYER_ENTERING_WORLD')
322 self:RegisterEvent('ADDON_LOADED') 322 self:RegisterEvent('ADDON_LOADED')
323 self:RegisterEvent('PLAYER_LOGIN')
324 self:RegisterUnitEvent('PLAYER_SPECIALIZATION_CHANGED', 'player')
323 self:EnableKeyboard(false) 325 self:EnableKeyboard(false)
324 326
325 self.zoomScale = self:GetScale() 327 self.zoomScale = self:GetScale()
326 self.backdrop = self:GetBackdrop() 328 self.backdrop = self:GetBackdrop()
327 self.backdropColor = {self:GetBackdropColor() } 329 self.backdropColor = {self:GetBackdropColor() }
328 self.backdropBorder = {self:GetBackdropBorderColor() } 330 self.backdropBorder = {self:GetBackdropBorderColor() }
329 331
330 end 332 end
331 333
332 function SkeletonKeyMixin:OnEvent(event, arg) 334 function SkeletonKeyMixin:OnEvent(event, arg)
333 if event == 'ADDON_LOADED' then 335 print('|cFFFF0088'.. event..'|r', unit)
336 if event == 'PLAYER_LOGIN' then
334 337
335 print('|cFF00FFFF'..event ..'|r', arg or '', IsLoggedIn()) 338 print('|cFF00FFFF'..event ..'|r', arg or '', IsLoggedIn())
336 if IsLoggedIn() and not self.initialized then 339 if not self.initialized then
337 self:Setup() 340 self:Setup()
338 self.initialized = true 341 self.initialized = true
339 self:Update() 342 kb.ApplyAllBindings()
343 self:Update(true)
340 end 344 end
341 345
342 346
343 elseif kb[event] then 347 elseif kb[event] then
344 if self.initialized then 348 if self.initialized then
349 print('|cFF004488'..event ..'|r', arg or '') 353 print('|cFF004488'..event ..'|r', arg or '')
350 end 354 end
351 end 355 end
352 end 356 end
353 357
358 function SkeletonKeyMixin:RefreshSpells()
359
360 kb.UpdateTalentInfo()
361 kb.UpdatePetInfo()
362 end
354 363
355 --- post ADDON_LOADED 364 --- post ADDON_LOADED
356 function SkeletonKeyMixin:Setup () 365 function SkeletonKeyMixin:Setup ()
357 print('|cFF00FFFF'..self:GetName()..':Setup()') 366 print('|cFF00FFFF'..self:GetName()..':Setup()')
358 SkeletonKeyDB = kb.InitProfile(SkeletonKeyDB, {}) 367 SkeletonKeyDB = kb.InitProfile(SkeletonKeyDB, {})
363 db = kb.db 372 db = kb.db
364 373
365 kb.UpdateSpecInfo() 374 kb.UpdateSpecInfo()
366 kb.UpdateTalentInfo() 375 kb.UpdateTalentInfo()
367 kb.SelectProfileSet(kb.profileName) 376 kb.SelectProfileSet(kb.profileName)
377 self:SetShown(kb.db.showUI)
368 -- todo: redo import checking 378 -- todo: redo import checking
369 379
370 kb.UpdateSystemBinds() 380 kb.UpdateSystemBinds()
371 kb.ApplyAllBindings()
372 381
373 if not InCombatLockdown() then 382 if not InCombatLockdown() then
374 kb.CreateHooks() 383 kb.CreateHooks()
375 else 384 else
376 kb:print('Some functionality will not load until breaking combat.') 385 kb:print('Some functionality will not load until breaking combat.')
378 end 387 end
379 SLASH_SKB1 = "/skb" 388 SLASH_SKB1 = "/skb"
380 SLASH_SKB2 = "/skeletonkey" 389 SLASH_SKB2 = "/skeletonkey"
381 SlashCmdList.SKB = kb.Command 390 SlashCmdList.SKB = kb.Command
382 391
383 self:SetShown(kb.db.showUI)
384 self:Update(true)
385 392
386 self:RegisterEvent('UPDATE_MACROS') 393 self:RegisterEvent('UPDATE_MACROS')
387 self:RegisterEvent('UPDATE_BINDINGS') 394 --self:RegisterEvent('UPDATE_BINDINGS')
388 self:RegisterUnitEvent('UNIT_PORTRAIT_UPDATE', 'player', 'pet') 395 self:RegisterUnitEvent('UNIT_PORTRAIT_UPDATE', 'player', 'pet')
389 self:RegisterUnitEvent('PLAYER_SPECIALIZATION_CHANGED', 'player', 'pet')
390 self:RegisterUnitEvent('SPELLS_CHANGED')
391 self:RegisterUnitEvent('TALENT_UPDATE', 'player', 'pet')
392 self:RegisterEvent('PLAYER_REGEN_DISABLED') 396 self:RegisterEvent('PLAYER_REGEN_DISABLED')
393 self:RegisterEvent('PLAYER_REGEN_ENABLED') 397 self:RegisterEvent('PLAYER_REGEN_ENABLED')
398 self:RegisterEvent('SPELLS_CHANGED')
399 self:RegisterEvent('PLAYER_TALENT_UPDATE')
394 400
395 self:RegisterForDrag('LeftButton') 401 self:RegisterForDrag('LeftButton')
396 self:SetMovable(true) 402 self:SetMovable(true)
397 for index, frame in ipairs(self.Plugins) do 403 for index, frame in ipairs(self.Plugins) do
398 frame:Setup() 404 frame:Setup()