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