--[[ Author: Jarth Filename: CBs_Settings.lua ]] -- ------------------------------------------------------------------------------------------------- -- VARIABLES -- ------------------------------------------------------------------------------------------------- local base = CollectionBars local texts = base.Texts ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- ------------------------------------------------------------------------------------------------- function base:InitializeSettingsSlash() base:Debug("InitializeSettingsSlash") SLASH_COMMANDS[base.Addon.SettingsSlash] = function() base:ToggleEnableSettings(base.ShowSettings()) end end function base:ToggleEnableSettings(forceShow) base:Debug("ToggleEnableSettings", forceShow) if forceShow ~= nil then base.Global.EnableSettings = forceShow else base.Global.EnableSettings = not base.Global.EnableSettings end base:RestoreFrames() base:RestoreCombineLabels() end function base:SetupToggleSettings(category) base:Debug("SetupToggleSettings", category) local toggleSettings = GetControl(string.format(texts.FormatAbbreviationLowDash .. "%sToggleSettings", "HideAll", category.Name)) if toggleSettings then local hideAllSettingsFunc = function() base:ShowSettings(category) end toggleSettings:SetHandler("OnClicked", hideAllSettingsFunc) end end function base:UpdateToggleSettings(category) base:Debug("UpdateToggleSettings", category) local offsetX = 0 if base.Global.EnableSettings then offsetX = -19 end if category.Frames.Label and category.Frames.ToggleSettings then category.Frames.ToggleSettings:ClearAnchors() category.Frames.ToggleSettings:SetAnchor(TOPLEFT, category.Frames.Label, TOPRIGHT, offsetX, 0) category.Frames.ToggleSettings:SetAnchor(BOTTOMRIGHT, category.Frames.Label, BOTTOMRIGHT, 0, 0) end if category.Frames.Label and category.Frames.LabelButton then category.Frames.LabelButton:ClearAnchors() category.Frames.LabelButton:SetAnchor(TOPLEFT, category.Frames.Label, TOPLEFT, 0, 0) category.Frames.LabelButton:SetAnchor(BOTTOMRIGHT, category.Frames.Label, BOTTOMRIGHT, offsetX, 0) end end function base:SetupSettingsFrameHandlers(control, text, onClicked) base:Debug("SetupSettingsFrameHandlers", control, text, onClicked) control.tooltipText = text control:SetHandler("OnClicked", onClicked) control:SetHandler("OnMouseEnter", function(_control) ZO_Tooltips_ShowTextTooltip(_control, BOTTOM, _control.tooltipText) end) control:SetHandler("OnMouseExit", function() ZO_Tooltips_HideTextTooltip() end) end function base:SetupSetttingsFrame(category) base:Debug("SetupSetttingsFrame", category) local selector = string.format(texts.FormatAbbreviationLowDash, "Settings") base.Global.Settings.Frame = base.WM:CreateControlFromVirtual(selector, GuiRoot, selector) base.Global.SettingsLabel = GetControl(string.format("%sLabel", selector)) base.Global.Settings.List = CBs_Settings_List:New(category, base.Global.Settings.Frame) local titleControl = GetControl(string.format("%sTitle", selector)) titleControl:SetText(string.format("%s Settings", base.Addon.DisplayName)) if base.Global.Settings.Frame.closeFrame == nil then base.Global.Settings.Frame.closeFrame = GetControl(base.Global.Settings.Frame, "Close") end if base.Global.Settings.Frame.closeFrame then base:SetupSettingsFrameHandlers(base.Global.Settings.Frame.closeFrame, "Close", function(buttonControl) buttonControl:GetParent():SetHidden(true) end) end if base.Global.Settings.Frame.moveFrame == nil then base.Global.Settings.Frame.moveFrame = GetControl(base.Global.Settings.Frame, "Move") end if base.Global.Settings.Frame.moveFrame then base:SetupSettingsFrameHandlers(base.Global.Settings.Frame.moveFrame, texts.Settings.ToggleMoveFrameText, function() base.Global.IsMoveEnabled = not base.Global.IsMoveEnabled base.Global.Settings.List:RefreshData() base:RestoreFrames() end) end if base.Global.Settings.Frame.refreshFrame == nil then base.Global.Settings.Frame.refreshFrame = GetControl(base.Global.Settings.Frame, "Refresh") end if base.Global.Settings.Frame.refreshFrame then base:SetupSettingsFrameHandlers(base.Global.Settings.Frame.refreshFrame, texts.Settings.ReloadText, function() if base.Global.Settings.List.category ~= nil then base:CreateCategory(base.Global.Settings.List.category) base:RestoreFrame(base.Global.Settings.List.category) end base:RestoreCombineLabels() base.Global.Settings.List:RefreshData() end) end for controlName, displayName in pairs(base.Global.Settings.Filters) do base:SetupSettingsFilter(base.Global.Settings.Frame, controlName, displayName) end end function base:SetupSettingsFilter(control, controlName, displayName) base:Debug("SetupSettingsFilter", control, controlName, displayName) local filterControl = GetControl(control, controlName) if filterControl then base:SetControlText(filterControl, displayName) filterControl:SetHandler("OnClicked", function() base.Global.Settings.List.masterListType = controlName base.Global.Settings.List:RefreshFilters() end) end end function base:ShowSettings(category) base:Debug("ShowSettings", category) local show = base.Global.Settings.Frame == nil if show then base:SetupSetttingsFrame(category) end show = show or base.Global.Settings.Frame:IsHidden() or category ~= base.Global.Settings.List.category base.Global.Settings.Frame:SetHidden(not show) base:UpdateSettingsType(show, category) if show then base.Global.Settings.List.category = show and category or nil base.Global.Settings.List:RefreshData() end return show end function base:UpdateSettingsType(show, category) base:Debug("UpdateSettingsType", show, category) if base.Global.Settings.List ~= nil then base.Global.Settings.List.category = category end if base.Global.SettingsLabel ~= nil then base.Global.SettingsLabel:SetText(show and category and category.Name or "Global") end end