comparison Console.lua @ 100:790dca545f1d v3.0

- Configuration structure overheal; clearing 'Devian.lua' from SaveVariables will be necessary - Removed dependence on embedded libraries. - Console/dock frames are now implemented as XML mixin structures - Console dropdown menu option to 'Pin' frames - Hold SHIFT while clicking dock buttons will cause all but that tab to be closed
author Nenue
date Tue, 17 Jan 2017 14:25:18 -0500
parents 7d94df3804a7
children c3e7d2a3f4e9
comparison
equal deleted inserted replaced
99:7d94df3804a7 100:790dca545f1d
27 self:RegisterEvent('PLAYER_STARTED_MOVING') 27 self:RegisterEvent('PLAYER_STARTED_MOVING')
28 self:RegisterEvent('PLAYER_STOPPED_MOVING') 28 self:RegisterEvent('PLAYER_STOPPED_MOVING')
29 29
30 UIDropDownMenu_Initialize(self.DropdownFrame, function() 30 UIDropDownMenu_Initialize(self.DropdownFrame, function()
31 local info = UIDropDownMenu_CreateInfo() 31 local info = UIDropDownMenu_CreateInfo()
32 info.notCheckable = 1
33 info.text = 'Pin' 32 info.text = 'Pin'
34 info.func = function() self:Pin() end 33 info.func = function() self:Pin() end
34 info.isNotRadio = true
35 info.checked = (self.pinned)
35 UIDropDownMenu_AddButton(info) 36 UIDropDownMenu_AddButton(info)
37
38 info.notCheckable = 1
36 if self.minimized then 39 if self.minimized then
37 info.text = 'Maximize' 40 info.text = 'Maximize'
38 info.func = function() self:Maximize() end 41 info.func = function() self:Maximize() end
39 else 42 else
40 info.text = 'Minimize' 43 info.text = 'Minimize'
50 ToggleDropDownMenu(1, nil, self.DropdownFrame, button, 0, 0) 53 ToggleDropDownMenu(1, nil, self.DropdownFrame, button, 0, 0)
51 end) 54 end)
52 55
53 self.width = self:GetWidth() 56 self.width = self:GetWidth()
54 self.height = self:GetWidth() 57 self.height = self:GetWidth()
58 self.isHover = false
55 end 59 end
56 60
57 function DevianConsoleMixin:Setup(info) 61 function DevianConsoleMixin:Setup(info)
58 for k,v in pairs(info) do 62 for k,v in pairs(info) do
59 self[k] = v 63 self[k] = v
79 if D.channels[id][k] ~= v then 83 if D.channels[id][k] ~= v then
80 D.channels[id][k] = v 84 D.channels[id][k] = v
81 end 85 end
82 end 86 end
83 end 87 end
88 D.channels[id].isPressed = nil
89 D.channels[id].isHover = nil
84 end 90 end
85 91
86 function DevianConsoleMixin:Pin(pinned) 92 function DevianConsoleMixin:Pin(pinned)
87 self.pinned = pinned or (not self.pinned) 93 self.pinned = pinned or (not self.pinned)
88 self:Update(true) 94 self:Update(true)
89 end 95 end
90 96
91 function DevianConsoleMixin:Update(setFinal) 97 function DevianConsoleMixin:Update(setFinal)
92 self.title:SetText(self.index..' '.. (self.signature or '?'))
93 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', self.x, self.y) 98 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', self.x, self.y)
94 99
95 if self.minimized then 100 if self.minimized then
96 self:SetHeight(20) 101 self:SetHeight(20)
97 self:SetMaxResize(GetScreenWidth(),20) 102 self:SetMaxResize(GetScreenWidth(),20)
104 end 109 end
105 110
106 111
107 -- oldprint(self:GetName(), self.x, self.y) 112 -- oldprint(self:GetName(), self.x, self.y)
108 113
109 local isFront = D.currentProfile.current_channel == self.index 114 local isFront = (D.currentProfile.current_channel == self.index)
110 local r,g,b,a = unpack(D.db.backborder) 115 local r,g,b,a = unpack(D.db.backborder)
111 if isFront then 116 if isFront then
112 r,g,b,a = unpack(D.db.frontborder) 117 r,g,b,a = unpack(D.db.frontborder)
113 self.backdrop:SetColorTexture(0,0,0,1) 118 self.backdrop:SetColorTexture(0,0,0,1)
114 else 119 elseif self.pinned then
115 self.backdrop:SetColorTexture(0,0,0,0.5) 120 self.backdrop:SetColorTexture(0,0,0,1)
116 121 r,g,b,a = unpack(D.db.backborder)
117 end 122 self.DropdownButton.Background:SetGradient('VERTICAL', .65,.35,.25, .15, .11, .05)
123 else
124 self.DropdownButton.Background:SetGradient('VERTICAL', .25,.35,.65, .05, .11, .15)
125 self.backdrop:SetColorTexture(0,0,0,1)
126 if self.raised then
127 self.raised = nil
128 self:Lower()
129 end
130 end
131 if self.isPressed then
132 r,g,b,a = 1,1,1,1
133 elseif self.isHover then
134 r,g,b,a = .5,.5,.5,1
135 end
136
137
118 for name, region in pairs(self.border) do 138 for name, region in pairs(self.border) do
119 region:SetColorTexture(r,g,b,a) 139 region:SetColorTexture(r,g,b,a)
120 end 140 end
141 self.title:SetText(self.index..' '.. (self.signature or '?') .. (' '..self:GetFrameLevel()))
121 142
122 --oldprint(self:GetID(), self.enabled, self.minimized, self.x, self.y) 143 --oldprint(self:GetID(), self.enabled, self.minimized, self.x, self.y)
123 self.isFront = isFront 144 self.isFront = isFront
124 self:SetShown(self.enabled) 145 self:SetShown(self.enabled)
125 self.backdrop:SetShown(self.enabled) 146 self.backdrop:SetShown(self.enabled)
174 self.minimized = nilnil 195 self.minimized = nilnil
175 self:Update(true) 196 self:Update(true)
176 end 197 end
177 198
178 function DevianConsoleMixin:OnMouseDown(button) 199 function DevianConsoleMixin:OnMouseDown(button)
179 200 self.isPressed = true
201 self:Update()
202 end
203
204
205 function DevianConsoleMixin:OnMouseUp(button)
206 self.isPressed = nil
180 if button == 'LeftButton' then 207 if button == 'LeftButton' then
208 --print('go to front')
181 self:ToFront() 209 self:ToFront()
182 end
183 end
184
185
186 function DevianConsoleMixin:OnMouseUp(button)
187 if button == 'LeftButton' then
188 self:ToFront()
189 else 210 else
190 self:MinMax() 211 self:MinMax()
191 end 212 end
192 end 213 end
193 214
194 function DevianConsoleMixin:OnLeave() 215 function DevianConsoleMixin:OnLeave()
216 self.isHover = nil
217 self:Update()
195 end 218 end
196 219
197 function DevianConsoleMixin:OnEnter() 220 function DevianConsoleMixin:OnEnter()
221 self.isHover = true
222 self:Update()
198 end 223 end
199 224
200 function DevianConsoleMixin:OnDragStart() 225 function DevianConsoleMixin:OnDragStart()
201 self:ToFront() 226 self:ToFront()
202 self:StartMoving() 227 self:StartMoving()
221 self:SetClampRectInsets(0,0,0,0) 246 self:SetClampRectInsets(0,0,0,0)
222 247
223 self:Update(true) 248 self:Update(true)
224 249
225 D.IterateChannels(function(frame) 250 D.IterateChannels(function(frame)
226 frame:Update() 251 frame:Update(true)
227 end, self) 252 end, self)
228 end 253 end
229 254
230 function DevianConsoleMixin:ToFront() 255 function DevianConsoleMixin:ToFront()
256 D.currentProfile.current_channel = self.index
257
231 self:Raise() 258 self:Raise()
232 D.currentProfile.current_channel = self.index
233 for index, channel in ipairs(D.console) do 259 for index, channel in ipairs(D.console) do
234 channel:Update() 260 channel:Update(true)
235 end 261 end
236 end 262 end
237 263
238 function DevianConsoleMixin:Toggle() 264 function DevianConsoleMixin:Toggle(value)
239 self.enabled = (not self.enabled) 265 if value == nil then
240 --oldprint(self:GetID(), self.enabled) 266 value = (not self.enabled)
241 self:Update() 267 end
268
269 self.enabled = value
270 D:Print('Console #'..self:GetID(), self.enabled and 'open' or 'closed')
271
272 self:Update(true)
242 end 273 end
243 274
244 function DevianConsoleMixin:OnEvent(event, arg) 275 function DevianConsoleMixin:OnEvent(event, arg)
245 oldprint(event, arg) 276 --oldprint(event, arg)
246 local db = D.db 277 local db = D.db
247 if self.enabled then 278 if self.enabled then
279
280 local progress = self.moveFade:GetProgress() or 1
281 self.moveFade:Stop()
282
248 if event == 'PLAYER_STARTED_MOVING' then 283 if event == 'PLAYER_STARTED_MOVING' then
249 self.moveFade:GetProgress() 284 local F1 = self.moveFade.alphaOut
285 F1:SetFromAlpha(db.movement_fade_from + (1-progress))
286 F1:SetToAlpha(db.movement_fade_to)
287 F1:SetDuration(db.movement_fade_time * (1-progress))
288 self.moveFade:Play()
289 self:EnableMouse(false)
290 elseif event == 'PLAYER_STOPPED_MOVING' then
250 self.moveFade:Stop() 291 self.moveFade:Stop()
251 local F1 = self.moveFade.alphaOut 292 local F1 = self.moveFade.alphaOut
252 F1:SetFromAlpha(db.movement_fade_from) 293 F1:SetFromAlpha(db.movement_fade_to + (1-progress))
253 F1:SetToAlpha(db.movement_fade_to)
254 F1:SetDuration(db.movement_fade_time)
255 self.moveFade:Play()
256 self:EnableMouse(false)
257 else
258 self.moveFade:Stop()
259 local F1 = self.moveFade.alphaOut
260 F1:SetToAlpha(db.movement_fade_from) 294 F1:SetToAlpha(db.movement_fade_from)
261 F1:SetFromAlpha(db.movement_fade_to) 295 F1:SetDuration(db.movement_fade_time * (progress))
262 F1:SetDuration(db.movement_fade_time)
263 self.moveFade:Play() 296 self.moveFade:Play()
264 self:EnableMouse(true) 297 self:EnableMouse(true)
265 end 298 end
266 end 299 end
267 end 300 end
282 frame:SetMinResize(200, frame.height) 315 frame:SetMinResize(200, frame.height)
283 frame:SetMaxResize(GetScreenWidth(), frame.height) 316 frame:SetMaxResize(GetScreenWidth(), frame.height)
284 end 317 end
285 frame:StartSizing() 318 frame:StartSizing()
286 end 319 end
320
287 function DevianConsoleSizeButtonMixin:OnDragStop() 321 function DevianConsoleSizeButtonMixin:OnDragStop()
288 local frame = self:GetParent() 322 local frame = self:GetParent()
289 frame:OnDragStop() 323 frame:OnDragStop()
290 end 324 end