annotate Options.lua @ 75:d9d16e67725c

- refactor objectives plugin
author Nenue
date Sat, 27 Aug 2016 07:09:54 -0400
parents
children 83b3cdaae6a5
rev   line source
Nenue@75 1
Nenue@75 2 local vn, print = LibStub("LibKraken").register(Veneer, "Options")
Nenue@75 3 local plugin = CreateFrame('Frame', 'VeneerOptions', UIParent, 'TooltipBorderedFrameTemplate')
Nenue@75 4 vn.wrap(plugin)
Nenue@75 5
Nenue@75 6
Nenue@75 7 local fields = {}
Nenue@75 8 local templateTypes = {
Nenue@75 9 slider = 'Slider',
Nenue@75 10 radio = 'Frame',
Nenue@75 11 number = 'EditBox',
Nenue@75 12 check = 'CheckButton'
Nenue@75 13 }
Nenue@75 14 local templateNames = {
Nenue@75 15 slider = 'OptionsSliderTemplate',
Nenue@75 16 radio = '',
Nenue@75 17 number = 'NumericInputSpinnerTemplate',
Nenue@75 18 check = 'UICheckButtonTemplate'
Nenue@75 19 }
Nenue@75 20 local OnLoad, OnUpdate, OnValueChanged = {}, {}, {}
Nenue@75 21 local frameHeadings = {}
Nenue@75 22
Nenue@75 23 local framePadding = 14
Nenue@75 24 local frameMaxWidth = 400
Nenue@75 25
Nenue@75 26
Nenue@75 27 local ToggleVeneerOptions = function()
Nenue@75 28
Nenue@75 29 plugin:Show()
Nenue@75 30 if plugin.initialized then
Nenue@75 31 return
Nenue@75 32 end
Nenue@75 33
Nenue@75 34 local sizeChanged = false
Nenue@75 35 local frameDepth = framePadding
Nenue@75 36 local frameWidth = framePadding
Nenue@75 37 local lineWidth = framePadding
Nenue@75 38 local lineNum = 1
Nenue@75 39 local lineColumn = 1
Nenue@75 40
Nenue@75 41 for i, module in ipairs(vn.modules) do
Nenue@75 42 if module.options then
Nenue@75 43 if not frameHeadings[module] then
Nenue@75 44 frameHeadings[module] = plugin:CreateFontString(nil, 'OVERLAY', 'VeneerNumberFontLarge')
Nenue@75 45 frameHeadings[module]:SetText(module.options.nameString or module:GetName())
Nenue@75 46 frameHeadings[module].height = frameHeadings[module]:GetHeight()
Nenue@75 47
Nenue@75 48 frameHeadings[module]:SetPoint('TOPLEFT', plugin, 'TOPLEFT', lineColumn, -frameDepth)
Nenue@75 49 frameDepth = frameDepth + frameHeadings[module].height
Nenue@75 50 end
Nenue@75 51
Nenue@75 52 for index, args in ipairs(module.options) do
Nenue@75 53 local fullIndex = (i*1000)+index
Nenue@75 54 print('config field', fullIndex)
Nenue@75 55 if not fields[fullIndex] then
Nenue@75 56 fields[fullIndex] = {}
Nenue@75 57 end
Nenue@75 58 local opt = fields[fullIndex]
Nenue@75 59
Nenue@75 60 if not opt.frame then
Nenue@75 61 sizeChanged = true
Nenue@75 62
Nenue@75 63 local configType = args.type
Nenue@75 64 print('Creating', templateTypes[configType] or 'Frame', 'from', templateNames[configType])
Nenue@75 65 opt.frame = CreateFrame(templateTypes[configType] or 'Frame', 'VeneerOptions' .. args.name, plugin, templateNames[configType])
Nenue@75 66
Nenue@75 67 if OnLoad[configType] then
Nenue@75 68 OnLoad[configType](opt.frame, args)
Nenue@75 69 end
Nenue@75 70 if opt.OnLoad then
Nenue@75 71 opt.OnLoad(opt.frame)
Nenue@75 72 end
Nenue@75 73
Nenue@75 74 if args.OnUpdate then
Nenue@75 75 opt.frame.Update = function(self)
Nenue@75 76 OnUpdate[configType](self, args)
Nenue@75 77 args.OnUpdate(self, args)
Nenue@75 78 end
Nenue@75 79 else
Nenue@75 80 opt.frame.Update = function(self)
Nenue@75 81 OnUpdate[configType](self, args)
Nenue@75 82 end
Nenue@75 83 end
Nenue@75 84
Nenue@75 85 opt.frame:Update()
Nenue@75 86
Nenue@75 87 opt.frame:SetPoint('TOPLEFT', plugin, 'TOPLEFT', lineColumn, -frameDepth)
Nenue@75 88
Nenue@75 89
Nenue@75 90 opt.name = args.name
Nenue@75 91 opt.line = lineNum
Nenue@75 92 opt.column = lineColumn
Nenue@75 93
Nenue@75 94 -- measure after initializer
Nenue@75 95 frameDepth = frameDepth + opt.frame:GetHeight()
Nenue@75 96 lineWidth = lineWidth + opt.frame:GetWidth()
Nenue@75 97 opt.depth = frameDepth
Nenue@75 98 opt.width = lineWidth
Nenue@75 99 local isOverlapped = (lineWidth > frameMaxWidth)
Nenue@75 100 if args.fullwidth or isOverlapped then
Nenue@75 101 lineNum = lineNum + 1
Nenue@75 102 if isOverlapped then
Nenue@75 103 lineWidth = framePadding + opt.frame:GetWidth()
Nenue@75 104 lineColumn = 1
Nenue@75 105 else
Nenue@75 106 lineWidth = framePadding
Nenue@75 107 lineColumn = lineColumn + 1
Nenue@75 108 end
Nenue@75 109 end
Nenue@75 110
Nenue@75 111 if lineWidth > frameWidth then
Nenue@75 112 sizeChanged = true
Nenue@75 113 frameWidth = lineWidth
Nenue@75 114 end
Nenue@75 115
Nenue@75 116
Nenue@75 117 end
Nenue@75 118
Nenue@75 119
Nenue@75 120
Nenue@75 121
Nenue@75 122
Nenue@75 123
Nenue@75 124 end
Nenue@75 125 end
Nenue@75 126 end
Nenue@75 127
Nenue@75 128 if sizeChanged then
Nenue@75 129 plugin:SetSize(frameWidth + framePadding, frameDepth + framePadding)
Nenue@75 130
Nenue@75 131 plugin:SetPoint('CENTER')
Nenue@75 132 end
Nenue@75 133
Nenue@75 134 end
Nenue@75 135
Nenue@75 136 OnLoad.slider = function(self, args)
Nenue@75 137 print('min:', args.min, 'max:', args.max, 'steps:', args.step)
Nenue@75 138 self:SetMinMaxValues(args.min or 0, args.max or 420)
Nenue@75 139 self:SetValueStep(1)
Nenue@75 140 self:SetStepsPerPage(5)
Nenue@75 141 self:SetObeyStepOnDrag(true)
Nenue@75 142 end
Nenue@75 143
Nenue@75 144 OnUpdate.slider = function(self, args)
Nenue@75 145 local base = args.handler or vn.db
Nenue@75 146 self:SetValue(vn.db[self.name] or 1)
Nenue@75 147 end
Nenue@75 148
Nenue@75 149 OnValueChanged.slider = function()
Nenue@75 150 end
Nenue@75 151
Nenue@75 152 plugin.cmd = function(cmd)
Nenue@75 153 cmd = string.lower(cmd)
Nenue@75 154 if cmd:match('config') then
Nenue@75 155 ToggleVeneerOptions()
Nenue@75 156 return true
Nenue@75 157 end
Nenue@75 158 end
Nenue@75 159
Nenue@75 160 plugin.init = function()
Nenue@75 161 --ToggleVeneerOptions()
Nenue@75 162 end