Nenue@32
|
1 --- ${PACKAGE_NAME}
|
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@32
|
6 -- Dock management functions
|
Nenue@32
|
7
|
Nenue@32
|
8 local D = LibStub("AceAddon-3.0"):GetAddon("Devian")
|
Nenue@32
|
9 local _G = _G
|
Nenue@47
|
10 local db
|
Nenue@32
|
11
|
Nenue@33
|
12 local function Dock_MenuClick() end
|
Nenue@32
|
13
|
Nenue@32
|
14 local function Dock_MouseDown(self, button, up)
|
Nenue@32
|
15 end
|
Nenue@32
|
16 local function Dock_MouseUp (self, button)
|
Nenue@32
|
17 Dock_MouseDown(self, button, true)
|
Nenue@32
|
18 end
|
Nenue@32
|
19
|
Nenue@32
|
20 --- Adjusts frame element alignments
|
Nenue@32
|
21 local function PrepareForDock (frame, draw_x)
|
Nenue@32
|
22 frame.left:SetPoint('TOPLEFT', frame.out, 'TOPLEFT', -2, 0)
|
Nenue@32
|
23 frame.left:SetPoint('BOTTOMRIGHT', frame.out, 'BOTTOMLEFT', 0, 0)
|
Nenue@32
|
24 frame.topleft:SetPoint('BOTTOMRIGHT', frame.out, 'TOPLEFT', 0, 0)
|
Nenue@32
|
25 frame.top: SetPoint('TOPLEFT', frame.out, 'TOPLEFT', 0, 2)
|
Nenue@32
|
26 frame.top:SetPoint('BOTTOMRIGHT', frame.out, 'TOPRIGHT', 0, 0)
|
Nenue@32
|
27 frame.topright:SetPoint('BOTTOMLEFT', frame.out, 'TOPRIGHT', 0, 0)
|
Nenue@32
|
28 frame.right:SetPoint('TOPLEFT', frame.out, 'TOPRIGHT', 0, 0)
|
Nenue@32
|
29 frame.header:SetWidth(frame.header:GetStringWidth() * 1.2)
|
Nenue@32
|
30 frame.header:SetPoint('TOPLEFT', frame, 'TOPLEFT', draw_x+4, 0)
|
Nenue@32
|
31 frame.titlebar:SetPoint('TOPLEFT', frame.header, 'TOPLEFT', -4, 0)
|
Nenue@32
|
32 frame.titlebar:SetPoint('TOPRIGHT', frame.header, 'TOPRIGHT', 0, 0)
|
Nenue@32
|
33
|
Nenue@32
|
34 return (draw_x + frame.header:GetStringWidth() * 1.2 + 4)
|
Nenue@32
|
35 end
|
Nenue@32
|
36
|
Nenue@32
|
37
|
Nenue@32
|
38 --- Docks frames together
|
Nenue@32
|
39 -- @param target frame on which to dock
|
Nenue@32
|
40 -- @param ... frame objects to be docked
|
Nenue@32
|
41 --
|
Nenue@32
|
42 function D:DockFrame(...)
|
Nenue@32
|
43 local target = D.console[select(1,...)]
|
Nenue@32
|
44 if target.dockedTo then
|
Nenue@32
|
45 local t = D.c[target.dockedTo]
|
Nenue@32
|
46 print('channel',target.index,target.signature, 'is docked to',t.index, t.signature..'. using that instead')
|
Nenue@32
|
47 target = D.console[target.DockedTo]
|
Nenue@32
|
48 end
|
Nenue@32
|
49
|
Nenue@32
|
50 target.docked = {}
|
Nenue@32
|
51 local draw_x = PrepareForDock(target, 4)
|
Nenue@32
|
52 for i = 2, select('#', ...) do
|
Nenue@32
|
53 local frame = D.console[select(i, ...)]
|
Nenue@32
|
54 frame.dockedTo = target.index
|
Nenue@32
|
55 width, draw_x = MorphToDock (frame, draw_x)
|
Nenue@32
|
56 table.insert(target.docked, frame.index)
|
Nenue@32
|
57 frame:ClearAllPoints()
|
Nenue@32
|
58 frame:SetPoint('TOPLEFT', target, 'TOPLEFT', 0, 0)
|
Nenue@32
|
59 frame:SetSize(target:GetWidth(), target:GetHeight())
|
Nenue@32
|
60 frame.x = nil
|
Nenue@32
|
61 frame.y = nil
|
Nenue@32
|
62 frame.width = nil
|
Nenue@32
|
63 frame.height = nil
|
Nenue@33
|
64 frame.scriptsMD = frame:GetScript('OnMouseDown')
|
Nenue@33
|
65 frame.scriptsMU = frame:GetScript('OnMouseUp')
|
Nenue@32
|
66 frame:SetScript('OnMouseDown', nil)
|
Nenue@32
|
67 frame:SetScript('OnMouseUp', nil)
|
Nenue@32
|
68 frame:Save()
|
Nenue@32
|
69 end
|
Nenue@32
|
70 end
|
Nenue@32
|
71
|
Nenue@32
|
72 --- Spaces each frame evenly across the screen.
|
Nenue@32
|
73 function D:DistributeFrames() --
|
Nenue@32
|
74 --print('frame grid:', max, num_side)
|
Nenue@32
|
75 local max = self.num_channels
|
Nenue@32
|
76 local num_side = math.ceil(math.sqrt(max))
|
Nenue@32
|
77 local w = GetScreenWidth() / num_side
|
Nenue@32
|
78 local h = GetScreenHeight() / num_side
|
Nenue@32
|
79 for i, frame in pairs(D.console) do
|
Nenue@32
|
80 local dx = (i-1) % num_side
|
Nenue@32
|
81 local dy = math.floor((i-1) / num_side)
|
Nenue@32
|
82
|
Nenue@32
|
83 --print('move:', frame.signature, 'dx=', dx, 'dy=', dy)
|
Nenue@32
|
84 --print('move:', frame.signature, ' x=', dx * w, 'y=', -(dy * h), 'h=', h, 'w=', w)
|
Nenue@32
|
85 frame.width = w
|
Nenue@32
|
86 frame.height = h
|
Nenue@32
|
87 frame.x = dx * w
|
Nenue@32
|
88 frame.y = -(dy * h)
|
Nenue@32
|
89 frame:Save()
|
Nenue@32
|
90 end
|
Nenue@32
|
91
|
Nenue@32
|
92 end
|
Nenue@32
|
93
|
Nenue@32
|
94 --- Place all frames stacked beneath the primary frame.
|
Nenue@32
|
95 function D:StackFrames()
|
Nenue@32
|
96 local last
|
Nenue@32
|
97 for i, frame in pairs(self.console) do
|
Nenue@32
|
98 if last then
|
Nenue@32
|
99 frame.x = last.x
|
Nenue@32
|
100 frame.y = last.y - 20
|
Nenue@32
|
101 else
|
Nenue@32
|
102 frame.x = (GetScreenWidth()-frame:GetWidth())/2
|
Nenue@32
|
103 frame.y = 0
|
Nenue@32
|
104 end
|
Nenue@32
|
105 frame:Save()
|
Nenue@32
|
106 last = frame
|
Nenue@32
|
107 end
|
Nenue@32
|
108 end
|
Nenue@32
|
109
|
Nenue@32
|
110
|
Nenue@46
|
111 ---
|
Nenue@46
|
112 function D:UpdateDock()
|
Nenue@47
|
113 local pad_offset = 12
|
Nenue@47
|
114 local draw_offset = pad_offset
|
Nenue@47
|
115 for i = 1, #self.dock.buttons do
|
Nenue@47
|
116 local d = self.dock.buttons[i]
|
Nenue@47
|
117 d:SetPoint('TOPLEFT', DevianDock, 'TOPLEFT', draw_offset, 0)
|
Nenue@47
|
118 draw_offset= draw_offset + d:GetWidth() + pad_offset
|
Nenue@47
|
119 end
|
Nenue@46
|
120
|
Nenue@47
|
121 self.dock:SetWidth(draw_offset)
|
Nenue@47
|
122 end
|
Nenue@47
|
123
|
Nenue@47
|
124 --- Dock interactions
|
Nenue@47
|
125 function D.DockHighlight(beacon)
|
Nenue@47
|
126 db = D.db
|
Nenue@47
|
127 print('Dvn', 'dock mouse event', beacon)
|
Nenue@47
|
128 local self = D.dock
|
Nenue@47
|
129 local mouseOverDock
|
Nenue@47
|
130 --for i, b in pairs(self.buttons) do
|
Nenue@47
|
131 --print('polling', i, b:GetName())
|
Nenue@47
|
132 if self:IsMouseOver() then
|
Nenue@47
|
133 mouseOverDock = true
|
Nenue@47
|
134 end
|
Nenue@47
|
135
|
Nenue@47
|
136
|
Nenue@47
|
137 if beacon and beacon:IsMouseOver() then
|
Nenue@47
|
138 mouseOverDock = true
|
Nenue@47
|
139 --print('mouse is over', i, b:GetName())
|
Nenue@47
|
140
|
Nenue@47
|
141 if not beacon.raised then
|
Nenue@47
|
142 beacon.raised = true
|
Nenue@47
|
143 local a = (db.dock_button_alpha_on - self:GetAlpha())
|
Nenue@47
|
144 local b = (db.dock_button_alpha_on-db.dock_button_alpha_off)
|
Nenue@47
|
145 local dur = (a / b) * db.dock_button_fade_in
|
Nenue@47
|
146 print(a, b, db.dock_button_fade_in, dur)
|
Nenue@47
|
147 UIFrameFadeIn(beacon, dur,beacon:GetAlpha(),db.dock_button_alpha_on)
|
Nenue@47
|
148 UIFrameFadeIn(beacon.caption, dur,beacon:GetAlpha(),1)
|
Nenue@46
|
149 end
|
Nenue@47
|
150 elseif beacon.raised and beacon.index ~= db.current_channel then
|
Nenue@47
|
151 beacon.raised = nil
|
Nenue@47
|
152 local a = (self:GetAlpha() - db.dock_button_alpha_off)
|
Nenue@47
|
153 local b = (db.dock_button_alpha_on-db.dock_button_alpha_off)
|
Nenue@47
|
154 local dur = (a / b) * db.dock_button_fade_out
|
Nenue@47
|
155 print(a, b, db.dock_button_fade_in, dur)
|
Nenue@47
|
156 UIFrameFadeOut(beacon, dur,beacon:GetAlpha(),db.dock_button_alpha_off)
|
Nenue@47
|
157 UIFrameFadeOut(beacon.caption, dur,beacon:GetAlpha(),0)
|
Nenue@47
|
158 end
|
Nenue@46
|
159
|
Nenue@47
|
160 --end
|
Nenue@47
|
161 --end
|
Nenue@47
|
162 if mouseOverDock then
|
Nenue@47
|
163 if not self.raised then
|
Nenue@47
|
164 print('rising')
|
Nenue@47
|
165 self.raised = true
|
Nenue@47
|
166 local a = (db.dock_alpha_on - self:GetAlpha())
|
Nenue@47
|
167 local b = (db.dock_alpha_on-db.dock_alpha_off)
|
Nenue@47
|
168 local dur = (a / b) * db.dock_fade_in
|
Nenue@47
|
169 print(a, b, db.dock_fade_in, dur)
|
Nenue@47
|
170 UIFrameFadeIn(self, dur,self:GetAlpha(),db.dock_alpha_on)
|
Nenue@46
|
171 end
|
Nenue@47
|
172 elseif self.raised then
|
Nenue@47
|
173 print('dropping')
|
Nenue@47
|
174 self.raised = nil
|
Nenue@47
|
175 local a = (self:GetAlpha() - db.dock_alpha_off)
|
Nenue@47
|
176 local b = (db.dock_alpha_on-db.dock_alpha_off)
|
Nenue@47
|
177 local dur = (a / b) * db.dock_fade_out
|
Nenue@47
|
178 print(a, b, db.dock_fade_in, dur)
|
Nenue@47
|
179 UIFrameFadeOut(self, dur,self:GetAlpha(),db.dock_alpha_off)
|
Nenue@46
|
180 end
|
Nenue@47
|
181
|
Nenue@46
|
182 end |