diff Veneer.lua @ 72:d80db9a9b7e4

- created 'VeneerTemplate' xml - implement drag drop parent re-anchoring
author Nenue
date Tue, 23 Aug 2016 14:53:38 -0400
parents 6f8661094643
children 95ed343c3a42
line wrap: on
line diff
--- a/Veneer.lua	Tue Aug 23 06:35:08 2016 -0400
+++ b/Veneer.lua	Tue Aug 23 14:53:38 2016 -0400
@@ -25,16 +25,74 @@
   end
 end
 
+local anchor_coefficients = {
+  ['TOP'] = function(x, y) return x, y end,
+  ['BOTTOM'] = function(x, y) return x,y end,
+  ['LEFT'] = function(x, y) return x,y end,
+  ['RIGHT'] = function(x,y) return x,y end,
+}
+
+local VeneerButton_OnDragStart = function(self)
+  self.startingLeft = self:GetLeft()
+  self.startingBottom = self:GetBottom()
+  self.anchors = self.anchors or {}
+  table.wipe(self.anchors)
+
+  local frame = self:GetParent()
+  local n = frame:GetNumPoints()
+  for i = 1, n do
+    local anchor, parent, relative, x, y = frame:GetPoint(i)
+    self.anchors[i] = {
+      anchor = anchor,
+      parent = parent,
+      relative = relative,
+      x = x,
+      y = y
+    }
+  end
+
+  print(self:GetName(), 'start moving', self.startingLeft, self.startingBottom)
+  self:StartMoving()
+end
+
+local VeneerButton_OnDragStop =  function(self)
+  self:StopMovingOrSizing()
+  if self.OnDragStop then
+    self.OnDragStop(self)
+  else
+    local frame = self:GetParent()
+    local dx = self:GetLeft() - self.startingLeft
+    local dy = self:GetBottom() - self.startingBottom
+
+    frame:ClearAllPoints()
+    for i, point in ipairs(self.anchors) do
+      frame:SetPoint(point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
+      print('adjusting anchor', point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
+    end
+  end
+end
+
+local Veneer_FixMovers = function()
+  for frame, veneer in pairs(veneers) do
+    if veneer:IsMoving() then
+      VeneerButton_OnDragStop(veneer)
+    end
+  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:SetScript('OnDragStart', VeneerButton_OnDragStart)
+    self:SetScript('OnDragStop', VeneerButton_OnDragStop)
+    self:SetMovable(true)
+    self:EnableMouse(true)
     self:RegisterForDrag('LeftButton')
 
     self.bg:SetColorTexture(0,1,0,0.5)
+    for i, region in ipairs(self.configLayers) do
+      region:Show()
+    end
+    self:Show()
   else
 
     self:SetScript('OnDragStart', self.StartMoving)
@@ -43,6 +101,13 @@
     self:EnableMouse(false)
 
     self.bg:SetColorTexture(0,1,0,0)
+    for i, region in ipairs(self.configLayers) do
+      region:Hide()
+    end
+    if self.isHidden then
+      self:Hide()
+    end
+
   end
 end
 
@@ -75,14 +140,14 @@
     return veneers[frame]
   end
 
-  local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent)
+  local name = (frame:GetName() or AnonymousName())..'Veneer'
+  local veneer = CreateFrame('Frame', name, frame, 'VeneerTemplate')
+  print('+veneer', name)
 
   veneer:SetAllPoints(frame)
   veneer:SetParent(frame)
-  veneer.bg = veneer:CreateTexture()
+  veneer.label:SetText(name)
   veneer.bg:SetColorTexture(1,1,1,0)
-  veneer.bg:SetAllPoints(veneer)
-  veneer.bg:Show()
   veneer:Hide()
   veneer:EnableMouse(false)
 
@@ -92,6 +157,7 @@
   veneer.currentLeft = frame:GetLeft()
   veneer.currentTop = frame:GetTop()
 
+
   veneers[frame] = veneer
   return veneers[frame]
 end