Mercurial > wow > devian
view Dock.lua @ 35:3304455a3f45
code organizing; UI stuff is in the UI script, Devian prime just deals with config and print
corner menu elements placed and hooked, still needs follow-up code
author | Nenue |
---|---|
date | Sun, 27 Dec 2015 03:51:17 -0500 |
parents | e6650821a2c0 |
children | dcc57a7cabc9 |
line wrap: on
line source
--- ${PACKAGE_NAME} -- @file-author@ -- @project-revision@ @project-hash@ -- @file-revision@ @file-hash@ -- Created: 12/26/2015 12:32 PM -- Dock management functions local D = LibStub("AceAddon-3.0"):GetAddon("Devian") local _G = _G local db = DevianDB local function Dock_MenuClick() end local function Dock_MouseDown(self, button, up) end local function Dock_MouseUp (self, button) Dock_MouseDown(self, button, true) end --- Adjusts frame element alignments local function PrepareForDock (frame, draw_x) frame.left:SetPoint('TOPLEFT', frame.out, 'TOPLEFT', -2, 0) frame.left:SetPoint('BOTTOMRIGHT', frame.out, 'BOTTOMLEFT', 0, 0) frame.topleft:SetPoint('BOTTOMRIGHT', frame.out, 'TOPLEFT', 0, 0) frame.top: SetPoint('TOPLEFT', frame.out, 'TOPLEFT', 0, 2) frame.top:SetPoint('BOTTOMRIGHT', frame.out, 'TOPRIGHT', 0, 0) frame.topright:SetPoint('BOTTOMLEFT', frame.out, 'TOPRIGHT', 0, 0) frame.right:SetPoint('TOPLEFT', frame.out, 'TOPRIGHT', 0, 0) frame.header:SetWidth(frame.header:GetStringWidth() * 1.2) frame.header:SetPoint('TOPLEFT', frame, 'TOPLEFT', draw_x+4, 0) frame.titlebar:SetPoint('TOPLEFT', frame.header, 'TOPLEFT', -4, 0) frame.titlebar:SetPoint('TOPRIGHT', frame.header, 'TOPRIGHT', 0, 0) return (draw_x + frame.header:GetStringWidth() * 1.2 + 4) end --- Docks frames together -- @param target frame on which to dock -- @param ... frame objects to be docked -- function D:DockFrame(...) local target = D.console[select(1,...)] if target.dockedTo then local t = D.c[target.dockedTo] print('channel',target.index,target.signature, 'is docked to',t.index, t.signature..'. using that instead') target = D.console[target.DockedTo] end target.docked = {} local draw_x = PrepareForDock(target, 4) for i = 2, select('#', ...) do local frame = D.console[select(i, ...)] frame.dockedTo = target.index width, draw_x = MorphToDock (frame, draw_x) table.insert(target.docked, frame.index) frame:ClearAllPoints() frame:SetPoint('TOPLEFT', target, 'TOPLEFT', 0, 0) frame:SetSize(target:GetWidth(), target:GetHeight()) frame.x = nil frame.y = nil frame.width = nil frame.height = nil frame.scriptsMD = frame:GetScript('OnMouseDown') frame.scriptsMU = frame:GetScript('OnMouseUp') frame:SetScript('OnMouseDown', nil) frame:SetScript('OnMouseUp', nil) frame:Save() end end --- Spaces each frame evenly across the screen. function D:DistributeFrames() -- --print('frame grid:', max, num_side) local max = self.num_channels local num_side = math.ceil(math.sqrt(max)) local w = GetScreenWidth() / num_side local h = GetScreenHeight() / num_side for i, frame in pairs(D.console) do local dx = (i-1) % num_side local dy = math.floor((i-1) / num_side) --print('move:', frame.signature, 'dx=', dx, 'dy=', dy) --print('move:', frame.signature, ' x=', dx * w, 'y=', -(dy * h), 'h=', h, 'w=', w) frame.width = w frame.height = h frame.x = dx * w frame.y = -(dy * h) frame:Save() end end --- Place all frames stacked beneath the primary frame. function D:StackFrames() local last for i, frame in pairs(self.console) do if last then frame.x = last.x frame.y = last.y - 20 else frame.x = (GetScreenWidth()-frame:GetWidth())/2 frame.y = 0 end frame:Save() last = frame end end