From 34d74477e433b6729ee5b9e7d5e2ef0062520ff5 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 19 Dec 2020 22:22:52 +0100 Subject: [PATCH 1/3] Adding auto sort to ContextMenu. --- Source/Editor/GUI/ContextMenu/ContextMenu.cs | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) 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; } From 0688e9c6c3e4dc3ff02cfa417c7f19bb07675a0f Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 19 Dec 2020 22:41:58 +0100 Subject: [PATCH 2/3] Set auto sort to true for New asset context menu. --- Source/Editor/Windows/ContentWindow.ContextMenu.cs | 1 + 1 file changed, 1 insertion(+) 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++) { From c496f2a9db547bf7b0ad5fbf282afc6b64b5d18c Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Sat, 19 Dec 2020 22:49:20 +0100 Subject: [PATCH 3/3] Typo --- Source/Editor/GUI/ContextMenu/ContextMenu.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Editor/GUI/ContextMenu/ContextMenu.cs b/Source/Editor/GUI/ContextMenu/ContextMenu.cs index f562cd786..b017a21d3 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenu.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenu.cs @@ -159,7 +159,7 @@ namespace FlaxEditor.GUI.ContextMenu /// /// Sort all alphabetically. /// - /// Override + /// Override public void SortButtons(bool force = false) { if (!_autosort && !force)