From ba2d7849debf2b7824b082d2703f36e8a51522ce Mon Sep 17 00:00:00 2001 From: James Whitehead II Date: Thu, 14 Oct 2010 14:10:55 +0100 Subject: [PATCH] Add 'hovercast' click set, to replace the old 'global'. New 'global' is truly global, with no target specified. These binding sets are mutually exclusive --- BindConfig.lua | 29 +++++++++++++++++++++++++---- Clique.lua | 20 +++++++++++++------- Utils.lua | 2 +- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/BindConfig.lua b/BindConfig.lua index 4b7e3e2..195fd34 100755 --- a/BindConfig.lua +++ b/BindConfig.lua @@ -414,7 +414,13 @@ function CliqueConfig:AcceptSetBinding() dialog:Hide() end -local function toggleSet(binding, set) +local function toggleSet(binding, set, ...) + local exclude = {} + for i = 1, select("#", ...) do + local item = select(i, ...) + table.insert(exclude, item) + end + return function() if not binding.sets then binding.sets = {} @@ -424,6 +430,12 @@ local function toggleSet(binding, set) else binding.sets[set] = true end + + for idx, exclset in ipairs(exclude) do + binding.sets[exclset] = nil + end + + UIDropDownMenu_Refresh(UIDROPDOWNMENU_OPEN_MENU, nil, UIDROPDOWNMENU_MENU_LEVEL) CliqueConfig:UpdateList() addon:UpdateAttributes() addon:UpdateGlobalAttributes() @@ -503,11 +515,20 @@ function CliqueConfig:Row_OnClick(frame, button) }) table.insert(submenu.menuList, { - text = L["Global bindings"], + text = L["Hovercast bindings (target required)"], + checked = function() return binding.sets["hovercast"] end, + func = toggleSet(binding, "hovercast", "global"), + tooltipTitle = L["Clique: 'hovercast' click-set"], + tooltipText = L["A binding that belongs to the 'hovercast' click-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. THese bindings are also active over unit frames."], + keepShownOnClick = true, + }) + + table.insert(submenu.menuList, { + text = L["Global bindings (no target)"], checked = function() return binding.sets["global"] end, - func = toggleSet(binding, "global"), + func = toggleSet(binding, "global", "hovercast"), tooltipTitle = L["Clique: 'global' click-set"], - tooltipText = L["A binding that belongs to the 'global' click-set is always active, regardless of whether the mouse is over a unit frame or not. This click-set allows you to bind spells to keys that can then be used over the 3-D game world, to enable 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. These bindings are also active over unit frames."], + tooltipText = L["A binding that belongs to the 'global' click-set is always active. If the spell requires a target, you will be given the 'casting hand', otherwise the spell will be cast. If the spell is an AOE spell, then you will be given the ground targeting circle."], keepShownOnClick = true, }) diff --git a/Clique.lua b/Clique.lua index b617fb3..abb3849 100755 --- a/Clique.lua +++ b/Clique.lua @@ -25,10 +25,11 @@ -- clicking on is an enemy, i.e. a unit that you can attack. -- * friendly - These bindings are ONLY active when the unit you are -- clicking on is a friendly unit, i.e. one that you can assist --- * global - These bindings will be available regardless of where --- your mouse is on the screen, be it in the 3D world, or over a --- unit frame. These bindings take up a slot that might otherwise --- be used in the 'Key Bindings' interface options. +-- * hovercast - These bindings will be available whenever you are over +-- a unit frame, or a unit in the 3D world. +-- * global - These bindings will be always available. They +-- do not specify a target for the action, so if the action requires +-- a target, you must specify it after performing the binding. -- -- The click-sets layer on each other, with the 'default' click-set -- being at the bottom, and any other click-set being layered on top. @@ -55,9 +56,8 @@ function addon:Initialize() self.header = CreateFrame("Frame", addonName .. "HeaderFrame", UIParent, "SecureHandlerBaseTemplate") ClickCastHeader = addon.header - -- Create a secure action button that can be used for 'global' bindings + -- Create a secure action button that can be used for 'hovercast' and 'global' self.globutton = CreateFrame("Button", addonName .. "SABButton", UIParent, "SecureActionButtonTemplate, SecureHandlerBaseTemplate") - self.globutton:SetAttribute("unit", "mouseover") -- Create a table within the addon header to store the frames -- that are registered for click-casting @@ -285,6 +285,13 @@ function addon:GetClickAttributes(global) suffix = newbutton end + -- Give globutton the 'mouseover' unit as target when using the 'hovercast' + -- binding set, as opposed to the global set. + if entry.sets.hovercast then + bits[#bits + 1] = ATTR(prefix, "unit", suffix, "mouseover") + rembits[#rembits + 1] = REMATTR(prefix, "unit", suffix) + end + -- Build any needed SetAttribute() calls if entry.type == "target" or entry.type == "menu" then bits[#bits + 1] = ATTR(prefix, "type", suffix, entry.type) @@ -299,7 +306,6 @@ function addon:GetClickAttributes(global) bits[#bits + 1] = ATTR(prefix, "macrotext", suffix, entry.macrotext) rembits[#rembits + 1] = REMATTR(prefix, "type", suffix) rembits[#rembits + 1] = REMATTR(prefix, "macrotext", suffix) - else error(string.format("Invalid action type: '%s'", entry.type)) end diff --git a/Utils.lua b/Utils.lua index 6178f28..8aefb53 100644 --- a/Utils.lua +++ b/Utils.lua @@ -222,7 +222,7 @@ function addon:ShouldSetBinding(binding, global) local apply = false -- Check for global bindings first in isolation - if binding.sets.global then + if binding.sets.hovercast or binding.sets.global then if global then return true else -- 1.7.9.5