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;
// Move on text update if the progress bar is visible - removes this call from update
if (Editor.Instance.UI.ProgressVisible && !_isMoved)
{
_isMoved = true;
LocalX -= 250;
}
else if (!Editor.Instance.UI.ProgressVisible && _isMoved)
{
LocalX += 250;
_isMoved = false;
}
}
///
public override void Update(float deltaTime)
{
if (IsMouseOver)
{
_saveNowButton.TextColor = _saveNowButton.IsMouseOver ? Style.Current.BackgroundHighlighted : _defaultTextColor;
_cancelSaveButton.TextColor = _cancelSaveButton.IsMouseOver ? Style.Current.BackgroundHighlighted : _defaultTextColor;
}
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();
}
}
}