Mercurial > wow > buffalo2
diff Options.lua @ 75:d9d16e67725c
- refactor objectives plugin
author | Nenue |
---|---|
date | Sat, 27 Aug 2016 07:09:54 -0400 |
parents | |
children | 83b3cdaae6a5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Options.lua Sat Aug 27 07:09:54 2016 -0400 @@ -0,0 +1,162 @@ + +local vn, print = LibStub("LibKraken").register(Veneer, "Options") +local plugin = CreateFrame('Frame', 'VeneerOptions', UIParent, 'TooltipBorderedFrameTemplate') +vn.wrap(plugin) + + +local fields = {} +local templateTypes = { + slider = 'Slider', + radio = 'Frame', + number = 'EditBox', + check = 'CheckButton' +} +local templateNames = { + slider = 'OptionsSliderTemplate', + radio = '', + number = 'NumericInputSpinnerTemplate', + check = 'UICheckButtonTemplate' +} +local OnLoad, OnUpdate, OnValueChanged = {}, {}, {} +local frameHeadings = {} + +local framePadding = 14 +local frameMaxWidth = 400 + + +local ToggleVeneerOptions = function() + + plugin:Show() + if plugin.initialized then + return + end + + local sizeChanged = false + local frameDepth = framePadding + local frameWidth = framePadding + local lineWidth = framePadding + local lineNum = 1 + local lineColumn = 1 + + for i, module in ipairs(vn.modules) do + if module.options then + if not frameHeadings[module] then + frameHeadings[module] = plugin:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFontLarge') + frameHeadings[module]:SetText(module.options.nameString or module:GetName()) + frameHeadings[module].height = frameHeadings[module]:GetHeight() + + frameHeadings[module]:SetPoint('TOPLEFT', plugin, 'TOPLEFT', lineColumn, -frameDepth) + frameDepth = frameDepth + frameHeadings[module].height + end + + for index, args in ipairs(module.options) do + local fullIndex = (i*1000)+index + print('config field', fullIndex) + if not fields[fullIndex] then + fields[fullIndex] = {} + end + local opt = fields[fullIndex] + + if not opt.frame then + sizeChanged = true + + local configType = args.type + print('Creating', templateTypes[configType] or 'Frame', 'from', templateNames[configType]) + opt.frame = CreateFrame(templateTypes[configType] or 'Frame', 'VeneerOptions' .. args.name, plugin, templateNames[configType]) + + if OnLoad[configType] then + OnLoad[configType](opt.frame, args) + end + if opt.OnLoad then + opt.OnLoad(opt.frame) + end + + if args.OnUpdate then + opt.frame.Update = function(self) + OnUpdate[configType](self, args) + args.OnUpdate(self, args) + end + else + opt.frame.Update = function(self) + OnUpdate[configType](self, args) + end + end + + opt.frame:Update() + + opt.frame:SetPoint('TOPLEFT', plugin, 'TOPLEFT', lineColumn, -frameDepth) + + + opt.name = args.name + opt.line = lineNum + opt.column = lineColumn + + -- measure after initializer + frameDepth = frameDepth + opt.frame:GetHeight() + lineWidth = lineWidth + opt.frame:GetWidth() + opt.depth = frameDepth + opt.width = lineWidth + local isOverlapped = (lineWidth > frameMaxWidth) + if args.fullwidth or isOverlapped then + lineNum = lineNum + 1 + if isOverlapped then + lineWidth = framePadding + opt.frame:GetWidth() + lineColumn = 1 + else + lineWidth = framePadding + lineColumn = lineColumn + 1 + end + end + + if lineWidth > frameWidth then + sizeChanged = true + frameWidth = lineWidth + end + + + end + + + + + + + end + end + end + + if sizeChanged then + plugin:SetSize(frameWidth + framePadding, frameDepth + framePadding) + + plugin:SetPoint('CENTER') + end + +end + +OnLoad.slider = function(self, args) + print('min:', args.min, 'max:', args.max, 'steps:', args.step) + self:SetMinMaxValues(args.min or 0, args.max or 420) + self:SetValueStep(1) + self:SetStepsPerPage(5) + self:SetObeyStepOnDrag(true) +end + +OnUpdate.slider = function(self, args) + local base = args.handler or vn.db + self:SetValue(vn.db[self.name] or 1) +end + +OnValueChanged.slider = function() +end + +plugin.cmd = function(cmd) + cmd = string.lower(cmd) + if cmd:match('config') then + ToggleVeneerOptions() + return true + end +end + +plugin.init = function() + --ToggleVeneerOptions() +end