using FlaxEngine; using FlaxEngine.GUI; namespace FlaxEditor.GUI { /// /// Popup menu for reminding of an upcoming auto save. /// public class AutoSavePopup : ContainerControl { /// /// Gets or sets the value for if the user has manually closed this popup. /// public bool UserClosed { get; set; } /// /// The save now button. Used to skip the last remaining auto save time. /// public Button SaveNowButton => _saveNowButton; /// /// Button that should be used to cancel the auto save. /// public Button CancelSaveButton => _cancelSaveButton; private int _timeRemaining; private Panel _backgroundPanel; private Label _timeLabel; private Button _saveNowButton; private Button _cancelSaveButton; private Color _defaultTextColor; private bool _isMoved = false; /// /// Initialize the AutoSavePopup. /// /// The initial time to set the time label to. public AutoSavePopup(float initialTime) { UpdateTime(initialTime); _backgroundPanel = new Panel(ScrollBars.None) { Parent = this, AnchorPreset = AnchorPresets.StretchAll, BackgroundColor = Color.Transparent, }; _timeLabel = new Label(0, 0, 25, 10) { Parent = _backgroundPanel, Text = _timeRemaining.ToString(), HorizontalAlignment = TextAlignment.Near, VerticalAlignment = TextAlignment.Near, AutoWidth = true, Height = 14, AnchorPreset = AnchorPresets.MiddleLeft, }; _saveNowButton = new Button { Parent = _backgroundPanel, Height = 14, Width = 60, AnchorPreset = AnchorPresets.MiddleRight, BackgroundColor = Color.Transparent, BorderColor = Color.Transparent, BackgroundColorHighlighted = Color.Transparent, BackgroundColorSelected = Color.Transparent, BorderColorHighlighted = Color.Transparent, Text = "Save Now", TooltipText = "Saves now and restarts the auto save timer." }; _saveNowButton.LocalX -= 85; _cancelSaveButton = new Button { Parent = _backgroundPanel, Height = 14, Width = 70, AnchorPreset = AnchorPresets.MiddleRight, BackgroundColor = Color.Transparent, BorderColor = Color.Transparent, BackgroundColorHighlighted = Color.Transparent, BackgroundColorSelected = Color.Transparent, BorderColorHighlighted = Color.Transparent, Text = "Cancel Save", TooltipText = "Cancels this auto save." }; _cancelSaveButton.LocalX -= 5; _defaultTextColor = _saveNowButton.TextColor; } /// /// Updates the time label /// /// The time to change the label to. public void UpdateTime(float time) { _timeRemaining = Mathf.CeilToInt(time); if (_timeLabel != null) _timeLabel.Text = "Auto Save in: " + _timeRemaining; } /// public override void Update(float deltaTime) { if (IsMouseOver) { _saveNowButton.TextColor = _saveNowButton.IsMouseOver ? Style.Current.BackgroundHighlighted : _defaultTextColor; _cancelSaveButton.TextColor = _cancelSaveButton.IsMouseOver ? Style.Current.BackgroundHighlighted : _defaultTextColor; } // Move if the progress bar is visible if (Editor.Instance.UI.ProgressVisible && !_isMoved) { _isMoved = true; LocalX -= 280; } else if (!Editor.Instance.UI.ProgressVisible && _isMoved) { LocalX += 280; _isMoved = false; } base.Update(deltaTime); } /// /// Creates and shows the AutoSavePopup /// /// The parent control. /// The time to start at. /// public static AutoSavePopup Show(ContainerControl parentControl, float initialTime) { var popup = new AutoSavePopup(initialTime) { Parent = parentControl, Height = Editor.Instance.UI.StatusBar.Height, Width = 250, AnchorPreset = AnchorPresets.BottomRight, }; popup.ShowPopup(); return popup; } /// /// Shows the popup by changing its visibility /// public void ShowPopup() { Visible = true; UserClosed = false; _saveNowButton.TextColor = _defaultTextColor; _cancelSaveButton.TextColor = _defaultTextColor; } /// /// Hides the popup by changing its visibility /// public void HidePopup() { Visible = false; if (_containsFocus) Defocus(); } } }