diff --git a/Source/Editor/Surface/ContextMenu/VisjectCM.cs b/Source/Editor/Surface/ContextMenu/VisjectCM.cs
index 930741807..ad4bf8372 100644
--- a/Source/Editor/Surface/ContextMenu/VisjectCM.cs
+++ b/Source/Editor/Surface/ContextMenu/VisjectCM.cs
@@ -492,8 +492,7 @@ namespace FlaxEditor.Surface.ContextMenu
// If no item is selected (or it's not visible anymore), select the top one
Profiler.BeginEvent("VisjectCM.Layout");
- if (SelectedItem == null || !SelectedItem.VisibleInHierarchy)
- SelectedItem = _groups.Find(g => g.Visible)?.Children.Find(c => c.Visible && c is VisjectCMItem) as VisjectCMItem;
+ SelectedItem = _groups.Find(g => g.Visible)?.Children.Find(c => c.Visible && c is VisjectCMItem) as VisjectCMItem;
PerformLayout();
if (SelectedItem != null)
_panel1.ScrollViewTo(SelectedItem);
@@ -704,7 +703,7 @@ namespace FlaxEditor.Surface.ContextMenu
Hide();
return true;
}
- else if (key == KeyboardKeys.Return)
+ else if (key == KeyboardKeys.Return || key == KeyboardKeys.Tab)
{
if (SelectedItem != null)
OnClickItem(SelectedItem);
diff --git a/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs b/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs
index 207875a92..9adfb881e 100644
--- a/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs
+++ b/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs
@@ -73,8 +73,6 @@ namespace FlaxEditor.Surface.ContextMenu
{
SortScore = 0;
- if (!(_highlights?.Count > 0))
- return;
if (!Visible)
return;
@@ -83,6 +81,8 @@ namespace FlaxEditor.Surface.ContextMenu
SortScore += 1;
if (Data != null)
SortScore += 1;
+ if (_highlights is { Count: > 0 })
+ SortScore += 1;
if (_isStartsWithMatch)
SortScore += 2;
if (_isFullMatch)
@@ -169,6 +169,7 @@ namespace FlaxEditor.Surface.ContextMenu
/// True if item's group header got a filter match and item should stay visible.
public void UpdateFilter(string filterText, Box selectedBox, bool groupHeaderMatches = false)
{
+ // When dragging connection out of a box, validate if the box is compatible with this item's type
if (selectedBox != null)
{
Visible = CanConnectTo(selectedBox);
@@ -185,72 +186,87 @@ namespace FlaxEditor.Surface.ContextMenu
// Clear filter
_highlights?.Clear();
Visible = true;
+ return;
}
- else
+
+ GetTextRectangle(out var textRect);
+
+ // Check archetype title
+ if (QueryFilterHelper.Match(filterText, _archetype.Title, out var ranges))
{
- GetTextRectangle(out var textRect);
- if (QueryFilterHelper.Match(filterText, _archetype.Title, out var ranges))
+ // Update highlights
+ if (_highlights == null)
+ _highlights = new List(ranges.Length);
+ else
+ _highlights.Clear();
+ var style = Style.Current;
+ var font = style.FontSmall;
+ for (int i = 0; i < ranges.Length; i++)
{
- // Update highlights
- if (_highlights == null)
- _highlights = new List(ranges.Length);
- else
- _highlights.Clear();
- var style = Style.Current;
- var font = style.FontSmall;
- for (int i = 0; i < ranges.Length; i++)
+ var start = font.GetCharPosition(_archetype.Title, ranges[i].StartIndex);
+ var end = font.GetCharPosition(_archetype.Title, ranges[i].EndIndex);
+ _highlights.Add(new Rectangle(start.X + textRect.X, 0, end.X - start.X, Height));
+
+ if (ranges[i].StartIndex <= 0)
{
- var start = font.GetCharPosition(_archetype.Title, ranges[i].StartIndex);
- var end = font.GetCharPosition(_archetype.Title, ranges[i].EndIndex);
- _highlights.Add(new Rectangle(start.X + textRect.X, 0, end.X - start.X, Height));
-
- if (ranges[i].StartIndex <= 0)
- {
- _isStartsWithMatch = true;
- if (ranges[i].Length == _archetype.Title.Length)
- _isFullMatch = true;
- }
+ _isStartsWithMatch = true;
+ if (ranges[i].Length == _archetype.Title.Length)
+ _isFullMatch = true;
}
- Visible = true;
- }
- else if (_archetype.AlternativeTitles?.Any(altTitle => string.Equals(filterText, altTitle, StringComparison.CurrentCultureIgnoreCase)) == true)
- {
- // Update highlights
- if (_highlights == null)
- _highlights = new List(1);
- else
- _highlights.Clear();
- var style = Style.Current;
- var font = style.FontSmall;
- var start = font.GetCharPosition(_archetype.Title, 0);
- var end = font.GetCharPosition(_archetype.Title, _archetype.Title.Length - 1);
- _highlights.Add(new Rectangle(start.X + textRect.X, 0, end.X - start.X, Height));
- _isFullMatch = true;
- Visible = true;
- }
- else if (NodeArchetype.TryParseText != null && NodeArchetype.TryParseText(filterText, out var data))
- {
- // Update highlights
- if (_highlights == null)
- _highlights = new List(1);
- else
- _highlights.Clear();
- var style = Style.Current;
- var font = style.FontSmall;
- var start = font.GetCharPosition(_archetype.Title, 0);
- var end = font.GetCharPosition(_archetype.Title, _archetype.Title.Length - 1);
- _highlights.Add(new Rectangle(start.X + textRect.X, 0, end.X - start.X, Height));
- Visible = true;
-
- Data = data;
- }
- else if (!groupHeaderMatches)
- {
- // Hide
- _highlights?.Clear();
- Visible = false;
}
+ Visible = true;
+ return;
}
+
+ // Check archetype synonyms
+ if (_archetype.AlternativeTitles!= null && _archetype.AlternativeTitles.Any(altTitle => QueryFilterHelper.Match(filterText, altTitle, out ranges)))
+ {
+ // Update highlights
+ if (_highlights == null)
+ _highlights = new List(1);
+ else
+ _highlights.Clear();
+ var style = Style.Current;
+ var font = style.FontSmall;
+ var start = font.GetCharPosition(_archetype.Title, 0);
+ var end = font.GetCharPosition(_archetype.Title, _archetype.Title.Length - 1);
+ _highlights.Add(new Rectangle(start.X + textRect.X, 0, end.X - start.X, Height));
+
+ for (int i = 0; i < ranges.Length; i++)
+ {
+ if (ranges[i].StartIndex <= 0)
+ {
+ _isStartsWithMatch = true;
+ }
+ }
+
+ Visible = true;
+ return;
+ }
+
+ // Check archetype data (if it exists)
+ if (NodeArchetype.TryParseText != null && NodeArchetype.TryParseText(filterText, out var data))
+ {
+ // Update highlights
+ if (_highlights == null)
+ _highlights = new List(1);
+ else
+ _highlights.Clear();
+ var style = Style.Current;
+ var font = style.FontSmall;
+ var start = font.GetCharPosition(_archetype.Title, 0);
+ var end = font.GetCharPosition(_archetype.Title, _archetype.Title.Length - 1);
+ _highlights.Add(new Rectangle(start.X + textRect.X, 0, end.X - start.X, Height));
+ Visible = true;
+ Data = data;
+ return;
+ }
+
+ _highlights?.Clear();
+
+ // Hide
+ if (!groupHeaderMatches)
+ Visible = false;
}
///
diff --git a/Source/Editor/Utilities/QueryFilterHelper.cs b/Source/Editor/Utilities/QueryFilterHelper.cs
index e9e5e9ccb..f2db81009 100644
--- a/Source/Editor/Utilities/QueryFilterHelper.cs
+++ b/Source/Editor/Utilities/QueryFilterHelper.cs
@@ -140,8 +140,7 @@ namespace FlaxEditor.Utilities
// Check if start the matching sequence
if (matchStartPos == -1)
{
- if (ranges == null)
- ranges = new List();
+ ranges ??= new List();
matchStartPos = textPos;
}
}
@@ -152,7 +151,7 @@ namespace FlaxEditor.Utilities
{
var length = textPos - matchStartPos;
if (length >= MinLength)
- ranges.Add(new Range(matchStartPos, length));
+ ranges!.Add(new Range(matchStartPos, length));
textPos = matchStartPos + length;
matchStartPos = -1;
}
@@ -165,13 +164,13 @@ namespace FlaxEditor.Utilities
{
var length = endPos - matchStartPos;
if (length >= MinLength)
- ranges.Add(new Range(matchStartPos, length));
+ ranges!.Add(new Range(matchStartPos, length));
textPos = matchStartPos + length;
}
}
// Check if has any range
- if (ranges != null && ranges.Count > 0)
+ if (ranges is { Count: > 0 })
{
matches = ranges.ToArray();
return true;