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