annotate Console.lua @ 101:e1f6e5c97da6

Added tag v3.0 for changeset 790dca545f1d
author Nenue
date Tue, 17 Jan 2017 14:25:33 -0500
parents 790dca545f1d
children c3e7d2a3f4e9
rev   line source
Nenue@98 1 -- Mixin for console
Nenue@98 2 local _, D = ...
Nenue@98 3 DevianConsoleMixin = {}
Nenue@98 4
Nenue@99 5 local print = function(...) print('Dvn', ...) end
Nenue@99 6 function D.IterateChannels(callback, sender)
Nenue@99 7 for index, channel in ipairs(D.console) do
Nenue@99 8 if channel ~= sender then
Nenue@99 9 callback(channel)
Nenue@99 10 end
Nenue@99 11 end
Nenue@99 12 end
Nenue@99 13
Nenue@98 14 function DevianConsoleMixin:OnLoad()
Nenue@98 15 self:SetMaxResize(GetScreenWidth(), GetScreenHeight())
Nenue@98 16 self:SetMinResize(100, 24)
Nenue@98 17 self:EnableMouse(true)
Nenue@98 18 self:RegisterForDrag('LeftButton')
Nenue@98 19 self:SetMovable(true)
Nenue@98 20 self:SetResizable(true)
Nenue@99 21 self:SetClampedToScreen(true)
Nenue@98 22 self.out:SetFont("Interface\\Addons\\Devian\\font\\SourceCodePro-Regular.ttf", 13, 'NORMAL')
Nenue@98 23 self.out:SetJustifyH('LEFT')
Nenue@98 24 self.out:SetFading(false)
Nenue@99 25 self.out:SetMaxLines(2048)
Nenue@99 26
Nenue@99 27 self:RegisterEvent('PLAYER_STARTED_MOVING')
Nenue@99 28 self:RegisterEvent('PLAYER_STOPPED_MOVING')
Nenue@99 29
Nenue@99 30 UIDropDownMenu_Initialize(self.DropdownFrame, function()
Nenue@99 31 local info = UIDropDownMenu_CreateInfo()
Nenue@99 32 info.text = 'Pin'
Nenue@99 33 info.func = function() self:Pin() end
Nenue@100 34 info.isNotRadio = true
Nenue@100 35 info.checked = (self.pinned)
Nenue@99 36 UIDropDownMenu_AddButton(info)
Nenue@100 37
Nenue@100 38 info.notCheckable = 1
Nenue@99 39 if self.minimized then
Nenue@99 40 info.text = 'Maximize'
Nenue@99 41 info.func = function() self:Maximize() end
Nenue@99 42 else
Nenue@99 43 info.text = 'Minimize'
Nenue@99 44 info.func = function() self:Minimize() end
Nenue@99 45 end
Nenue@99 46 UIDropDownMenu_AddButton(info)
Nenue@99 47 info.text = 'Close'
Nenue@99 48 info.func = function() self:Toggle() end
Nenue@99 49 UIDropDownMenu_AddButton(info)
Nenue@99 50
Nenue@99 51 end, 'MENU')
Nenue@99 52 self.DropdownButton:SetScript('OnClick', function(button)
Nenue@99 53 ToggleDropDownMenu(1, nil, self.DropdownFrame, button, 0, 0)
Nenue@99 54 end)
Nenue@98 55
Nenue@98 56 self.width = self:GetWidth()
Nenue@98 57 self.height = self:GetWidth()
Nenue@100 58 self.isHover = false
Nenue@98 59 end
Nenue@98 60
Nenue@98 61 function DevianConsoleMixin:Setup(info)
Nenue@98 62 for k,v in pairs(info) do
Nenue@98 63 self[k] = v
Nenue@98 64 --oldprint(k,v)
Nenue@98 65 end
Nenue@98 66 self.Dock = DevianDock:GetDockButton(self)
Nenue@98 67 self:Update()
Nenue@98 68 end
Nenue@98 69
Nenue@99 70 local blockedType = {['table'] = true, ['function'] = true }
Nenue@99 71 local blockedKey = {[0] = true }
Nenue@99 72
Nenue@99 73 -- Synchronize vars
Nenue@99 74 function DevianConsoleMixin:Finalize()
Nenue@99 75 local id = self:GetID()
Nenue@99 76 for k,v in pairs(D.channels[id]) do
Nenue@99 77 if not self[k] then
Nenue@99 78 D.channels[id][k] = nil
Nenue@99 79 end
Nenue@99 80 end
Nenue@99 81 for k,v in pairs(self) do
Nenue@99 82 if not (blockedType[type(v)] or blockedKey[k]) then
Nenue@99 83 if D.channels[id][k] ~= v then
Nenue@99 84 D.channels[id][k] = v
Nenue@99 85 end
Nenue@99 86 end
Nenue@99 87 end
Nenue@100 88 D.channels[id].isPressed = nil
Nenue@100 89 D.channels[id].isHover = nil
Nenue@99 90 end
Nenue@99 91
Nenue@99 92 function DevianConsoleMixin:Pin(pinned)
Nenue@99 93 self.pinned = pinned or (not self.pinned)
Nenue@99 94 self:Update(true)
Nenue@99 95 end
Nenue@99 96
Nenue@99 97 function DevianConsoleMixin:Update(setFinal)
Nenue@98 98 self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', self.x, self.y)
Nenue@99 99
Nenue@99 100 if self.minimized then
Nenue@99 101 self:SetHeight(20)
Nenue@99 102 self:SetMaxResize(GetScreenWidth(),20)
Nenue@99 103 self.GripBottom:Hide()
Nenue@99 104 self.GripSide:Hide()
Nenue@99 105 else
Nenue@99 106 self:SetSize(self.width, self.height)
Nenue@99 107 self.GripBottom:Show()
Nenue@99 108 self.GripSide:Show()
Nenue@99 109 end
Nenue@99 110
Nenue@99 111
Nenue@98 112 -- oldprint(self:GetName(), self.x, self.y)
Nenue@98 113
Nenue@100 114 local isFront = (D.currentProfile.current_channel == self.index)
Nenue@98 115 local r,g,b,a = unpack(D.db.backborder)
Nenue@98 116 if isFront then
Nenue@98 117 r,g,b,a = unpack(D.db.frontborder)
Nenue@98 118 self.backdrop:SetColorTexture(0,0,0,1)
Nenue@100 119 elseif self.pinned then
Nenue@100 120 self.backdrop:SetColorTexture(0,0,0,1)
Nenue@100 121 r,g,b,a = unpack(D.db.backborder)
Nenue@100 122 self.DropdownButton.Background:SetGradient('VERTICAL', .65,.35,.25, .15, .11, .05)
Nenue@98 123 else
Nenue@100 124 self.DropdownButton.Background:SetGradient('VERTICAL', .25,.35,.65, .05, .11, .15)
Nenue@100 125 self.backdrop:SetColorTexture(0,0,0,1)
Nenue@100 126 if self.raised then
Nenue@100 127 self.raised = nil
Nenue@100 128 self:Lower()
Nenue@100 129 end
Nenue@100 130 end
Nenue@100 131 if self.isPressed then
Nenue@100 132 r,g,b,a = 1,1,1,1
Nenue@100 133 elseif self.isHover then
Nenue@100 134 r,g,b,a = .5,.5,.5,1
Nenue@100 135 end
Nenue@98 136
Nenue@100 137
Nenue@98 138 for name, region in pairs(self.border) do
Nenue@98 139 region:SetColorTexture(r,g,b,a)
Nenue@98 140 end
Nenue@100 141 self.title:SetText(self.index..' '.. (self.signature or '?') .. (' '..self:GetFrameLevel()))
Nenue@98 142
Nenue@98 143 --oldprint(self:GetID(), self.enabled, self.minimized, self.x, self.y)
Nenue@98 144 self.isFront = isFront
Nenue@98 145 self:SetShown(self.enabled)
Nenue@99 146 self.backdrop:SetShown(self.enabled)
Nenue@99 147 self.out:SetShown((not self.minimized))
Nenue@99 148
Nenue@99 149
Nenue@99 150 if setFinal then
Nenue@99 151 self:Finalize()
Nenue@99 152 end
Nenue@99 153
Nenue@98 154 end
Nenue@98 155
Nenue@98 156
Nenue@99 157
Nenue@98 158 function DevianConsoleMixin:OnShow()
Nenue@98 159 self:Update()
Nenue@98 160 end
Nenue@98 161
Nenue@98 162
Nenue@98 163
Nenue@98 164 function DevianConsoleMixin:OnHide() end
Nenue@98 165
Nenue@98 166 function DevianConsoleMixin:OnMouseWheel(delta)
Nenue@98 167
Nenue@98 168 local up = delta > 0
Nenue@98 169 if IsControlKeyDown() then
Nenue@98 170 if up then self.out:ScrollToTop()
Nenue@98 171 else self.out:ScrollToBottom() end
Nenue@98 172 elseif IsShiftKeyDown() then
Nenue@98 173 if up then self.out:PageUp()
Nenue@98 174 else self.out:PageDown() end
Nenue@98 175 else
Nenue@98 176 if up then self.out:ScrollUp()
Nenue@98 177 else self.out:ScrollDown() end
Nenue@98 178 end
Nenue@98 179 end
Nenue@98 180 function DevianConsoleMixin:MinMax(minimized)
Nenue@98 181 minimized = minimized or self.minimized
Nenue@98 182 if minimized then
Nenue@98 183 self:Maximize()
Nenue@98 184 else
Nenue@98 185 self:Minimize()
Nenue@98 186 end
Nenue@98 187 end
Nenue@98 188
Nenue@98 189 function DevianConsoleMixin:Minimize()
Nenue@98 190 self.minimized = true
Nenue@99 191 self:Update(true)
Nenue@98 192 end
Nenue@98 193
Nenue@98 194 function DevianConsoleMixin:Maximize()
Nenue@99 195 self.minimized = nilnil
Nenue@99 196 self:Update(true)
Nenue@98 197 end
Nenue@98 198
Nenue@99 199 function DevianConsoleMixin:OnMouseDown(button)
Nenue@100 200 self.isPressed = true
Nenue@100 201 self:Update()
Nenue@99 202 end
Nenue@99 203
Nenue@99 204
Nenue@98 205 function DevianConsoleMixin:OnMouseUp(button)
Nenue@100 206 self.isPressed = nil
Nenue@98 207 if button == 'LeftButton' then
Nenue@100 208 --print('go to front')
Nenue@98 209 self:ToFront()
Nenue@98 210 else
Nenue@98 211 self:MinMax()
Nenue@98 212 end
Nenue@98 213 end
Nenue@98 214
Nenue@98 215 function DevianConsoleMixin:OnLeave()
Nenue@100 216 self.isHover = nil
Nenue@100 217 self:Update()
Nenue@98 218 end
Nenue@98 219
Nenue@98 220 function DevianConsoleMixin:OnEnter()
Nenue@100 221 self.isHover = true
Nenue@100 222 self:Update()
Nenue@98 223 end
Nenue@98 224
Nenue@98 225 function DevianConsoleMixin:OnDragStart()
Nenue@99 226 self:ToFront()
Nenue@99 227 self:StartMoving()
Nenue@99 228 D.IterateChannels(function(frame)
Nenue@99 229 frame.out:SetShown(false)
Nenue@99 230 frame.backdrop:Hide()
Nenue@99 231 end, self)
Nenue@98 232 end
Nenue@98 233
Nenue@98 234 function DevianConsoleMixin:OnDragStop()
Nenue@99 235
Nenue@99 236 local channelEntry = D.channels[self:GetID()]
Nenue@98 237 self.x = self:GetLeft()
Nenue@98 238 self.y = self:GetTop() - GetScreenHeight()
Nenue@99 239 if not self.minimized then
Nenue@99 240 self.width = self:GetWidth()
Nenue@99 241 self.height = self:GetHeight()
Nenue@99 242 end
Nenue@99 243
Nenue@99 244 --print(channelEntry.x, channelEntry.y, channelEntry.width, channelEntry.height)
Nenue@98 245 self:StopMovingOrSizing()
Nenue@99 246 self:SetClampRectInsets(0,0,0,0)
Nenue@98 247
Nenue@99 248 self:Update(true)
Nenue@99 249
Nenue@99 250 D.IterateChannels(function(frame)
Nenue@100 251 frame:Update(true)
Nenue@99 252 end, self)
Nenue@98 253 end
Nenue@98 254
Nenue@98 255 function DevianConsoleMixin:ToFront()
Nenue@100 256 D.currentProfile.current_channel = self.index
Nenue@100 257
Nenue@98 258 self:Raise()
Nenue@98 259 for index, channel in ipairs(D.console) do
Nenue@100 260 channel:Update(true)
Nenue@98 261 end
Nenue@98 262 end
Nenue@98 263
Nenue@100 264 function DevianConsoleMixin:Toggle(value)
Nenue@100 265 if value == nil then
Nenue@100 266 value = (not self.enabled)
Nenue@100 267 end
Nenue@100 268
Nenue@100 269 self.enabled = value
Nenue@100 270 D:Print('Console #'..self:GetID(), self.enabled and 'open' or 'closed')
Nenue@100 271
Nenue@100 272 self:Update(true)
Nenue@99 273 end
Nenue@99 274
Nenue@99 275 function DevianConsoleMixin:OnEvent(event, arg)
Nenue@100 276 --oldprint(event, arg)
Nenue@99 277 local db = D.db
Nenue@99 278 if self.enabled then
Nenue@100 279
Nenue@100 280 local progress = self.moveFade:GetProgress() or 1
Nenue@100 281 self.moveFade:Stop()
Nenue@100 282
Nenue@99 283 if event == 'PLAYER_STARTED_MOVING' then
Nenue@100 284 local F1 = self.moveFade.alphaOut
Nenue@100 285 F1:SetFromAlpha(db.movement_fade_from + (1-progress))
Nenue@100 286 F1:SetToAlpha(db.movement_fade_to)
Nenue@100 287 F1:SetDuration(db.movement_fade_time * (1-progress))
Nenue@100 288 self.moveFade:Play()
Nenue@100 289 self:EnableMouse(false)
Nenue@100 290 elseif event == 'PLAYER_STOPPED_MOVING' then
Nenue@99 291 self.moveFade:Stop()
Nenue@99 292 local F1 = self.moveFade.alphaOut
Nenue@100 293 F1:SetFromAlpha(db.movement_fade_to + (1-progress))
Nenue@99 294 F1:SetToAlpha(db.movement_fade_from)
Nenue@100 295 F1:SetDuration(db.movement_fade_time * (progress))
Nenue@99 296 self.moveFade:Play()
Nenue@99 297 self:EnableMouse(true)
Nenue@99 298 end
Nenue@99 299 end
Nenue@99 300 end
Nenue@99 301
Nenue@99 302 DevianConsoleSizeButtonMixin = {}
Nenue@99 303 function DevianConsoleSizeButtonMixin:OnLoad()
Nenue@99 304 self:RegisterForDrag('LeftButton')
Nenue@99 305 end
Nenue@99 306 function DevianConsoleSizeButtonMixin:OnDragStart()
Nenue@99 307 local anchor = self:GetPoint(2)
Nenue@99 308 local frame = self:GetParent()
Nenue@99 309 if anchor == 'BOTTOMLEFT' then
Nenue@99 310 frame:SetClampRectInsets(frame:GetLeft(), GetScreenWidth()- frame:GetRight(), GetScreenHeight() - frame:GetTop(), 0)
Nenue@99 311 frame:SetMinResize(frame.width, 24)
Nenue@99 312 frame:SetMaxResize(frame.width, GetScreenHeight())
Nenue@99 313 elseif anchor == 'BOTTOM' then
Nenue@99 314 frame:SetClampRectInsets(frame:GetLeft(), 0, GetScreenHeight() - frame:GetTop(), GetScreenHeight() - frame:GetBottom())
Nenue@99 315 frame:SetMinResize(200, frame.height)
Nenue@99 316 frame:SetMaxResize(GetScreenWidth(), frame.height)
Nenue@99 317 end
Nenue@99 318 frame:StartSizing()
Nenue@99 319 end
Nenue@100 320
Nenue@99 321 function DevianConsoleSizeButtonMixin:OnDragStop()
Nenue@99 322 local frame = self:GetParent()
Nenue@99 323 frame:OnDragStop()
Nenue@99 324 end