diff Veneer.lua @ 71:6f8661094643

- obtains veneer objects through a common function and track them as a unified table.
author Nenue
date Tue, 23 Aug 2016 06:35:08 -0400
parents ef4116179e2f
children d80db9a9b7e4
line wrap: on
line diff
--- a/Veneer.lua	Mon Aug 22 20:38:43 2016 -0400
+++ b/Veneer.lua	Tue Aug 23 06:35:08 2016 -0400
@@ -1,9 +1,5 @@
 -- Veneer
--- Customization tool for the small bits and pieces
-
--- BuffFrame
--- Provides mechanisms for positioning and alter buff button parameters.
--- Mostly re-configures the blizzard UI frames due to limitations of SecureTemplate.
+-- Base framework for making things draggable.
 
 local vn, print = LibStub("LibKraken").register(VeneerController)
 
@@ -18,11 +14,104 @@
     height = 48,
   }
 }
+local configMode
+local veneers = {}
+
+do
+  local anonID = 0
+  local AnonymousName = function()
+    anonID = anonID + 1
+    return 'VN' .. anonID
+  end
+end
+
+
+local VeneerButton_Update = function(self)
+  if configMode then
+    self:SetScript('OnDragStart', self.StartMoving)
+    self:SetScript('OnDragStop', self.StopMovingOrSizing)
+    self:SetMovable(false)
+    self:EnableMouse(false)
+    self:RegisterForDrag('LeftButton')
+
+    self.bg:SetColorTexture(0,1,0,0.5)
+  else
+
+    self:SetScript('OnDragStart', self.StartMoving)
+    self:SetScript('OnDragStop', self.StopMovingOrSizing)
+    self:SetMovable(false)
+    self:EnableMouse(false)
+
+    self.bg:SetColorTexture(0,1,0,0)
+  end
+end
+
+local ToggleVeneerConfig = function()
+  if configMode then
+    configMode = false
+    vn:print('Config mode off.')
+  else
+    configMode = true
+    vn:print('Config mode on.')
+  end
+
+  for frame, veneer in pairs(veneers) do
+    VeneerButton_Update(veneer)
+  end
+end
+
+local VeneerButton_OnShow = function(self)
+  VeneerButton_Update(self)
+end
+
+vn.GetVeneer = function(frame)
+  if not frame then
+    print('|cFFFF4400Unable to acquire frame...|r')
+    return
+  end
+
+
+  if veneers[frame] then
+    return veneers[frame]
+  end
+
+  local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent)
+
+  veneer:SetAllPoints(frame)
+  veneer:SetParent(frame)
+  veneer.bg = veneer:CreateTexture()
+  veneer.bg:SetColorTexture(1,1,1,0)
+  veneer.bg:SetAllPoints(veneer)
+  veneer.bg:Show()
+  veneer:Hide()
+  veneer:EnableMouse(false)
+
+  veneer:SetScript('OnShow', VeneerButton_OnShow)
+
+  -- find current X/Y
+  veneer.currentLeft = frame:GetLeft()
+  veneer.currentTop = frame:GetTop()
+
+  veneers[frame] = veneer
+  return veneers[frame]
+end
 
 vn.init = function()
   if (not VeneerData) or (not VeneerData.version) then
     VeneerData = defaults
   end
   vn.db = VeneerData
+end
 
+
+vn.wrap = function(module)
+  vn.modules = vn.modules or {}
+  tinsert(vn.modules, module)
+end
+
+SLASH_VENEER1 = "/veneer"
+SLASH_VENEER2 = "/vn"
+
+SlashCmdList.VENEER = function()
+  ToggleVeneerConfig()
 end
\ No newline at end of file