Add editor status message about amount of selected actors
This commit is contained in:
@@ -16,6 +16,8 @@ namespace FlaxEditor.Modules
|
||||
/// <seealso cref="FlaxEditor.Modules.EditorModule" />
|
||||
public sealed class SceneEditingModule : EditorModule
|
||||
{
|
||||
private int _lastSelectionStatus = 0;
|
||||
|
||||
/// <summary>
|
||||
/// The selected objects.
|
||||
/// </summary>
|
||||
@@ -193,6 +195,20 @@ namespace FlaxEditor.Modules
|
||||
Undo.AddAction(new SelectionChangeAction(before, Selection.ToArray(), OnSelectionUndo));
|
||||
|
||||
OnSelectionChanged();
|
||||
|
||||
// Display amount of selected actors on the status bar
|
||||
Editor.UI.RemoveStatusMessage(_lastSelectionStatus);
|
||||
var objects = Selection.Count;
|
||||
var actors = CountActors(Selection);
|
||||
_lastSelectionStatus = Editor.UI.AddStatusMessage($"Selected {objects} {(objects > 1 ? "objects" : "object")} (total {actors} {(actors > 1 ? "actors" : "actor")})");
|
||||
}
|
||||
|
||||
private int CountActors(List<SceneGraphNode> nodes)
|
||||
{
|
||||
int result = 0;
|
||||
foreach (var node in nodes)
|
||||
result += 1 + CountActors(node.ChildNodes);
|
||||
return result;
|
||||
}
|
||||
|
||||
private void OnSelectionUndo(SceneGraphNode[] toSelect)
|
||||
|
||||
@@ -29,10 +29,18 @@ namespace FlaxEditor.Modules
|
||||
/// <seealso cref="FlaxEditor.Modules.EditorModule" />
|
||||
public sealed class UIModule : EditorModule
|
||||
{
|
||||
private struct Status
|
||||
{
|
||||
public int ID;
|
||||
public string Text;
|
||||
public DateTime EndTime;
|
||||
}
|
||||
|
||||
private Label _progressLabel;
|
||||
private ProgressBar _progressBar;
|
||||
private Button _outputLogButton;
|
||||
private List<KeyValuePair<string, DateTime>> _statusMessages;
|
||||
private List<Status> _statusMessages;
|
||||
private int _statusID = 1;
|
||||
private ContentStats _contentStats;
|
||||
private bool _progressFailed;
|
||||
|
||||
@@ -340,7 +348,7 @@ namespace FlaxEditor.Modules
|
||||
|
||||
string text;
|
||||
if (_statusMessages != null && _statusMessages.Count != 0)
|
||||
text = _statusMessages[0].Key;
|
||||
text = _statusMessages[0].Text;
|
||||
else if (Editor.StateMachine.CurrentState.Status != null)
|
||||
text = Editor.StateMachine.CurrentState.Status;
|
||||
else if (contentStats.LoadingAssetsCount != 0)
|
||||
@@ -362,13 +370,34 @@ namespace FlaxEditor.Modules
|
||||
/// Adds the status bar message text to be displayed as a notification.
|
||||
/// </summary>
|
||||
/// <param name="message">The message to display.</param>
|
||||
public void AddStatusMessage(string message)
|
||||
/// <returns>The ID of that status message (unique). Can be used to hide it manually.</returns>
|
||||
public int AddStatusMessage(string message)
|
||||
{
|
||||
if (_statusMessages == null)
|
||||
_statusMessages = new List<KeyValuePair<string, DateTime>>();
|
||||
_statusMessages.Add(new KeyValuePair<string, DateTime>(message, DateTime.Now + TimeSpan.FromSeconds(3.0f)));
|
||||
_statusMessages = new List<Status>();
|
||||
var status = new Status { ID = _statusID++, Text = message, EndTime = DateTime.Now + TimeSpan.FromSeconds(3.0f) };
|
||||
_statusMessages.Add(status);
|
||||
if (_statusMessages.Count == 1)
|
||||
UpdateStatusBar();
|
||||
return status.ID;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes a specific status message once it's not needed anymore,
|
||||
/// </summary>
|
||||
/// <param name="id">The ID of the message returned by <see cref="AddStatusMessage"/>.</param>
|
||||
public void RemoveStatusMessage(int id)
|
||||
{
|
||||
if (_statusMessages == null || id == 0)
|
||||
return;
|
||||
for (var i = 0; i < _statusMessages.Count; i++)
|
||||
{
|
||||
if (_statusMessages[i].ID == id)
|
||||
{
|
||||
_statusMessages.RemoveAt(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal bool ProgressVisible
|
||||
@@ -495,7 +524,7 @@ namespace FlaxEditor.Modules
|
||||
/// <inheritdoc />
|
||||
public override void OnUpdate()
|
||||
{
|
||||
if (_statusMessages != null && _statusMessages.Count > 0 && _statusMessages[0].Value - DateTime.Now < TimeSpan.Zero)
|
||||
if (_statusMessages != null && _statusMessages.Count > 0 && _statusMessages[0].EndTime - DateTime.Now < TimeSpan.Zero)
|
||||
{
|
||||
_statusMessages.RemoveAt(0);
|
||||
UpdateStatusBar();
|
||||
|
||||
Reference in New Issue
Block a user