using System.Text; using AutoSaverPlugin.Contracts; using AutoSaverPlugin.Shared; using Godot; namespace AutoSaverPlugin.UI; /// /// Builds and manages the toggle button for the Auto Save feature in the top menu. /// public class AutoSaveToggleMenuBuilder { private CheckButton _autoSaveToggleButton; private readonly IAutoSaveManager _autoSaveManager = ServiceProvider.GetService(); private readonly IConfigurationManager _configManager = ServiceProvider.GetService(); /// /// Initializes a new instance of the class. /// public AutoSaveToggleMenuBuilder() { Build(); } /// /// Gets the Auto Save toggle button with configured settings and event handlers. /// public CheckButton AutoSaveToggleButton => Build(); /// /// Creates and initializes the Auto Save toggle button for the top menu. /// /// The initialized Auto Save toggle button. private CheckButton Build() { if (_autoSaveToggleButton != null) return _autoSaveToggleButton; _autoSaveToggleButton = new CheckButton { Text = "Auto Save" }; _autoSaveToggleButton.Toggled += HandleAutoSaveToggleChanged; _autoSaveToggleButton.SetPressedNoSignal(_configManager.IsAutoSaverEnabled); return _autoSaveToggleButton; } /// /// Detaches the toggle event subscriptions to prevent memory leaks. /// internal void DetachAutoSaveToggleEvents() { _autoSaveToggleButton.Toggled -= HandleAutoSaveToggleChanged; } /// /// Handles changes to the Auto Save toggle, updating settings and service state accordingly. /// /// Indicates whether the feature is being enabled or disabled. private void HandleAutoSaveToggleChanged(bool toggledOn) { _configManager.SetAutoSaverEnabled(enabled: toggledOn); _configManager.SaveSettings(); if (toggledOn) { _autoSaveManager.Reactivate(); } else { _autoSaveManager.Deactivate(); } } /// /// Updates the toggle state based on external settings invocation. /// /// The trace builder for logging. /// Indicates the new enabled state. internal void UpdateToggleStateFromSettings(bool enabled) { _autoSaveToggleButton.SetPressedNoSignal(enabled); } }