Nenue@98
|
1 -- Mixin for console
|
Nenue@98
|
2 local _, D = ...
|
Nenue@98
|
3 DevianConsoleMixin = {}
|
Nenue@98
|
4
|
Nenue@99
|
5 local print = function(...) print('Dvn', ...) end
|
Nenue@99
|
6 function D.IterateChannels(callback, sender)
|
Nenue@99
|
7 for index, channel in ipairs(D.console) do
|
Nenue@99
|
8 if channel ~= sender then
|
Nenue@99
|
9 callback(channel)
|
Nenue@99
|
10 end
|
Nenue@99
|
11 end
|
Nenue@99
|
12 end
|
Nenue@99
|
13
|
Nenue@98
|
14 function DevianConsoleMixin:OnLoad()
|
Nenue@98
|
15 self:SetMaxResize(GetScreenWidth(), GetScreenHeight())
|
Nenue@98
|
16 self:SetMinResize(100, 24)
|
Nenue@98
|
17 self:EnableMouse(true)
|
Nenue@98
|
18 self:RegisterForDrag('LeftButton')
|
Nenue@98
|
19 self:SetMovable(true)
|
Nenue@98
|
20 self:SetResizable(true)
|
Nenue@99
|
21 self:SetClampedToScreen(true)
|
Nenue@98
|
22 self.out:SetFont("Interface\\Addons\\Devian\\font\\SourceCodePro-Regular.ttf", 13, 'NORMAL')
|
Nenue@98
|
23 self.out:SetJustifyH('LEFT')
|
Nenue@98
|
24 self.out:SetFading(false)
|
Nenue@99
|
25 self.out:SetMaxLines(2048)
|
Nenue@99
|
26
|
Nenue@99
|
27 self:RegisterEvent('PLAYER_STARTED_MOVING')
|
Nenue@99
|
28 self:RegisterEvent('PLAYER_STOPPED_MOVING')
|
Nenue@99
|
29
|
Nenue@99
|
30 UIDropDownMenu_Initialize(self.DropdownFrame, function()
|
Nenue@99
|
31 local info = UIDropDownMenu_CreateInfo()
|
Nenue@99
|
32 info.text = 'Pin'
|
Nenue@99
|
33 info.func = function() self:Pin() end
|
Nenue@100
|
34 info.isNotRadio = true
|
Nenue@100
|
35 info.checked = (self.pinned)
|
Nenue@99
|
36 UIDropDownMenu_AddButton(info)
|
Nenue@100
|
37
|
Nenue@100
|
38 info.notCheckable = 1
|
Nenue@99
|
39 if self.minimized then
|
Nenue@99
|
40 info.text = 'Maximize'
|
Nenue@99
|
41 info.func = function() self:Maximize() end
|
Nenue@99
|
42 else
|
Nenue@99
|
43 info.text = 'Minimize'
|
Nenue@99
|
44 info.func = function() self:Minimize() end
|
Nenue@99
|
45 end
|
Nenue@99
|
46 UIDropDownMenu_AddButton(info)
|
Nenue@99
|
47 info.text = 'Close'
|
Nenue@99
|
48 info.func = function() self:Toggle() end
|
Nenue@99
|
49 UIDropDownMenu_AddButton(info)
|
Nenue@99
|
50
|
Nenue@99
|
51 end, 'MENU')
|
Nenue@99
|
52 self.DropdownButton:SetScript('OnClick', function(button)
|
Nenue@99
|
53 ToggleDropDownMenu(1, nil, self.DropdownFrame, button, 0, 0)
|
Nenue@99
|
54 end)
|
Nenue@98
|
55
|
Nenue@98
|
56 self.width = self:GetWidth()
|
Nenue@98
|
57 self.height = self:GetWidth()
|
Nenue@100
|
58 self.isHover = false
|
Nenue@98
|
59 end
|
Nenue@98
|
60
|
Nenue@98
|
61 function DevianConsoleMixin:Setup(info)
|
Nenue@98
|
62 for k,v in pairs(info) do
|
Nenue@98
|
63 self[k] = v
|
Nenue@98
|
64 --oldprint(k,v)
|
Nenue@98
|
65 end
|
Nenue@98
|
66 self.Dock = DevianDock:GetDockButton(self)
|
Nenue@98
|
67 self:Update()
|
Nenue@98
|
68 end
|
Nenue@98
|
69
|
Nenue@99
|
70 local blockedType = {['table'] = true, ['function'] = true }
|
Nenue@99
|
71 local blockedKey = {[0] = true }
|
Nenue@99
|
72
|
Nenue@99
|
73 -- Synchronize vars
|
Nenue@99
|
74 function DevianConsoleMixin:Finalize()
|
Nenue@99
|
75 local id = self:GetID()
|
Nenue@99
|
76 for k,v in pairs(D.channels[id]) do
|
Nenue@99
|
77 if not self[k] then
|
Nenue@99
|
78 D.channels[id][k] = nil
|
Nenue@99
|
79 end
|
Nenue@99
|
80 end
|
Nenue@99
|
81 for k,v in pairs(self) do
|
Nenue@99
|
82 if not (blockedType[type(v)] or blockedKey[k]) then
|
Nenue@99
|
83 if D.channels[id][k] ~= v then
|
Nenue@99
|
84 D.channels[id][k] = v
|
Nenue@99
|
85 end
|
Nenue@99
|
86 end
|
Nenue@99
|
87 end
|
Nenue@100
|
88 D.channels[id].isPressed = nil
|
Nenue@100
|
89 D.channels[id].isHover = nil
|
Nenue@99
|
90 end
|
Nenue@99
|
91
|
Nenue@99
|
92 function DevianConsoleMixin:Pin(pinned)
|
Nenue@99
|
93 self.pinned = pinned or (not self.pinned)
|
Nenue@99
|
94 self:Update(true)
|
Nenue@99
|
95 end
|
Nenue@99
|
96
|
Nenue@99
|
97 function DevianConsoleMixin:Update(setFinal)
|
Nenue@98
|
98 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', self.x, self.y)
|
Nenue@99
|
99
|
Nenue@99
|
100 if self.minimized then
|
Nenue@99
|
101 self:SetHeight(20)
|
Nenue@99
|
102 self:SetMaxResize(GetScreenWidth(),20)
|
Nenue@99
|
103 self.GripBottom:Hide()
|
Nenue@99
|
104 self.GripSide:Hide()
|
Nenue@99
|
105 else
|
Nenue@99
|
106 self:SetSize(self.width, self.height)
|
Nenue@99
|
107 self.GripBottom:Show()
|
Nenue@99
|
108 self.GripSide:Show()
|
Nenue@99
|
109 end
|
Nenue@99
|
110
|
Nenue@99
|
111
|
Nenue@98
|
112 -- oldprint(self:GetName(), self.x, self.y)
|
Nenue@98
|
113
|
Nenue@100
|
114 local isFront = (D.currentProfile.current_channel == self.index)
|
Nenue@98
|
115 local r,g,b,a = unpack(D.db.backborder)
|
Nenue@98
|
116 if isFront then
|
Nenue@98
|
117 r,g,b,a = unpack(D.db.frontborder)
|
Nenue@98
|
118 self.backdrop:SetColorTexture(0,0,0,1)
|
Nenue@100
|
119 elseif self.pinned then
|
Nenue@100
|
120 self.backdrop:SetColorTexture(0,0,0,1)
|
Nenue@100
|
121 r,g,b,a = unpack(D.db.backborder)
|
Nenue@100
|
122 self.DropdownButton.Background:SetGradient('VERTICAL', .65,.35,.25, .15, .11, .05)
|
Nenue@98
|
123 else
|
Nenue@100
|
124 self.DropdownButton.Background:SetGradient('VERTICAL', .25,.35,.65, .05, .11, .15)
|
Nenue@100
|
125 self.backdrop:SetColorTexture(0,0,0,1)
|
Nenue@100
|
126 if self.raised then
|
Nenue@100
|
127 self.raised = nil
|
Nenue@100
|
128 self:Lower()
|
Nenue@100
|
129 end
|
Nenue@100
|
130 end
|
Nenue@100
|
131 if self.isPressed then
|
Nenue@100
|
132 r,g,b,a = 1,1,1,1
|
Nenue@100
|
133 elseif self.isHover then
|
Nenue@100
|
134 r,g,b,a = .5,.5,.5,1
|
Nenue@100
|
135 end
|
Nenue@98
|
136
|
Nenue@100
|
137
|
Nenue@98
|
138 for name, region in pairs(self.border) do
|
Nenue@98
|
139 region:SetColorTexture(r,g,b,a)
|
Nenue@98
|
140 end
|
Nenue@100
|
141 self.title:SetText(self.index..' '.. (self.signature or '?') .. (' '..self:GetFrameLevel()))
|
Nenue@98
|
142
|
Nenue@98
|
143 --oldprint(self:GetID(), self.enabled, self.minimized, self.x, self.y)
|
Nenue@98
|
144 self.isFront = isFront
|
Nenue@98
|
145 self:SetShown(self.enabled)
|
Nenue@99
|
146 self.backdrop:SetShown(self.enabled)
|
Nenue@99
|
147 self.out:SetShown((not self.minimized))
|
Nenue@99
|
148
|
Nenue@99
|
149
|
Nenue@99
|
150 if setFinal then
|
Nenue@99
|
151 self:Finalize()
|
Nenue@99
|
152 end
|
Nenue@99
|
153
|
Nenue@98
|
154 end
|
Nenue@98
|
155
|
Nenue@98
|
156
|
Nenue@99
|
157
|
Nenue@98
|
158 function DevianConsoleMixin:OnShow()
|
Nenue@98
|
159 self:Update()
|
Nenue@98
|
160 end
|
Nenue@98
|
161
|
Nenue@98
|
162
|
Nenue@98
|
163
|
Nenue@102
|
164 function DevianConsoleMixin:OnHide()
|
Nenue@102
|
165 end
|
Nenue@98
|
166
|
Nenue@98
|
167 function DevianConsoleMixin:OnMouseWheel(delta)
|
Nenue@98
|
168
|
Nenue@98
|
169 local up = delta > 0
|
Nenue@98
|
170 if IsControlKeyDown() then
|
Nenue@98
|
171 if up then self.out:ScrollToTop()
|
Nenue@98
|
172 else self.out:ScrollToBottom() end
|
Nenue@98
|
173 elseif IsShiftKeyDown() then
|
Nenue@98
|
174 if up then self.out:PageUp()
|
Nenue@98
|
175 else self.out:PageDown() end
|
Nenue@98
|
176 else
|
Nenue@98
|
177 if up then self.out:ScrollUp()
|
Nenue@98
|
178 else self.out:ScrollDown() end
|
Nenue@98
|
179 end
|
Nenue@98
|
180 end
|
Nenue@98
|
181 function DevianConsoleMixin:MinMax(minimized)
|
Nenue@98
|
182 minimized = minimized or self.minimized
|
Nenue@98
|
183 if minimized then
|
Nenue@98
|
184 self:Maximize()
|
Nenue@98
|
185 else
|
Nenue@98
|
186 self:Minimize()
|
Nenue@98
|
187 end
|
Nenue@98
|
188 end
|
Nenue@98
|
189
|
Nenue@98
|
190 function DevianConsoleMixin:Minimize()
|
Nenue@98
|
191 self.minimized = true
|
Nenue@99
|
192 self:Update(true)
|
Nenue@98
|
193 end
|
Nenue@98
|
194
|
Nenue@98
|
195 function DevianConsoleMixin:Maximize()
|
Nenue@99
|
196 self.minimized = nilnil
|
Nenue@99
|
197 self:Update(true)
|
Nenue@98
|
198 end
|
Nenue@98
|
199
|
Nenue@99
|
200 function DevianConsoleMixin:OnMouseDown(button)
|
Nenue@100
|
201 self.isPressed = true
|
Nenue@100
|
202 self:Update()
|
Nenue@99
|
203 end
|
Nenue@99
|
204
|
Nenue@99
|
205
|
Nenue@98
|
206 function DevianConsoleMixin:OnMouseUp(button)
|
Nenue@100
|
207 self.isPressed = nil
|
Nenue@98
|
208 if button == 'LeftButton' then
|
Nenue@100
|
209 --print('go to front')
|
Nenue@98
|
210 self:ToFront()
|
Nenue@98
|
211 else
|
Nenue@98
|
212 self:MinMax()
|
Nenue@98
|
213 end
|
Nenue@98
|
214 end
|
Nenue@98
|
215
|
Nenue@98
|
216 function DevianConsoleMixin:OnLeave()
|
Nenue@100
|
217 self.isHover = nil
|
Nenue@100
|
218 self:Update()
|
Nenue@98
|
219 end
|
Nenue@98
|
220
|
Nenue@98
|
221 function DevianConsoleMixin:OnEnter()
|
Nenue@100
|
222 self.isHover = true
|
Nenue@100
|
223 self:Update()
|
Nenue@98
|
224 end
|
Nenue@98
|
225
|
Nenue@98
|
226 function DevianConsoleMixin:OnDragStart()
|
Nenue@99
|
227 self:ToFront()
|
Nenue@99
|
228 self:StartMoving()
|
Nenue@99
|
229 D.IterateChannels(function(frame)
|
Nenue@99
|
230 frame.out:SetShown(false)
|
Nenue@99
|
231 frame.backdrop:Hide()
|
Nenue@99
|
232 end, self)
|
Nenue@98
|
233 end
|
Nenue@98
|
234
|
Nenue@98
|
235 function DevianConsoleMixin:OnDragStop()
|
Nenue@99
|
236
|
Nenue@99
|
237 local channelEntry = D.channels[self:GetID()]
|
Nenue@98
|
238 self.x = self:GetLeft()
|
Nenue@98
|
239 self.y = self:GetTop() - GetScreenHeight()
|
Nenue@99
|
240 if not self.minimized then
|
Nenue@99
|
241 self.width = self:GetWidth()
|
Nenue@99
|
242 self.height = self:GetHeight()
|
Nenue@99
|
243 end
|
Nenue@99
|
244
|
Nenue@99
|
245 --print(channelEntry.x, channelEntry.y, channelEntry.width, channelEntry.height)
|
Nenue@98
|
246 self:StopMovingOrSizing()
|
Nenue@99
|
247 self:SetClampRectInsets(0,0,0,0)
|
Nenue@98
|
248
|
Nenue@99
|
249 self:Update(true)
|
Nenue@99
|
250
|
Nenue@99
|
251 D.IterateChannels(function(frame)
|
Nenue@100
|
252 frame:Update(true)
|
Nenue@99
|
253 end, self)
|
Nenue@98
|
254 end
|
Nenue@98
|
255
|
Nenue@98
|
256 function DevianConsoleMixin:ToFront()
|
Nenue@100
|
257 D.currentProfile.current_channel = self.index
|
Nenue@100
|
258
|
Nenue@98
|
259 self:Raise()
|
Nenue@98
|
260 for index, channel in ipairs(D.console) do
|
Nenue@100
|
261 channel:Update(true)
|
Nenue@98
|
262 end
|
Nenue@98
|
263 end
|
Nenue@98
|
264
|
Nenue@100
|
265 function DevianConsoleMixin:Toggle(value)
|
Nenue@100
|
266 if value == nil then
|
Nenue@100
|
267 value = (not self.enabled)
|
Nenue@100
|
268 end
|
Nenue@100
|
269
|
Nenue@100
|
270 self.enabled = value
|
Nenue@100
|
271 D:Print('Console #'..self:GetID(), self.enabled and 'open' or 'closed')
|
Nenue@100
|
272
|
Nenue@100
|
273 self:Update(true)
|
Nenue@99
|
274 end
|
Nenue@99
|
275
|
Nenue@102
|
276
|
Nenue@102
|
277
|
Nenue@99
|
278 function DevianConsoleMixin:OnEvent(event, arg)
|
Nenue@100
|
279 --oldprint(event, arg)
|
Nenue@99
|
280 local db = D.db
|
Nenue@99
|
281 if self.enabled then
|
Nenue@99
|
282 if event == 'PLAYER_STARTED_MOVING' then
|
Nenue@100
|
283 local F1 = self.moveFade.alphaOut
|
Nenue@102
|
284 self:SetAlpha(db.movement_fade_to)
|
Nenue@100
|
285 self:EnableMouse(false)
|
Nenue@100
|
286 elseif event == 'PLAYER_STOPPED_MOVING' then
|
Nenue@102
|
287 self:SetAlpha(db.movement_fade_from)
|
Nenue@99
|
288 self:EnableMouse(true)
|
Nenue@99
|
289 end
|
Nenue@99
|
290 end
|
Nenue@99
|
291 end
|
Nenue@99
|
292
|
Nenue@99
|
293 DevianConsoleSizeButtonMixin = {}
|
Nenue@99
|
294 function DevianConsoleSizeButtonMixin:OnLoad()
|
Nenue@99
|
295 self:RegisterForDrag('LeftButton')
|
Nenue@99
|
296 end
|
Nenue@99
|
297 function DevianConsoleSizeButtonMixin:OnDragStart()
|
Nenue@99
|
298 local anchor = self:GetPoint(2)
|
Nenue@99
|
299 local frame = self:GetParent()
|
Nenue@99
|
300 if anchor == 'BOTTOMLEFT' then
|
Nenue@99
|
301 frame:SetClampRectInsets(frame:GetLeft(), GetScreenWidth()- frame:GetRight(), GetScreenHeight() - frame:GetTop(), 0)
|
Nenue@99
|
302 frame:SetMinResize(frame.width, 24)
|
Nenue@99
|
303 frame:SetMaxResize(frame.width, GetScreenHeight())
|
Nenue@99
|
304 elseif anchor == 'BOTTOM' then
|
Nenue@99
|
305 frame:SetClampRectInsets(frame:GetLeft(), 0, GetScreenHeight() - frame:GetTop(), GetScreenHeight() - frame:GetBottom())
|
Nenue@99
|
306 frame:SetMinResize(200, frame.height)
|
Nenue@99
|
307 frame:SetMaxResize(GetScreenWidth(), frame.height)
|
Nenue@99
|
308 end
|
Nenue@99
|
309 frame:StartSizing()
|
Nenue@99
|
310 end
|
Nenue@100
|
311
|
Nenue@99
|
312 function DevianConsoleSizeButtonMixin:OnDragStop()
|
Nenue@99
|
313 local frame = self:GetParent()
|
Nenue@99
|
314 frame:OnDragStop()
|
Nenue@99
|
315 end
|