Merge branch 'Chikinsupu-Visject-ImprovedSearchAndFiltering'
This commit is contained in:
@@ -307,7 +307,10 @@ namespace FlaxEditor.Surface.ContextMenu
|
||||
if (!IsLayoutLocked)
|
||||
{
|
||||
group.UnlockChildrenRecursive();
|
||||
SortGroups();
|
||||
if(_contextSensitiveSearchEnabled && _selectedBox != null)
|
||||
UpdateFilters();
|
||||
else
|
||||
SortGroups();
|
||||
if (ShowExpanded)
|
||||
group.Open(false);
|
||||
group.PerformLayout();
|
||||
@@ -367,7 +370,10 @@ namespace FlaxEditor.Surface.ContextMenu
|
||||
|
||||
if (!isLayoutLocked)
|
||||
{
|
||||
SortGroups();
|
||||
if(_contextSensitiveSearchEnabled && _selectedBox != null)
|
||||
UpdateFilters();
|
||||
else
|
||||
SortGroups();
|
||||
Profiler.BeginEvent("Perform Layout");
|
||||
UnlockChildrenRecursive();
|
||||
foreach (var group in groups)
|
||||
@@ -482,10 +488,11 @@ namespace FlaxEditor.Surface.ContextMenu
|
||||
|
||||
// Update groups
|
||||
LockChildrenRecursive();
|
||||
var contextSensitiveSelectedBox = _contextSensitiveSearchEnabled ? _selectedBox : null;
|
||||
for (int i = 0; i < _groups.Count; i++)
|
||||
{
|
||||
_groups[i].UpdateFilter(_searchBox.Text, _contextSensitiveSearchEnabled ? _selectedBox : null);
|
||||
_groups[i].UpdateItemSort(_selectedBox);
|
||||
_groups[i].UpdateFilter(_searchBox.Text, contextSensitiveSelectedBox);
|
||||
_groups[i].UpdateItemSort(contextSensitiveSelectedBox);
|
||||
}
|
||||
SortGroups();
|
||||
UnlockChildrenRecursive();
|
||||
@@ -560,7 +567,10 @@ namespace FlaxEditor.Surface.ContextMenu
|
||||
}
|
||||
UnlockChildrenRecursive();
|
||||
|
||||
SortGroups();
|
||||
if(_contextSensitiveSearchEnabled && _selectedBox != null)
|
||||
UpdateFilters();
|
||||
else
|
||||
SortGroups();
|
||||
PerformLayout();
|
||||
|
||||
Profiler.EndEvent();
|
||||
|
||||
@@ -89,6 +89,25 @@ namespace FlaxEditor.Surface.ContextMenu
|
||||
{
|
||||
Profiler.BeginEvent("VisjectCMGroup.UpdateFilter");
|
||||
|
||||
// Check if a dot is inside the filter text and split the string accordingly.
|
||||
// Everything in front of the dot is for specifying a class/group name. And everything afterward is the actual item filter text
|
||||
if (!string.IsNullOrEmpty(filterText))
|
||||
{
|
||||
int dotIndex = filterText.IndexOf('.');
|
||||
if (dotIndex != -1)
|
||||
{
|
||||
// Early out and make the group invisible if it doesn't start with the specified string
|
||||
string filterGroupName = filterText.Substring(0, dotIndex);
|
||||
if (!Name.StartsWith(filterGroupName, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
Visible = false;
|
||||
Profiler.EndEvent();
|
||||
return;
|
||||
}
|
||||
filterText = filterText.Substring(dotIndex + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Update items
|
||||
bool isAnyVisible = false;
|
||||
bool groupHeaderMatches = QueryFilterHelper.Match(filterText, HeaderText);
|
||||
@@ -177,6 +196,13 @@ namespace FlaxEditor.Surface.ContextMenu
|
||||
SortScore = item.SortScore;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedBox != null)
|
||||
{
|
||||
if (string.Equals(Name, selectedBox.CurrentType.Name, StringComparison.InvariantCultureIgnoreCase))
|
||||
SortScore += 10;
|
||||
}
|
||||
|
||||
SortChildren();
|
||||
|
||||
Profiler.EndEvent();
|
||||
|
||||
Reference in New Issue
Block a user