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.notCheckable = 1
|
Nenue@99
|
33 info.text = 'Pin'
|
Nenue@99
|
34 info.func = function() self:Pin() end
|
Nenue@99
|
35 UIDropDownMenu_AddButton(info)
|
Nenue@99
|
36 if self.minimized then
|
Nenue@99
|
37 info.text = 'Maximize'
|
Nenue@99
|
38 info.func = function() self:Maximize() end
|
Nenue@99
|
39 else
|
Nenue@99
|
40 info.text = 'Minimize'
|
Nenue@99
|
41 info.func = function() self:Minimize() end
|
Nenue@99
|
42 end
|
Nenue@99
|
43 UIDropDownMenu_AddButton(info)
|
Nenue@99
|
44 info.text = 'Close'
|
Nenue@99
|
45 info.func = function() self:Toggle() end
|
Nenue@99
|
46 UIDropDownMenu_AddButton(info)
|
Nenue@99
|
47
|
Nenue@99
|
48 end, 'MENU')
|
Nenue@99
|
49 self.DropdownButton:SetScript('OnClick', function(button)
|
Nenue@99
|
50 ToggleDropDownMenu(1, nil, self.DropdownFrame, button, 0, 0)
|
Nenue@99
|
51 end)
|
Nenue@98
|
52
|
Nenue@98
|
53 self.width = self:GetWidth()
|
Nenue@98
|
54 self.height = self:GetWidth()
|
Nenue@98
|
55 end
|
Nenue@98
|
56
|
Nenue@98
|
57 function DevianConsoleMixin:Setup(info)
|
Nenue@98
|
58 for k,v in pairs(info) do
|
Nenue@98
|
59 self[k] = v
|
Nenue@98
|
60 --oldprint(k,v)
|
Nenue@98
|
61 end
|
Nenue@98
|
62 self.Dock = DevianDock:GetDockButton(self)
|
Nenue@98
|
63 self:Update()
|
Nenue@98
|
64 end
|
Nenue@98
|
65
|
Nenue@99
|
66 local blockedType = {['table'] = true, ['function'] = true }
|
Nenue@99
|
67 local blockedKey = {[0] = true }
|
Nenue@99
|
68
|
Nenue@99
|
69 -- Synchronize vars
|
Nenue@99
|
70 function DevianConsoleMixin:Finalize()
|
Nenue@99
|
71 local id = self:GetID()
|
Nenue@99
|
72 for k,v in pairs(D.channels[id]) do
|
Nenue@99
|
73 if not self[k] then
|
Nenue@99
|
74 D.channels[id][k] = nil
|
Nenue@99
|
75 end
|
Nenue@99
|
76 end
|
Nenue@99
|
77 for k,v in pairs(self) do
|
Nenue@99
|
78 if not (blockedType[type(v)] or blockedKey[k]) then
|
Nenue@99
|
79 if D.channels[id][k] ~= v then
|
Nenue@99
|
80 D.channels[id][k] = v
|
Nenue@99
|
81 end
|
Nenue@99
|
82 end
|
Nenue@99
|
83 end
|
Nenue@99
|
84 end
|
Nenue@99
|
85
|
Nenue@99
|
86 function DevianConsoleMixin:Pin(pinned)
|
Nenue@99
|
87 self.pinned = pinned or (not self.pinned)
|
Nenue@99
|
88 self:Update(true)
|
Nenue@99
|
89 end
|
Nenue@99
|
90
|
Nenue@99
|
91 function DevianConsoleMixin:Update(setFinal)
|
Nenue@98
|
92 self.title:SetText(self.index..' '.. (self.signature or '?'))
|
Nenue@98
|
93 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', self.x, self.y)
|
Nenue@99
|
94
|
Nenue@99
|
95 if self.minimized then
|
Nenue@99
|
96 self:SetHeight(20)
|
Nenue@99
|
97 self:SetMaxResize(GetScreenWidth(),20)
|
Nenue@99
|
98 self.GripBottom:Hide()
|
Nenue@99
|
99 self.GripSide:Hide()
|
Nenue@99
|
100 else
|
Nenue@99
|
101 self:SetSize(self.width, self.height)
|
Nenue@99
|
102 self.GripBottom:Show()
|
Nenue@99
|
103 self.GripSide:Show()
|
Nenue@99
|
104 end
|
Nenue@99
|
105
|
Nenue@99
|
106
|
Nenue@98
|
107 -- oldprint(self:GetName(), self.x, self.y)
|
Nenue@98
|
108
|
Nenue@98
|
109 local isFront = D.currentProfile.current_channel == self.index
|
Nenue@98
|
110 local r,g,b,a = unpack(D.db.backborder)
|
Nenue@98
|
111 if isFront then
|
Nenue@98
|
112 r,g,b,a = unpack(D.db.frontborder)
|
Nenue@98
|
113 self.backdrop:SetColorTexture(0,0,0,1)
|
Nenue@98
|
114 else
|
Nenue@98
|
115 self.backdrop:SetColorTexture(0,0,0,0.5)
|
Nenue@98
|
116
|
Nenue@98
|
117 end
|
Nenue@98
|
118 for name, region in pairs(self.border) do
|
Nenue@98
|
119 region:SetColorTexture(r,g,b,a)
|
Nenue@98
|
120 end
|
Nenue@98
|
121
|
Nenue@98
|
122 --oldprint(self:GetID(), self.enabled, self.minimized, self.x, self.y)
|
Nenue@98
|
123 self.isFront = isFront
|
Nenue@98
|
124 self:SetShown(self.enabled)
|
Nenue@99
|
125 self.backdrop:SetShown(self.enabled)
|
Nenue@99
|
126 self.out:SetShown((not self.minimized))
|
Nenue@99
|
127
|
Nenue@99
|
128
|
Nenue@99
|
129 if setFinal then
|
Nenue@99
|
130 self:Finalize()
|
Nenue@99
|
131 end
|
Nenue@99
|
132
|
Nenue@98
|
133 end
|
Nenue@98
|
134
|
Nenue@98
|
135
|
Nenue@99
|
136
|
Nenue@98
|
137 function DevianConsoleMixin:OnShow()
|
Nenue@98
|
138 self:Update()
|
Nenue@98
|
139 end
|
Nenue@98
|
140
|
Nenue@98
|
141
|
Nenue@98
|
142
|
Nenue@98
|
143 function DevianConsoleMixin:OnHide() end
|
Nenue@98
|
144
|
Nenue@98
|
145 function DevianConsoleMixin:OnMouseWheel(delta)
|
Nenue@98
|
146
|
Nenue@98
|
147 local up = delta > 0
|
Nenue@98
|
148 if IsControlKeyDown() then
|
Nenue@98
|
149 if up then self.out:ScrollToTop()
|
Nenue@98
|
150 else self.out:ScrollToBottom() end
|
Nenue@98
|
151 elseif IsShiftKeyDown() then
|
Nenue@98
|
152 if up then self.out:PageUp()
|
Nenue@98
|
153 else self.out:PageDown() end
|
Nenue@98
|
154 else
|
Nenue@98
|
155 if up then self.out:ScrollUp()
|
Nenue@98
|
156 else self.out:ScrollDown() end
|
Nenue@98
|
157 end
|
Nenue@98
|
158 end
|
Nenue@98
|
159 function DevianConsoleMixin:MinMax(minimized)
|
Nenue@98
|
160 minimized = minimized or self.minimized
|
Nenue@98
|
161 if minimized then
|
Nenue@98
|
162 self:Maximize()
|
Nenue@98
|
163 else
|
Nenue@98
|
164 self:Minimize()
|
Nenue@98
|
165 end
|
Nenue@98
|
166 end
|
Nenue@98
|
167
|
Nenue@98
|
168 function DevianConsoleMixin:Minimize()
|
Nenue@98
|
169 self.minimized = true
|
Nenue@99
|
170 self:Update(true)
|
Nenue@98
|
171 end
|
Nenue@98
|
172
|
Nenue@98
|
173 function DevianConsoleMixin:Maximize()
|
Nenue@99
|
174 self.minimized = nilnil
|
Nenue@99
|
175 self:Update(true)
|
Nenue@98
|
176 end
|
Nenue@98
|
177
|
Nenue@99
|
178 function DevianConsoleMixin:OnMouseDown(button)
|
Nenue@99
|
179
|
Nenue@99
|
180 if button == 'LeftButton' then
|
Nenue@99
|
181 self:ToFront()
|
Nenue@99
|
182 end
|
Nenue@99
|
183 end
|
Nenue@99
|
184
|
Nenue@99
|
185
|
Nenue@98
|
186 function DevianConsoleMixin:OnMouseUp(button)
|
Nenue@98
|
187 if button == 'LeftButton' then
|
Nenue@98
|
188 self:ToFront()
|
Nenue@98
|
189 else
|
Nenue@98
|
190 self:MinMax()
|
Nenue@98
|
191 end
|
Nenue@98
|
192 end
|
Nenue@98
|
193
|
Nenue@98
|
194 function DevianConsoleMixin:OnLeave()
|
Nenue@98
|
195 end
|
Nenue@98
|
196
|
Nenue@98
|
197 function DevianConsoleMixin:OnEnter()
|
Nenue@98
|
198 end
|
Nenue@98
|
199
|
Nenue@98
|
200 function DevianConsoleMixin:OnDragStart()
|
Nenue@99
|
201 self:ToFront()
|
Nenue@99
|
202 self:StartMoving()
|
Nenue@99
|
203 D.IterateChannels(function(frame)
|
Nenue@99
|
204 frame.out:SetShown(false)
|
Nenue@99
|
205 frame.backdrop:Hide()
|
Nenue@99
|
206 end, self)
|
Nenue@98
|
207 end
|
Nenue@98
|
208
|
Nenue@98
|
209 function DevianConsoleMixin:OnDragStop()
|
Nenue@99
|
210
|
Nenue@99
|
211 local channelEntry = D.channels[self:GetID()]
|
Nenue@98
|
212 self.x = self:GetLeft()
|
Nenue@98
|
213 self.y = self:GetTop() - GetScreenHeight()
|
Nenue@99
|
214 if not self.minimized then
|
Nenue@99
|
215 self.width = self:GetWidth()
|
Nenue@99
|
216 self.height = self:GetHeight()
|
Nenue@99
|
217 end
|
Nenue@99
|
218
|
Nenue@99
|
219 --print(channelEntry.x, channelEntry.y, channelEntry.width, channelEntry.height)
|
Nenue@98
|
220 self:StopMovingOrSizing()
|
Nenue@99
|
221 self:SetClampRectInsets(0,0,0,0)
|
Nenue@98
|
222
|
Nenue@99
|
223 self:Update(true)
|
Nenue@99
|
224
|
Nenue@99
|
225 D.IterateChannels(function(frame)
|
Nenue@99
|
226 frame:Update()
|
Nenue@99
|
227 end, self)
|
Nenue@98
|
228 end
|
Nenue@98
|
229
|
Nenue@98
|
230 function DevianConsoleMixin:ToFront()
|
Nenue@98
|
231 self:Raise()
|
Nenue@98
|
232 D.currentProfile.current_channel = self.index
|
Nenue@98
|
233 for index, channel in ipairs(D.console) do
|
Nenue@98
|
234 channel:Update()
|
Nenue@98
|
235 end
|
Nenue@98
|
236 end
|
Nenue@98
|
237
|
Nenue@98
|
238 function DevianConsoleMixin:Toggle()
|
Nenue@98
|
239 self.enabled = (not self.enabled)
|
Nenue@98
|
240 --oldprint(self:GetID(), self.enabled)
|
Nenue@98
|
241 self:Update()
|
Nenue@99
|
242 end
|
Nenue@99
|
243
|
Nenue@99
|
244 function DevianConsoleMixin:OnEvent(event, arg)
|
Nenue@99
|
245 oldprint(event, arg)
|
Nenue@99
|
246 local db = D.db
|
Nenue@99
|
247 if self.enabled then
|
Nenue@99
|
248 if event == 'PLAYER_STARTED_MOVING' then
|
Nenue@99
|
249 self.moveFade:GetProgress()
|
Nenue@99
|
250 self.moveFade:Stop()
|
Nenue@99
|
251 local F1 = self.moveFade.alphaOut
|
Nenue@99
|
252 F1:SetFromAlpha(db.movement_fade_from)
|
Nenue@99
|
253 F1:SetToAlpha(db.movement_fade_to)
|
Nenue@99
|
254 F1:SetDuration(db.movement_fade_time)
|
Nenue@99
|
255 self.moveFade:Play()
|
Nenue@99
|
256 self:EnableMouse(false)
|
Nenue@99
|
257 else
|
Nenue@99
|
258 self.moveFade:Stop()
|
Nenue@99
|
259 local F1 = self.moveFade.alphaOut
|
Nenue@99
|
260 F1:SetToAlpha(db.movement_fade_from)
|
Nenue@99
|
261 F1:SetFromAlpha(db.movement_fade_to)
|
Nenue@99
|
262 F1:SetDuration(db.movement_fade_time)
|
Nenue@99
|
263 self.moveFade:Play()
|
Nenue@99
|
264 self:EnableMouse(true)
|
Nenue@99
|
265 end
|
Nenue@99
|
266 end
|
Nenue@99
|
267 end
|
Nenue@99
|
268
|
Nenue@99
|
269 DevianConsoleSizeButtonMixin = {}
|
Nenue@99
|
270 function DevianConsoleSizeButtonMixin:OnLoad()
|
Nenue@99
|
271 self:RegisterForDrag('LeftButton')
|
Nenue@99
|
272 end
|
Nenue@99
|
273 function DevianConsoleSizeButtonMixin:OnDragStart()
|
Nenue@99
|
274 local anchor = self:GetPoint(2)
|
Nenue@99
|
275 local frame = self:GetParent()
|
Nenue@99
|
276 if anchor == 'BOTTOMLEFT' then
|
Nenue@99
|
277 frame:SetClampRectInsets(frame:GetLeft(), GetScreenWidth()- frame:GetRight(), GetScreenHeight() - frame:GetTop(), 0)
|
Nenue@99
|
278 frame:SetMinResize(frame.width, 24)
|
Nenue@99
|
279 frame:SetMaxResize(frame.width, GetScreenHeight())
|
Nenue@99
|
280 elseif anchor == 'BOTTOM' then
|
Nenue@99
|
281 frame:SetClampRectInsets(frame:GetLeft(), 0, GetScreenHeight() - frame:GetTop(), GetScreenHeight() - frame:GetBottom())
|
Nenue@99
|
282 frame:SetMinResize(200, frame.height)
|
Nenue@99
|
283 frame:SetMaxResize(GetScreenWidth(), frame.height)
|
Nenue@99
|
284 end
|
Nenue@99
|
285 frame:StartSizing()
|
Nenue@99
|
286 end
|
Nenue@99
|
287 function DevianConsoleSizeButtonMixin:OnDragStop()
|
Nenue@99
|
288 local frame = self:GetParent()
|
Nenue@99
|
289 frame:OnDragStop()
|
Nenue@99
|
290 end
|