diff --git a/Source/Editor/GUI/ContextMenu/ContextMenu.cs b/Source/Editor/GUI/ContextMenu/ContextMenu.cs index 493c9d14b..f562cd786 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenu.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenu.cs @@ -122,6 +122,25 @@ namespace FlaxEditor.GUI.ContextMenu /// public Panel ItemsContainer => _panel; + /// + /// The auto sort. + /// + private bool _autosort; + + /// + /// The auto sort property. + /// + public bool AutoSort + { + get => _autosort; + set + { + _autosort = value; + if (_autosort) + SortButtons(); + } + } + /// /// Initializes a new instance of the class. /// @@ -137,6 +156,24 @@ namespace FlaxEditor.GUI.ContextMenu }; } + /// + /// Sort all alphabetically. + /// + /// Override + public void SortButtons(bool force = false) + { + if (!_autosort && !force) + return; + _panel.Children.Sort(((control, control1) => + { + if (control is ContextMenuButton cmb && control1 is ContextMenuButton cmb1) + return String.Compare(cmb.Text, cmb1.Text, StringComparison.OrdinalIgnoreCase); + if (!(control is ContextMenuButton)) + return (1); + return (-1); + })); + } + /// /// Removes all the added items (buttons, separators, etc.). /// @@ -158,6 +195,7 @@ namespace FlaxEditor.GUI.ContextMenu { var item = new ContextMenuButton(this, text); item.Parent = _panel; + SortButtons(); return item; } @@ -171,6 +209,7 @@ namespace FlaxEditor.GUI.ContextMenu { var item = new ContextMenuButton(this, text, shortKeys); item.Parent = _panel; + SortButtons(); return item; } @@ -185,6 +224,7 @@ namespace FlaxEditor.GUI.ContextMenu var item = new ContextMenuButton(this, text); item.Parent = _panel; item.Clicked += clicked; + SortButtons(); return item; } @@ -199,6 +239,7 @@ namespace FlaxEditor.GUI.ContextMenu var item = new ContextMenuButton(this, text); item.Parent = _panel; item.ButtonClicked += clicked; + SortButtons(); return item; } @@ -214,6 +255,7 @@ namespace FlaxEditor.GUI.ContextMenu var item = new ContextMenuButton(this, text, shortKeys); item.Parent = _panel; item.Clicked += clicked; + SortButtons(); return item; }