Вы можете зарегистрировать действия для поставщика поиска. Пользователи могут получить доступ к зарегистрированным действиям с помощью значка Дополнительные параметры (⋮) в результатах поиска.
Примечание. Регистрация обработчика действий и регистрация службы поиска — это разные процессы. Вы можете зарегистрировать новые обработчики действий для существующих поставщиков услуг поиска.
Чтобы зарегистрировать действие, вы создаете функцию, помеченную атрибутом SearchActionsProvider
. Эта функция должна возвращать IEnumerable<SearchAction>
.
В следующем примере показано, как зарегистрировать действия для поставщика поиска активов.
[SearchActionsProvider]
internal static IEnumerable<SearchAction> ActionHandlers()
{
return new[]
{
new SearchAction("asset", "select", Icons.@goto, "Select asset...")
{
handler = (item, context) =>
{
var asset = AssetDatabase.LoadAssetAtPath<Object>(item.id);
if (asset != null)
{
Selection.activeObject = asset;
EditorGUIUtility.PingObject(asset);
EditorWindow.FocusWindowIfItsOpen(
Utils.GetProjectBrowserWindowType());
}
}
},
new SearchAction("asset", "open", SearchIcon.open, "Open asset... (Alt+Enter)")
{
handler = (item, context) =>
{
var asset = AssetDatabase.LoadAssetAtPath<Object>(item.id);
if (asset != null)
AssetDatabase.OpenAsset(asset);
}
},
new SearchAction("asset", "reveal", SearchIcon.folder, "Show in Explorer")
{
handler = (item, context) =>
{
EditorUtility.RevealInFinder(item.id);
}
}
};
}
Действия при поиске
Класс SearchAction
описывает действие и предоставляет обработчик для выполнения действия на определенном SearchItem
.
public class SearchAction
{
public SearchAction(string providerType, string name,
Texture2D icon = null,
string tooltip = null);
public ActionHandler handler;
public EnabledHandler isEnabled;
}
providerType
– это уникальный идентификатор поставщика, для которого вы регистрируете действие.
ActionHandler
имеет следующую подпись:
// item: item that needs the action to be executed.
// context: search context of the SearchTool when the item is executed.
public delegate void ActionHandler(SearchItem item, SearchContext context);
Действие можно настроить с помощью предиката isEnabled
, который определяет, доступно ли действие для определенного элемента.
Действия контекстного поиска
Чтобы предоставить контекстные действия (щелчок правой кнопкой мыши) для определенных типов элементов в результатах поиска, зарегистрируйте действие с именем context
для поставщика поиска.
Следующий пример взят из поставщика поиска объектов:
new SearchAction(type, "context", null, "Context")
{
handler = (item, context) =>
{
var asset = AssetDatabase.LoadAssetAtPath<Object>(item.id);
if (asset != null)
{
Selection.activeObject = asset;
EditorUtility.DisplayPopupMenu(
QuickSearchTool.ContextualActionPosition,
"Assets/", null);
}
}
}