diff --git a/Bar.lua b/Bar.lua index 4d56fdd..45fe543 100644 --- a/Bar.lua +++ b/Bar.lua @@ -289,10 +289,15 @@ local directVisCond = { nocombat = true, mounted = true, } -function Bar:InitVisibilityDriver() +function Bar:InitVisibilityDriver(returnOnly) + local tmpDriver + if returnOnly then + tmpDriver = self.hidedriver + else + UnregisterStateDriver(self, 'vis') + end self.hidedriver = {} - UnregisterStateDriver(self, 'vis') - + self:SetAttribute("_onstate-vis", [[ if newstate == "show" or newstate == "fade" then self:Show() @@ -302,7 +307,7 @@ function Bar:InitVisibilityDriver() end ]]) - if self.config.visibility.custom then + if self.config.visibility.custom and not returnOnly then table_insert(self.hidedriver, self.config.visibility.customdata or "") else for key, value in pairs(self.config.visibility) do @@ -328,7 +333,13 @@ function Bar:InitVisibilityDriver() end end table_insert(self.hidedriver, self.config.fadeout and "fade" or "show") - self:ApplyVisibilityDriver() + + if not returnOnly then + self:ApplyVisibilityDriver() + else + self.hidedriver, tmpDriver = tmpDriver, self.hidedriver + return table_concat(tmpDriver, ";") + end end function Bar:ApplyVisibilityDriver() @@ -362,6 +373,11 @@ function Bar:SetVisibilityOption(option, value, arg) self:InitVisibilityDriver() end +function Bar:CopyCustomConditionals() + self.config.visibility.customdata = self:InitVisibilityDriver(true) + self:InitVisibilityDriver() +end + function Bar:Enable() if not self.disabled then return end self.disabled = nil diff --git a/Options/Bar.lua b/Options/Bar.lua index 50e5ca3..b365163 100644 --- a/Options/Bar.lua +++ b/Options/Bar.lua @@ -64,6 +64,11 @@ do local bar = getBar(info[2]) return bar:GetVisibilityOption("custom") end + + function customCopy(info) + local bar = getBar(info[2]) + bar:CopyCustomConditionals() + end end local _, class = UnitClass("player") @@ -210,15 +215,36 @@ function Bar:GetOptionObject() hidden = function() return (GetNumShapeshiftForms() < 1) end, disabled = customEnabled, }, + customNl = { + order = 98, + type = "description", + name = "\n", + }, + customHeader = { + order = 99, + type = "header", + name = L["Custom Conditionals"], + }, custom = { order = 100, type = "toggle", name = L["Use Custom Condition"], desc = L["Enable the use of a custom condition, disabling all of the above."], - width = "full", + }, + customCopy = { + order = 101, + type = "execute", + name = L["Copy Conditionals"], + desc = L["Create a copy of the auto-generated conditionals in the custom configuration as a base template."], + func = customCopy, + }, + customDesc = { + order = 102, + type = "description", + name = L["Note: Enabling Custom Conditionals will disable all of the above settings!"], }, customdata = { - order = 101, + order = 103, type = "input", name = L["Custom Conditionals"], desc = L["You can use any macro conditionals in the custom string, using \"show\" and \"hide\" as values.\n\nExample: [combat]hide;show"],