Quantcast
local ADDON_NAME, addon = ...
if not _G[ADDON_NAME] then _G[ADDON_NAME] = addon end

addon.configEvent = CreateFrame("frame", ADDON_NAME.."_config_eventFrame",UIParent)
local configEvent = addon.configEvent
configEvent:SetScript("OnEvent", function(self, event, ...) if self[event] then return self[event](self, event, ...) end end)

local L = LibStub("AceLocale-3.0"):GetLocale("xanChat")
local chkBoxIndex = 1

function createCheckbutton(parentFrame, displayText, dbObjectValue)
	chkBoxIndex = chkBoxIndex + 1

	local checkbutton = CreateFrame("CheckButton", ADDON_NAME.."_config_chkbtn_" .. chkBoxIndex, parentFrame, "ChatConfigCheckButtonTemplate")
	getglobal(checkbutton:GetName() .. 'Text'):SetText(" "..displayText)

	checkbutton:SetScript("OnShow", function()
			checkbutton:SetChecked(dbObjectValue)
	end)

	return checkbutton
end

local yModifer = 30
local startY = -150
local currY = 0

local function addConfigEntry(objEntry)

	if currY == 0 then
		currY = startY
	else
		currY = currY - yModifer
	end

	objEntry:SetPoint("TOPLEFT", 20, currY)
end

local function LoadAboutFrame()

	--Code inspired from tekKonfigAboutPanel
	local about = CreateFrame("Frame", ADDON_NAME.."AboutPanel", InterfaceOptionsFramePanelContainer)
	about.name = ADDON_NAME
	about:Hide()

    local fields = {"Version", "Author"}
	local notes = GetAddOnMetadata(ADDON_NAME, "Notes")

    local title = about:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")

	title:SetPoint("TOPLEFT", 16, -16)
	title:SetText(ADDON_NAME)

	local subtitle = about:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
	subtitle:SetHeight(32)
	subtitle:SetPoint("TOPLEFT", title, "BOTTOMLEFT", 0, -8)
	subtitle:SetPoint("RIGHT", about, -32, 0)
	subtitle:SetNonSpaceWrap(true)
	subtitle:SetJustifyH("LEFT")
	subtitle:SetJustifyV("TOP")
	subtitle:SetText(notes)

	local anchor
	for _,field in pairs(fields) do
		local val = GetAddOnMetadata(ADDON_NAME, field)
		if val then
			local title = about:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall")
			title:SetWidth(75)
			if not anchor then title:SetPoint("TOPLEFT", subtitle, "BOTTOMLEFT", -2, -8)
			else title:SetPoint("TOPLEFT", anchor, "BOTTOMLEFT", 0, -6) end
			title:SetJustifyH("RIGHT")
			title:SetText(field:gsub("X%-", ""))

			local detail = about:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
			detail:SetPoint("LEFT", title, "RIGHT", 4, 0)
			detail:SetPoint("RIGHT", -16, 0)
			detail:SetJustifyH("LEFT")
			detail:SetText(val)

			anchor = title
		end
	end

	InterfaceOptions_AddCategory(about)

	return about
end

function configEvent:PLAYER_LOGIN()

	addon.aboutPanel = LoadAboutFrame()

	addon.aboutPanel.btnSocial = createCheckbutton(addon.aboutPanel, L.SlashSocialInfo, XCHT_DB.hideSocial)
	addon.aboutPanel.btnSocial.func = function()
		local value = addon.aboutPanel.btnSocial:GetChecked()

		if not value then
			XCHT_DB.hideSocial = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashSocialOn)
		else
			XCHT_DB.hideSocial = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashSocialOff)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnSocial:SetScript("OnClick", addon.aboutPanel.btnSocial.func)
	addConfigEntry(addon.aboutPanel.btnSocial)

	addon.aboutPanel.btnScroll = createCheckbutton(addon.aboutPanel, L.SlashScrollInfo, XCHT_DB.hideScroll)
	addon.aboutPanel.btnScroll.func = function()
		local value = addon.aboutPanel.btnScroll:GetChecked()

		if not value then
			XCHT_DB.hideScroll = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashScrollOn)
		else
			XCHT_DB.hideScroll = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashScrollOff)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnScroll:SetScript("OnClick", addon.aboutPanel.btnScroll.func)
	addConfigEntry(addon.aboutPanel.btnScroll)

	addon.aboutPanel.btnShortNames = createCheckbutton(addon.aboutPanel, L.SlashShortNamesInfo, XCHT_DB.shortNames)
	addon.aboutPanel.btnShortNames.func = function()
		local value = addon.aboutPanel.btnShortNames:GetChecked()

		if not value then
			XCHT_DB.shortNames = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashShortNamesOff)
		else
			XCHT_DB.shortNames = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashShortNamesOn)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnShortNames:SetScript("OnClick", addon.aboutPanel.btnShortNames.func)
	addConfigEntry(addon.aboutPanel.btnShortNames)

	addon.aboutPanel.btnEditBox = createCheckbutton(addon.aboutPanel, L.SlashEditBoxInfo, XCHT_DB.editBoxTop)
	addon.aboutPanel.btnEditBox.func = function()
		local value = addon.aboutPanel.btnEditBox:GetChecked()

		if not value then
			XCHT_DB.editBoxTop = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashEditBoxBottom)
		else
			XCHT_DB.editBoxTop = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashEditBoxTop)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnEditBox:SetScript("OnClick", addon.aboutPanel.btnEditBox.func)
	addConfigEntry(addon.aboutPanel.btnEditBox)

	addon.aboutPanel.btnTabs = createCheckbutton(addon.aboutPanel, L.SlashTabsInfo, XCHT_DB.hideTabs)
	addon.aboutPanel.btnTabs.func = function()
		local value = addon.aboutPanel.btnTabs:GetChecked()

		if not value then
			XCHT_DB.hideTabs = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashTabsOn)
		else
			XCHT_DB.hideTabs = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashTabsOff)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnTabs:SetScript("OnClick", addon.aboutPanel.btnTabs.func)
	addConfigEntry(addon.aboutPanel.btnTabs)

	addon.aboutPanel.btnShadow = createCheckbutton(addon.aboutPanel, L.SlashShadowInfo, XCHT_DB.addFontShadow)
	addon.aboutPanel.btnShadow.func = function()
		local value = addon.aboutPanel.btnShadow:GetChecked()

		if not value then
			XCHT_DB.addFontShadow = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashShadowOff)
		else
			XCHT_DB.addFontShadow = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashShadowOn)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnShadow:SetScript("OnClick", addon.aboutPanel.btnShadow.func)
	addConfigEntry(addon.aboutPanel.btnShadow)

	addon.aboutPanel.btnVoice = createCheckbutton(addon.aboutPanel, L.SlashVoiceInfo, XCHT_DB.hideVoice)
	addon.aboutPanel.btnVoice.func = function()
		local value = addon.aboutPanel.btnVoice:GetChecked()

		if not value then
			XCHT_DB.hideVoice = false
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashVoiceOn)
		else
			XCHT_DB.hideVoice = true
			DEFAULT_CHAT_FRAME:AddMessage(L.SlashVoiceOff)
		end

		StaticPopup_Show("XANCHAT_APPLYCHANGES")
	end
	addon.aboutPanel.btnVoice:SetScript("OnClick", addon.aboutPanel.btnVoice.func)
	addConfigEntry(addon.aboutPanel.btnVoice)

	configEvent:UnregisterEvent("PLAYER_LOGIN")
end

if IsLoggedIn() then configEvent:PLAYER_LOGIN() else configEvent:RegisterEvent("PLAYER_LOGIN") end