74 lines
2.5 KiB
Lua
74 lines
2.5 KiB
Lua
-- TotemBar - core/bindlogic.lua
|
|
-- PURE helpers for keybindings + hover-bind mode (no WoW API), offline-testable.
|
|
|
|
TotemBar = TotemBar or {}
|
|
|
|
-- Binding-name suffix for a totem: uppercase, non-alphanumeric runs -> "_",
|
|
-- trimmed. "Grace of Air Totem" -> "GRACE_OF_AIR_TOTEM". MUST match the
|
|
-- Bindings.xml generation and the BINDING_NAME_ globals.
|
|
function TotemBar.bindingSuffix(name)
|
|
if not name then
|
|
return ""
|
|
end
|
|
local up = string.upper(name)
|
|
up = string.gsub(up, "[^A-Z0-9]+", "_")
|
|
up = string.gsub(up, "^_+", "")
|
|
up = string.gsub(up, "_+$", "")
|
|
return up
|
|
end
|
|
|
|
-- Modifier prefix for a key string, order ALT-CTRL-SHIFT (each arg is 1/nil
|
|
-- as IsAltKeyDown()/IsControlKeyDown()/IsShiftKeyDown() return on 1.12).
|
|
function TotemBar.modifierPrefix(isAlt, isCtrl, isShift)
|
|
local p = ""
|
|
if isAlt then p = p .. "ALT-" end
|
|
if isCtrl then p = p .. "CTRL-" end
|
|
if isShift then p = p .. "SHIFT-" end
|
|
return p
|
|
end
|
|
|
|
-- Binding COMMAND for a hovered thing, or nil. A flyout icon (totemName
|
|
-- given) -> the named per-totem binding (casts that specific totem, same
|
|
-- action as the Esc menu). A bar button (by global frame name) -> the
|
|
-- matching NAMED binding that already exists in Bindings.xml (NOT a
|
|
-- "CLICK ..." binding - those are unreliable on 1.12, see bind.lua).
|
|
function TotemBar.actionForButton(frameName, totemName)
|
|
if totemName and totemName ~= "" then
|
|
return "TOTEMBAR_TOTEM_" .. TotemBar.bindingSuffix(totemName)
|
|
end
|
|
if not frameName then
|
|
return nil
|
|
end
|
|
if frameName == "TotemBarButtonRecall" then
|
|
return "TOTEMBAR_RECALL"
|
|
end
|
|
if frameName == "TotemBarButtonDropSet" then
|
|
return "TOTEMBAR_DROPSET"
|
|
end
|
|
local elements = TotemBar.TOTEM_ELEMENTS
|
|
for i = 1, table.getn(elements) do
|
|
if frameName == "TotemBarButton" .. elements[i] then
|
|
return "TOTEMBAR_CAST_" .. string.upper(elements[i])
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
-- Compact a binding key string for a small button overlay:
|
|
-- "SHIFT-NUMPAD7" -> "sN7", "BUTTON4" -> "M4", "MOUSEWHEELUP" -> "MwU".
|
|
function TotemBar.shortenKey(key)
|
|
if not key or key == "" then
|
|
return ""
|
|
end
|
|
local s = key
|
|
s = string.gsub(s, "ALT%-", "a")
|
|
s = string.gsub(s, "CTRL%-", "c")
|
|
s = string.gsub(s, "SHIFT%-", "s")
|
|
s = string.gsub(s, "MOUSEWHEELUP", "MwU")
|
|
s = string.gsub(s, "MOUSEWHEELDOWN", "MwD")
|
|
s = string.gsub(s, "NUMPAD", "N")
|
|
s = string.gsub(s, "BUTTON", "M")
|
|
s = string.gsub(s, "SPACE", "Sp")
|
|
return s
|
|
end
|