diff --git a/Source/Editor/GUI/ContextMenu/ContextMenu.cs b/Source/Editor/GUI/ContextMenu/ContextMenu.cs index 493c9d14b..b017a21d3 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; } diff --git a/Source/Editor/Windows/ContentWindow.ContextMenu.cs b/Source/Editor/Windows/ContentWindow.ContextMenu.cs index 2dd5ec3d7..d273ead49 100644 --- a/Source/Editor/Windows/ContentWindow.ContextMenu.cs +++ b/Source/Editor/Windows/ContentWindow.ContextMenu.cs @@ -139,6 +139,7 @@ namespace FlaxEditor.Windows c = cm.AddChildMenu("New"); c.ContextMenu.Tag = item; + c.ContextMenu.AutoSort = true; int newItems = 0; for (int i = 0; i < Editor.ContentDatabase.Proxy.Count; i++) {