Quantcast

Added support for harm/help click-sets

James Whitehead II [10-09-10 - 13:15]
Added support for harm/help click-sets
Filename
Clique.lua
Utils.lua
diff --git a/Clique.lua b/Clique.lua
index 6c0dab1..9b01f2e 100755
--- a/Clique.lua
+++ b/Clique.lua
@@ -188,19 +188,21 @@ function addon:GetClickAttributes(global)

     for idx, entry in ipairs(self.profile.binds) do
         if self:ShouldSetBinding(entry, global) then
-            local prefix, suffix = entry.key:match("^(.-)([^%-]+)$")
-            if prefix:sub(-1, -1) == "-" then
-                prefix = prefix:sub(1, -2)
-            end
-
-            prefix = prefix:lower()
-
-            local button = suffix:match("^BUTTON(%d+)$")
-            if button then
-                suffix = button
-            else
-                suffix = "cliquebutton" .. idx
-                prefix = ""
+            local prefix, suffix = addon:GetBindingPrefixSuffix(entry)
+
+            -- Set up help/harm bindings. The button value will be either a number,
+            -- in the case of mouse buttons, otherwise it will be a string of
+            -- characters. Harmbuttons work alongside modifiers, so we need to include
+            -- then in the remapping.
+
+            if entry.sets.friend then
+                local newbutton = "friend" .. suffix
+                bits[#bits + 1] = ATTR(prefix, "helpbutton", suffix, newbutton)
+                suffix = newbutton
+            elseif entry.sets.enemy then
+                local newbutton = "enemy" .. suffix
+                bits[#bits + 1] = ATTR(prefix, "harmbutton", suffix, newbutton)
+                suffix = newbutton
             end

             -- Build any needed SetAttribute() calls
@@ -241,7 +243,10 @@ function addon:GetBindingAttributes(global)
         if self:ShouldSetBinding(entry, global) then
             if not entry.key:match("BUTTON%d+$") then
                 -- This is a key binding, so we need a binding for it
-                set[#set + 1] = B_SET:format(entry.key, "cliquebutton" .. idx)
+
+                local prefix, suffix = addon:GetBindingPrefixSuffix(entry)
+
+                set[#set + 1] = B_SET:format(entry.key, suffix)
                 clr[#clr + 1] = B_CLR:format(entry.key)
             end
         end
diff --git a/Utils.lua b/Utils.lua
index 81a3fbb..8823973 100644
--- a/Utils.lua
+++ b/Utils.lua
@@ -198,6 +198,27 @@ function addon:GetBindingInfoText(binding)
     end
 end

+function addon:GetBindingPrefixSuffix(binding)
+    local prefix, suffix = binding.key:match("^(.-)([^%-]+)$")
+    if prefix:sub(-1, -1) == "-" then
+        prefix = prefix:sub(1, -2)
+    end
+
+    prefix = prefix:lower()
+
+    local button = suffix:match("^BUTTON(%d+)$")
+    if button then
+        suffix = button
+    else
+        local mbid = (prefix .. suffix):gsub("[^A-Za-z0-9]", "")
+        suffix = "cliquebutton" .. mbid
+        prefix = ""
+    end
+
+    return prefix, suffix
+end
+
+
 -- This function examines the current state of the game
 function addon:ShouldSetBinding(binding, global)
     local apply = false
@@ -209,6 +230,10 @@ function addon:ShouldSetBinding(binding, global)
         apply = false
     end

+    if binding.sets.enemy or binding.sets.friend and not binding.sets.global then
+        apply = true
+    end
+
     if binding.sets.ooc then
         if UnitAffectingCombat("player") then
             apply = false