Nenue@54
|
1 -- Veneer
|
Nenue@71
|
2 -- Base framework for making things draggable.
|
Nenue@0
|
3
|
Nenue@59
|
4 local vn, print = LibStub("LibKraken").register(VeneerController)
|
Nenue@54
|
5
|
Nenue@0
|
6
|
Nenue@59
|
7 local defaults = {
|
Nenue@59
|
8 enableAll = true,
|
Nenue@59
|
9 enableModule = {
|
Nenue@59
|
10 BuffFrame = true,
|
Nenue@59
|
11 },
|
Nenue@59
|
12 BuffFrame = {
|
Nenue@59
|
13 width = 48,
|
Nenue@59
|
14 height = 48,
|
Nenue@59
|
15 }
|
Nenue@59
|
16 }
|
Nenue@71
|
17 local configMode
|
Nenue@71
|
18 local veneers = {}
|
Nenue@71
|
19
|
Nenue@71
|
20 do
|
Nenue@71
|
21 local anonID = 0
|
Nenue@71
|
22 local AnonymousName = function()
|
Nenue@71
|
23 anonID = anonID + 1
|
Nenue@71
|
24 return 'VN' .. anonID
|
Nenue@71
|
25 end
|
Nenue@71
|
26 end
|
Nenue@71
|
27
|
Nenue@72
|
28 local anchor_coefficients = {
|
Nenue@72
|
29 ['TOP'] = function(x, y) return x, y end,
|
Nenue@72
|
30 ['BOTTOM'] = function(x, y) return x,y end,
|
Nenue@72
|
31 ['LEFT'] = function(x, y) return x,y end,
|
Nenue@72
|
32 ['RIGHT'] = function(x,y) return x,y end,
|
Nenue@72
|
33 }
|
Nenue@72
|
34
|
Nenue@72
|
35 local VeneerButton_OnDragStart = function(self)
|
Nenue@72
|
36 self.startingLeft = self:GetLeft()
|
Nenue@72
|
37 self.startingBottom = self:GetBottom()
|
Nenue@72
|
38 self.anchors = self.anchors or {}
|
Nenue@72
|
39 table.wipe(self.anchors)
|
Nenue@72
|
40
|
Nenue@72
|
41 local frame = self:GetParent()
|
Nenue@72
|
42 local n = frame:GetNumPoints()
|
Nenue@72
|
43 for i = 1, n do
|
Nenue@72
|
44 local anchor, parent, relative, x, y = frame:GetPoint(i)
|
Nenue@72
|
45 self.anchors[i] = {
|
Nenue@72
|
46 anchor = anchor,
|
Nenue@72
|
47 parent = parent,
|
Nenue@72
|
48 relative = relative,
|
Nenue@72
|
49 x = x,
|
Nenue@72
|
50 y = y
|
Nenue@72
|
51 }
|
Nenue@72
|
52 end
|
Nenue@72
|
53
|
Nenue@72
|
54 print(self:GetName(), 'start moving', self.startingLeft, self.startingBottom)
|
Nenue@72
|
55 self:StartMoving()
|
Nenue@72
|
56 end
|
Nenue@72
|
57
|
Nenue@72
|
58 local VeneerButton_OnDragStop = function(self)
|
Nenue@72
|
59 self:StopMovingOrSizing()
|
Nenue@72
|
60 if self.OnDragStop then
|
Nenue@72
|
61 self.OnDragStop(self)
|
Nenue@72
|
62 else
|
Nenue@72
|
63 local frame = self:GetParent()
|
Nenue@72
|
64 local dx = self:GetLeft() - self.startingLeft
|
Nenue@72
|
65 local dy = self:GetBottom() - self.startingBottom
|
Nenue@72
|
66
|
Nenue@72
|
67 frame:ClearAllPoints()
|
Nenue@72
|
68 for i, point in ipairs(self.anchors) do
|
Nenue@72
|
69 frame:SetPoint(point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
|
Nenue@72
|
70 print('adjusting anchor', point.anchor, point.parent, point.relative, point.x + dx, point.y + dy)
|
Nenue@72
|
71 end
|
Nenue@72
|
72 end
|
Nenue@72
|
73 end
|
Nenue@72
|
74
|
Nenue@72
|
75 local Veneer_FixMovers = function()
|
Nenue@72
|
76 for frame, veneer in pairs(veneers) do
|
Nenue@72
|
77 if veneer:IsMoving() then
|
Nenue@72
|
78 VeneerButton_OnDragStop(veneer)
|
Nenue@72
|
79 end
|
Nenue@72
|
80 end
|
Nenue@72
|
81 end
|
Nenue@71
|
82
|
Nenue@71
|
83 local VeneerButton_Update = function(self)
|
Nenue@71
|
84 if configMode then
|
Nenue@72
|
85 self:SetScript('OnDragStart', VeneerButton_OnDragStart)
|
Nenue@72
|
86 self:SetScript('OnDragStop', VeneerButton_OnDragStop)
|
Nenue@72
|
87 self:SetMovable(true)
|
Nenue@72
|
88 self:EnableMouse(true)
|
Nenue@71
|
89 self:RegisterForDrag('LeftButton')
|
Nenue@71
|
90
|
Nenue@71
|
91 self.bg:SetColorTexture(0,1,0,0.5)
|
Nenue@72
|
92 for i, region in ipairs(self.configLayers) do
|
Nenue@72
|
93 region:Show()
|
Nenue@72
|
94 end
|
Nenue@72
|
95 self:Show()
|
Nenue@71
|
96 else
|
Nenue@71
|
97
|
Nenue@71
|
98 self:SetScript('OnDragStart', self.StartMoving)
|
Nenue@71
|
99 self:SetScript('OnDragStop', self.StopMovingOrSizing)
|
Nenue@71
|
100 self:SetMovable(false)
|
Nenue@71
|
101 self:EnableMouse(false)
|
Nenue@71
|
102
|
Nenue@71
|
103 self.bg:SetColorTexture(0,1,0,0)
|
Nenue@72
|
104 for i, region in ipairs(self.configLayers) do
|
Nenue@72
|
105 region:Hide()
|
Nenue@72
|
106 end
|
Nenue@72
|
107 if self.isHidden then
|
Nenue@72
|
108 self:Hide()
|
Nenue@72
|
109 end
|
Nenue@72
|
110
|
Nenue@71
|
111 end
|
Nenue@71
|
112 end
|
Nenue@71
|
113
|
Nenue@71
|
114 local ToggleVeneerConfig = function()
|
Nenue@71
|
115 if configMode then
|
Nenue@71
|
116 configMode = false
|
Nenue@71
|
117 vn:print('Config mode off.')
|
Nenue@71
|
118 else
|
Nenue@71
|
119 configMode = true
|
Nenue@71
|
120 vn:print('Config mode on.')
|
Nenue@71
|
121 end
|
Nenue@71
|
122
|
Nenue@71
|
123 for frame, veneer in pairs(veneers) do
|
Nenue@71
|
124 VeneerButton_Update(veneer)
|
Nenue@71
|
125 end
|
Nenue@71
|
126 end
|
Nenue@71
|
127
|
Nenue@71
|
128 local VeneerButton_OnShow = function(self)
|
Nenue@71
|
129 VeneerButton_Update(self)
|
Nenue@71
|
130 end
|
Nenue@71
|
131
|
Nenue@71
|
132 vn.GetVeneer = function(frame)
|
Nenue@71
|
133 if not frame then
|
Nenue@71
|
134 print('|cFFFF4400Unable to acquire frame...|r')
|
Nenue@71
|
135 return
|
Nenue@71
|
136 end
|
Nenue@71
|
137
|
Nenue@71
|
138
|
Nenue@71
|
139 if veneers[frame] then
|
Nenue@71
|
140 return veneers[frame]
|
Nenue@71
|
141 end
|
Nenue@71
|
142
|
Nenue@72
|
143 local name = (frame:GetName() or AnonymousName())..'Veneer'
|
Nenue@72
|
144 local veneer = CreateFrame('Frame', name, frame, 'VeneerTemplate')
|
Nenue@72
|
145 print('+veneer', name)
|
Nenue@71
|
146
|
Nenue@71
|
147 veneer:SetAllPoints(frame)
|
Nenue@71
|
148 veneer:SetParent(frame)
|
Nenue@72
|
149 veneer.label:SetText(name)
|
Nenue@71
|
150 veneer.bg:SetColorTexture(1,1,1,0)
|
Nenue@71
|
151 veneer:Hide()
|
Nenue@71
|
152 veneer:EnableMouse(false)
|
Nenue@71
|
153
|
Nenue@71
|
154 veneer:SetScript('OnShow', VeneerButton_OnShow)
|
Nenue@71
|
155
|
Nenue@71
|
156 -- find current X/Y
|
Nenue@71
|
157 veneer.currentLeft = frame:GetLeft()
|
Nenue@71
|
158 veneer.currentTop = frame:GetTop()
|
Nenue@71
|
159
|
Nenue@72
|
160
|
Nenue@71
|
161 veneers[frame] = veneer
|
Nenue@71
|
162 return veneers[frame]
|
Nenue@71
|
163 end
|
Nenue@0
|
164
|
Nenue@59
|
165 vn.init = function()
|
Nenue@59
|
166 if (not VeneerData) or (not VeneerData.version) then
|
Nenue@59
|
167 VeneerData = defaults
|
Nenue@0
|
168 end
|
Nenue@59
|
169 vn.db = VeneerData
|
Nenue@71
|
170 end
|
Nenue@62
|
171
|
Nenue@71
|
172
|
Nenue@71
|
173 vn.wrap = function(module)
|
Nenue@71
|
174 vn.modules = vn.modules or {}
|
Nenue@71
|
175 tinsert(vn.modules, module)
|
Nenue@71
|
176 end
|
Nenue@71
|
177
|
Nenue@71
|
178 SLASH_VENEER1 = "/veneer"
|
Nenue@71
|
179 SLASH_VENEER2 = "/vn"
|
Nenue@71
|
180
|
Nenue@71
|
181 SlashCmdList.VENEER = function()
|
Nenue@71
|
182 ToggleVeneerConfig()
|
Nenue@59
|
183 end |