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 SuperVillain, L = unpack(SVUI);
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()
  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:SetFrameLevel(5)
    skada:SetBackdrop(nil)
    if(window.db.enabletitle and not skada.button.Panel) then
      skada.button:SetFixedPanelTemplate('Default', true)
    end
    if(not skada.Panel) then
      STYLE:ApplyFrameStyle(skada)
    end
    if(skada.Panel) then
      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 SuperVillain.CurrentlyDocked["SkadaHolder"] or not SuperVillain.CurrentlyDocked["SkadaHolder2"] then return end
    for index, window in ipairs(Skada:GetWindows()) do
      if window:IsShown() then
        SuperDockWindow:Show()
      else
        SuperDockWindow:Hide()
      end
    end
  end)

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

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

  hooksecurefunc(Skada, 'UpdateDisplay', function()
    if SuperVillain.CurrentlyDocked["SkadaHolder"] or SuperVillain.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(SuperVillain.db.SVDock.docklets.DockletMain == key)then
      skada_panel_loader(SkadaHolder, window, SuperDockletMain)
    elseif(SuperVillain.db.SVDock.docklets.enableExtra and SuperVillain.db.SVDock.docklets.DockletExtra == key) then
      skada_panel_loader(SkadaHolder2, window, SuperDockletExtra)
    else
      window.db.barslocked = false;
    end
  end
end

STYLE:SaveAddonStyle("Skada", StyleSkada)