Quantcast
--[[
##############################################################################
_____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_       #
 ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__      #
  __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____     #
   ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____    #
    ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____   #
     _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____  #
      __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ #
       _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_#
        ___\///////////___________\///___________\/////////_____\///////////_#
##############################################################################
S U P E R - V I L L A I N - U I   By: Munglunch                              #
##############################################################################
##########################################################
LOCALIZED LUA FUNCTIONS
##########################################################
]]--
--[[ GLOBALS ]]--
local _G = _G;
local unpack 	= _G.unpack;
local select 	= _G.select;
local pairs 	= _G.pairs;
local string 	= _G.string;
--[[ STRING METHODS ]]--
local format = string.format;
local twipe = table.wipe;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SV = _G.SVUI;
local L = LibStub("LibSuperVillain-1.0"):Lang();
local STYLE = _G.StyleVillain;
local activePanels = {};
--[[
##########################################################
SKADA
##########################################################
]]--
local function Skada_ShowPopup(self)
  STYLE:LoadAlert(L['Do you want to reset Skada?'], function(self) Skada:Reset() self:GetParent():Hide() end)
end

local function skada_panel_loader(holder, window, parent)
  if not window then return end

  local bars = Skada.displays['bar']

  holder:SetParent(parent)
  holder:SetAllPoints()

  local width,height = holder:GetSize()

  window.db.barspacing = 1;
  window.db.barwidth = width - 4;
  window.db.background.height = height - (window.db.enabletitle and window.db.title.height or 0) - 1;
  window.db.spark=false;
  window.db.barslocked = true;
  window.bargroup:ClearAllPoints()
  window.bargroup:SetPoint('BOTTOMLEFT',holder,'BOTTOMLEFT',0,0)
  window.bargroup:SetParent(holder)
  window.bargroup:SetFrameStrata('LOW')

  local bgroup = window.bargroup.backdrop;
  if bgroup and not bgroup.Panel then
    bgroup:Show()
    bgroup:SetFixedPanelTemplate('Transparent',true)
  end

  bars.ApplySettings(bars, window)
end

local function StyleSkada()
  assert(Skada, "AddOn Not Loaded")

  if(not SkadaHolder) then
    local SkadaHolder = CreateFrame("Frame", "SkadaHolder", UIParent)
  end
  if(not SkadaHolder2) then
    local SkadaHolder2 = CreateFrame("Frame", "SkadaHolder2", UIParent)
  end
  Skada.ShowPopup = Skada_ShowPopup

  local SkadaDisplayBar = Skada.displays['bar']

  hooksecurefunc(SkadaDisplayBar, 'AddDisplayOptions', function(self, window, options)
    options.baroptions.args.barspacing = nil
    options.titleoptions.args.texture = nil
    options.titleoptions.args.bordertexture = nil
    options.titleoptions.args.thickness = nil
    options.titleoptions.args.margin = nil
    options.titleoptions.args.color = nil
    options.windowoptions = nil
  end)

  hooksecurefunc(SkadaDisplayBar, 'ApplySettings', function(self, window)
    local skada = window.bargroup
    skada:SetSpacing(1)
    skada:SetFrameLevel(5)
    skada:SetBackdrop(nil)

    if(window.db.enabletitle) then
      skada.button:SetHeight(18)
      skada.button:SetButtonTemplate()
      skada.button:GetFontString():SetFont(SV.Media.font.names, 15, "OUTLINE")
    end

    if(not skada.Panel) then
      STYLE:ApplyWindowHolder(skada, true)
      skada.Panel:ClearAllPoints()
      skada.Panel:Point('TOPLEFT', window.db.enabletitle and skada.button or skada, 'TOPLEFT', -2, 2)
      skada.Panel:Point('BOTTOMRIGHT', skada, 'BOTTOMRIGHT', 2, -2)
    else
      skada.Panel:ClearAllPoints()
      skada.Panel:Point('TOPLEFT', window.db.enabletitle and skada.button or skada, 'TOPLEFT', -2, 2)
      skada.Panel:Point('BOTTOMRIGHT', skada, 'BOTTOMRIGHT', 2, -2)
    end
  end)

  hooksecurefunc(Skada, 'ToggleWindow', function()
    if InCombatLockdown() then return end
    if not SV.CurrentlyDocked["SkadaHolder"] or not SV.CurrentlyDocked["SkadaHolder2"] then return end
    for index, window in ipairs(Skada:GetWindows()) do
      if window:IsShown() then
        SuperDockWindowRight:Show()
      else
        SuperDockWindowRight:Hide()
      end
    end
  end)

  hooksecurefunc(Skada, 'CreateWindow', function()
    if SV.CurrentlyDocked["SkadaHolder"] or SV.CurrentlyDocked["SkadaHolder2"] then
      STYLE:Docklet_Skada()
    end
  end)

  hooksecurefunc(Skada, 'DeleteWindow', function()
    if SV.CurrentlyDocked["SkadaHolder"] or SV.CurrentlyDocked["SkadaHolder2"] then
      STYLE:Docklet_Skada()
    end
  end)

  hooksecurefunc(Skada, 'UpdateDisplay', function()
    if SV.CurrentlyDocked["SkadaHolder"] or SV.CurrentlyDocked["SkadaHolder2"] then
      STYLE:Docklet_Skada()
    end
  end)
end

function STYLE:Docklet_Skada()
  if not Skada then return end
  if(not SkadaHolder) then
    local SkadaHolder = CreateFrame("Frame", "SkadaHolder", UIParent)
  end
  if(not SkadaHolder2) then
    local SkadaHolder2 = CreateFrame("Frame", "SkadaHolder2", UIParent)
  end
  for index,window in pairs(Skada:GetWindows()) do
    local key = "Skada"..window.db.name
    if(SV.SVDock.db.docklets.DockletMain == key)then
      skada_panel_loader(SkadaHolder, window, SuperDockletMain)
    elseif(SV.SVDock.db.docklets.enableExtra and SV.SVDock.db.docklets.DockletExtra == key) then
      skada_panel_loader(SkadaHolder2, window, SuperDockletExtra)
    else
      window.db.barslocked = false;
    end
  end
end

STYLE:SaveAddonStyle("Skada", StyleSkada)