// Returns number of rows in search result
int InitializeSearchResults(HierarchyProperty property, int minAllowedDepth)
{
// Search setup
const bool kShowItemHasChildren = false;
const int kItemDepth = 0;
int currentSceneHandle = -1;
int row = 0;
var searchFilter = SearchableEditorWindow.CreateFilter(searchString, (SearchableEditorWindow.SearchMode)m_SearchMode);
var searchContext = (SearchService.HierarchySearchContext)m_SearchSessionHandler.context;
searchContext.filter = searchFilter;
searchContext.rootProperty = property;
m_SearchSessionHandler.BeginSearch(searchString);
var headerRows = new List <int>();
while (property.NextWithDepthCheck(null, minAllowedDepth))
{
if (!SearchService.Scene.Filter(m_SearchString, property, searchContext))
{
property.SetFilteredVisibility(false);
continue;
}
property.SetFilteredVisibility(true);
var item = EnsureCreatedItem(row);
// Add scene headers when encountering a new scene (and it's not a header in itself)
if (AddSceneHeaderToSearchIfNeeded(item, property, ref currentSceneHandle))
{
row++;
headerRows.Add(row);
if (IsSceneHeader(property))
{
continue; // no need to add it
}
item = EnsureCreatedItem(row); // prepare for item below
}
InitTreeViewItem(item, property, kShowItemHasChildren, kItemDepth);
row++;
}
m_SearchSessionHandler.EndSearch();
int numRows = row;
// Now sort scene section
if (headerRows.Count > 0)
{
int currentSortStart = headerRows[0];
for (int i = 1; i < headerRows.Count; i++)
{
int count = headerRows[i] - currentSortStart - 1;
m_ListOfRows.Sort(currentSortStart, count, new TreeViewItemAlphaNumericSort());
currentSortStart = headerRows[i];
}
// last section
m_ListOfRows.Sort(currentSortStart, numRows - currentSortStart, new TreeViewItemAlphaNumericSort());
}
return(numRows);
}