diff --git a/ActionBarPrototype.lua b/ActionBarPrototype.lua index d3992c4..8c269f4 100644 --- a/ActionBarPrototype.lua +++ b/ActionBarPrototype.lua @@ -58,86 +58,76 @@ end -- creates it, if the first time called -- the Universal Bar option table is merged into this, alot of stuff gets inherited. function module:GetOptionsTable() + return self:GetOptionsObject().table +end + +function module:GetOptionsObject() if not self.baroptions then - self.baroptions = Bartender4:Merge({ - general = { - -- type = inherited - -- name = inherited - -- cmdInline = inherited + local obj = Bar.GetOptionObject(self) + + local cat_general = { + enabled = { order = 1, - args = { - enabled = { - order = 1, - name = "Enabled", - desc = "Enable/Disable the bar.", - type = "toggle", - set = optSetter, - get = optGetter, - }, - style = { - -- type = inherited - -- name = inherited - -- inline = inherited - -- order = inherited (5) - args = { - padding = { - order = 30, - type = "range", - name = "Padding", - desc = "Configure the padding of the buttons.", - min = -10, max = 20, step = 1, - set = optSetter, - get = optGetter, - }, - grid = { - order = 5, - type = "toggle", - name = "Button Grid", - desc = "Toggle the button grid.", - set = optSetter, - get = optGetter, - }, - }, - }, - layout = { - type = "group", - name = "Layout", - inline = true, - order = 10, - set = optSetter, - get = optGetter, - args = { - buttons = { - name = "Buttons", - desc = "Number of buttons.", - type = "range", - min = 1, max = 12, step = 1, - }, - rows = { - name = "Rows", - desc = "Number of rows.", - type = "range", - min = 1, max = 12, step = 1, - }, - }, - } - }, + name = "Enabled", + desc = "Enable/Disable the bar.", + type = "toggle", + set = optSetter, + get = optGetter, }, - swap = { - type = "group", - name = "Page Swapping", - cmdInline = true, - order = 2, - args = self:GetStanceOptionsTable(), + padding = { + order = 40, + type = "range", + name = "Padding", + desc = "Configure the padding of the buttons.", + min = -10, max = 20, step = 1, + set = optSetter, + get = optGetter, }, - align = { - -- type = inherited - -- name = inherited - -- cmdInline = inherited - order = 3, - args = {}, - } - }, Bar.GetOptionTable(self)) + grid = { + order = 15, + type = "toggle", + name = "Button Grid", + desc = "Toggle the button grid.", + set = optSetter, + get = optGetter, + width = "full", + }, + layout_header = { + order = 101, + type = "header", + name = "Layout Options", + }, + buttons = { + order = 110, + name = "Buttons", + desc = "Number of buttons.", + type = "range", + min = 1, max = 12, step = 1, + set = optSetter, + get = optGetter, + }, + rows = { + order = 120, + name = "Rows", + desc = "Number of rows.", + type = "range", + min = 1, max = 12, step = 1, + set = optSetter, + get = optGetter, + }, + } + obj:AddElementGroup("general", "ActionBar", cat_general) + + local swap = { + type = "group", + name = "Page Swapping", + cmdInline = true, + order = 2, + args = self:GetStanceOptionsTable(), + } + obj:NewCategory("swap", swap) + + self.baroptions = obj end return self.baroptions diff --git a/Bar.lua b/Bar.lua index 80837f0..fbf35cb 100644 --- a/Bar.lua +++ b/Bar.lua @@ -116,9 +116,9 @@ do end local options -function Bar:GetOptionTable() +function Bar:GetOptionObject() if not options then - options = { + local otbl = { general = { type = "group", cmdInline = true, @@ -128,36 +128,33 @@ function Bar:GetOptionTable() show = { order = 3, type = "toggle", - name = "Shown", + name = "Show", desc = "Show/Hide the bar.", get = optGetter, set = optSetter, }, - style = { - type = "group", - name = "Style", - inline = true, - order = 5, - args = { - alpha = { - order = 10, - name = "Alpha", - desc = "Configure the alpha of the bar.", - type = "range", - min = .1, max = 1, bigStep = 0.1, - get = optGetter, - set = optSetter, - }, - scale = { - order = 20, - name = "Scale", - desc = "Configure the scale of the bar.", - type = "range", - min = .1, max = 2, step = 0.05, bigStep = 0.1, - get = optGetter, - set = optSetter, - }, - }, + styleheader = { + order = 10, + type = "header", + name = "Style Options", + }, + alpha = { + order = 20, + name = "Alpha", + desc = "Configure the alpha of the bar.", + type = "range", + min = .1, max = 1, bigStep = 0.1, + get = optGetter, + set = optSetter, + }, + scale = { + order = 30, + name = "Scale", + desc = "Configure the scale of the bar.", + type = "range", + min = .1, max = 2, step = 0.05, bigStep = 0.1, + get = optGetter, + set = optSetter, }, }, }, @@ -166,11 +163,10 @@ function Bar:GetOptionTable() cmdInline = true, name = "Alignment", order = 10, - args = { - - }, - }, + args = {}, + } } + options = Bartender4:NewOptionObject(otbl) end return options diff --git a/Options.lua b/Options.lua index 04a0e74..8442db8 100644 --- a/Options.lua +++ b/Options.lua @@ -164,3 +164,47 @@ end function Bartender4:RegisterModuleOptions(key, table) self.options.plugins[key] = { [key] = table } end + +local optionParent = {} +function optionParent:NewCategory(category, data) + self.table[category] = data +end + +function optionParent:AddElement(category, element, data, ...) + local lvl = self.table[category] + for i = 1, select('#', ...) do + local key = select(i, ...) + if not (lvl.args[key] and lvl.args[key].args) then + error(("Sub-Level Key %s does not exist in options group or is no sub-group."):format(key), 2) + end + lvl = lvl.args[key] + end + + lvl.args[element] = data +end + +function optionParent:AddElementGroup(category, group_desc, data, ...) + local lvl = self.table[category] + for i = 1, select('#', ...) do + local key = select(i, ...) + if not (lvl.args[key] and lvl.args[key].args) then + error(("Sub-Level Key %s does not exist in options group or is no sub-group."):format(key), 2) + end + lvl = lvl.args[key] + end + + if not lvl.plugins then + lvl.plugins = {} + end + lvl.plugins[group_desc] = data +end + +function Bartender4:NewOptionObject(otbl) + if not otbl then otbl = {} end + local tbl = { table = otbl } + for k, v in pairs(optionParent) do + tbl[k] = v + end + + return tbl +end