Nenue@50
|
1 --- Devian - Dock.lua
|
Nenue@32
|
2 -- @file-author@
|
Nenue@32
|
3 -- @project-revision@ @project-hash@
|
Nenue@32
|
4 -- @file-revision@ @file-hash@
|
Nenue@32
|
5 -- Created: 12/26/2015 12:32 PM
|
Nenue@50
|
6 -- Docking and arrangement calls
|
Nenue@66
|
7 local _, D = ...
|
Nenue@50
|
8 local ceil, floor, sqrt, pairs, GetScreenWidth, GetScreenHeight = math.ceil, math.floor, math.sqrt, pairs, GetScreenWidth, GetScreenHeight
|
Nenue@47
|
9 local db
|
Nenue@98
|
10 local print = DEVIAN_WORKSPACE and function(...) print('DvnDock', ...) end or nop
|
Nenue@93
|
11 local DOCK_BUTTON_PADDING = 6
|
Nenue@93
|
12
|
Nenue@98
|
13 DevianDockHandler = {
|
Nenue@98
|
14 usedButtons = {},
|
Nenue@98
|
15 buttons = {},
|
Nenue@98
|
16 }
|
Nenue@93
|
17 DevianDockButtonMixin = {}
|
Nenue@93
|
18
|
Nenue@93
|
19 --- Updates region visibility as needed
|
Nenue@93
|
20 local getFadeInArgs = function(sign, region)
|
Nenue@93
|
21 --print('Dvn', region)
|
Nenue@93
|
22 local db = D.db
|
Nenue@93
|
23 local alph = region:GetAlpha()
|
Nenue@93
|
24 local a = (db[sign..'_alpha_on'] - alph)
|
Nenue@93
|
25 local b = (db[sign..'_alpha_on']-db[sign..'_alpha_off'])
|
Nenue@93
|
26 local dur = (a / b) * db[sign..'_fade_in']
|
Nenue@93
|
27 return dur, alph, db[sign..'_alpha_on']
|
Nenue@93
|
28 end
|
Nenue@93
|
29
|
Nenue@93
|
30 local getFadeOutArgs = function(sign, region)
|
Nenue@93
|
31 local db = D.db
|
Nenue@93
|
32 local alph = region:GetAlpha()
|
Nenue@93
|
33 local a = (alph - db[sign..'_alpha_off'])
|
Nenue@93
|
34 local b = (db[sign..'_alpha_on']-db[sign..'_alpha_off'])
|
Nenue@93
|
35 local dur = (a / b) * db[sign..'_fade_out']
|
Nenue@93
|
36 return dur, alph, db[sign..'_alpha_off']
|
Nenue@93
|
37 end
|
Nenue@93
|
38
|
Nenue@93
|
39 local function queueFade (self, duration, from, to)
|
Nenue@93
|
40 self:SetAlpha(to)
|
Nenue@93
|
41 end
|
Nenue@93
|
42
|
Nenue@93
|
43 local numBeacons = 0
|
Nenue@98
|
44 function DevianDockHandler:GetDockButton(console)
|
Nenue@98
|
45 self.usedButtons = self.usedButtons or {}
|
Nenue@98
|
46 local index = console:GetID()
|
Nenue@98
|
47 local button = self.usedButtons[index]
|
Nenue@93
|
48 if not button then
|
Nenue@93
|
49 numBeacons = numBeacons + 1
|
Nenue@93
|
50 button = CreateFrame('Button', 'DevianDockBeacon'.. numBeacons, UIParent, 'DevianBeacon')
|
Nenue@93
|
51 button.color = {r = math.random(), g = math.random(), b = math.random()}
|
Nenue@93
|
52 button.Stripe:SetColorTexture(button.color.r, button.color.g, button.color.b,1)
|
Nenue@93
|
53 button.console = console
|
Nenue@98
|
54 self.usedButtons[index] = button
|
Nenue@98
|
55 tinsert(self.buttons, button)
|
Nenue@98
|
56 --oldprint('create dock', index, console.signature)
|
Nenue@93
|
57 end
|
Nenue@93
|
58 button.index = console.index
|
Nenue@93
|
59 button.caption.name:SetText(console.signature)
|
Nenue@93
|
60 button:SetShown(true)
|
Nenue@93
|
61 return button
|
Nenue@93
|
62 end
|
Nenue@93
|
63
|
Nenue@93
|
64 function DevianDockButtonMixin:OnMouseDown(button)
|
Nenue@93
|
65 --print("click", self:GetName(), button, self.console.index)
|
Nenue@93
|
66 if button == "LeftButton" then
|
Nenue@93
|
67 if IsShiftKeyDown() then
|
Nenue@98
|
68 self.console:Toggle()
|
Nenue@93
|
69 else
|
Nenue@98
|
70 if self.console.isFront or (not self.console.enabled) then
|
Nenue@98
|
71
|
Nenue@98
|
72 self.console:Toggle()
|
Nenue@93
|
73 if self.console.enabled then
|
Nenue@93
|
74 if self.console.minimized then
|
Nenue@93
|
75 self.console:MinMax()
|
Nenue@93
|
76 end
|
Nenue@93
|
77 self.console:ToFront()
|
Nenue@93
|
78 end
|
Nenue@93
|
79 else
|
Nenue@93
|
80 self.console:ToFront()
|
Nenue@93
|
81 end
|
Nenue@93
|
82 end
|
Nenue@93
|
83 elseif button == "RightButton" then
|
Nenue@93
|
84 self.console:MinMax()
|
Nenue@93
|
85 end
|
Nenue@93
|
86 end
|
Nenue@93
|
87 function DevianDockButtonMixin:OnShow()
|
Nenue@93
|
88 self:Update()
|
Nenue@93
|
89 end
|
Nenue@93
|
90 function DevianDockButtonMixin:OnEnter()
|
Nenue@93
|
91 end
|
Nenue@93
|
92 function DevianDockButtonMixin:Update()
|
Nenue@93
|
93 local db = D.db
|
Nenue@93
|
94 local isActive = (self.raised or self.selected or self.newMessage)
|
Nenue@93
|
95
|
Nenue@93
|
96 if (self.showName or isActive) then
|
Nenue@93
|
97 self.caption:SetAlpha(1)
|
Nenue@93
|
98 else
|
Nenue@93
|
99 self.caption:SetAlpha(0.5)
|
Nenue@93
|
100 end
|
Nenue@93
|
101
|
Nenue@93
|
102 if self.selected then
|
Nenue@93
|
103 self.Background:SetColorTexture(0.4,0.4,0.4,1)
|
Nenue@93
|
104 else
|
Nenue@93
|
105 self.Background:SetColorTexture(0,0,0,.5)
|
Nenue@93
|
106 end
|
Nenue@93
|
107
|
Nenue@93
|
108 if (not self.showName) and (not isActive) then
|
Nenue@93
|
109 --print(self:GetName(), 'no name no active, fade out')
|
Nenue@93
|
110 self:SetAlpha(0.5)
|
Nenue@93
|
111 else
|
Nenue@93
|
112 self:SetAlpha(1)
|
Nenue@93
|
113 end
|
Nenue@93
|
114
|
Nenue@93
|
115 self:SetWidth(self.caption.name:GetStringWidth() + DOCK_BUTTON_PADDING)
|
Nenue@93
|
116 end
|
Nenue@93
|
117
|
Nenue@93
|
118 function DevianDockButtonMixin:Select()
|
Nenue@93
|
119 self.caption.pulse:Stop()
|
Nenue@93
|
120 self:Update()
|
Nenue@93
|
121 end
|
Nenue@32
|
122
|
Nenue@32
|
123 --- Spaces each frame evenly across the screen.
|
Nenue@32
|
124 function D:DistributeFrames() --
|
Nenue@50
|
125 local max = self.num_channels
|
Nenue@50
|
126 local num_side = ceil(sqrt(max))
|
Nenue@50
|
127 local w = GetScreenWidth() / num_side
|
Nenue@50
|
128 local h = GetScreenHeight() / num_side
|
Nenue@50
|
129 for i, frame in pairs(D.console) do
|
Nenue@50
|
130 local dx = (i-1) % num_side
|
Nenue@50
|
131 local dy = floor((i-1) / num_side)
|
Nenue@50
|
132 frame.width = w
|
Nenue@50
|
133 frame.height = h
|
Nenue@50
|
134 frame.x = dx * w
|
Nenue@50
|
135 frame.y = -(dy * h)
|
Nenue@50
|
136 frame:Save()
|
Nenue@50
|
137 end
|
Nenue@32
|
138 end
|
Nenue@32
|
139
|
Nenue@32
|
140 --- Place all frames stacked beneath the primary frame.
|
Nenue@32
|
141 function D:StackFrames()
|
Nenue@32
|
142 local last
|
Nenue@50
|
143 for _, frame in pairs(self.console) do
|
Nenue@32
|
144 if last then
|
Nenue@32
|
145 frame.x = last.x
|
Nenue@32
|
146 frame.y = last.y - 20
|
Nenue@32
|
147 else
|
Nenue@32
|
148 frame.x = (GetScreenWidth()-frame:GetWidth())/2
|
Nenue@32
|
149 frame.y = 0
|
Nenue@32
|
150 end
|
Nenue@32
|
151 frame:Save()
|
Nenue@32
|
152 last = frame
|
Nenue@32
|
153 end
|
Nenue@32
|
154 end
|
Nenue@32
|
155
|
Nenue@98
|
156 function DevianDockHandler:OnMouseWheel(delta)
|
Nenue@93
|
157 if delta >= 1 then
|
Nenue@98
|
158 self.dockScale = (self.dockScale or 1) - 0.1
|
Nenue@93
|
159 else
|
Nenue@98
|
160 self.dockScale = (self.dockScale or 1) + 0.1
|
Nenue@93
|
161 end
|
Nenue@98
|
162 self:Update()
|
Nenue@93
|
163 end
|
Nenue@32
|
164
|
Nenue@50
|
165 --- Space everything and set the dock size
|
Nenue@98
|
166 function DevianDockHandler:Update()
|
Nenue@47
|
167 local pad_offset = 12
|
Nenue@93
|
168 local drawWidth = 0
|
Nenue@93
|
169 local lastButton
|
Nenue@93
|
170 local numButtons = 0
|
Nenue@98
|
171 for i, d in ipairs(self.buttons) do
|
Nenue@93
|
172 if d and d:IsShown() then
|
Nenue@93
|
173 d:SetScale(D.dockScale or 1)
|
Nenue@93
|
174 if lastButton then
|
Nenue@93
|
175 d:SetPoint('TOPLEFT', lastButton, 'TOPRIGHT', pad_offset, 0)
|
Nenue@93
|
176 else
|
Nenue@93
|
177 d:SetPoint('TOPLEFT', DevianDock, 'TOPLEFT', pad_offset, 0)
|
Nenue@93
|
178 end
|
Nenue@73
|
179
|
Nenue@93
|
180 drawWidth = drawWidth + d:GetWidth() + pad_offset
|
Nenue@93
|
181 lastButton = d
|
Nenue@93
|
182 numButtons = numButtons + 1
|
Nenue@93
|
183 print(numButtons)
|
Nenue@73
|
184 end
|
Nenue@47
|
185 end
|
Nenue@93
|
186 self.numButtons = numButtons
|
Nenue@98
|
187 self:SetWidth(drawWidth)
|
Nenue@98
|
188
|
Nenue@98
|
189 D.db.dockPoint = D.db.dockPoint or 'TOPLEFT'
|
Nenue@98
|
190 self:SetPoint(D.db.dockPoint , UIParent, D.db.dockPoint , 0, 0)
|
Nenue@50
|
191 end
|
Nenue@46
|
192
|
Nenue@47
|
193
|
Nenue@58
|
194 local function FrameFade(frame)
|
Nenue@58
|
195 if not D.fader then
|
Nenue@58
|
196 D.fader = CreateFrame('Frame', 'DevianFaderFrame', UIParent):CreateAnimationGroup('fader'):CreateAnimation('Alpha', 'FadeIn')
|
Nenue@58
|
197 end
|
Nenue@46
|
198 end |