Mercurial > wow > skeletonkey
comparison SkeletonKey/HotKey.lua @ 27:73df13211b22
- actionbar hotkey text properly updates after hotkeys get switched
- remove a unused function call
author | Nenue |
---|---|
date | Tue, 02 Aug 2016 12:33:13 -0400 |
parents | 82170735e67c |
children | bb160c04de88 |
comparison
equal
deleted
inserted
replaced
26:c081f117c19d | 27:73df13211b22 |
---|---|
13 -- frames obtained via post-load hooks, created by addons like Dominos or BarTender4 | 13 -- frames obtained via post-load hooks, created by addons like Dominos or BarTender4 |
14 local loadedFrames = {} | 14 local loadedFrames = {} |
15 -- frames divided by update categories | 15 -- frames divided by update categories |
16 local categoryFrames = {} | 16 local categoryFrames = {} |
17 -- frames indexed by action slot ID (just the action bar, for... reasons) | 17 -- frames indexed by action slot ID (just the action bar, for... reasons) |
18 local actionSlots = {} | |
18 local actionFrames = {} | 19 local actionFrames = {} |
20 local actionIndex = {} | |
19 | 21 |
20 kb.wrap(hotkey) | 22 kb.wrap(hotkey) |
21 | 23 |
22 --- Used to determine which groups of action buttons need updating | 24 --- Used to determine which groups of action buttons need updating |
23 local hotkeyEvents = { | 25 local hotkeyEvents = { |
24 ["UPDATE_BONUS_ACTIONBAR"] = {"bonus"}, | 26 ["UPDATE_BONUS_ACTIONBAR"] = {"bonus"}, |
25 ["UPDATE_VEHICLE_ACTIONBAR"] = {"vehicle"}, | 27 ["UPDATE_VEHICLE_ACTIONBAR"] = {"vehicle"}, |
26 ["UPDATE_OVERRIDE_ACTIONBAR"] = {"override"}, | 28 ["UPDATE_OVERRIDE_ACTIONBAR"] = {"override"}, |
27 ["ACTIONBAR_PAGE_CHANGED"] = {"actionbar"}, | 29 ["ACTIONBAR_PAGE_CHANGED"] = {"actionbar"}, |
30 ["ACTIONBAR_SLOT_CHANGED"] = {"actionslot"}, | |
28 ["PLAYER_ENTERING_WORLD"] = {"world","all"}, | 31 ["PLAYER_ENTERING_WORLD"] = {"world","all"}, |
29 ["PET_UI_UPDATE"] = {"pet"}, | 32 ["PET_UI_UPDATE"] = {"pet"}, |
30 } | 33 } |
31 | 34 |
32 | 35 |
40 if not kb[event] then | 43 if not kb[event] then |
41 kb:UnregisterEvent(event) | 44 kb:UnregisterEvent(event) |
42 end | 45 end |
43 hotkeyEvents[event] = nil | 46 hotkeyEvents[event] = nil |
44 hotkey[event] = nil | 47 hotkey[event] = nil |
45 end | |
46 | |
47 hotkey.ActionButton_Update = function(frame) | |
48 wrap(function() | |
49 local actionType, actionID = GetActionInfo(frame.action) | |
50 hotkey.UpdateSkeletonKeyText(frame, actionType, actionID, HasAction(frame.action)) | |
51 end) | |
52 end | 48 end |
53 | 49 |
54 | 50 |
55 hotkey.RegisterFrame = function(frame) | 51 hotkey.RegisterFrame = function(frame) |
56 --wrap(function() | 52 --wrap(function() |
86 hotkey.init = function() | 82 hotkey.init = function() |
87 hooksecurefunc("ActionBarButtonEventsFrame_RegisterFrame", hotkey.RegisterFrame) | 83 hooksecurefunc("ActionBarButtonEventsFrame_RegisterFrame", hotkey.RegisterFrame) |
88 end | 84 end |
89 | 85 |
90 hotkey.ui = function() | 86 hotkey.ui = function() |
87 --hotkey.player() | |
88 --hotkey.pet() | |
89 end | |
90 | |
91 hotkey.world = function() | |
92 hotkeyEvents["UPDATE_BINDINGS"] = {"binding"} | |
93 hotkey.UPDATE_BINDINGS = hotkey.UpdateFromEvent | |
94 kb:RegisterEvent("UPDATE_BINDINGS") | |
95 | |
91 hotkey.player() | 96 hotkey.player() |
92 hotkey.pet() | 97 hotkey.pet() |
93 end | 98 |
94 | |
95 hotkey.world = function() | |
96 hotkeyEvents["UPDATE_BINDINGS"] = {"actionbar"} | |
97 hotkey.UPDATE_BINDINGS = hotkey.UpdateFromEvent | |
98 kb:RegisterEvent("UPDATE_BINDINGS") | |
99 | |
100 hotkey.player() | |
101 hotkey.pet() | |
102 | |
103 -- Set this after, since we already full-scanned buttons | |
104 hooksecurefunc("ActionButton_Update", hotkey.ActionButton_Update) | |
105 end | 99 end |
106 | 100 |
107 -- requires all these arguments since non-actionbar buttons don't have all of said methods | 101 -- requires all these arguments since non-actionbar buttons don't have all of said methods |
108 hotkey.UpdateSkeletonKeyText = function(frame, actionType, actionID, hasAction) | 102 hotkey.UpdateSkeletonKeyText = function(frame, actionType, actionID, hasAction) |
109 bindings = kb.GetBindings() | 103 bindings = kb.GetBindings() |
110 print(frame, actionType, actionID, hasAction) | 104 print(frame, actionType, actionID, hasAction) |
105 | |
106 local indexKey = tostring(actionType) .. '_' .. tostring(actionID) | |
107 local oldKey = actionIndex[frame] | |
108 if hasAction and not actionFrames[indexKey] then | |
109 actionFrames[indexKey] = frame | |
110 actionIndex[frame] = indexKey | |
111 print('|cFF00FF00['..indexKey.. '] = '.. tostring(frame)) | |
112 end | |
113 | |
111 if bindings[actionType] then | 114 if bindings[actionType] then |
112 --print('|cFFFFFF00'..frame:GetName(), actionType, actionID, hasAction) | 115 --print('|cFFFFFF00'..frame:GetName(), actionType, actionID, hasAction) |
113 local binds = bindings[actionType][actionID] | 116 local binds = bindings[actionType][actionID] |
114 if binds then | 117 if binds then |
115 if hasAction and not frame.HotKey:IsVisible() then | 118 if hasAction and not frame.HotKey:IsVisible() then |
136 | 139 |
137 hotkey.actionbar = function() | 140 hotkey.actionbar = function() |
138 if ActionBarButtonEventsFrame.frames then | 141 if ActionBarButtonEventsFrame.frames then |
139 for index, frame in ipairs(ActionBarButtonEventsFrame.frames) do | 142 for index, frame in ipairs(ActionBarButtonEventsFrame.frames) do |
140 local actionType, actionID = GetActionInfo(frame.action) | 143 local actionType, actionID = GetActionInfo(frame.action) |
141 hotkey.UpdateSkeletonKeyText(frame, actionType, actionID, HasAction(frame.action)) | 144 local hasAction = HasAction(frame.action) |
145 actionSlots[frame.action] = frame | |
146 hotkey.UpdateSkeletonKeyText(frame, actionType, actionID, hasAction) | |
142 end | 147 end |
143 end | 148 end |
144 end | 149 end |
145 | 150 |
146 hotkey.actionslot = function(self, event, slot) | 151 hotkey.actionslot = function(self, event, slot) |
147 --print(event, slot) | 152 print(actionSlots[slot], event, slot, GetActionInfo(slot)) |
148 --print(GetActionButtonForID(slot)) | 153 --print(GetActionButtonForID(slot)) |
149 hotkey.UpdateSkeletonKeyText(GetActionButtonForID(slot)) | 154 local atype, aid = GetActionInfo(slot) |
155 hotkey.UpdateSkeletonKeyText(actionSlots[slot], atype, aid, HasAction(slot)) | |
150 end | 156 end |
151 | 157 |
152 hotkey.player = function() | 158 hotkey.player = function() |
153 hotkey.actionbar() | 159 hotkey.actionbar() |
154 end | 160 end |
161 | |
155 | 162 |
156 | 163 |
157 hotkey.pet = function(self, event, arg1) | 164 hotkey.pet = function(self, event, arg1) |
158 if event == 'UNIT_PET' and arg1 == 'player' then | 165 if event == 'UNIT_PET' and arg1 == 'player' then |
159 if PetHasActionBar() and UnitIsVisible("pet") then | 166 if PetHasActionBar() and UnitIsVisible("pet") then |
174 end | 181 end |
175 end | 182 end |
176 end | 183 end |
177 | 184 |
178 | 185 |
186 --- used to pick up changes from user interaction | |
187 local changeIndex = 1 | |
188 hotkey.binding = function() | |
189 print('|cFFFF0088BindingsUpdate') | |
190 local changeNum = #kb.ChangedBindings | |
191 if changeNum >= changeIndex then | |
192 for i = changeIndex, changeNum do | |
193 local actionType, actionID, name = unpack(kb.ChangedBindings[i]) | |
194 local key = actionType .. '_' .. actionID | |
195 if actionFrames[key] then | |
196 hotkey.UpdateSkeletonKeyText(actionFrames[key] , actionType, actionID, HasAction(actionFrames[key].action)) | |
197 end | |
198 | |
199 changeIndex = i + 1 | |
200 end | |
201 | |
202 end | |
203 end |