using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Search;
using UnityEngine;
static class SearchProvider_isExplicitProvider
{
internal static string type = "example_uppercase_isExplicitProvider";
internal static string displayName = "example_UpperCase_isExplicitProvider";
[SearchItemProvider]
internal static SearchProvider CreateProvider()
{
return new SearchProvider(type, displayName)
{
filterId = "+",
priority = 99999, // put example provider at a low priority
isExplicitProvider = true,
fetchItems = (context, items, provider) => FetchItems(context, provider)
};
}
static IEnumerable<SearchItem> FetchItems(SearchContext context, SearchProvider provider)
{
var expression = context.searchQuery;
expression += " -> " + expression.ToUpper();
yield return provider.CreateItem(context, context.searchQuery.ToUpper(), context.searchQuery.ToUpper(), expression, null, null);
}
[MenuItem("Examples/SearchProvider/isExplicitProvider")]
public static void Run()
{
SearchService.SetActive(type);
using (var context = SearchService.CreateContext(""))
{
// For the context of this example, we set the flag synchronous so we can get the results right away.
context.options |= SearchFlags.Synchronous;
// If we don't specify the filterId for an explicit provider, there will be no results.
context.searchText = "uppercase String";
var results = SearchService.Request(context);
Debug.Log(results.Count); // 0;
// Use the filterId for an explicit provider
context.searchText = "+uppercase String";
results = SearchService.Request(context);
// There should be only one result with that specific description
Debug.Log(results.Count); // 1;
Debug.Log(results[0].description); // "uppercase String -> UPPERCASE STRING";
}
}
}