Add editor status message about amount of selected actors

This commit is contained in:
Wojtek Figat
2026-01-13 14:21:32 +01:00
parent ff2c5290b5
commit e721fbd89f
2 changed files with 51 additions and 6 deletions

View File

@@ -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)

View File

@@ -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();