Merge branch 'enahnce-actornode-filter' of https://github.com/Tryibion/FlaxEngine into Tryibion-enahnce-actornode-filter
This commit is contained in:
@@ -184,30 +184,103 @@ namespace FlaxEditor.SceneGraph.GUI
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var text = Text;
|
var splitFilter = filterText.Split(',');
|
||||||
if (QueryFilterHelper.Match(filterText, text, out QueryFilterHelper.Range[] ranges))
|
var hasAllFilters = true;
|
||||||
|
foreach (var filter in splitFilter)
|
||||||
{
|
{
|
||||||
// Update highlights
|
if (string.IsNullOrEmpty(filter))
|
||||||
if (_highlights == null)
|
continue;
|
||||||
_highlights = new List<Rectangle>(ranges.Length);
|
var trimmedFilter = filter.Trim();
|
||||||
else
|
var hasFilter = false;
|
||||||
_highlights.Clear();
|
|
||||||
var font = Style.Current.FontSmall;
|
// Check if script
|
||||||
var textRect = TextRect;
|
if (trimmedFilter.Contains("s:", StringComparison.OrdinalIgnoreCase))
|
||||||
for (int i = 0; i < ranges.Length; i++)
|
|
||||||
{
|
{
|
||||||
var start = font.GetCharPosition(text, ranges[i].StartIndex);
|
// Check for any scripts
|
||||||
var end = font.GetCharPosition(text, ranges[i].EndIndex);
|
if (trimmedFilter.Equals("s:", StringComparison.OrdinalIgnoreCase))
|
||||||
_highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height));
|
{
|
||||||
|
if (Actor != null)
|
||||||
|
{
|
||||||
|
if (Actor.ScriptsCount > 0)
|
||||||
|
{
|
||||||
|
hasFilter = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var scriptText = trimmedFilter.Replace("s:", "", StringComparison.OrdinalIgnoreCase).Trim();
|
||||||
|
var scriptFound = false;
|
||||||
|
if (Actor != null)
|
||||||
|
{
|
||||||
|
foreach (var script in Actor.Scripts)
|
||||||
|
{
|
||||||
|
var name = TypeUtils.GetTypeDisplayName(script.GetType());
|
||||||
|
var nameNoSpaces = name.Replace(" ", "");
|
||||||
|
if (name.Contains(scriptText, StringComparison.OrdinalIgnoreCase) || nameNoSpaces.Contains(scriptText, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
scriptFound = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasFilter = scriptFound;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for actor type
|
||||||
|
else if (trimmedFilter.Contains("a:", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
if (trimmedFilter.Equals("a:", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
if (Actor != null)
|
||||||
|
hasFilter = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Actor !=null)
|
||||||
|
{
|
||||||
|
var actorTypeText = trimmedFilter.Replace("a:", "", StringComparison.OrdinalIgnoreCase).Trim();
|
||||||
|
var name = TypeUtils.GetTypeDisplayName(Actor.GetType());
|
||||||
|
var nameNoSpaces = name.Replace(" ", "");
|
||||||
|
if (name.Contains(actorTypeText, StringComparison.OrdinalIgnoreCase) || nameNoSpaces.Contains(actorTypeText, StringComparison.OrdinalIgnoreCase))
|
||||||
|
hasFilter = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Match text
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var text = Text;
|
||||||
|
if (QueryFilterHelper.Match(trimmedFilter, text, out QueryFilterHelper.Range[] ranges))
|
||||||
|
{
|
||||||
|
// Update highlights
|
||||||
|
if (_highlights == null)
|
||||||
|
_highlights = new List<Rectangle>(ranges.Length);
|
||||||
|
else
|
||||||
|
_highlights.Clear();
|
||||||
|
var font = Style.Current.FontSmall;
|
||||||
|
var textRect = TextRect;
|
||||||
|
for (int i = 0; i < ranges.Length; i++)
|
||||||
|
{
|
||||||
|
var start = font.GetCharPosition(text, ranges[i].StartIndex);
|
||||||
|
var end = font.GetCharPosition(text, ranges[i].EndIndex);
|
||||||
|
_highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height));
|
||||||
|
}
|
||||||
|
hasFilter = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasFilter)
|
||||||
|
{
|
||||||
|
hasAllFilters = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
isThisVisible = true;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
isThisVisible = hasAllFilters;
|
||||||
// Hide
|
if (!hasAllFilters)
|
||||||
_highlights?.Clear();
|
_highlights?.Clear();
|
||||||
isThisVisible = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update children
|
// Update children
|
||||||
|
|||||||
Reference in New Issue
Block a user