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 type 		= _G.type;
local tinsert 	= _G.tinsert;
local string 	= _G.string;
local math 		= _G.math;
local table 	= _G.table;
--[[ STRING METHODS ]]--
local format,find = string.format, string.find;
--[[ MATH METHODS ]]--
local floor = math.floor;
--[[ TABLE METHODS ]]--
local twipe, tcopy = table.wipe, table.copy;
--[[
##########################################################
GET ADDON DATA
##########################################################
]]--
local SVUIAddOnName, PLUGIN = ...;
local SuperVillain, L, G, CONFIGS = unpack(SVUI);
local NewHook = hooksecurefunc;
local SVUIAddonEventHandler = CreateFrame("Frame", nil)
local version = GetAddOnMetadata(..., "Version");

PLUGIN = SuperVillain:Prototype(SVUIAddOnName, version)

_G["StyleVillain"] = PLUGIN;
--[[
##########################################################
CORE DATA
##########################################################
]]--
PLUGIN.DockedParent = {}
PLUGIN.AddOnQueue = {};
PLUGIN.AddOnEvents = {};
PLUGIN.BlizzardQueue = {};
PLUGIN.CustomQueue = {};
PLUGIN.EventListeners = {};
PLUGIN.PassiveAddons = {};
PLUGIN.OptionsCache = {
	order = 4,
	type = "group",
	name = "Addon Styling",
	get = function(a)return SuperVillain.db.SVStyle.addons[a[#a]] end,
	set = function(a,b)SuperVillain.db.SVStyle.addons[a[#a]] = b;SuperVillain:StaticPopup_Show("RL_CLIENT")end,
	disabled = function()return not SuperVillain.db.SVStyle.addons.enable end,
	guiInline = true,
	args = {
		ace3 = {
			type = "toggle",
			order = 1,
			name = "Ace3"
		},
	}
};
--[[
##########################################################
CORE FUNCTIONS
##########################################################
]]--
function PLUGIN:LoadAlert(MainText, Function)
	self.Alert.Text:SetText(MainText)
	self.Alert.Accept:SetScript('OnClick', Function)
	self.Alert:Show()
end

function PLUGIN:IsAddonReady(this, ...)
	for i = 1, select('#', ...) do
		local a = select(i, ...)
		if not a then break end
		if not IsAddOnLoaded(a) then return false end
	end
	return SuperVillain.db.SVStyle.addons[this]
end

function PLUGIN:SaveAddonStyle(addon, fn, force, passive, ...)
	local args,hasEvent = {},false;
	for i=1, select("#",...) do
		local event = select(i,...)
		if event then
			args[event] = true
			hasEvent = true;
		end;
	end;
	if passive then self.PassiveAddons[addon] = true end;
	if not self.AddOnEvents[addon] then
		self.AddOnEvents[addon] = {};
		self.AddOnEvents[addon]["complete"] = false;
		if hasEvent then
			self.AddOnEvents[addon]["events"] = args;
		end
	end
	if force then
		fn()
		self.AddOnQueue[addon] = nil
	else
		self.AddOnQueue[addon] = fn
	end
end;

function PLUGIN:SaveBlizzardStyle(addon, fn, force, passive, preload)
	if passive then self.PassiveAddons[addon] = true end;
	if force then
		if(preload and not IsAddOnLoaded(addon)) then
			LoadAddOn(addon)
		end
		fn()
		self.BlizzardQueue[addon] = nil
	else
		self.BlizzardQueue[addon] = fn
	end
end;

function PLUGIN:SaveCustomStyle(fn)
	tinsert(PLUGIN.CustomQueue, fn)
end;

function PLUGIN:DefineEventFunction(addonEvent, addon)
	if(not self.EventListeners[addonEvent]) then
		self.EventListeners[addonEvent] = {}
	end
	if(addon) then
		self.EventListeners[addonEvent][addon] = true
	end
	if(not self[addonEvent]) then
		self[addonEvent] = function(self, event, ...)
			for addon,fn in pairs(self.AddOnQueue)do
				if self:IsAddonReady(addon) and self.EventListeners[event] and self.EventListeners[event][addon] then
					local _,error = pcall(fn, event, ...)
				end
			end
		end;
		SVUIAddonEventHandler:RegisterEvent(addonEvent);
	end
end

function PLUGIN:SafeEventRemoval(addon, event)
	if not self.EventListeners[event] then return end;
	if not self.EventListeners[event][addon] then return end;
	self.EventListeners[event][addon] = nil;
	local defined = false;
	for name,_ in pairs(self.EventListeners[event]) do
		if name then
			defined = true;
			break
		end
	end;
	if not defined then
		SVUIAddonEventHandler:UnregisterEvent(event)
	end
end;

function PLUGIN:RefreshAddonStyles()
	for addon,fn in pairs(self.AddOnQueue) do
		if(SuperVillain.db.SVStyle.addons[addon] == true) then
			if IsAddOnLoaded(addon) then
				local _,error = pcall(fn, "PLAYER_ENTERING_WORLD")
			end
		end
	end
end

function PLUGIN:LoadStyles()
	for addon,fn in pairs(self.BlizzardQueue) do
		if IsAddOnLoaded(addon) then
			fn()
			self.BlizzardQueue[addon]=nil
		end
	end;
	for _,fn in pairs(self.CustomQueue)do
		fn()
	end;
	twipe(self.CustomQueue)
	for addon,fn in pairs(self.AddOnQueue)do
		PLUGIN:AppendAddonOption(addon)
		if IsAddOnLoaded(addon) then
			if(SuperVillain.db.SVStyle.addons[addon] == nil) then
				SuperVillain.db.SVStyle.addons[addon] = true
			end
			if(SuperVillain.db.SVStyle.addons[addon] == true) then
				if(not self.AddOnEvents[addon]["complete"]) then
					if self.AddOnEvents[addon]["events"] then
						for event,_ in pairs(self.AddOnEvents[addon]["events"]) do
							self:DefineEventFunction(event, addon)
						end
					end
					self.AddOnEvents[addon]["complete"] = true
				end
			end
		end
	end;
	self:RefreshAddonStyles()
end

function PLUGIN:ToggleStyle(addon, value)
	SuperVillain.db.SVStyle.addons[addon] = value
end;
--[[
##########################################################
OPTIONS CREATION
##########################################################
]]--
function PLUGIN:AppendAddonOption(addon)
	PLUGIN.OptionsCache.args[addon] = {
		type = "toggle",
		name = addon,
		desc = L["Addon Styling"],
		get=function(a)return PLUGIN:IsAddonReady(a[#a])end,
		set=function(a,b)SuperVillain.db.SVStyle.addons[a[#a]] = b;SuperVillain:StaticPopup_Show("RL_CLIENT")end,
		disabled = function()
			if addon then
				 return not IsAddOnLoaded(addon)
			else
				 return false
			end
		end
	}
end;

local RegisterAddonDocklets = function()
	local MAIN = _G["SuperDockletMain"];
	local EXTRA = _G["SuperDockletExtra"];
	local main = SuperVillain.db.SVDock.docklets.DockletMain;
  	local alternate = SuperVillain.db.SVDock.docklets.enableExtra and SuperVillain.db.SVDock.docklets.DockletExtra or "";
  	local tipLeft, tipRight = "", "";
  	if main == nil or main == "None" then return end;

	if find(main, "Skada") or find(alternate, "Skada") then
		if SuperVillain:IsDockletReady("Skada") then
			PLUGIN:Docklet_Skada()
			if find(alternate, "Skada") and EXTRA.FrameName  ~= "SkadaHolder2" then
				tipRight = "and Skada";
				SuperVillain:RegisterExtraDocklet("SkadaHolder2")
				--PLUGIN.DockedParent["Skada"] = EXTRA
			end
			if find(main, "Skada") and MAIN.FrameName  ~= "SkadaHolder" then
				tipLeft = "Skada";
				SuperVillain:RegisterMainDocklet("SkadaHolder")
				--PLUGIN.DockedParent["Skada"] = MAIN
			end
		end;
	end;
	if main == "Omen" or alternate == "Omen" then
		if SuperVillain:IsDockletReady("Omen") then
			if alternate == "Omen" and EXTRA.FrameName ~= "OmenAnchor" then
				tipRight = "and Omen";
				SuperVillain:RegisterExtraDocklet("OmenAnchor")
				PLUGIN:Docklet_Omen(EXTRA)
				PLUGIN.DockedParent["Omen"] = EXTRA
			elseif MAIN.FrameName ~= "OmenAnchor" then
				tipLeft = "Omen";
				SuperVillain:RegisterMainDocklet("OmenAnchor")
				PLUGIN:Docklet_Omen(MAIN)
				PLUGIN.DockedParent["Omen"] = MAIN
			end
		end;
	end;
	if main == "Recount" or alternate == "Recount" then
		if SuperVillain:IsDockletReady("Recount") then
			if alternate == "Recount" and EXTRA.FrameName ~= "Recount_MainWindow" then
				tipRight = "and Recount";
				SuperVillain:RegisterExtraDocklet("Recount_MainWindow")
				PLUGIN:Docklet_Recount(EXTRA)
				PLUGIN.DockedParent["Recount"] = EXTRA
			elseif MAIN.FrameName ~= "Recount_MainWindow" then
				tipLeft = "Recount";
				SuperVillain:RegisterMainDocklet("Recount_MainWindow")
				PLUGIN:Docklet_Recount(MAIN)
				PLUGIN.DockedParent["Recount"] = MAIN
			end
		end;
	end;
	if main == "TinyDPS" or alternate == "TinyDPS" then
		if SuperVillain:IsDockletReady("TinyDPS") then
			if alternate == "TinyDPS" and EXTRA.FrameName ~= "tdpsFrame" then
				tipRight = "and TinyDPS";
				SuperVillain:RegisterExtraDocklet("tdpsFrame")
				PLUGIN:Docklet_TinyDPS(EXTRA)
				PLUGIN.DockedParent["TinyDPS"] = EXTRA
			elseif MAIN.FrameName ~= "tdpsFrame" then
				tipLeft = "TinyDPS";
				SuperVillain:RegisterMainDocklet("tdpsFrame")
				PLUGIN:Docklet_TinyDPS(MAIN)
				PLUGIN.DockedParent["TinyDPS"] = MAIN
			end
		end;
	end;
	if main == "alDamageMeter" or alternate == "alDamageMeter" then
		if SuperVillain:IsDockletReady("alDamageMeter") then
			if alternate == "alDamageMeter" and EXTRA.FrameName ~= "alDamagerMeterFrame" then
				tipRight = "and alDamageMeter";
				SuperVillain:RegisterExtraDocklet("alDamagerMeterFrame")
				PLUGIN:Docklet_alDamageMeter(EXTRA)
				PLUGIN.DockedParent["alDamageMeter"] = EXTRA
			elseif MAIN.FrameName ~= "alDamagerMeterFrame" then
				tipLeft = "alDamageMeter";
				SuperVillain:RegisterMainDocklet("alDamagerMeterFrame")
				PLUGIN:Docklet_alDamageMeter(MAIN)
				PLUGIN.DockedParent["alDamageMeter"] = MAIN
			end
		end;
	end;

	if(_G["SVUI_AddonDocklet"]) then
		_G["SVUI_AddonDocklet"].TText = ("%s%s"):format(tipLeft, tipRight)
	end
end;
--[[
##########################################################
BUILD FUNCTION
##########################################################
]]--
local Registry_OnEvent = function(self, event, ...)
	if(event == "ADDON_LOADED") then
		local addon = select(1, ...)
		if PLUGIN.PassiveAddons[addon] then
			PLUGIN.BlizzardQueue[addon]()
			PLUGIN.BlizzardQueue[addon] = nil;
			return
		end;
		if not SuperVillain.AddonLaunched or not PLUGIN.BlizzardQueue[addon] then return end;
		PLUGIN.BlizzardQueue[addon]()
		PLUGIN.BlizzardQueue[addon] = nil
	elseif(PLUGIN[event]) then
		PLUGIN[event](PLUGIN, event, ...)
	end
end

local function LoadOptions()
	SuperVillain.Options.args.plugins.args.pluginOptions.args.SVStyle={
		type = "group",
		name = L["Style O Matic"],
		childGroups = "tree",
		args = {
			intro = {
				order = 1,
				type = "description",
				name = L["ART_DESC"]
			},
			blizzardEnable = {
				order = 2,
				type = "toggle",
				name = "Standard UI Styling",
				get = function(a)return SuperVillain.db.SVStyle.blizzard.enable end,
				set = function(a,b)SuperVillain.db.SVStyle.blizzard.enable = b;SuperVillain:StaticPopup_Show("RL_CLIENT")end
			},
			addonEnable = {
				order = 3,
				type = "toggle",
				name = "Addon Styling",
				get = function(a)return SuperVillain.db.SVStyle.addons.enable end,
				set = function(a,b)SuperVillain.db.SVStyle.addons.enable = b;SuperVillain:StaticPopup_Show("RL_CLIENT")end
			},
			blizzard = {
				order = 300,
				type = "group",
				name = "Individual Mods",
				get = function(a)return SuperVillain.db.SVStyle.blizzard[a[#a]]end,
				set = function(a,b)SuperVillain.db.SVStyle.blizzard[a[#a]] = b;SuperVillain:StaticPopup_Show("RL_CLIENT")end,
				disabled = function()return not SuperVillain.db.SVStyle.blizzard.enable end,
				guiInline = true,
				args = {
					bmah = {
						type = "toggle",
						name = L["Black Market AH"],
						desc = L["TOGGLEART_DESC"]
					},
					transmogrify = {
						type = "toggle",
						name = L["Transmogrify Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					encounterjournal = {
						type = "toggle",
						name = L["Encounter Journal"],
						desc = L["TOGGLEART_DESC"]
					},
					reforge = {
						type = "toggle",
						name = L["Reforge Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					calendar = {
						type = "toggle",
						name = L["Calendar Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					achievement = {
						type = "toggle",
						name = L["Achievement Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					lfguild = {
						type = "toggle",
						name = L["LF Guild Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					inspect = {
						type = "toggle",
						name = L["Inspect Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					binding = {
						type = "toggle",
						name = L["KeyBinding Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					gbank = {
						type = "toggle",
						name = L["Guild Bank"],
						desc = L["TOGGLEART_DESC"]
					},
					archaeology = {
						type = "toggle",
						name = L["Archaeology Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					guildcontrol = {
						type = "toggle",
						name = L["Guild Control Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					guild = {
						type = "toggle",
						name = L["Guild Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					tradeskill = {
						type = "toggle",
						name = L["TradeSkill Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					raid = {
						type = "toggle",
						name = L["Raid Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					talent = {
						type = "toggle",
						name = L["Talent Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					auctionhouse = {
						type = "toggle",
						name = L["Auction Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					timemanager = {
						type = "toggle",
						name = L["Time Manager"],
						desc = L["TOGGLEART_DESC"]
					},
					barber = {
						type = "toggle",
						name = L["Barbershop Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					macro = {
						type = "toggle",
						name = L["Macro Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					debug = {
						type = "toggle",
						name = L["Debug Tools"],
						desc = L["TOGGLEART_DESC"]
					},
					trainer = {
						type = "toggle",
						name = L["Trainer Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					socket = {
						type = "toggle",
						name = L["Socket Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					alertframes = {
						type = "toggle",
						name = L["Alert Frames"],
						desc = L["TOGGLEART_DESC"]
					},
					loot = {
						type = "toggle",
						name = L["Loot Frames"],
						desc = L["TOGGLEART_DESC"]
					},
					bgscore = {
						type = "toggle",
						name = L["BG Score"],
						desc = L["TOGGLEART_DESC"]
					},
					merchant = {
						type = "toggle",
						name = L["Merchant Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					mail = {
						type = "toggle",
						name = L["Mail Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					help = {
						type = "toggle",
						name = L["Help Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					trade = {
						type = "toggle",
						name = L["Trade Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					gossip = {
						type = "toggle",
						name = L["Gossip Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					greeting = {
						type = "toggle",
						name = L["Greeting Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					worldmap = {
						type = "toggle",
						name = L["World Map"],
						desc = L["TOGGLEART_DESC"]
					},
					taxi = {
						type = "toggle",
						name = L["Taxi Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					lfg = {
						type = "toggle",
						name = L["LFG Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					mounts = {
						type = "toggle",
						name = L["Mounts & Pets"],
						desc = L["TOGGLEART_DESC"]
					},
					quest = {
						type = "toggle",
						name = L["Quest Frames"],
						desc = L["TOGGLEART_DESC"]
					},
					petition = {
						type = "toggle",
						name = L["Petition Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					dressingroom = {
						type = "toggle",
						name = L["Dressing Room"],
						desc = L["TOGGLEART_DESC"]
					},
					pvp = {
						type = "toggle",
						name = L["PvP Frames"],
						desc = L["TOGGLEART_DESC"]
					},
					nonraid = {
						type = "toggle",
						name = L["Non-Raid Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					friends = {
						type = "toggle",
						name = L["Friends"],
						desc = L["TOGGLEART_DESC"]
					},
					spellbook = {
						type = "toggle",
						name = L["Spellbook"],
						desc = L["TOGGLEART_DESC"]
					},
					character = {
						type = "toggle",
						name = L["Character Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					misc = {
						type = "toggle",
						name = L["Misc Frames"],
						desc = L["TOGGLEART_DESC"]
					},
					tabard = {
						type = "toggle",
						name = L["Tabard Frame"],
						desc = L["TOGGLEART_DESC"]
					},
					guildregistrar = {
						type = "toggle",
						name = L["Guild Registrar"],
						desc = L["TOGGLEART_DESC"]
					},
					bags = {
						type = "toggle",
						name = L["Bags"],
						desc = L["TOGGLEART_DESC"]
					},
					stable = {
						type = "toggle",
						name = L["Stable"],
						desc = L["TOGGLEART_DESC"]
					},
					bgmap = {
						type = "toggle",
						name = L["BG Map"],
						desc = L["TOGGLEART_DESC"]
					},
					petbattleui = {
						type = "toggle",
						name = L["Pet Battle"],
						desc = L["TOGGLEART_DESC"]
					},
					losscontrol = {
						type = "toggle",
						name = L["Loss Control"],
						desc = L["TOGGLEART_DESC"]
					},
					voidstorage = {
						type = "toggle",
						name = L["Void Storage"],
						desc = L["TOGGLEART_DESC"]
					},
					itemUpgrade = {
						type = "toggle",
						name = L["Item Upgrade"],
						desc = L["TOGGLEART_DESC"]
					}
				}
			},
			addons = PLUGIN.OptionsCache
		}
	}
end

local function LoadStyleOMatic()
	PLUGIN.db = SuperVillain.db.SVStyle

	local alert = CreateFrame('Frame', nil, UIParent);
	alert:SetFixedPanelTemplate('Transparent');
	alert:SetSize(250, 70);
	alert:SetPoint('CENTER', UIParent, 'CENTER');
	alert:SetFrameStrata('DIALOG');
	alert.Text = alert:CreateFontString(nil, "OVERLAY");
	alert.Text:SetFont(SuperVillain.Media.font.default, 12);
	alert.Text:SetPoint('TOP', alert, 'TOP', 0, -10);
	alert.Accept = CreateFrame('Button', nil, alert);
	alert.Accept:SetSize(70, 25);
	alert.Accept:SetPoint('RIGHT', alert, 'BOTTOM', -10, 20);
	alert.Accept.Text = alert.Accept:CreateFontString(nil, "OVERLAY");
	alert.Accept.Text:SetFont(SuperVillain.Media.font.default, 10);
	alert.Accept.Text:SetPoint('CENTER');
	alert.Accept.Text:SetText(YES);
	alert.Close = CreateFrame('Button', nil, alert);
	alert.Close:SetSize(70, 25);
	alert.Close:SetPoint('LEFT', alert, 'BOTTOM', 10, 20);
	alert.Close:SetScript('OnClick', function(self) self:GetParent():Hide() end);
	alert.Close.Text = alert.Close:CreateFontString(nil, "OVERLAY");
	alert.Close.Text:SetFont(SuperVillain.Media.font.default, 10);
	alert.Close.Text:SetPoint('CENTER');
	alert.Close.Text:SetText(NO);
	alert.Accept:SetButtonTemplate();
	alert.Close:SetButtonTemplate();
	alert:Hide();
	PLUGIN.Alert = alert;

	PLUGIN:LoadStyles();

	NewHook(SuperVillain, "ReloadDocklets", RegisterAddonDocklets);
	SuperVillain:ReloadDocklets();

	SuperVillain.DynamicOptions["SVStyle"] = {key = "addons", data = PLUGIN.OptionsCache};
	SVUIAddonEventHandler:RegisterEvent('ADDON_LOADED');
end

CONFIGS["SVStyle"] = {
	["blizzard"] = {
		["enable"] = true,
		["bags"] = true,
		["bmah"] = true,
		["reforge"] = true,
		["calendar"] = true,
		["achievement"] = true,
		["lfguild"] = true,
		["inspect"] = true,
		["binding"] = true,
		["gbank"] = true,
		["archaeology"] = true,
		["guildcontrol"] = true,
		["gossip"] = true,
		["guild"] = true,
		["tradeskill"] = true,
		["raid"] = false,
		["talent"] = true,
		["auctionhouse"] = true,
		["barber"] = true,
		["macro"] = true,
		["debug"] = true,
		["trainer"] = true,
		["socket"] = true,
		["loot"] = true,
		["alertframes"] = true,
		["bgscore"] = true,
		["merchant"] = true,
		["mail"] = true,
		["help"] = true,
		["trade"] = true,
		["gossip"] = true,
		["greeting"] = true,
		["worldmap"] = true,
		["taxi"] = true,
		["quest"] = true,
		["petition"] = true,
		["dressingroom"] = true,
		["pvp"] = true,
		["lfg"] = true,
		["nonraid"] = true,
		["friends"] = true,
		["spellbook"] = true,
		["character"] = true,
		["misc"] = true,
		["tabard"] = true,
		["guildregistrar"] = true,
		["timemanager"] = true,
		["encounterjournal"] = true,
		["voidstorage"] = true,
		["transmogrify"] = true,
		["stable"] = true,
		["bgmap"] = true,
		["mounts"] = true,
		["petbattleui"] = true,
		["losscontrol"] = true,
		["itemUpgrade"] = true,
	},
	["addons"] = {
		["enable"] = true,
		["Skada"] = true,
		["Recount"] = true,
		["AuctionLite"] = true,
		["AtlasLoot"] = true,
		["SexyCooldown"] = true,
		["Lightheaded"] = true,
		["Outfitter"] = true,
		["WeakAuras"] = true,
		["Quartz"] = true,
		["TomTom"] = true,
		["TinyDPS"] = true,
		["Clique"] = true,
		["CoolLine"] = true,
		["ACP"] = true,
		["DXE"] = true,
		["MogIt"] = true,
		["alDamageMeter"] = true,
		["Omen"] = true,
		["TradeSkillDW"] = true,
	}
}

SuperVillain.Registry:NewScript(LoadStyleOMatic)
SuperVillain.Registry:NewPlugin(PLUGIN, "SVStyle", LoadOptions)

SVUIAddonEventHandler:SetScript("OnEvent", Registry_OnEvent)