Mercurial > wow > skeletonkey
comparison SkeletonKey/HotKey.lua @ 50:1aba8a6fd4a9
- fix kb.bindings content and define a generic function for constructing its keystrings
- handle hotkey text for actions placed in multiple slots
-- hotkey.actionbar generates a cache table for use during binding changes
| author | Nenue |
|---|---|
| date | Fri, 19 Aug 2016 01:12:56 -0400 |
| parents | bb160c04de88 |
| children | a545933ddf3d |
comparison
equal
deleted
inserted
replaced
| 49:9a9d7f2a7c07 | 50:1aba8a6fd4a9 |
|---|---|
| 2 -- HotKey.lua | 2 -- HotKey.lua |
| 3 -- Created: 7/22/2016 10:28 PM | 3 -- Created: 7/22/2016 10:28 PM |
| 4 -- %file-revision% | 4 -- %file-revision% |
| 5 -- Module for fixing actionbar hotkey text | 5 -- Module for fixing actionbar hotkey text |
| 6 | 6 |
| 7 local _G, wipe, tContains, tinsert = _G, table.wipe, tContains, tinsert | |
| 7 local kb, print, wrap = LibStub("LibKraken").register(KeyBinder, 'HotKey') | 8 local kb, print, wrap = LibStub("LibKraken").register(KeyBinder, 'HotKey') |
| 8 local hotkey = {} | 9 local hotkey = {} |
| 9 local hotkeyText = {} | 10 local hotkeyText = {} |
| 10 local blizHotKey = {} | 11 local blizHotKey = {} |
| 11 local bindings | 12 local bindings |
| 97 hotkey.pet() | 98 hotkey.pet() |
| 98 | 99 |
| 99 end | 100 end |
| 100 | 101 |
| 101 -- requires all these arguments since non-actionbar buttons don't have all of said methods | 102 -- requires all these arguments since non-actionbar buttons don't have all of said methods |
| 102 hotkey.UpdateSkeletonKeyText = function(frame, actionType, actionID, hasAction) | 103 hotkey.UpdateHotKey = function(frame, actionType, actionID, hasAction) |
| 103 bindings = kb.GetBindings() | 104 bindings = kb.GetBindings() |
| 104 print(frame, actionType, actionID, hasAction) | 105 |
| 105 | 106 local indexKey = kb.FormatActionID(actionType, actionID) |
| 106 local indexKey = tostring(actionType) .. '_' .. tostring(actionID) | 107 print('|cFF00FFFFUpdate|r', frame, indexKey, hasAction) |
| 107 local oldKey = actionIndex[frame] | 108 |
| 108 if hasAction and not actionFrames[indexKey] then | 109 |
| 109 actionFrames[indexKey] = frame | 110 if bindings[indexKey] then |
| 110 actionIndex[frame] = indexKey | |
| 111 print('|cFF00FF00['..indexKey.. '] = '.. tostring(frame)) | |
| 112 end | |
| 113 | |
| 114 if bindings[actionType] then | |
| 115 --print('|cFFFFFF00'..frame:GetName(), actionType, actionID, hasAction) | 111 --print('|cFFFFFF00'..frame:GetName(), actionType, actionID, hasAction) |
| 116 local binds = bindings[actionType][actionID] | 112 local binds = bindings[indexKey] |
| 117 if binds then | 113 if binds then |
| 118 if hasAction and not frame.HotKey:IsVisible() then | 114 if hasAction then |
| 115 local bindingsText = kb.BindingString(unpack(binds)) | |
| 116 | |
| 119 if not hotkeyText[frame] then | 117 if not hotkeyText[frame] then |
| 120 hotkeyText[frame] = frame:CreateFontString('KeyBinderHotKeyText', 'OVERLAY') | 118 print('-new hotkey element') |
| 119 hotkeyText[frame] = frame:CreateFontString(frame:GetName()..'SkeletonKey', 'OVERLAY') | |
| 121 hotkeyText[frame]:SetFont(frame.HotKey:GetFont()) | 120 hotkeyText[frame]:SetFont(frame.HotKey:GetFont()) |
| 122 hotkeyText[frame]:SetTextColor(frame.HotKey:GetTextColor()) | 121 hotkeyText[frame]:SetTextColor(frame.HotKey:GetTextColor()) |
| 123 hotkeyText[frame]:SetPoint('TOPRIGHT', frame.HotKey, 'TOPRIGHT') | 122 hotkeyText[frame]:SetPoint('TOPRIGHT', frame.HotKey, 'TOPRIGHT') |
| 124 end | 123 end |
| 125 | 124 |
| 126 hotkeyText[frame]:SetText(kb.BindingString(unpack(binds))) | 125 hotkeyText[frame]:SetText(bindingsText) |
| 127 print('|cFF00FFFFUpdate text for', frame:GetName()) | 126 hotkeyText[frame]:Show() |
| 128 print(unpack(binds)) | 127 print('|cFF00FFFFUpdate text for', frame:GetName(), '|cFFFFFF00'..tostring(bindingsText)..'|r') |
| 128 | |
| 129 return | 129 return |
| 130 end | 130 end |
| 131 end | 131 end |
| 132 end | 132 end |
| 133 | 133 |
| 136 --print('|cFFFF4400cleared text from', frame:GetName()) | 136 --print('|cFFFF4400cleared text from', frame:GetName()) |
| 137 end | 137 end |
| 138 end | 138 end |
| 139 | 139 |
| 140 hotkey.actionbar = function() | 140 hotkey.actionbar = function() |
| 141 wipe(actionFrames) | |
| 142 -- reset frames list | |
| 143 | |
| 141 if ActionBarButtonEventsFrame.frames then | 144 if ActionBarButtonEventsFrame.frames then |
| 142 for index, frame in ipairs(ActionBarButtonEventsFrame.frames) do | 145 for index, frame in ipairs(ActionBarButtonEventsFrame.frames) do |
| 143 local actionType, actionID = GetActionInfo(frame.action) | 146 local slot = frame.action |
| 144 local hasAction = HasAction(frame.action) | 147 local actionType, actionID = GetActionInfo(slot) |
| 145 actionSlots[frame.action] = frame | 148 local hasAction = HasAction(slot) |
| 146 hotkey.UpdateSkeletonKeyText(frame, actionType, actionID, hasAction) | 149 local indexKey = kb.FormatActionID(actionType, actionID) |
| 150 actionSlots[slot] = frame | |
| 151 actionFrames[indexKey] = actionFrames[indexKey] or {} | |
| 152 if not tContains(actionFrames[indexKey]) then | |
| 153 tinsert(actionFrames[indexKey], frame) | |
| 154 actionIndex[slot] = indexKey | |
| 155 end | |
| 156 | |
| 157 hotkey.UpdateHotKey(frame, actionType, actionID, hasAction) | |
| 147 end | 158 end |
| 148 end | 159 end |
| 149 end | 160 end |
| 150 | 161 |
| 151 hotkey.actionslot = function(self, event, slot) | 162 hotkey.actionslot = function(self, event, slot) |
| 152 print(actionSlots[slot], event, slot, GetActionInfo(slot)) | 163 print(actionSlots[slot], event, slot, GetActionInfo(slot)) |
| 153 --print(GetActionButtonForID(slot)) | 164 --print(GetActionButtonForID(slot)) |
| 154 local atype, aid = GetActionInfo(slot) | 165 local atype, aid = GetActionInfo(slot) |
| 155 if actionSlots[slot] then | 166 local indexKey = kb.FormatActionID(atype, aid) |
| 156 hotkey.UpdateSkeletonKeyText(actionSlots[slot], atype, aid, HasAction(slot)) | 167 local frame = actionSlots[slot] |
| 168 if frame then | |
| 169 hotkey.UpdateHotKey(frame, atype, aid, HasAction(slot)) | |
| 157 end | 170 end |
| 158 | 171 |
| 159 end | 172 end |
| 160 | 173 |
| 161 hotkey.player = function() | 174 hotkey.player = function() |
| 190 local changeIndex = 1 | 203 local changeIndex = 1 |
| 191 hotkey.binding = function() | 204 hotkey.binding = function() |
| 192 print('|cFFFF0088BindingsUpdate') | 205 print('|cFFFF0088BindingsUpdate') |
| 193 local changeNum = #kb.ChangedBindings | 206 local changeNum = #kb.ChangedBindings |
| 194 if changeNum >= changeIndex then | 207 if changeNum >= changeIndex then |
| 208 | |
| 209 | |
| 195 for i = changeIndex, changeNum do | 210 for i = changeIndex, changeNum do |
| 196 local actionType, actionID, name = unpack(kb.ChangedBindings[i]) | 211 local actionType, actionID, name = unpack(kb.ChangedBindings[i]) |
| 197 local key = actionType .. '_' .. actionID | 212 local actionKey = kb.FormatActionID(actionType, actionID) |
| 198 if actionFrames[key] then | 213 local frames = actionFrames[actionKey] |
| 199 hotkey.UpdateSkeletonKeyText(actionFrames[key] , actionType, actionID, HasAction(actionFrames[key].action)) | 214 if frames then |
| 215 for i, frame in ipairs(frames) do | |
| 216 print('|cFFFF0088'..actionKey..'|r', frame) | |
| 217 if frame then | |
| 218 hotkey.UpdateHotKey(frame , actionType, actionID, HasAction(frame.action)) | |
| 219 end | |
| 220 end | |
| 221 else | |
| 222 print('no frames picked up, rebuild') | |
| 223 hotkey.actionbar() | |
| 200 end | 224 end |
| 201 | 225 |
| 202 changeIndex = i + 1 | 226 changeIndex = i + 1 |
| 203 end | 227 end |
| 204 | 228 |
