view Console.lua @ 98:33bc8baba858

start of a lot of v3 groundwork based on better knowledge of the addon interface: - use of mixin as a lexical center for generated frames - removal of unfinished segments
author Nenue
date Wed, 26 Oct 2016 10:17:43 -0400
parents
children 7d94df3804a7
line wrap: on
line source
-- Mixin for console
local _, D = ...
DevianConsoleMixin = {}

function DevianConsoleMixin:OnLoad()
  self:SetMaxResize(GetScreenWidth(), GetScreenHeight())
  self:SetMinResize(100, 24)

  self:EnableMouse(true)
  self:RegisterForDrag('LeftButton')
  self:SetMovable(true)
  self:SetResizable(true)
  self.out:SetFont("Interface\\Addons\\Devian\\font\\SourceCodePro-Regular.ttf", 13, 'NORMAL')
  self.out:SetJustifyH('LEFT')
  self.out:SetFading(false)

  self.width = self:GetWidth()
  self.height = self:GetWidth()
end

function DevianConsoleMixin:Setup(info)
  for k,v in pairs(info) do
    self[k] = v
    --oldprint(k,v)
  end
  self.Dock = DevianDock:GetDockButton(self)
  self:Update()
end

function DevianConsoleMixin:Update()
  self.title:SetText(self.index..' '.. (self.signature or '?'))
  self:SetSize(self.width, self.height)
  self:SetPoint('TOPLEFT', UIParent, 'TOPLEFT', self.x, self.y)
  --  oldprint(self:GetName(), self.x, self.y)

  local isFront = D.currentProfile.current_channel == self.index
  local r,g,b,a = unpack(D.db.backborder)
  if isFront then
    r,g,b,a = unpack(D.db.frontborder)
    self.backdrop:SetColorTexture(0,0,0,1)
  else
    self.backdrop:SetColorTexture(0,0,0,0.5)

  end
  for name, region in pairs(self.border) do
    region:SetColorTexture(r,g,b,a)
  end

  --oldprint(self:GetID(), self.enabled, self.minimized, self.x, self.y)
  self.isFront = isFront
  self:SetShown(self.enabled)
  self.out:SetShown(self.enabled)
end


function DevianConsoleMixin:OnShow()
  self:Update()
end



function DevianConsoleMixin:OnHide() end

function DevianConsoleMixin:OnMouseWheel(delta)

  local up =  delta > 0
  if IsControlKeyDown() then
    if up then self.out:ScrollToTop()
    else self.out:ScrollToBottom() end
  elseif IsShiftKeyDown() then
    if up then self.out:PageUp()
    else self.out:PageDown() end
  else
    if up then self.out:ScrollUp()
    else self.out:ScrollDown() end
  end
end
function DevianConsoleMixin:MinMax(minimized)
  minimized = minimized or self.minimized
  if minimized then
    self:Maximize()
  else
    self:Minimize()
  end
end

function DevianConsoleMixin:Minimize()
  self:SetHeight(20)
  self:SetMaxResize(GetScreenWidth(),20)
  self.minimized = true
  self.out:Hide()
  D.channels[self.index].minimized = true
end

function DevianConsoleMixin:Maximize()
  local db = D.channels[self.index]
  self:SetHeight(db.height)
  self:SetMaxResize(GetScreenWidth(),GetScreenHeight())
  self.minimized = nil
  self.out:Show()
  D.channels[self.index].minimized = nil
end

function DevianConsoleMixin:OnMouseUp(button)
  if button == 'LeftButton' then
    self:ToFront()
  else
    self:MinMax()
  end
end

function DevianConsoleMixin:OnLeave()
end

function DevianConsoleMixin:OnEnter()
end

function DevianConsoleMixin:OnDragStart()

    self:StartMoving()
end

function DevianConsoleMixin:OnDragStop()
  self.x = self:GetLeft()
  self.y = self:GetTop() - GetScreenHeight()
  D.currentProfile.channels[self:GetID()].x = self:GetLeft()
  D.currentProfile.channels[self:GetID()].y = self:GetTop() - GetScreenHeight()
  self:StopMovingOrSizing()
end

function DevianConsoleMixin:Reset()
end

function DevianConsoleMixin:ToFront()
  self:Raise()
  D.currentProfile.current_channel = self.index
  for index, channel in ipairs(D.console) do
    channel:Update()
  end
end

function DevianConsoleMixin:Toggle()
  self.enabled = (not self.enabled)
  --oldprint(self:GetID(), self.enabled)
  self:Update()
end