comparison 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
comparison
equal deleted inserted replaced
71:6f8661094643 72:d80db9a9b7e4
23 anonID = anonID + 1 23 anonID = anonID + 1
24 return 'VN' .. anonID 24 return 'VN' .. anonID
25 end 25 end
26 end 26 end
27 27
28 local anchor_coefficients = {
29 ['TOP'] = function(x, y) return x, y end,
30 ['BOTTOM'] = function(x, y) return x,y end,
31 ['LEFT'] = function(x, y) return x,y end,
32 ['RIGHT'] = function(x,y) return x,y end,
33 }
34
35 local VeneerButton_OnDragStart = function(self)
36 self.startingLeft = self:GetLeft()
37 self.startingBottom = self:GetBottom()
38 self.anchors = self.anchors or {}
39 table.wipe(self.anchors)
40
41 local frame = self:GetParent()
42 local n = frame:GetNumPoints()
43 for i = 1, n do
44 local anchor, parent, relative, x, y = frame:GetPoint(i)
45 self.anchors[i] = {
46 anchor = anchor,
47 parent = parent,
48 relative = relative,
49 x = x,
50 y = y
51 }
52 end
53
54 print(self:GetName(), 'start moving', self.startingLeft, self.startingBottom)
55 self:StartMoving()
56 end
57
58 local VeneerButton_OnDragStop = function(self)
59 self:StopMovingOrSizing()
60 if self.OnDragStop then
61 self.OnDragStop(self)
62 else
63 local frame = self:GetParent()
64 local dx = self:GetLeft() - self.startingLeft
65 local dy = self:GetBottom() - self.startingBottom
66
67 frame:ClearAllPoints()
68 for i, point in ipairs(self.anchors) do
69 frame:SetPoint(point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
70 print('adjusting anchor', point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
71 end
72 end
73 end
74
75 local Veneer_FixMovers = function()
76 for frame, veneer in pairs(veneers) do
77 if veneer:IsMoving() then
78 VeneerButton_OnDragStop(veneer)
79 end
80 end
81 end
28 82
29 local VeneerButton_Update = function(self) 83 local VeneerButton_Update = function(self)
30 if configMode then 84 if configMode then
31 self:SetScript('OnDragStart', self.StartMoving) 85 self:SetScript('OnDragStart', VeneerButton_OnDragStart)
32 self:SetScript('OnDragStop', self.StopMovingOrSizing) 86 self:SetScript('OnDragStop', VeneerButton_OnDragStop)
33 self:SetMovable(false) 87 self:SetMovable(true)
34 self:EnableMouse(false) 88 self:EnableMouse(true)
35 self:RegisterForDrag('LeftButton') 89 self:RegisterForDrag('LeftButton')
36 90
37 self.bg:SetColorTexture(0,1,0,0.5) 91 self.bg:SetColorTexture(0,1,0,0.5)
92 for i, region in ipairs(self.configLayers) do
93 region:Show()
94 end
95 self:Show()
38 else 96 else
39 97
40 self:SetScript('OnDragStart', self.StartMoving) 98 self:SetScript('OnDragStart', self.StartMoving)
41 self:SetScript('OnDragStop', self.StopMovingOrSizing) 99 self:SetScript('OnDragStop', self.StopMovingOrSizing)
42 self:SetMovable(false) 100 self:SetMovable(false)
43 self:EnableMouse(false) 101 self:EnableMouse(false)
44 102
45 self.bg:SetColorTexture(0,1,0,0) 103 self.bg:SetColorTexture(0,1,0,0)
104 for i, region in ipairs(self.configLayers) do
105 region:Hide()
106 end
107 if self.isHidden then
108 self:Hide()
109 end
110
46 end 111 end
47 end 112 end
48 113
49 local ToggleVeneerConfig = function() 114 local ToggleVeneerConfig = function()
50 if configMode then 115 if configMode then
73 138
74 if veneers[frame] then 139 if veneers[frame] then
75 return veneers[frame] 140 return veneers[frame]
76 end 141 end
77 142
78 local veneer = CreateFrame('Frame', (frame:GetName() or AnonymousName())..'Veneer', UIParent) 143 local name = (frame:GetName() or AnonymousName())..'Veneer'
144 local veneer = CreateFrame('Frame', name, frame, 'VeneerTemplate')
145 print('+veneer', name)
79 146
80 veneer:SetAllPoints(frame) 147 veneer:SetAllPoints(frame)
81 veneer:SetParent(frame) 148 veneer:SetParent(frame)
82 veneer.bg = veneer:CreateTexture() 149 veneer.label:SetText(name)
83 veneer.bg:SetColorTexture(1,1,1,0) 150 veneer.bg:SetColorTexture(1,1,1,0)
84 veneer.bg:SetAllPoints(veneer)
85 veneer.bg:Show()
86 veneer:Hide() 151 veneer:Hide()
87 veneer:EnableMouse(false) 152 veneer:EnableMouse(false)
88 153
89 veneer:SetScript('OnShow', VeneerButton_OnShow) 154 veneer:SetScript('OnShow', VeneerButton_OnShow)
90 155
91 -- find current X/Y 156 -- find current X/Y
92 veneer.currentLeft = frame:GetLeft() 157 veneer.currentLeft = frame:GetLeft()
93 veneer.currentTop = frame:GetTop() 158 veneer.currentTop = frame:GetTop()
159
94 160
95 veneers[frame] = veneer 161 veneers[frame] = veneer
96 return veneers[frame] 162 return veneers[frame]
97 end 163 end
98 164