--[[ Author: Jarth Filename: CBs_Settings.lua ]] -- ------------------------------------------------------------------------------------------------- -- VARIABLES -- ------------------------------------------------------------------------------------------------- local base = CollectionBars local texts = base.Texts ------------------------------------------------------------------------------------------------- -- FUNCTIONS -- ------------------------------------------------------------------------------------------------- function base.InitializeSettingsSlash() SLASH_COMMANDS[base.Addon.SettingsSlash] = function() base.ToggleEnableSettings(base.ShowSettings()) end end function base.ToggleEnableSettings(forceShow) if not (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) local toggleSettings = GetControl(base.Addon.Abbreviation .. texts.Helpers.Lowdash .. texts.Components.HideAll .. category.Name .. texts.Components.Toggle .. texts.Components.Settings) if toggleSettings then local hideAllSettingsFunc = function() base.ShowSettings(category) end toggleSettings:SetHandler(texts.Action.OnClicked, hideAllSettingsFunc) end end function base.UpdateToggleSettings(category) local offsetX = 0 if base.Global.EnableSettings then offsetX = -19 end if category.FrameLabel and category.FrameToggleSettings then category.FrameToggleSettings:ClearAnchors() category.FrameToggleSettings:SetAnchor(TOPLEFT, category.FrameLabel, TOPRIGHT, offsetX, 0) category.FrameToggleSettings:SetAnchor(BOTTOMRIGHT, category.FrameLabel, BOTTOMRIGHT, 0, 0) end if category.FrameLabel and category.FrameLabelButton then category.FrameLabelButton:ClearAnchors() category.FrameLabelButton:SetAnchor(TOPLEFT, category.FrameLabel, TOPLEFT, 0, 0) category.FrameLabelButton:SetAnchor(BOTTOMRIGHT, category.FrameLabel, BOTTOMRIGHT, offsetX, 0) end end function base.SetupSettingsFrameHandlers(control, text, onClicked) control.tooltipText = text control:SetHandler(texts.Action.OnClicked, onClicked) control:SetHandler(texts.Action.OnMouseEnter, function(_control) ZO_Tooltips_ShowTextTooltip(_control, BOTTOM, _control.tooltipText) end) control:SetHandler(texts.Action.OnMouseExit, function() ZO_Tooltips_HideTextTooltip() end) end function base.SetupSetttingsFrame(category) local selector = base.Addon.Abbreviation .. texts.Helpers.Lowdash .. texts.Components.Settings base.Global.SettingsFrame = base.WM:CreateControlFromVirtual(selector, GuiRoot, selector) base.Global.SettingsLabel = GetControl(selector .. texts.Components.Label) base.Global.SettingsList = CBs_Settings_List:New(category, base.Global.SettingsFrame) local titleControl = GetControl(selector .. texts.Components.Title) titleControl:SetText(base.Addon.DisplayName .. texts.Helpers.Space .. texts.Components.Settings) if base.Global.SettingsFrame.closeFrame == nil then base.Global.SettingsFrame.closeFrame = GetControl(base.Global.SettingsFrame, texts.Components.Close) end if base.Global.SettingsFrame.closeFrame then base.SetupSettingsFrameHandlers(base.Global.SettingsFrame.closeFrame, texts.Components.Close, function(buttonControl) buttonControl:GetParent():SetHidden(true) end) end if base.Global.SettingsFrame.moveFrame == nil then base.Global.SettingsFrame.moveFrame = GetControl(base.Global.SettingsFrame, texts.Components.Move) end if base.Global.SettingsFrame.moveFrame then base.SetupSettingsFrameHandlers(base.Global.SettingsFrame.moveFrame, texts.Settings.ToggleMoveFrameText, function() base.Global.IsMoveEnabled = not base.Global.IsMoveEnabled base.Global.SettingsList:RefreshData() base.RestoreFrames() end) end if base.Global.SettingsFrame.refreshFrame == nil then base.Global.SettingsFrame.refreshFrame = GetControl(base.Global.SettingsFrame, texts.Components.Refresh) end if base.Global.SettingsFrame.refreshFrame then base.SetupSettingsFrameHandlers(base.Global.SettingsFrame.refreshFrame, texts.Settings.ReloadText, function() if base.Global.SettingsList.category ~= nil then base.CreateCategory(base.Global.SettingsList.category) base.RestoreFrame(base.Global.SettingsList.category) end base.RestoreCombineLabels() base.Global.SettingsList:RefreshData() end) end for controlName, displayName in pairs(base.Global.SettingsFilters) do base.SetupSettingsFilter(base.Global.SettingsFrame, controlName, displayName) end end function base.SetupSettingsFilter(control, controlName, displayName) local filterControl = GetControl(control, controlName) if filterControl then base.SetControlText(filterControl, displayName) filterControl:SetHandler(texts.Action.OnClicked, function() base.Global.SettingsList.masterListType = controlName base.Global.SettingsList:RefreshFilters() end) end end function base.ShowSettings(category) local show = base.Global.SettingsFrame == nil if show then base.SetupSetttingsFrame(category) end show = show or base.Global.SettingsFrame:IsHidden() or category ~= base.Global.SettingsList.category base.Global.SettingsFrame:SetHidden(not show) base.UpdateSettingsType(show, category) if show then base.Global.SettingsList.category = show and category or nil base.Global.SettingsList:RefreshData() end return show end function base.UpdateSettingsType(show, category) if base.Global.SettingsList ~= nil then base.Global.SettingsList.category = category end if base.Global.SettingsLabel ~= nil then base.Global.SettingsLabel:SetText(show and category and category.Name or texts.Components.Global) end end