internal static SearchProvider CreateProvider() { return(new SearchProvider(type, displayName) { priority = 25, filterId = "p:", showDetails = SearchSettings.fetchPreview, subCategories = new List <NameEntry>() { new NameEntry("guid", "guid"), new NameEntry("packages", "packages") }, onEnable = () => { if (!SearchSettings.useUberIndexing && fileIndexer == null) { var packageRoots = Utils.GetPackagesPaths().Select(p => new SearchIndexerRoot(Path.GetFullPath(p).Replace('\\', '/'), p)); var roots = new[] { new SearchIndexerRoot(Application.dataPath, "Assets") }.Concat(packageRoots); fileIndexer = new FileSearchIndexer(type, roots); fileIndexer.Build(); } }, isEnabledForContextualSearch = () => QuickSearch.IsFocusedWindowTypeName("ProjectBrowser"), fetchItems = (context, items, _provider) => SearchAssets(context, items, _provider), fetchKeywords = (context, lastToken, items) => { if (!lastToken.StartsWith("t:")) { return; } items.AddRange(typeFilter.Select(t => "t:" + t)); }, fetchDescription = (item, context) => (item.description = GetAssetDescription(item.id)), fetchThumbnail = (item, context) => Utils.GetAssetThumbnailFromPath(item.id), fetchPreview = (item, context, size, options) => Utils.GetAssetPreviewFromPath(item.id, size, options), startDrag = (item, context) => { var obj = AssetDatabase.LoadAssetAtPath <Object>(item.id); if (obj == null) { return; } DragAndDrop.PrepareStartDrag(); DragAndDrop.objectReferences = new[] { obj }; DragAndDrop.StartDrag(item.label); }, trackSelection = (item, context) => Utils.PingAsset(item.id) }); }
public SceneProvider(string providerId, string filterId, string displayName) : base(providerId, displayName) { priority = 50; this.filterId = filterId; this.showDetails = true; subCategories = new List<NameEntry> { new NameEntry("fuzzy", "fuzzy") }; isEnabledForContextualSearch = () => QuickSearch.IsFocusedWindowTypeName("SceneView") || QuickSearch.IsFocusedWindowTypeName("SceneHierarchyWindow"); EditorApplication.hierarchyChanged += () => m_HierarchyChanged = true; onEnable = () => { if (m_HierarchyChanged) { m_BuildIndexEnumerator = null; m_HierarchyChanged = false; } }; onDisable = () => { // Only track changes that occurs when Quick Search is not active. m_HierarchyChanged = false; }; fetchItems = (context, items, provider) => SearchItems(context, provider); fetchLabel = (item, context) => { if (item.label != null) return item.label; var go = ObjectFromItem(item); if (!go) return item.id; var transformPath = GetTransformPath(go.transform); var components = go.GetComponents<Component>(); if (components.Length > 2 && components[1] && components[components.Length-1]) item.label = $"{transformPath} ({components[1].GetType().Name}..{components[components.Length-1].GetType().Name})"; else if (components.Length > 1 && components[1]) item.label = $"{transformPath} ({components[1].GetType().Name})"; else item.label = $"{transformPath} ({item.id})"; long score = 1; List<int> matches = new List<int>(); var sq = CleanString(context.searchQuery); if (FuzzySearch.FuzzyMatch(sq, CleanString(item.label), ref score, matches)) item.label = RichTextFormatter.FormatSuggestionTitle(item.label, matches); return item.label; }; fetchDescription = (item, context) => { var go = ObjectFromItem(item); return (item.description = GetHierarchyPath(go)); }; fetchThumbnail = (item, context) => { var obj = ObjectFromItem(item); if (obj == null) return null; return (item.thumbnail = Utils.GetThumbnailForGameObject(obj)); }; fetchPreview = (item, context, size, options) => { var obj = ObjectFromItem(item); if (obj == null) return item.thumbnail; var assetPath = GetHierarchyAssetPath(obj, true); if (String.IsNullOrEmpty(assetPath)) return item.thumbnail; return Utils.GetAssetPreviewFromPath(assetPath, size, options) ?? AssetPreview.GetAssetPreview(obj); }; startDrag = (item, context) => { var obj = ObjectFromItem(item); if (obj != null) Utils.StartDrag(obj, item.label); }; fetchGameObjects = FetchGameObjects; buildKeywordComponents = o => null; trackSelection = (item, context) => PingItem(item); }