Mercurial > wow > turok
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Turok/Modules/Timer/Editor.lua Sun Feb 21 08:32:53 2016 -0500 @@ -0,0 +1,257 @@ +--- Modules +-- @file-author@ +-- @project-revision@ @project-hash@ +-- @file-revision@ @file-hash@ +-- Created: 1/18/2016 3:33 PM +local _G = _G +local T, type, pairs = _G.Turok, type, pairs +local mod = T.modules.TimerControl +local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool +local print = function(...) + if Devian and DevianDB.workspace ~= 1 then + print('Dialog', ...) + end +end +print('Peep!', ...) + + +local TimerConfig = { + conf = { + padding = 4, + spacing = 1, + width = 450, + }, + info = { + { key = 'timerName', + desc = 'Unique Name:', + type='EditBox', name = 'timerName', fill=true, + line = true, + }, + { key = 'spellEnable', + inherits = 'TurokCheckButtonOverlay', + type='CheckButton', name = 'spellEnable', fixed=25, point='LEFT', + get = Dialog_Boolean, getarg = 'spellID', + collapse = true, + desc = 'Spell Name', + }, + { key = 'spellID', + type='EditBox', name = 'spellName', + line = true, float = true + }, + { key = 'fill_inverse', + desc = 'Reverse Fill', + type='CheckButton', name='fillInverse', fixed=25, point='LEFT', + get = Dialog_Boolean, getarg = 'fill_inverse', text='Inverted Fill', + line = true, + }, + { key = 'display', + desc = 'Display Type', + type='EditBox', name='displayType', + line = true, + }, + }, +} + +local Dialog_SetField = {} +local dget = function(name, key) + if mod.db.timers[name] then + return mod.db.timers[name][key] + end + return nil +end +local inherits = { + EditBox = 'TkEditBox', + CheckButton = 'TurokCheckButtonInline', + Slider = 'TkSlider', +} + +Dialog_SetField['CheckButton'] = function(self, checked) self:SetChecked(checked) end +Dialog_SetField['EditBox'] = function(self, text) + print(' ', cKey(self:GetName()), text) + self:SetText(text or '') end +Dialog_SetField['Button'] = function(self, text) self:SetText(text) end + + +local function Dialog_Boolean(name, key) + print(' Dialog_Boolean', name, key) + return (mod.db.timers[name][key] and true or false) +end + +function mod.Dialog_Select(self, key) + local timer + if self.parent_values[key] then + print('matched timer name', key) + timer = self.parent_values[key] + elseif rawget(mod.frames.spellID, key) then + print('matched spellID', key) + timer = mod.frames.spellID[key][1] + for k,v in pairs(timer) do + print(' -', k, '=', v) + end + end + + if timer then + self.values = timer + self.timerName = timer.timerName + else + self.values = { + timerName = 'New Timer' + } + self.timerName = 'New Timer' + end + mod.Dialog_Init(self, TimerConfig.conf, TimerConfig.info) +end + +function mod.Dialog_Init(self, dconf, dinfo) + print('init,', self.values.timerName) + + if not self.fields then + self.fields = {} + self.rows = {} + self.Click = mod.Dialog_Click + self.Check = mod.Dialog_Check + self.EditBox = mod.Dialog_EditBox + end + print(self.name, self.timerName) + self.name:SetText(self.timerName) + + local inset = dconf.padding + dconf.spacing + -- frame X max + local fX = 0 + -- row number, row Y offset + local rn, ry = 1, -34 + -- row x offset left-align, row x offset right-aligned, largest collapsed element + local rxL, rxR, rC, rh = dconf.spacing, dconf.spacing, 0, 0 + for i, opt in ipairs(dinfo) do + if not self.rows[rn] then + self.rows[rn] = CreateFrame('Frame', self:GetName()..'Row'..rn, self, 'TurokDialogRow') + end + + local k = opt.key + if self.fields[i] == nil then + self.fields[i] = CreateFrame(opt.type, self:GetName()..opt.name, self.rows[rn], opt.inherits or inherits[opt.type]) + self.fields[i].index = i + self.fields[i].key = k + -- row point (from), row point (to), row x offset + local rp, rpt, rx + -- row delta + local rd + if opt.fill then + rpt = opt.float and 'BOTTOMLEFT' or 'BOTTOMRIGHT' + -- row point X offset + local rpx = opt.float and dconf.spacing or -dconf.spacing + self.fields[i]:SetPoint(rpt, self.rows[rn], rpt, rpx, 0) + print(' fill:', rpt, '-', rpt,' :: ', rpx, 0) + rd = 0 + else + rd = self.fields[i]:GetWidth() + dconf.spacing + end + if opt.float then + rp = 'BOTTOMRIGHT' + rx = -rxR + rxR = rxR + rd + elseif opt.collapse then + rp = 'BOTTOMLEFT' + rx = dconf.spacing + rC = math.max(rC, rd + dconf.spacing) -- spacing L + rd{width + spacing R} + else + rp = 'BOTTOMLEFT' + rx = rxL + rxL = rxL + rd + end + + rh = math.max(rh, self.fields[i]:GetHeight()) + self.fields[i]:SetPoint(rp, self.rows[rn], rp, rx, dconf.spacing) + print(' align:', rp, '-', rp, ' :: ', rx, 0) + print(' dR:', cNum(rd), 'nR:',cWord(rn), 'rX:', cNum(rx), 'i:', cText(i)) + + if opt.line or (not dinfo[i+1]) then + print(cText'nR:', cNum(rn), 'rY:', cNum(ry)) + self.rows[rn]:ClearAllPoints() + self.rows[rn]:SetPoint('TOPLEFT', self, 'TOPLEFT', dconf.padding, ry) + self.rows[rn]:SetPoint('TOPRIGHT', self, 'TOPRIGHT', -dconf.padding, ry) + self.rows[rn]:SetHeight(rh + dconf.spacing*2) + self.rows[rn]:Show() + rn = rn + 1 + ry = ry - (rh + dconf.spacing*3) -->| {spacing T + rh + spacing B} + spacing dR |<-- + + print('fX:',cNum(fX), 'rX:', cNum(rxL+rxR+dconf.spacing), 'rC:', cNum(rC)) + fX = math.max(fX, rxL+rxR+dconf.spacing) + fX = math.max(fX, rC) + rxL, rxR = dconf.spacing, dconf.spacing + rh = 0 + end + end + + self.fields[i]:Show() + if opt.desc and self.fields[i].description then + self.fields[i].description:SetText(opt.desc) + end + Dialog_SetField[opt.type](self.fields[i], opt.get and opt.get(self.values.timerName, opt.getarg) or self.values[k]) + + end + if not self.initialized then + self.initialized = true + self:SetSize(fX + dconf.padding + dconf.spacing*2, dconf.padding + math.abs(ry)) + end +end + +function mod.Dialog_Click(self,...) + local command = self:GetName():match("_(a%+)$") + + print(command) +end + +function mod.Dialog_Check(self, ...) + print('field #', self.index, self.key, 'checked') + --self:SetChecked(self:GetChecked() and false or true) +end + +function mod.Dialog_EditBox(self, ...) + print('field #', self.index, self.key, 'changed', self:GetText()) + + if self.key == 'timerName' then + self.values.timerName = self:GetText() + self.name:SetText(self.values.timerName) + self.timerName = self.values.timerName + elseif self.key == 'spellID' then + print('handling spellID') + end + +end + +function mod.Dialog_Command(str, editbox) + --local spellID = T:GetArgs(str, 1,0) + local f = mod.EditDialog + f.values = {} + local db = mod.db + + + local func, t, z = pairs(db.timers) -- iterator, table + local name, values, y = func(t) -- index, values + f.parent_values = {[name] = values} + f.timerName = name + f.values = values + f.values.timerName = name + for k,v in pairs(f.values) do + print(cText(k), cType(v)) + end + print('pairs1', func, t) + print('pairs2', z, y) + name, values = func(t, name) + while name do + print(' entry:', name, values) + f.parent_values[name] = values + name, values = func(t, name) + end + + + + if f:IsVisible() then + f:Hide() + else + mod.Dialog_Init(f, TimerConfig.conf, TimerConfig.info) + + f:Show() + end +end \ No newline at end of file