TradeSkillMaster/Core/UI/MainUI/Settings/Appearance.lua

183 lines
6.0 KiB
Lua
Raw Normal View History

2020-11-13 14:13:12 -05:00
-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Appearance = TSM.MainUI.Settings:NewPackage("Appearance")
local L = TSM.Include("Locale").GetTable()
local Theme = TSM.Include("Util.Theme")
local LibDBIcon = LibStub("LibDBIcon-1.0")
local UIElements = TSM.Include("UI.UIElements")
local private = {
colorSetKeys = {},
colorSetNames = {},
}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Appearance.OnInitialize()
for _, key, name in TSM.UI.Util.ColorSetIterator() do
tinsert(private.colorSetKeys, key)
tinsert(private.colorSetNames, name)
end
TSM.MainUI.Settings.RegisterSettingPage(L["Appearance"], "middle", private.GetSettingsFrame)
end
-- ============================================================================
-- Appearance Settings UI
-- ============================================================================
function private.GetSettingsFrame()
TSM.UI.AnalyticsRecordPathChange("main", "settings", "appearance")
return UIElements.New("ScrollFrame", "generalSettings")
:SetPadding(8, 8, 8, 0)
:AddChild(TSM.MainUI.Settings.CreateExpandableSection("Appearance", "appearance", L["General Options"], L["Some general appearance options are below."])
:AddChild(UIElements.New("Frame", "content")
:SetLayout("HORIZONTAL")
:SetHeight(20)
:SetMargin(0, 0, 0, 12)
:AddChild(UIElements.New("Checkbox", "minimapCheckbox")
:SetWidth("AUTO")
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Hide minimap icon"])
:SetSettingInfo(TSM.db.global.coreOptions.minimapIcon, "hide")
:SetScript("OnValueChanged", private.MinimapOnValueChanged)
)
:AddChild(UIElements.New("Spacer", "spacer"))
)
:AddChild(UIElements.New("Frame", "content")
:SetLayout("HORIZONTAL")
:SetHeight(20)
:SetMargin(0, 0, 0, 12)
:AddChild(UIElements.New("Checkbox", "taskListLockCheckbox")
:SetWidth("AUTO")
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Lock task list's background"])
:SetSettingInfo(TSM.db.global.appearanceOptions, "taskListBackgroundLock")
:SetScript("OnValueChanged", private.TaskListLockOnValueChanged)
)
:AddChild(UIElements.New("Spacer", "spacer"))
)
:AddChild(UIElements.New("Frame", "content")
:SetLayout("HORIZONTAL")
:SetHeight(20)
:AddChild(UIElements.New("Checkbox", "showTotalMoneyCheckbox")
:SetWidth("AUTO")
:SetFont("BODY_BODY2_MEDIUM")
:SetText(L["Show total gold in header"])
:SetSettingInfo(TSM.db.global.appearanceOptions, "showTotalMoney")
)
:AddChild(UIElements.New("Spacer", "spacer"))
)
)
:AddChild(UIElements.New("Text", "label")
:SetHeight(24)
:SetMargin(12, 0, 4, 12)
:SetFont("BODY_BODY1_BOLD")
:SetText(L["Themes"])
)
:AddChild(UIElements.New("Frame", "theme")
:SetLayout("FLOW")
:AddChildrenWithFunction(private.AddTheme)
)
end
-- ============================================================================
-- Local Script Handlers
-- ============================================================================
function private.MinimapOnValueChanged(_, value)
if value then
LibDBIcon:Hide("TradeSkillMaster")
else
LibDBIcon:Show("TradeSkillMaster")
end
end
function private.TaskListLockOnValueChanged(_, value)
TSM.db.global.appearanceOptions.taskListBackgroundLock = value
if TSM.UI.TaskListUI.IsVisible() then
TSM.UI.TaskListUI.UpdateFrame()
end
end
function private.AddTheme(frame)
for _, key, name in TSM.UI.Util.ColorSetIterator() do
frame:AddChild(UIElements.New("Frame", name)
:SetLayout("VERTICAL")
:SetSize(198, 140)
:SetPadding(0, 0, 12, 8)
:SetMargin(0, 12, 0, 8)
:SetBackgroundColor(Theme.GetColor("FRAME_BG", key), true)
:SetBorderColor(Theme.GetColor("ACTIVE_BG_ALT", key))
:SetContext(key)
:AddChild(UIElements.New("Frame", "top")
:SetLayout("HORIZONTAL")
:SetHeight(36)
:SetMargin(8, 8, 0, 12)
:AddChild(UIElements.New("Frame", "left")
:SetSize(36, 36)
:SetMargin(0, 12, 0, 0)
:SetBackgroundColor(Theme.GetColor("ACTIVE_BG_ALT", key), true)
)
:AddChild(UIElements.New("Frame", "right")
:SetLayout("VERTICAL")
:AddChild(UIElements.New("Frame", "line1")
:SetHeight(12)
:SetMargin(0, 0, 0, 12)
:SetBackgroundColor(Theme.GetColor("ACTIVE_BG", key), true)
)
:AddChild(UIElements.New("Frame", "line2")
:SetHeight(12)
:SetBackgroundColor(Theme.GetColor("PRIMARY_BG_ALT", key), true)
)
)
)
:AddChild(UIElements.New("Frame", "line3")
:SetMargin(8, 8, 0, 12)
:SetBackgroundColor(Theme.GetColor("PRIMARY_BG", key), true)
)
:AddChild(UIElements.New("Texture", "divider")
:SetHeight(1)
:SetTexture(Theme.GetColor("ACTIVE_BG_ALT", key))
)
:AddChild(UIElements.New("Toggle", "toggle")
:SetHeight(20)
:SetMargin(8, 0, 8, 0)
:SetFont("BODY_BODY2_MEDIUM")
:AddOption(Theme.GetThemeName(key), TSM.db.global.appearanceOptions.colorSet == key)
:SetScript("OnValueChanged", private.ThemeButtonOnClick)
)
:AddChildNoLayout(UIElements.New("Button", "btn")
:AddAnchor("TOPLEFT")
:AddAnchor("BOTTOMRIGHT")
:SetScript("OnClick", private.ThemeButtonOnClick)
)
)
end
end
function private.ThemeButtonOnClick(buttonToggle)
local selectedKey = buttonToggle:GetParentElement():GetContext()
for _, key, name in TSM.UI.Util.ColorSetIterator() do
local toggle = buttonToggle:GetElement("__parent.__parent."..name..".toggle")
if key == selectedKey then
toggle:SetOption(name, true)
else
toggle:ClearOption(true)
end
end
TSM.db.global.appearanceOptions.colorSet = selectedKey
Theme.SetActiveColorSet(selectedKey)
end