diff --git a/Bindings.xml b/Bindings.xml new file mode 100644 index 0000000..3a4fbdd --- /dev/null +++ b/Bindings.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Frame.lua b/Frame.lua index f415392..8748733 100644 --- a/Frame.lua +++ b/Frame.lua @@ -255,7 +255,7 @@ function Gladdy:UpdateFrame() for _, v in self:IterModules() do - self:Call(v, "UpdateFrame", button.unit) + self:Call(v, "UpdateFrame", "arena" .. i) end end for _, v in self:IterModules() do @@ -308,8 +308,9 @@ function Gladdy:CreateButton(i) local secure = CreateFrame("Button", "GladdyButton" .. i, button, "SecureActionButtonTemplate, SecureHandlerEnterLeaveTemplate") secure:RegisterForClicks("AnyUp") - secure:SetAttribute("*type1", "target") - secure:SetAttribute("*type2", "focus") + secure:SetAttribute("*type*", "macro") + --secure:SetAttribute("*type1", "target") + --secure:SetAttribute("*type2", "focus") secure:SetAttribute("unit", "arena" .. i) --secure.texture = secure:CreateTexture(nil, "OVERLAY") --secure.texture:SetAllPoints(secure) @@ -320,12 +321,12 @@ function Gladdy:CreateButton(i) button.secure = secure - self:ResetButton(button.unit) + self:ResetButton("arena" .. i) - self.buttons[button.unit] = button + self.buttons["arena" .. i] = button for _, v in self:IterModules() do - self:Call(v, "CreateFrame", button.unit) + self:Call(v, "CreateFrame", "arena" .. i) end end diff --git a/Gladdy.toc b/Gladdy.toc index b4035ff..31b2be2 100644 --- a/Gladdy.toc +++ b/Gladdy.toc @@ -22,6 +22,7 @@ Modules\Powerbar.lua Modules\Auras.lua Modules\Castbar.lua Modules\Classicon.lua +Modules\Clicks.lua Modules\Diminishings.lua Modules\Highlight.lua Modules\TotemPlates.lua diff --git a/Modules/Clicks.lua b/Modules/Clicks.lua new file mode 100644 index 0000000..94a5bff --- /dev/null +++ b/Modules/Clicks.lua @@ -0,0 +1,213 @@ +local tinsert = table.insert +local pairs = pairs +local tonumber = tonumber +local tostring = tostring + +local GetBindingKey = GetBindingKey +local ClearOverrideBindings = ClearOverrideBindings +local SetOverrideBindingClick = SetOverrideBindingClick +local MACRO, TARGET, FOCUS, ADDON_DISABLED = MACRO, TARGET, FOCUS, ADDON_DISABLED + +local Gladdy = LibStub("Gladdy") +local L = Gladdy.L + +local attributes = { + { name = "Target", button = "1", modifier = "", action = "target", spell = "" }, + { name = "Focus", button = "2", modifier = "", action = "focus", spell = "" }, +} +for i = 3, 10 do + tinsert(attributes, { name = L["Action #%d"]:format(i), button = "", modifier = "", action = "disabled", spell = "" }) +end +local Clicks = Gladdy:NewModule("Clicks", nil, { + attributes = attributes, +}) + +BINDING_HEADER_GLADDY = "Gladdy" +BINDING_NAME_GLADDYBUTTON1_LEFT = L["Left Click Enemy 1"] +BINDING_NAME_GLADDYBUTTON2_LEFT = L["Left Click Enemy 2"] +BINDING_NAME_GLADDYBUTTON3_LEFT = L["Left Click Enemy 3"] +BINDING_NAME_GLADDYBUTTON4_LEFT = L["Left Click Enemy 4"] +BINDING_NAME_GLADDYBUTTON5_LEFT = L["Left Click Enemy 5"] + +BINDING_NAME_GLADDYBUTTON1_RIGHT = L["Right Click Enemy 1"] +BINDING_NAME_GLADDYBUTTON2_RIGHT = L["Right Click Enemy 2"] +BINDING_NAME_GLADDYBUTTON3_RIGHT = L["Right Click Enemy 3"] +BINDING_NAME_GLADDYBUTTON4_RIGHT = L["Right Click Enemy 4"] +BINDING_NAME_GLADDYBUTTON5_RIGHT = L["Right Click Enemy 5"] + +BINDING_NAME_GLADDYBUTTON1_MIDDLE = L["Middle Click Enemy 1"] +BINDING_NAME_GLADDYBUTTON2_MIDDLE = L["Middle Click Enemy 2"] +BINDING_NAME_GLADDYBUTTON3_MIDDLE = L["Middle Click Enemy 3"] +BINDING_NAME_GLADDYBUTTON4_MIDDLE = L["Middle Click Enemy 4"] +BINDING_NAME_GLADDYBUTTON5_MIDDLE = L["Middle Click Enemy 5"] + +BINDING_NAME_GLADDYBUTTON1_BUTTON4 = L["Button4 Click Enemy 1"] +BINDING_NAME_GLADDYBUTTON2_BUTTON4 = L["Button4 Click Enemy 2"] +BINDING_NAME_GLADDYBUTTON3_BUTTON4 = L["Button4 Click Enemy 3"] +BINDING_NAME_GLADDYBUTTON4_BUTTON4 = L["Button4 Click Enemy 4"] +BINDING_NAME_GLADDYBUTTON5_BUTTON4 = L["Button4 Click Enemy 5"] + +BINDING_NAME_GLADDYBUTTON1_BUTTON5 = L["Button5 Click Enemy 1"] +BINDING_NAME_GLADDYBUTTON2_BUTTON5 = L["Button5 Click Enemy 2"] +BINDING_NAME_GLADDYBUTTON3_BUTTON5 = L["Button5 Click Enemy 3"] +BINDING_NAME_GLADDYBUTTON4_BUTTON5 = L["Button5 Click Enemy 4"] +BINDING_NAME_GLADDYBUTTON5_BUTTON5 = L["Button5 Click Enemy 5"] + +function Clicks:Initialise() + self:RegisterMessage("JOINED_ARENA") +end + +function Clicks:Reset() + -- +end + +function Clicks:ResetUnit(unit) + local button = Gladdy.buttons[unit] + if (not button) then + return + end + + for k, v in pairs(Gladdy.db.attributes) do + button.secure:SetAttribute(v.modifier .. "macrotext" .. v.button, "") + end +end + +function Clicks:Test() + Clicks:JOINED_ARENA() +end + +function Clicks:JOINED_ARENA() + for k, v in pairs(Gladdy.buttons) do + local left = GetBindingKey(("GLADDYBUTTON%d_LEFT"):format(v.id)) + local right = GetBindingKey(("GLADDYBUTTON%d_RIGHT"):format(v.id)) + local middle = GetBindingKey(("GLADDYBUTTON%d_MIDDLE"):format(v.id)) + local button4 = GetBindingKey(("GLADDYBUTTON%d_BUTTON4"):format(v.id)) + local button5 = GetBindingKey(("GLADDYBUTTON%d_BUTTON5"):format(v.id)) + + ClearOverrideBindings(v.secure) + + if (left) then + SetOverrideBindingClick(v.secure, false, left, v.secure:GetName(), "LeftButton") + end + + if (right) then + SetOverrideBindingClick(v.secure, false, right, v.secure:GetName(), "RightButton") + end + + if (middle) then + SetOverrideBindingClick(v.secure, false, middle, v.secure:GetName(), "MiddleButton") + end + + if (button4) then + SetOverrideBindingClick(v.secure, false, button4, v.secure:GetName(), "Button4") + end + + if (button5) then + SetOverrideBindingClick(v.secure, false, button5, v.secure:GetName(), "Button5") + end + end +end + +function Clicks:SetupAttributes(unit) + local button = Gladdy.buttons[unit] + if (not button) then + return + end + + for k, v in pairs(Gladdy.db.attributes) do + self:SetupAttribute(button, v.button, v.modifier, v.action, v.spell) + end +end + +function Clicks:SetupAttribute(button, key, mod, action, spell) + local attr = mod .. "macrotext" .. key + local text = "" + + if (action == "macro") then + text = spell:gsub("%*arena%*", button.unit) + elseif (action ~= "disabled") then + if (action == "target") then + text = "/target [@" .. button.unit .. "]" + elseif (action == "focus") then + text = "/focus [@" .. button.unit .. "]" + elseif (action == "spell") then + text = "/cast [@" .. button.unit .. "] " .. spell + end + end + + button.secure:SetAttribute(attr, text) +end + +local buttons = { ["1"] = L["Left button"], ["2"] = L["Right button"], ["3"] = L["Middle button"], ["4"] = L["Button 4"], ["5"] = L["Button 5"] } +local modifiers = { [""] = L["None"], ["ctrl-"] = L["CTRL"], ["shift-"] = L["SHIFT"], ["alt-"] = L["ALT"] } +local clickValues = { ["macro"] = MACRO, ["target"] = TARGET, ["focus"] = FOCUS, ["spell"] = L["Cast Spell"], ["disabled"] = ADDON_DISABLED } + +local function SetupAttributeOption(i) + return { + type = "group", + name = Gladdy.dbi.profile.attributes[i].name, + desc = Gladdy.dbi.profile.attributes[i].name, + order = i + 1, + get = function(info) + return Gladdy.dbi.profile.attributes[tonumber(info[#info - 1])][info[#info]] + end, + set = function(info, value) + Gladdy.dbi.profile.attributes[tonumber(info[#info - 1])][info[#info]] = value + + if (info[#info] == "name") then + Gladdy.options.args.Clicks.args[info[#info - 1]].name = value + end + + Gladdy:UpdateFrame() + end, + args = { + name = { + type = "input", + name = L["Name"], + desc = L["Select the name of the click option"], + order = 1, + }, + button = { + type = "select", + name = L["Button"], + desc = L["Select which mouse button to use"], + order = 2, + values = buttons, + }, + modifier = { + type = "select", + name = L["Modifier"], + desc = L["Select which modifier to use"], + order = 3, + values = modifiers, + }, + action = { + type = "select", + name = L["Action"], + desc = L["Select what action this mouse button does"], + order = 4, + values = clickValues, + }, + spell = { + type = "input", + name = L["Spell name / Macro text"], + desc = L["Use *arena* as placeholder. Like a '/rofl *arena*'"], + order = 5, + width = "full", + multiline = 10, + }, + }, + } +end + +function Clicks:GetOptions() + local options = {} + for i = 1, 10 do + options[tostring(i)] = SetupAttributeOption(i) + end + return options +end + +function Clicks:UpdateFrame(unit) + Clicks:SetupAttributes(unit) +end \ No newline at end of file