diff Turok/Turok_Config.lua @ 6:a9b8b0866ece

clear out log jam
author Nenue
date Sun, 21 Feb 2016 08:32:53 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Turok/Turok_Config.lua	Sun Feb 21 08:32:53 2016 -0500
@@ -0,0 +1,323 @@
+-- User: Krakyn
+-- Created: 12/19/2015 12:18 AM
+
+local _G = _G
+local T = LibStub("AceAddon-3.0"):GetAddon("Turok")
+local TL = 'Options'
+local mod = T:NewModule(TL)
+local LSM = LibStub("LibSharedMedia-3.0")
+local ConfigDialog = LibStub("AceConfigDialog-3.0")
+--@debug
+local print = function(...) _G.print(TL, ...) end
+local db
+
+local TITLE_FONT_COLOR = '|cFF88FF44'
+local INPUT_FONT_COLOR = '|cFFFFFF00'
+local STACK_COLOR1 = '|cFFFF8800'
+local STACK_COLOR2 = '|cFFFFFF00'
+local FONTVAR_COLOR = '|cFFFFAA44'
+local FRAMEVAR_COLOR = '|cFFFFFF44'
+local PARAMETER_COLOR = '|cFF9999FF'
+local STATE_COLOR = '|cFFFF99FF'
+
+function mod:OnInitialize()
+  T:Print("config mod init")
+end
+
+function mod:OnEnable()
+  T:Print("config mod enable")
+  db = T.db
+  LibStub("AceConfig-3.0"):RegisterOptionsTable('Turok', T.MakeOptions(), {"turok"})
+  T.configDialog = ConfigDialog:AddToBlizOptions("Turok")
+end
+
+local optL = {
+  background_color = 'Background color',
+  foreground_color = 'Foreground color',
+  width = FRAMEVAR_COLOR..'Width',
+  height = FRAMEVAR_COLOR..'Height',
+  alpha = FRAMEVAR_COLOR..'Alpha',
+  alpha_ooc = STATE_COLOR..'Alpha (OOC)',
+  label_strata = FONTVAR_COLOR..'Text Strata',
+  label_font = FONTVAR_COLOR..'Font',
+  label_size = FONTVAR_COLOR..'Font Size',
+  label_inset = FONTVAR_COLOR..'Text Insets',
+  foreground_blend = 'Foreground Blend Mode',
+  background_blend = 'Background Blend Mode',
+  isStatic = PARAMETER_COLOR..'Static Bar',
+  duration = PARAMETER_COLOR..'Duration',
+  isIcon = PARAMETER_COLOR..'Icon Only',
+}
+
+local anchors = {
+  ['CENTER'] = 'Center',
+  ['TOPLEFT'] = 'Top Left',
+  ['TOP'] = 'Top',
+  ['TOPRIGHT'] = 'Top Right',
+  ['RIGHT'] = 'Right',
+  ['BOTTOMRIGHT'] = 'Bottom Right',
+  ['BOTTOM'] = 'Bottom',
+  ['BOTTOMLEFT'] = 'Bottom Left',
+  ['LEFT'] = 'Left'
+}
+
+local frames = {
+  ['UIParent'] = 'UIParent',
+  ['TkPowerBar'] = 'Power Bar',
+  ['TekplayerCastBar'] = 'Player Castbar',
+  ['TektargetCastBar'] = 'Target Castbar',
+  ['TekfocusCastBar'] = 'Focus Castbar',
+  ['TekpetCastBar'] = 'Pet Castbar'
+}
+
+local range = {
+  ['alpha'] = {0, 1, .01},
+  ['alpha_ooc'] = {0, 1, .01},
+  ['label_size'] = {1, 72, 1},
+  ['label_inset'] = {-30, 30, 1},
+  ['width'] = {0, 1200, 1},
+  ['height'] = {0, 1200, 1},
+  ['raidbuff_width'] = {0, 1200, 1},
+  ['raidbuff_height'] = {0, 1200, 1},
+  ['duration'] = {0, 6000, 0.1 },
+  ['glow_size'] = {0, 30, 1},
+  ['spark_size'] = {0, 30, 1},
+}
+
+local opt_order = {
+  ['width'] = 10,
+  ['height'] = 15,
+  ['anchor'] = 20,
+  ['anchorTo'] = 25,
+  ['parent'] = 30,
+
+  ['alpha'] = 110,
+  ['alpha_ooc'] = 115,
+  ['label_size'] = 200,
+  ['label_inset'] = 210,
+  ['label_font'] = 220,
+
+  ['background_texture'] = 300,
+  ['background_color'] = 320,
+  ['foreground_texture'] = 350,
+  ['foreground_color'] = 370,
+}
+local opt_width = {
+
+}
+
+-- options dialog root
+T.myopts = {
+  type = 'group',
+  name =  TITLE_FONT_COLOR..'Turok|r',
+  desc = 'Dinosaur HUD',
+  handler = T,
+  set = function(info,value, ...)
+    local db = T.db
+    local index = db
+    local traversal = 'db'
+    for i = 1, #info-1 do
+      if type(index[info[i]]) == 'table' then
+        --print('|cFFFF0000SET|r:', i, info[i])
+        traversal = traversal .. '.' .. info[i]
+        index = index[info[i]]
+      end
+
+    end
+    --print('|cFFFF0000SET|r: hops=',#info,'index=',  traversal, ' key=', info[#info])
+
+    if type(value) ~= 'boolean' and select('#',...) == 3 then
+      --print('|cFFFF0000SET|r', 'multi-args', select('#',...))
+      value = {value, ... }
+    else
+      --print('|cFFFF0000SET|r', 'single-arg', value)
+    end
+
+    index[info[#info]] = value
+  end,
+  get = function(info)
+    local db = T.db
+    local value = db[info[1]]
+    local traversal = info[1]
+    if #info > 1 then
+      for i=2, #info do
+        traversal = traversal .. '.' .. info[i]
+        if value[info[i]] ~= nil then
+          value = value[info[i]]
+        end
+      end
+    end
+    --print('|cFFFF00FFGET|r: hops=', #info, 'index=',  traversal, 'value=', value)
+
+    if type(value) == 'table' then
+      return unpack(value)
+    end
+    return value
+  end,
+}
+
+function T:MakeOptions(dbtable, index, name, prefix)
+  -- index  = option insertion destination
+  -- parent = nesting point
+  local parent
+  if not (index and dbtable) then
+    dbtable = db
+    name = 'root'
+    prefix = ''
+    parent = T.myopts
+    parent.args = {
+      main = {
+        order = 1,
+        type = 'group',
+        name = 'Global',
+        get = function(info) print('db.'..info[#info]..' get')
+        if type(db[info[#info]]) == 'table' then
+          print('getting color data', unpack(db[info[#info]]))
+          return unpack(db[info[#info]])
+        end
+        return db[info[#info]]
+        end,
+        set = function(info, value, ...) print('db.'..info[#info]..' SET')
+        if select('#',...) == 3 then
+          print('receiving color data', value, ...)
+          value = {value, ...}
+        end
+        db[info[#info]] = value
+        end,
+        args = {},
+      }}
+    index = parent.args.main
+    print(STACK_COLOR1..'using TurokData as index')
+  else
+    index.type = 'group'
+    index.name = name
+    index.args = {}
+    parent = index
+  end
+
+  local order = 2
+  for k, v in pairs(dbtable) do
+    k = tostring(k)
+    local kt = INPUT_FONT_COLOR .. (optL[k] or k)
+    local nested = false
+    --@debug@
+    print(STACK_COLOR2..prefix..'.'..STACK_COLOR1..k..'|r =',v)--@debug@
+    if type(v) == 'table' then
+      if table.getn(v) == 4 then
+        index.args[k] = {
+          name = kt,
+          type = 'color',
+          hasAlpha = true,
+          --@debug@
+          print('color_pack=',unpack(v))--@debug@
+        }
+      else
+        parent.args[k] = {}
+        nested = true
+        T:MakeOptions(v, parent.args[k], k, prefix .. '.' .. name)
+      end
+    elseif type(v) == 'string' then
+      if string.match(k, "_font") then
+        local font_list = {}
+        for k, v in pairs(LSM:HashTable('font')) do
+          font_list[v] = k
+        end
+        index.args[k] = {
+          name = kt,
+          type = 'select',
+          values = font_list
+        }
+      elseif k:match('anchor$') or k:match('_point$') or k:match('anchorTo') then
+
+        index.args[k] = {
+          name = kt,
+          type = 'select',
+          values = anchors
+        }
+
+      elseif k:match('justifyH$') then
+        index.args[k] = {
+          name = kt,
+          type = 'select',
+          values = {
+            ['LEFT'] = 'Left',
+            ['CENTER'] = 'Center',
+            ['RIGHT'] = 'Right'
+          }
+        }
+
+      elseif k:match('strata$') then
+        index.args[k] = {
+          name = kt,
+          type = 'select',
+          values = {
+            BACKGROUND = 'BACKGROUND (clickthrough)',
+            LOW = 'LOW',
+            MEDIUM = 'MEDIUM',
+            HIGH = 'HIGH',
+            DIALOG = 'DIALOG',
+            FULLSCREEN = 'FULLSCREEN',
+            FULLSCREEN_DIALOG = 'FULLSCREEN_DIALOG',
+            TOOLTIP = 'TOOLTIP (clickthrough)',
+          }
+        }
+
+      elseif k:match('outline$') then
+        index.args[k] = {
+          name = kt,
+          type = 'select',
+          values = {
+            ['NONE'] = 'NONE',
+            ['OUTLINE'] = 'OUTLINE',
+            ['THICKOUTLINE'] = 'THICKOUTLINE'
+          }
+        }
+      elseif k:match('parent') then
+        index.args[k] = {
+          name = kt,
+          type = 'select',
+          values = frames
+        }
+      else
+
+        index.args[k] = {
+          name = kt,
+          type = 'input',
+          width = 'full',
+        }
+      end
+    elseif type(v) == 'number' then
+
+      if not range[k] then
+        range[k] = {0,150,1 }
+        print('missing range values for', k)
+      end
+
+      index.args[k] ={
+        name = kt,
+        type = 'range',
+        min = range[k][1],
+        max = range[k][2],
+        softMax = range[k][2],
+        step = range[k][3],
+        bigStep = range[k][3],
+      }
+    elseif type(v) == 'boolean' then
+
+      index.args[k] = {
+        name = kt,
+        type = 'toggle',
+      }
+    end
+    if nested then
+      parent.args[k].order = order + (opt_order[k] and opt_order[k] or 0)
+    elseif index.args[k] then
+      index.args[k].order = order + (opt_order[k] and opt_order[k] or 0)
+      print('  '..kt..' order = '..index.args[k].order)
+    else
+      print('|cFF99FFFFSkipped|r', kt)
+    end
+  end
+
+  return parent
+end