Clique2 Design Information SavedVariable structure: self.profile.binds = { ["cliqueuid:1"] = { name = "Healing Touch", binding = { alt = true, button = "1", }, action = { type = "spell", spell = "Healing Touch", }, sets = { helpful = true, }, }, ["cliqueuid:2"] = { name = "Show menu", binding = { button = "2", } action = { type = "menu", }, sets = { ooc = true, }, }, } Bind-set semantics (highest priority to lowest) * custom frame set (this set does NOT inherit) * out of combat set (inherits everything below, overriding) * harmful and helpful * default Database defaults: defaults = { profile = { uidCounter = 1, binds = { -- Show menu (default) -- Target unit (default) } } } if not header then header = CreateFrame("Button", "header", UIParent, "SecureHandlerBaseTemplate") end enter = [[ print("Setting bindings") self:SetBindingClick(true, "F", self, "cliquebutton1") ]] leave = [[ print("Clearing bindings") self:ClearBinding("F") ]] header:SetFrameRef("player", PlayerFrame) header:UnwrapScript(PlayerFrame, "OnEnter") header:UnwrapScript(PlayerFrame, "OnLeave") header:WrapScript(PlayerFrame, "OnEnter", enter) header:WrapScript(PlayerFrame, "OnLeave", leave) PlayerFrame:SetAttribute("type-cliquebutton1", "spell") PlayerFrame:SetAttribute("spell-cliquebutton1", "Mark of the Wild") PlayerFrame:SetAttribute("unit-cliquebutton1", "player")