Mercurial > wow > turok
comparison Turok/Modules/Timer/Editor.lua @ 6:a9b8b0866ece
clear out log jam
| author | Nenue |
|---|---|
| date | Sun, 21 Feb 2016 08:32:53 -0500 |
| parents | |
| children | 9400a0ff8540 |
comparison
equal
deleted
inserted
replaced
| 5:8a9a6637f082 | 6:a9b8b0866ece |
|---|---|
| 1 --- Modules | |
| 2 -- @file-author@ | |
| 3 -- @project-revision@ @project-hash@ | |
| 4 -- @file-revision@ @file-hash@ | |
| 5 -- Created: 1/18/2016 3:33 PM | |
| 6 local _G = _G | |
| 7 local T, type, pairs = _G.Turok, type, pairs | |
| 8 local mod = T.modules.TimerControl | |
| 9 local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool | |
| 10 local print = function(...) | |
| 11 if Devian and DevianDB.workspace ~= 1 then | |
| 12 print('Dialog', ...) | |
| 13 end | |
| 14 end | |
| 15 print('Peep!', ...) | |
| 16 | |
| 17 | |
| 18 local TimerConfig = { | |
| 19 conf = { | |
| 20 padding = 4, | |
| 21 spacing = 1, | |
| 22 width = 450, | |
| 23 }, | |
| 24 info = { | |
| 25 { key = 'timerName', | |
| 26 desc = 'Unique Name:', | |
| 27 type='EditBox', name = 'timerName', fill=true, | |
| 28 line = true, | |
| 29 }, | |
| 30 { key = 'spellEnable', | |
| 31 inherits = 'TurokCheckButtonOverlay', | |
| 32 type='CheckButton', name = 'spellEnable', fixed=25, point='LEFT', | |
| 33 get = Dialog_Boolean, getarg = 'spellID', | |
| 34 collapse = true, | |
| 35 desc = 'Spell Name', | |
| 36 }, | |
| 37 { key = 'spellID', | |
| 38 type='EditBox', name = 'spellName', | |
| 39 line = true, float = true | |
| 40 }, | |
| 41 { key = 'fill_inverse', | |
| 42 desc = 'Reverse Fill', | |
| 43 type='CheckButton', name='fillInverse', fixed=25, point='LEFT', | |
| 44 get = Dialog_Boolean, getarg = 'fill_inverse', text='Inverted Fill', | |
| 45 line = true, | |
| 46 }, | |
| 47 { key = 'display', | |
| 48 desc = 'Display Type', | |
| 49 type='EditBox', name='displayType', | |
| 50 line = true, | |
| 51 }, | |
| 52 }, | |
| 53 } | |
| 54 | |
| 55 local Dialog_SetField = {} | |
| 56 local dget = function(name, key) | |
| 57 if mod.db.timers[name] then | |
| 58 return mod.db.timers[name][key] | |
| 59 end | |
| 60 return nil | |
| 61 end | |
| 62 local inherits = { | |
| 63 EditBox = 'TkEditBox', | |
| 64 CheckButton = 'TurokCheckButtonInline', | |
| 65 Slider = 'TkSlider', | |
| 66 } | |
| 67 | |
| 68 Dialog_SetField['CheckButton'] = function(self, checked) self:SetChecked(checked) end | |
| 69 Dialog_SetField['EditBox'] = function(self, text) | |
| 70 print(' ', cKey(self:GetName()), text) | |
| 71 self:SetText(text or '') end | |
| 72 Dialog_SetField['Button'] = function(self, text) self:SetText(text) end | |
| 73 | |
| 74 | |
| 75 local function Dialog_Boolean(name, key) | |
| 76 print(' Dialog_Boolean', name, key) | |
| 77 return (mod.db.timers[name][key] and true or false) | |
| 78 end | |
| 79 | |
| 80 function mod.Dialog_Select(self, key) | |
| 81 local timer | |
| 82 if self.parent_values[key] then | |
| 83 print('matched timer name', key) | |
| 84 timer = self.parent_values[key] | |
| 85 elseif rawget(mod.frames.spellID, key) then | |
| 86 print('matched spellID', key) | |
| 87 timer = mod.frames.spellID[key][1] | |
| 88 for k,v in pairs(timer) do | |
| 89 print(' -', k, '=', v) | |
| 90 end | |
| 91 end | |
| 92 | |
| 93 if timer then | |
| 94 self.values = timer | |
| 95 self.timerName = timer.timerName | |
| 96 else | |
| 97 self.values = { | |
| 98 timerName = 'New Timer' | |
| 99 } | |
| 100 self.timerName = 'New Timer' | |
| 101 end | |
| 102 mod.Dialog_Init(self, TimerConfig.conf, TimerConfig.info) | |
| 103 end | |
| 104 | |
| 105 function mod.Dialog_Init(self, dconf, dinfo) | |
| 106 print('init,', self.values.timerName) | |
| 107 | |
| 108 if not self.fields then | |
| 109 self.fields = {} | |
| 110 self.rows = {} | |
| 111 self.Click = mod.Dialog_Click | |
| 112 self.Check = mod.Dialog_Check | |
| 113 self.EditBox = mod.Dialog_EditBox | |
| 114 end | |
| 115 print(self.name, self.timerName) | |
| 116 self.name:SetText(self.timerName) | |
| 117 | |
| 118 local inset = dconf.padding + dconf.spacing | |
| 119 -- frame X max | |
| 120 local fX = 0 | |
| 121 -- row number, row Y offset | |
| 122 local rn, ry = 1, -34 | |
| 123 -- row x offset left-align, row x offset right-aligned, largest collapsed element | |
| 124 local rxL, rxR, rC, rh = dconf.spacing, dconf.spacing, 0, 0 | |
| 125 for i, opt in ipairs(dinfo) do | |
| 126 if not self.rows[rn] then | |
| 127 self.rows[rn] = CreateFrame('Frame', self:GetName()..'Row'..rn, self, 'TurokDialogRow') | |
| 128 end | |
| 129 | |
| 130 local k = opt.key | |
| 131 if self.fields[i] == nil then | |
| 132 self.fields[i] = CreateFrame(opt.type, self:GetName()..opt.name, self.rows[rn], opt.inherits or inherits[opt.type]) | |
| 133 self.fields[i].index = i | |
| 134 self.fields[i].key = k | |
| 135 -- row point (from), row point (to), row x offset | |
| 136 local rp, rpt, rx | |
| 137 -- row delta | |
| 138 local rd | |
| 139 if opt.fill then | |
| 140 rpt = opt.float and 'BOTTOMLEFT' or 'BOTTOMRIGHT' | |
| 141 -- row point X offset | |
| 142 local rpx = opt.float and dconf.spacing or -dconf.spacing | |
| 143 self.fields[i]:SetPoint(rpt, self.rows[rn], rpt, rpx, 0) | |
| 144 print(' fill:', rpt, '-', rpt,' :: ', rpx, 0) | |
| 145 rd = 0 | |
| 146 else | |
| 147 rd = self.fields[i]:GetWidth() + dconf.spacing | |
| 148 end | |
| 149 if opt.float then | |
| 150 rp = 'BOTTOMRIGHT' | |
| 151 rx = -rxR | |
| 152 rxR = rxR + rd | |
| 153 elseif opt.collapse then | |
| 154 rp = 'BOTTOMLEFT' | |
| 155 rx = dconf.spacing | |
| 156 rC = math.max(rC, rd + dconf.spacing) -- spacing L + rd{width + spacing R} | |
| 157 else | |
| 158 rp = 'BOTTOMLEFT' | |
| 159 rx = rxL | |
| 160 rxL = rxL + rd | |
| 161 end | |
| 162 | |
| 163 rh = math.max(rh, self.fields[i]:GetHeight()) | |
| 164 self.fields[i]:SetPoint(rp, self.rows[rn], rp, rx, dconf.spacing) | |
| 165 print(' align:', rp, '-', rp, ' :: ', rx, 0) | |
| 166 print(' dR:', cNum(rd), 'nR:',cWord(rn), 'rX:', cNum(rx), 'i:', cText(i)) | |
| 167 | |
| 168 if opt.line or (not dinfo[i+1]) then | |
| 169 print(cText'nR:', cNum(rn), 'rY:', cNum(ry)) | |
| 170 self.rows[rn]:ClearAllPoints() | |
| 171 self.rows[rn]:SetPoint('TOPLEFT', self, 'TOPLEFT', dconf.padding, ry) | |
| 172 self.rows[rn]:SetPoint('TOPRIGHT', self, 'TOPRIGHT', -dconf.padding, ry) | |
| 173 self.rows[rn]:SetHeight(rh + dconf.spacing*2) | |
| 174 self.rows[rn]:Show() | |
| 175 rn = rn + 1 | |
| 176 ry = ry - (rh + dconf.spacing*3) -->| {spacing T + rh + spacing B} + spacing dR |<-- | |
| 177 | |
| 178 print('fX:',cNum(fX), 'rX:', cNum(rxL+rxR+dconf.spacing), 'rC:', cNum(rC)) | |
| 179 fX = math.max(fX, rxL+rxR+dconf.spacing) | |
| 180 fX = math.max(fX, rC) | |
| 181 rxL, rxR = dconf.spacing, dconf.spacing | |
| 182 rh = 0 | |
| 183 end | |
| 184 end | |
| 185 | |
| 186 self.fields[i]:Show() | |
| 187 if opt.desc and self.fields[i].description then | |
| 188 self.fields[i].description:SetText(opt.desc) | |
| 189 end | |
| 190 Dialog_SetField[opt.type](self.fields[i], opt.get and opt.get(self.values.timerName, opt.getarg) or self.values[k]) | |
| 191 | |
| 192 end | |
| 193 if not self.initialized then | |
| 194 self.initialized = true | |
| 195 self:SetSize(fX + dconf.padding + dconf.spacing*2, dconf.padding + math.abs(ry)) | |
| 196 end | |
| 197 end | |
| 198 | |
| 199 function mod.Dialog_Click(self,...) | |
| 200 local command = self:GetName():match("_(a%+)$") | |
| 201 | |
| 202 print(command) | |
| 203 end | |
| 204 | |
| 205 function mod.Dialog_Check(self, ...) | |
| 206 print('field #', self.index, self.key, 'checked') | |
| 207 --self:SetChecked(self:GetChecked() and false or true) | |
| 208 end | |
| 209 | |
| 210 function mod.Dialog_EditBox(self, ...) | |
| 211 print('field #', self.index, self.key, 'changed', self:GetText()) | |
| 212 | |
| 213 if self.key == 'timerName' then | |
| 214 self.values.timerName = self:GetText() | |
| 215 self.name:SetText(self.values.timerName) | |
| 216 self.timerName = self.values.timerName | |
| 217 elseif self.key == 'spellID' then | |
| 218 print('handling spellID') | |
| 219 end | |
| 220 | |
| 221 end | |
| 222 | |
| 223 function mod.Dialog_Command(str, editbox) | |
| 224 --local spellID = T:GetArgs(str, 1,0) | |
| 225 local f = mod.EditDialog | |
| 226 f.values = {} | |
| 227 local db = mod.db | |
| 228 | |
| 229 | |
| 230 local func, t, z = pairs(db.timers) -- iterator, table | |
| 231 local name, values, y = func(t) -- index, values | |
| 232 f.parent_values = {[name] = values} | |
| 233 f.timerName = name | |
| 234 f.values = values | |
| 235 f.values.timerName = name | |
| 236 for k,v in pairs(f.values) do | |
| 237 print(cText(k), cType(v)) | |
| 238 end | |
| 239 print('pairs1', func, t) | |
| 240 print('pairs2', z, y) | |
| 241 name, values = func(t, name) | |
| 242 while name do | |
| 243 print(' entry:', name, values) | |
| 244 f.parent_values[name] = values | |
| 245 name, values = func(t, name) | |
| 246 end | |
| 247 | |
| 248 | |
| 249 | |
| 250 if f:IsVisible() then | |
| 251 f:Hide() | |
| 252 else | |
| 253 mod.Dialog_Init(f, TimerConfig.conf, TimerConfig.info) | |
| 254 | |
| 255 f:Show() | |
| 256 end | |
| 257 end |
