annotate Dock.lua @ 47:eb7544afd77a

dock frame implementation fixes to /dvc command
author Nenue
date Mon, 04 Jan 2016 05:42:44 -0500
parents dcc57a7cabc9
children 2bf7eb1844cb
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@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