comparison SkeletonKey/HotKey.lua @ 62:04c23ceaf9e0

- fix taint caused by loading in combat
author Nenue
date Mon, 05 Sep 2016 14:56:38 -0400
parents b7be92f62b05
children 2409fe9b81e1
comparison
equal deleted inserted replaced
61:b7be92f62b05 62:04c23ceaf9e0
29 ["UPDATE_OVERRIDE_ACTIONBAR"] = {"override"}, 29 ["UPDATE_OVERRIDE_ACTIONBAR"] = {"override"},
30 ["ACTIONBAR_PAGE_CHANGED"] = {"actionbar"}, 30 ["ACTIONBAR_PAGE_CHANGED"] = {"actionbar"},
31 ["ACTIONBAR_SLOT_CHANGED"] = {"actionslot"}, 31 ["ACTIONBAR_SLOT_CHANGED"] = {"actionslot"},
32 ["PLAYER_ENTERING_WORLD"] = {"world","all"}, 32 ["PLAYER_ENTERING_WORLD"] = {"world","all"},
33 ["PET_UI_UPDATE"] = {"pet"}, 33 ["PET_UI_UPDATE"] = {"pet"},
34 ["PLAYER_SPECIALIZATION_CHANGED"] = {"player"},
35 ["PLAYER_TALENTS_UPDATED"] = {"player"},
34 } 36 }
35 37
36 38
37 hotkey.wrapEvent = function(event, ...) 39 hotkey.wrapEvent = function(event, ...)
38 kb:RegisterEvent(event) 40 hotkey:RegisterEvent(event)
39 hotkeyEvents[event] = {...} 41 hotkeyEvents[event] = {...}
40 hotkey[event] = hotkey.UpdateFromEvent 42 hotkey[event] = hotkey.UpdateFromEvent
41 end 43 end
42 44
43 hotkey.unwrapEvent = function(event) 45 hotkey.unwrapEvent = function(event)
61 if hotkeyEvents[event] then 63 if hotkeyEvents[event] then
62 --print('call batch', event, ...) 64 --print('call batch', event, ...)
63 for i, func in ipairs(hotkeyEvents[event]) do 65 for i, func in ipairs(hotkeyEvents[event]) do
64 66
65 if hotkey[func] then 67 if hotkey[func] then
66 --print(' ', func) 68 print('->|cFF88FF00', func)
67 hotkey[func](self, event, ...) 69 hotkey[func](self, event, ...)
68 end 70 end
69 end 71 end
70 end 72 end
71 return true 73 return true
73 75
74 hotkey.variables = function() 76 hotkey.variables = function()
75 print('variables') 77 print('variables')
76 bindings = kb.GetBindings() 78 bindings = kb.GetBindings()
77 for event, manifest in pairs(hotkeyEvents) do 79 for event, manifest in pairs(hotkeyEvents) do
78 kb:RegisterEvent(event) 80 print('-', event, table.concat(manifest, ', '))
81 hotkey:RegisterEvent(event)
79 hotkey[event] = hotkey.UpdateFromEvent 82 hotkey[event] = hotkey.UpdateFromEvent
80 end 83 end
81 hotkey.wrapEvent('UNIT_PET', 'pet') 84 hotkey.wrapEvent('UNIT_PET', 'pet')
82 hotkey.player() 85 hotkey.player()
83 end 86 end
88 hooksecurefunc("ActionBarButtonEventsFrame_RegisterFrame", hotkey.RegisterFrame) 91 hooksecurefunc("ActionBarButtonEventsFrame_RegisterFrame", hotkey.RegisterFrame)
89 92
90 end 93 end
91 94
92 hotkey.ui = function() 95 hotkey.ui = function()
93 print('ui') 96 hotkey.player()
94 --hotkey.player() 97 hotkey.pet()
95 --hotkey.pet()
96 end 98 end
97 99
98 100
99 hotkey.world = function() 101 hotkey.world = function()
100 print('world') 102 -- needs to be delayed so it isn't fired 50 times at login
101 hotkeyEvents["UPDATE_BINDINGS"] = {"binding"} 103 hotkeyEvents["UPDATE_BINDINGS"] = {"binding"}
102 hotkey.UPDATE_BINDINGS = hotkey.UpdateFromEvent 104 hotkey.UPDATE_BINDINGS = hotkey.UpdateFromEvent
103 hotkey:RegisterEvent("UPDATE_BINDINGS") 105 hotkey:RegisterEvent("UPDATE_BINDINGS")
104 106
105 hotkey.player() 107 hotkey.player()
106 hotkey.pet() 108 hotkey.pet()
107
108 end 109 end
109 110
110 -- requires all these arguments since non-actionbar buttons don't have all of said methods 111 -- requires all these arguments since non-actionbar buttons don't have all of said methods
112 local kprint = (DEVIAN_WORKSPACE and function(...) _G.print('HotKeyUpdate', ...) end) or function() end
111 hotkey.UpdateHotKey = function(frame, actionType, actionID, hasAction) 113 hotkey.UpdateHotKey = function(frame, actionType, actionID, hasAction)
112 bindings = kb.GetBindings() 114 bindings = kb.GetBindings()
113 115
114 local indexKey = kb.FormatActionID(actionType, actionID) 116 local indexKey = kb.FormatActionID(actionType, actionID)
115 print('|cFF00FFFFUpdate|r', frame, indexKey, hasAction) 117 --kprint(frame:GetName(), '|cFF88FF00'..indexKey..'|r', hasAction)
116 118
117 119
118 if bindings[indexKey] then 120 if bindings[indexKey] then
119 print('|cFFFFFF00'..frame:GetName(), actionType, actionID, hasAction) 121 kprint(' |cFFFF0088', actionType ..'|r', actionID, hasAction)
120 local binds = bindings[indexKey] 122 local binds = bindings[indexKey]
121 if binds and (not frame.HotKey:IsVisible()) then 123 if binds and (not frame.HotKey:IsVisible()) then
122 if hasAction then 124 if hasAction then
123 local bindingsText = kb.BindingString(unpack(binds)) 125 local bindingsText = kb.BindingString(unpack(binds))
124 126
125 if not hotkeyText[frame] then 127 if not hotkeyText[frame] then
126 print('-new hotkey element') 128 kprint('-new hotkey element')
127 hotkeyText[frame] = frame:CreateFontString(frame:GetName()..'SkeletonKey', 'OVERLAY') 129 hotkeyText[frame] = frame:CreateFontString(frame:GetName()..'SkeletonKey', 'OVERLAY')
128 hotkeyText[frame]:SetFont(frame.HotKey:GetFont()) 130 hotkeyText[frame]:SetFont(frame.HotKey:GetFont())
129 hotkeyText[frame]:SetTextColor(frame.HotKey:GetTextColor()) 131 hotkeyText[frame]:SetTextColor(frame.HotKey:GetTextColor())
130 hotkeyText[frame]:SetPoint('TOPRIGHT', frame.HotKey, 'TOPRIGHT') 132 hotkeyText[frame]:SetPoint('TOPRIGHT', frame.HotKey, 'TOPRIGHT')
131 133
134 end) 136 end)
135 end 137 end
136 138
137 hotkeyText[frame]:SetText(bindingsText) 139 hotkeyText[frame]:SetText(bindingsText)
138 hotkeyText[frame]:Show() 140 hotkeyText[frame]:Show()
139 print('|cFF00FFFFUpdate text for', frame:GetName(), '|cFFFFFF00'..tostring(bindingsText)..'|r') 141 kprint(' |cFF00FFFF', frame:GetName(), '|cFFFFFF00'..tostring(bindingsText)..'|r')
140 142
141 return 143 return
142 end 144 end
143 end 145 end
144 end 146 end
145 147
146 if hotkeyText[frame] then 148 if hotkeyText[frame] then
147 hotkeyText[frame]:SetText(nil) 149 hotkeyText[frame]:SetText(nil)
148 --print('|cFFFF4400cleared text from', frame:GetName()) 150 print('|cFFFF4400' .. frame:GetName() .. '|r', 'remove text')
149 end 151 end
150 end 152 end
151 153
152 hotkey.actionbar = function() 154 hotkey.actionbar = function()
153 wipe(actionFrames) 155 wipe(actionFrames)
158 160
159 local slot = frame.action 161 local slot = frame.action
160 local actionType, actionID = GetActionInfo(slot) 162 local actionType, actionID = GetActionInfo(slot)
161 local hasAction = HasAction(slot) 163 local hasAction = HasAction(slot)
162 local indexKey = kb.FormatActionID(actionType, actionID) 164 local indexKey = kb.FormatActionID(actionType, actionID)
165
163 actionSlots[slot] = frame 166 actionSlots[slot] = frame
164 actionFrames[indexKey] = actionFrames[indexKey] or {} 167 actionFrames[indexKey] = actionFrames[indexKey] or {}
165 if not tContains(actionFrames[indexKey]) then 168 if not tContains(actionFrames[indexKey]) then
166 tinsert(actionFrames[indexKey], frame) 169 tinsert(actionFrames[indexKey], frame)
167 actionIndex[slot] = indexKey 170 actionIndex[slot] = indexKey
172 end 175 end
173 end 176 end
174 177
175 hotkey.actionslot = function(self, event, slot) 178 hotkey.actionslot = function(self, event, slot)
176 print(actionSlots[slot], event, slot, GetActionInfo(slot)) 179 print(actionSlots[slot], event, slot, GetActionInfo(slot))
177 --print(GetActionButtonForID(slot))
178 local atype, aid = GetActionInfo(slot) 180 local atype, aid = GetActionInfo(slot)
179 local indexKey = kb.FormatActionID(atype, aid) 181 local indexKey = kb.FormatActionID(atype, aid)
180 local frame = actionSlots[slot] 182 local frame = actionSlots[slot]
183 actionFrames[indexKey] = actionFrames[indexKey] or {}
184 if not tContains(actionFrames[indexKey]) then
185 tinsert(actionFrames[indexKey], frame)
186 actionIndex[slot] = indexKey
187 end
181 if frame then 188 if frame then
182 hotkey.UpdateHotKey(frame, atype, aid, HasAction(slot)) 189 hotkey.UpdateHotKey(frame, atype, aid, HasAction(slot))
183 end 190 end
184 191
185 end 192 end