annotate Dock.lua @ 45:5341e4d84622

Removed dock manager from the TOC for now Parts of the config dialog in, needs finishing
author Nenue
date Wed, 30 Dec 2015 07:05:38 -0500
parents e6650821a2c0
children dcc57a7cabc9
rev   line source
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