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@32
|
10 local db = DevianDB
|
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
|