diff Init.lua @ 24:66b927b46776

Refine the XML data logic, and sort out some EnableMouse inconsistencies.
author Nenue
date Mon, 11 Apr 2016 09:07:40 -0400
parents d5ee940de273
children e84d645c8ab8
line wrap: on
line diff
--- a/Init.lua	Sun Apr 10 04:35:32 2016 -0400
+++ b/Init.lua	Mon Apr 11 09:07:40 2016 -0400
@@ -125,7 +125,7 @@
 --- localize for speed
 local layers, refs, displays = B.configLayers, B.configLayersRef, B.displays
 
-local ModulesCall = function(func)
+local ModulesCall = function(func, flag)
 
   local n = 0
   for i = 1, #moduleStack do
@@ -134,11 +134,19 @@
 
     for name, module in pairs(stackset) do
       n = n + 1
-      print(n..'  '..name..'.'..func..'()')
 
 
       if module[func] then
-        module[func](module)
+        -- nil = pass
+        if not flag or module.Conf[flag] then
+          if (flag) then
+            print('  check', flag, '=', module.Conf[flag])
+          end
+
+          print(' ',n..'  '..name..'.'..func..'()')
+          module[func](module, module.Conf)
+        end
+
       end
     end
   end
@@ -161,6 +169,8 @@
   if not VeneerData then
     VeneerData = {}
     for k,v in pairs(defaults) do
+
+
       VeneerData[k] = v
     end
     print('Veneer defaults being used.')
@@ -238,6 +248,10 @@
   for level, batch in ipairs(moduleStack) do
     print('config level', level)
     for name, module in pairs(batch) do
