diff --git a/Source/Editor/Content/GUI/ContentView.cs b/Source/Editor/Content/GUI/ContentView.cs index 6cfdea210..23d81421d 100644 --- a/Source/Editor/Content/GUI/ContentView.cs +++ b/Source/Editor/Content/GUI/ContentView.cs @@ -27,6 +27,22 @@ namespace FlaxEditor.Content.GUI List, } + /// + /// The method sort for items. + /// + public enum SortType + { + /// + /// The classic alphabetic sort method (A-Z). + /// + AlphabeticOrder, + + /// + /// The reverse alphabetic sort method (Z-A). + /// + AlphabeticReverse + } + /// /// Main control for used to present collection of . /// @@ -218,8 +234,9 @@ namespace FlaxEditor.Content.GUI /// Shows the items collection in the view. /// /// The items to show. + /// The sort method for items. /// If set to true items will be added to the current selection. Otherwise selection will be cleared before. - public void ShowItems(List items, bool additive = false) + public void ShowItems(List items, SortType sortType, bool additive = false) { if (items == null) throw new ArgumentNullException(); @@ -249,9 +266,24 @@ namespace FlaxEditor.Content.GUI items[i].AddReference(this); } - // Sort items - _children.Sort(); - + // Sort items depending on sortMethod parameter + _children.Sort(((control, control1) => + { + if (sortType == SortType.AlphabeticReverse) + { + if (control.CompareTo(control1) > 0) + { + return -1; + } + if (control.CompareTo(control1) == 0) + { + return 0; + } + return 1; + } + return control.CompareTo(control1); + })); + // Unload and perform UI layout IsLayoutLocked = wasLayoutLocked; PerformLayout(); diff --git a/Source/Editor/Windows/ContentWindow.Search.cs b/Source/Editor/Windows/ContentWindow.Search.cs index e8ef60e23..4800705ce 100644 --- a/Source/Editor/Windows/ContentWindow.Search.cs +++ b/Source/Editor/Windows/ContentWindow.Search.cs @@ -230,7 +230,7 @@ namespace FlaxEditor.Windows } _view.IsSearching = true; - _view.ShowItems(items); + _view.ShowItems(items, _sortType); } private void UpdateItemsSearchFilter(ContentFolder folder, List items, bool[] filters) diff --git a/Source/Editor/Windows/ContentWindow.cs b/Source/Editor/Windows/ContentWindow.cs index 8a4db3789..04a82087c 100644 --- a/Source/Editor/Windows/ContentWindow.cs +++ b/Source/Editor/Windows/ContentWindow.cs @@ -39,6 +39,7 @@ namespace FlaxEditor.Windows private TextBox _foldersSearchBox; private TextBox _itemsSearchBox; private ViewDropdown _viewDropdown; + private SortType _sortType; private RootContentTreeNode _root; @@ -215,6 +216,20 @@ namespace FlaxEditor.Windows filterButton.Checked = _viewDropdown.IsSelected(filterButton.Text); } }; + + var sortBy = menu.AddChildMenu("Sort by"); + sortBy.ContextMenu.AddButton("Alphabetic Order", OnSortByButtonClicked).Tag = SortType.AlphabeticOrder; + sortBy.ContextMenu.AddButton("Alphabetic Reverse", OnSortByButtonClicked).Tag = SortType.AlphabeticReverse; + sortBy.ContextMenu.VisibleChanged += control => + { + if (!control.Visible) + return; + foreach (var item in ((ContextMenu)control).Items) + { + if (item is ContextMenuButton button) + button.Checked = _sortType == (SortType)button.Tag; + } + }; return menu; } @@ -230,6 +245,18 @@ namespace FlaxEditor.Windows _viewDropdown.OnClicked(i); } + private void OnSortByButtonClicked(ContextMenuButton button) + { + switch ((SortType)button.Tag) + { + case SortType.AlphabeticOrder: _sortType = SortType.AlphabeticOrder; + break; + case SortType.AlphabeticReverse: _sortType = SortType.AlphabeticReverse; + break; + } + RefreshView(SelectedNode); + } + /// /// Shows popup dialog with UI to rename content item. /// @@ -701,12 +728,12 @@ namespace FlaxEditor.Windows items.Add(node.Folder); } } - _view.ShowItems(items); + _view.ShowItems(items, _sortType); } else { // Show folder contents - _view.ShowItems(target.Folder.Children); + _view.ShowItems(target.Folder.Children, _sortType); } }