Nenue@90
|
1 -- Veneer
|
Nenue@90
|
2 -- Templates.lua
|
Nenue@90
|
3 -- Created: 10/24/2016 9:16 AM
|
Nenue@90
|
4 -- %file-revision%
|
Nenue@90
|
5 --
|
Nenue@90
|
6 -- Mover Widget base
|
Nick@109
|
7 local ADDON, Veneer = ...
|
Nenue@115
|
8 local print = DEVIAN_WORKSPACE and function(...) _G.print('Veneer', ...) end or nop
|
Nick@109
|
9 local PlaySoundKitID = DEVIAN_WORKSPACE and PlaySoundKitID or nop
|
Nick@109
|
10 local ipairs, pairs = ipairs, pairs
|
Nick@109
|
11 local pack, unpack = pack, unpack
|
Nenue@90
|
12
|
Nick@109
|
13 local Handler, ConfigLayer, Animation = {}, {}, {}
|
Nenue@90
|
14
|
Nick@109
|
15 VeneerConfigLayerMixin = ConfigLayer
|
Nick@109
|
16 VeneerAnimationMixin = Animation
|
Nick@109
|
17 VeneerHandlerMixin = Handler
|
Nick@109
|
18 Handler.anchorPoint = 'CENTER'
|
Nick@109
|
19 Handler.anchorPriority = 4
|
Nick@109
|
20 Handler.data = {}
|
Nick@109
|
21 Veneer.HandlerBase = Handler
|
Nick@109
|
22 Veneer.ConfigLayerBase = ConfigLayer
|
Nick@109
|
23 Veneer.AnimationBase = Animation
|
Nick@109
|
24
|
Nenue@121
|
25 local ANCHOR_BUTTON_TYPES = {
|
Nenue@121
|
26 'TOPLEFT', 'TOP', 'TOPRIGHT', 'RIGHT', 'LEFT', 'CENTER', 'BOTTOMLEFT', 'BOTTOM', 'BOTTOMRIGHT'
|
Nenue@121
|
27 }
|
Nick@109
|
28
|
Nick@109
|
29 function ConfigLayer:OnLoad()
|
Nenue@90
|
30 local handler = self:GetParent()
|
Nenue@90
|
31 print(handler:GetName(), 'configLayers')
|
Nenue@90
|
32 handler.ConfigLayers = handler.ConfigLayers or {}
|
Nenue@90
|
33 for i, region in ipairs(handler.ConfigLayers) do
|
Nenue@90
|
34 region:SetShown(Veneer.ConfigMode)
|
Nenue@90
|
35 end
|
Nenue@121
|
36 self.handler = handler
|
Nenue@121
|
37 end
|
Nenue@121
|
38
|
Nenue@121
|
39 function ConfigLayer:OnShow()
|
Nenue@121
|
40 self:Update()
|
Nenue@121
|
41 end
|
Nenue@121
|
42
|
Nenue@122
|
43 local AnchorButton_OnClick = function(self)
|
Nenue@122
|
44
|
Nenue@122
|
45 local module = self:GetParent().handler
|
Nenue@122
|
46 module.anchorPoint = self.anchorPoint
|
Nenue@122
|
47 module:Print('Anchor set to '.. self.anchorPoint)
|
Nenue@122
|
48 self:GetParent():Update()
|
Nenue@122
|
49 end
|
Nenue@122
|
50
|
Nenue@122
|
51 local RelativeButton_OnClick = function(self)
|
Nenue@122
|
52 end
|
Nenue@122
|
53
|
Nenue@122
|
54 local RelativeButton_OnDragStart = function(self) end
|
Nenue@122
|
55 local RelativeButton_OnDragStop = function(self) end
|
Nenue@122
|
56
|
Nenue@122
|
57
|
Nenue@121
|
58 function ConfigLayer:Update()
|
Nenue@121
|
59 if not self.anchorButtons then
|
Nenue@121
|
60 self.anchorButtons = {}
|
Nenue@121
|
61 for _, anchorPoint in ipairs(ANCHOR_BUTTON_TYPES) do
|
Nenue@121
|
62 local button = CreateFrame('Button', nil, self, 'VeneerAnchorButtonTemplate')
|
Nenue@121
|
63 button.anchorPoint = anchorPoint
|
Nenue@122
|
64 button:RegisterForClicks('AnyUp')
|
Nenue@122
|
65 button:SetScript('OnClick', AnchorButton_OnClick)
|
Nenue@121
|
66 button:SetPoint(anchorPoint)
|
Nenue@121
|
67 button:SetSize(16,16)
|
Nenue@121
|
68
|
Nenue@121
|
69 self.anchorButtons[anchorPoint] = button
|
Nenue@121
|
70 end
|
Nenue@121
|
71 end
|
Nenue@121
|
72
|
Nenue@121
|
73 for anchorPoint, button in pairs(self.anchorButtons) do
|
Nenue@121
|
74 if anchorPoint == self.handler.anchorPoint then
|
Nenue@121
|
75 button:GetNormalTexture():SetColorTexture(0,1,0,1)
|
Nenue@121
|
76 else
|
Nenue@121
|
77 button:GetNormalTexture():SetColorTexture(0.5,0.5,0.5,1)
|
Nenue@121
|
78 end
|
Nenue@121
|
79 end
|
Nenue@121
|
80
|
Nenue@122
|
81 if self.handler.anchorFrom and self.handler.anchorFrame then
|
Nenue@122
|
82 local rb = self.relativeButton
|
Nenue@122
|
83 if not rb then
|
Nenue@122
|
84 rb = CreateFrame('Button', nil, self, 'VeneerAnchorButtonTemplate')
|
Nenue@122
|
85 self.relativeButton = rb
|
Nenue@122
|
86 rb:RegisterForClicks('AnyUp')
|
Nenue@122
|
87 rb:RegisterForDrag('AnyDown')
|
Nenue@122
|
88 rb:SetScript('OnClick', RelativeButton_OnClick)
|
Nenue@122
|
89 rb:SetScript('OnDragStart', RelativeButton_OnDragStart)
|
Nenue@122
|
90 rb:SetScript('OnDragStop', RelativeButton_OnDragStop)
|
Nenue@122
|
91 end
|
Nenue@122
|
92
|
Nenue@122
|
93 print('|cFF00FF88Config|r',self.handler.anchorFrom, self.handler.anchorFrame)
|
Nenue@122
|
94 rb:SetPoint(self.handler.anchorFrom, _G[self.handler.anchorFrame], self.handler.anchorFrom, 0, 0)
|
Nenue@122
|
95 print(rb:GetPoint(1))
|
Nenue@122
|
96 rb:GetNormalTexture():SetColorTexture(1,1,1,1)
|
Nenue@122
|
97 rb:SetSize(16,16)
|
Nenue@122
|
98 end
|
Nenue@122
|
99
|
Nenue@122
|
100
|
Nenue@121
|
101 self:RegisterForDrag('LeftButton')
|
Nenue@121
|
102 end
|
Nenue@121
|
103
|
Nenue@122
|
104
|
Nenue@122
|
105
|
Nenue@121
|
106 function ConfigLayer:OnDragStart()
|
Nenue@122
|
107 self.originalX, self.originalY = self:GetCenter()
|
Nenue@122
|
108 self.handler:SetMovable(true)
|
Nenue@122
|
109 self.handler:StartMoving()
|
Nenue@121
|
110 end
|
Nenue@121
|
111 function ConfigLayer:OnDragStop()
|
Nenue@115
|
112
|
Nenue@122
|
113 local newX, newY = self:GetCenter()
|
Nenue@122
|
114 local dX = newX - self.originalX
|
Nenue@122
|
115 local dY = newY - self.originalY
|
Nenue@122
|
116 print('registering new X/Y:', dX, dY)
|
Nenue@122
|
117
|
Nenue@122
|
118
|
Nenue@122
|
119 self.handler:StopMovingOrSizing()
|
Nenue@90
|
120 end
|
Nenue@90
|
121
|
Nick@109
|
122 function ConfigLayer:OnUpdate()
|
Nenue@90
|
123 local handler = self:GetParent()
|
Nenue@90
|
124 handler.ConfigLayers = handler.ConfigLayers or {}
|
Nenue@90
|
125
|
Nenue@90
|
126 self.ConfigName:SetText(handler:GetName())
|
Nenue@90
|
127 self.ConfigID:SetText(handler:GetID())
|
Nenue@90
|
128 end
|
Nenue@90
|
129
|
Nick@109
|
130 -- Sets a state flag for use in OnUpdate conditionals
|
Nick@109
|
131 function Animation:OnPlay()
|
Nenue@90
|
132 PlaySoundKitID(229)
|
Nenue@90
|
133 self.animating = true
|
Nenue@90
|
134 print('|cFF00FF00Anim:OnPlay|r @', unpack(self.sourcePoint))
|
Nenue@90
|
135 end
|
Nick@109
|
136 function Animation:OnStop()
|
Nenue@90
|
137 PlaySoundKitID(229)
|
Nenue@90
|
138 self.animating = nil
|
Nenue@90
|
139 print('|cFF00FF00Anim:OnFinish|r @', unpack(self.destPoint))
|
Nenue@90
|
140 end
|
Nick@109
|
141 function Animation:OnFinished()
|
Nenue@90
|
142 PlaySoundKitID(229)
|
Nenue@90
|
143 self.animating = nil
|
Nenue@90
|
144 print('|cFF00FF00Anim:OnFinish|r @', unpack(self.destPoint))
|
Nenue@93
|
145 end
|
Nenue@93
|
146
|
Nick@109
|
147 -- Replace if module requires anything besides fixing frame anchors
|
Nick@109
|
148 function Handler:OnShow()
|
Nenue@93
|
149 self:Reanchor()
|
Nenue@122
|
150 _G.Veneer:StaticReanchor(self)
|
Nenue@93
|
151 end
|
Nick@109
|
152 function Handler:OnHide()
|
Nenue@122
|
153 _G.Veneer:DynamicReanchor()
|
Nenue@93
|
154 end
|
Nick@109
|
155 function Handler:Reanchor (anchorAll)
|
Nenue@122
|
156 _G.Veneer:DynamicReanchor()
|
Nenue@98
|
157 end
|
Nick@109
|
158
|
Nick@109
|
159 -- Replace if module needs to do more than reconcile SavedVariables pointers
|
Nick@109
|
160 function Handler:Setup()
|
Nenue@115
|
161 print(self:GetName(), '|cFF00FF88Setup()')
|
Nenue@102
|
162 local configName = self:GetName():gsub('^Veneer', '')
|
Nenue@107
|
163 VeneerData[configName] = VeneerData[configName] or self.defaultSettings or {}
|
Nenue@102
|
164
|
Nenue@102
|
165 for k,v in pairs(self.data) do
|
Nenue@102
|
166 if not VeneerData[configName][k] then
|
Nenue@102
|
167 print('reconciling pre-data:', k, v)
|
Nenue@102
|
168 VeneerData[configName][k] = v
|
Nenue@102
|
169 end
|
Nenue@102
|
170 end
|
Nenue@115
|
171
|
Nenue@115
|
172 if self.EventList then
|
Nenue@115
|
173 for _, event in ipairs(self.EventList) do
|
Nenue@115
|
174 print(self:GetName(), event, 'registered')
|
Nenue@115
|
175 self:RegisterEvent(event)
|
Nenue@115
|
176 end
|
Nenue@115
|
177 end
|
Nenue@115
|
178
|
Nenue@107
|
179 local guid = UnitGUID('player')
|
Nenue@102
|
180 self.data = VeneerData[configName]
|
Nenue@107
|
181 self.data[guid] = self.data[guid] or {}
|
Nenue@107
|
182 self.profile = self.data[guid]
|
Nenue@102
|
183 print('data table loaded:', configName)
|
Nenue@102
|
184 self.initialized = true
|
Nenue@102
|
185 end
|
Nenue@98
|
186
|
Nick@109
|
187 -- Replace to stop collated outputs.
|
Nick@109
|
188 function Handler:Print(...)
|
Nenue@98
|
189 local txt = '|cFFFFFF00'..self:GetName()..'|r:'
|
Nenue@98
|
190 for i = 1, select('#', ...) do
|
Nenue@98
|
191 txt = txt .. ' '.. tostring(select(i, ...))
|
Nenue@98
|
192 end
|
Nenue@98
|
193 DEFAULT_CHAT_FRAME:AddMessage(txt)
|
Nenue@103
|
194 end
|
Nenue@103
|
195
|
Nick@109
|
196 -- Replace if not using the ConfigLayer template
|
Nick@109
|
197 function Handler:UpdateConfigLayers (configMode)
|
Nenue@103
|
198 -- Override to manage config visual elements when a config update is fired from /vn or login
|
Nenue@103
|
199 if not self:IsShown() then
|
Nenue@103
|
200 self:SetShown(configMode)
|
Nenue@103
|
201 self:Reanchor()
|
Nenue@103
|
202 end
|
Nenue@103
|
203 self.configMode = configMode
|
Nenue@90
|
204 end |