+      if not VeneerData[name] then
+        VeneerData[name] = {}
+      end
+
       if module.defaults then
         print('setting defaults for module', name)
         --[===[@non-debug@
@@ -253,6 +267,10 @@
         module.Conf = VeneerData[name]
       end
 
+      if VeneerData[name].enabled == nil then
+        VeneerData[name].enabled = true
+      end
+
     end
   end
 
@@ -272,7 +290,7 @@
 local lastUpdate
 function B.UpdateAll(...)
   lastUpdate = GetTime()
-  ModulesCall('OnUpdate', lastUpdate)
+  ModulesCall('OnUpdate')
 end
 
 B:RegisterEvent('PLAYER_ENTERING_WORLD')
@@ -285,16 +303,20 @@
       C_Timer.After(1, function()
         if GetSpecialization() then
           print(GetSpecialization(), 'enabling')
-          ModulesCall('OnEnable')
+
+          ModulesCall('OnEnable', 'enabled')
           B:SetScript('OnUpdate', nil)
         end
-
       end)
     end
-
   end
 
   B.UpdateAll()
+
+  if event == 'PLAYER_ENTERING_WORLD' then
+    B.UpdateConfigLayers()
+  end
+
 end)
 
 --- Modulizer method
@@ -333,10 +355,10 @@
 B.SetConfigLayers =  function(frame)
   local print = B.fprint()
   if not frame.config then
-    print(frame:GetName(), 'has no config layers')
+    --print(frame:GetName(), 'has no config layers')
     return
   end
-  print('Registering config layers from', frame:GetName())
+  --print('Registering config layers from', frame:GetName())
 
   for i, subframe in ipairs(frame.config) do
     -- make sure there are no duplicates
@@ -345,7 +367,7 @@
       layers[key] = subframe
       refs[subframe] = key
     end
-    print(' ', i, subframe:GetName())
+    --print(' ', i, subframe:GetName())
   end
 end
 
@@ -380,7 +402,8 @@
       end
 
     end
-
+    print(B.Conf.ConfigMode)
+    display.anchor:EnableMouse(B.Conf.ConfigMode)
   end
   for id, region in pairs(layers) do
     print(id, region:GetName(), func)
@@ -390,24 +413,66 @@
   print('['..func..'] updated', #layers, 'regions,', numAnchors, 'frames')
 end
 
+local XMLFrame_SetEnabled = function(self, value)
+  local name = self:GetName()
+
+
+  if not B.Conf[name] then
+    B.Conf[name] = {
+      enabled = true
+    }
+  end
+
+  print()
+  local enabled
+  if value == nil then
+    if B.Conf[name].enabled == nil then
+      print('toggle based on visibility')
+      enabled = (not self:IsVisible()) and true or false
+    else
+      print('toggle a config value =', B.Conf[name].enabled)
+      enabled = B.Conf[name].enabled
+    end
+
+    enabled = (enabled ~= true) and true or false
+  else
+      print('use argument value', value)
+      enabled = value
+  end
+
+  print('arg =', value, 'conf =', B.Conf[name].enabled, 'result=', enabled)
+
+  B.Conf[name].enabled = enabled
+
+  local stateFunc = enabled and 'Show' or 'Hide'
+  local eventFunc = enabled and 'OnToggle' or 'OnToggle'
+  for i, region in pairs(self.toggled) do
+    region[stateFunc](region)
+  end
+  if self.OnToggle then
+    self:OnToggle(B.Conf[name].enabled)
+  end
+  if B.Conf[name].enabled then
+    if self.OnEnable then
+      self:OnEnable()
+    end
+  else
+    if self.OnDisable then
+      self:OnDisable()
+    end
+  end
+
+
+end
 --- Generic handlers for keeping track of XML-defined frames
 B.OnLoad = function(self)
   tinsert(checkForConfig, self)
-  self.Minimize = function(self, forceDown)
-    if not self:IsVisible() then
-       return
-    end
-    local state = (forceDown and 1 or (B.Conf.FrameState[self:GetName()] == 1 and 2 or 1))
-    local stateFunc = (state  == 1) and 'Hide' or 'Show'
-    for i, region in pairs(self.minimizeFrames) do
-      region[stateFunc](region)
-    end
-    B.Conf.FrameState[self:GetName()] = state
-  end
+  self.SetEnabled = XMLFrame_SetEnabled
 end
 
 B.InitXMLFrame = function(self)
-  print('|cFF00FF00hello from '..self:GetName())
+  local name = self:GetName()
+  print('|cFF00FF00hello from '.. name)
 
   if self.drag then
     self:RegisterForDrag('LeftButton')
@@ -415,28 +480,25 @@
     self:EnableMouse(false)
   end
 
-  if not B.Conf.FramePosition then
-    B.Conf.FramePosition = {}
+  if not B.Conf[name] then
+    B.Conf[name] = {
+      enabled = true,
+    }
   end
-  if not B.Conf.FrameState then
-    B.Conf.FrameState = {}
+  local c = B.Conf[name]
+
+  if c.position then
+    print('restoring frame position', unpack(c.position))
+    self:ClearAllPoints()
+    local anchorTo, relativePoint, x, y = unpack(c.position)
+    self:SetPoint(anchorTo, UIParent, relativePoint, x, y)
+  else
+    local a, _, b, c, d = self:GetPoint(1)
+    print('seeding default position', a, b, c, d)
+    c.position = {a, b, c, d}
   end
-
-  if B.Conf.FramePosition[self:GetName()] then
-    print('restoring frame position', unpack(B.Conf.FramePosition[self:GetName()]))
-    self:ClearAllPoints()
-    local anchorTo, relativePoint, x, y = unpack(B.Conf.FramePosition[self:GetName()])
-    self:SetPoint(anchorTo, UIParent, relativePoint, x, y)
-  end
-  local state = B.Conf.FrameState[self:GetName()] and B.Conf.FrameState[self:GetName()] or 2
-  if state == 0 then
-    self:Hide()
-  elseif state == 1 then
-    self.Minimize(self, true)
-  elseif state == 2 then
-    self:Show()
-  end
-  B.Conf.FrameState[self:GetName()] = state
+  local state = c.enabled
+  self:SetEnabled(state)
 end
 
 B.OnDragStart = function(self)
@@ -449,13 +511,13 @@
 end
 
 B.OnDragStop = function(self)
-  print(self:GetName(), 'stop moving ('..self:GetLeft()..', '..self:GetBottom()..')')
+  local name = self:GetName()
+  print(name, 'stop moving ('..self:GetLeft()..', '..self:GetBottom()..')')
   local xB = self:GetLeft() - self.xA
   local yB = self:GetBottom() - self.yA
   print('storing anchor point', self.anchorTo, self.relativePoint, self.x + xB, self.y + yB)
 
   self:StopMovingOrSizing()
-  B.Conf.FramePosition[self:GetName()] = {self.anchorTo, self.relativePoint, self.x + xB, self.y + yB}
+  B.Conf[name].position = {self.anchorTo, self.relativePoint, self.x + xB, self.y + yB}
   B.InitXMLFrame(self)
-
 end
\ No newline at end of file