IEnumerable <ISearchQuery> CreateQuery()
        {
            var queries = multiEntryHandler();

            foreach (var query in queries)
            {
                var q          = new SearchQuery();
                var provider   = SearchService.GetProvider(providerId);
                var searchText = query;
                if (provider != null && !query.StartsWith(provider.filterId))
                {
                    searchText = $"{provider.filterId} {query}";
                }
                q.searchText  = searchText;
                q.displayName = searchText;
                if (!string.IsNullOrEmpty(providerId))
                {
                    q.viewState.providerIds = new[] { providerId }
                }
                ;
                q.description = description;
                q.viewState.SetSearchViewFlags(viewFlags);
                yield return(q);
            }
        }
        private void InitializeReport(string path)
        {
            m_ReportPath = path;
            m_Report     = SearchReport.LoadFromFile(path);
            m_ReportName = Path.GetFileNameWithoutExtension(path);
            var searchExpressionProvider = SearchService.GetProvider("expression");

            m_Items      = m_Report.CreateSearchItems(searchExpressionProvider).ToList();
            titleContent = new GUIContent($"{m_ReportName} ({m_Items.Count})", m_ReportPath);

            m_FocusSearchField = true;

            // ITableView
            m_TableConfig = new SearchTable(m_ReportName, m_Report.columns);
            for (int i = 0; i < m_TableConfig.columns.Length; ++i)
            {
                InitializeColumn(m_TableConfig.columns[i]);
            }

            m_QueryEngine = new QueryEngine <int>(k_QueryEngineOptions);
            foreach (var column in m_Report.columns)
            {
                var filterName = column.content.text.Replace(" ", "");
                m_QueryEngine.AddFilter(filterName, i => AddFilter(i, column.selector));
                if (filterName != filterName.ToLowerInvariant())
                {
                    m_QueryEngine.AddFilter(filterName.ToLowerInvariant(), i => AddFilter(i, column.selector));
                }

                SearchValue.SetupEngine(m_QueryEngine);
            }
            m_QueryEngine.SetSearchDataCallback(i => m_Items[i].GetFields().Select(f => (f.value ?? "").ToString()), StringComparison.OrdinalIgnoreCase);

            UpdatePropertyTable();
        }
Exemple #3
0
 private void PopulateValidEnabledProviderIds()
 {
     m_EnabledProviderIds = new List <string>(m_ProvidersProperty.arraySize);
     for (int i = 0; i < m_ProvidersProperty.arraySize; i++)
     {
         var id = m_ProvidersProperty.GetArrayElementAtIndex(i).stringValue;
         if (SearchService.GetProvider(id) != null && !m_EnabledProviderIds.Contains(id))
         {
             m_EnabledProviderIds.Add(id);
         }
     }
 }
Exemple #4
0
        public override void BeginSession(ISearchContext context)
        {
            if (searchSessions.ContainsKey(context.guid))
            {
                return;
            }

            var engineProvider = SearchService.GetProvider(providerId);

            var adbProvider = SearchService.GetProvider(AdbProvider.type);

            searchSessions.Add(context.guid, new SearchApiSession(adbProvider, engineProvider));
        }
Exemple #5
0
        internal static IEnumerable <SearchProvider> GetObjectSelectorProviders(ObjectSelectorSearchContext context)
        {
            bool allowAssetObjects = (context.visibleObjects & VisibleObjects.Assets) == VisibleObjects.Assets;
            bool allowSceneObjects = (context.visibleObjects & VisibleObjects.Scene) == VisibleObjects.Scene;

            if (allowAssetObjects)
            {
                yield return(SearchService.GetProvider(AssetProvider.type));
            }
            if (allowSceneObjects)
            {
                yield return(SearchService.GetProvider(BuiltInSceneObjectsProvider.type));
            }
        }
        /// <summary>
        /// Enable or disable a single provider.
        /// A disabled provider won't be ask to provider items to resolve the query.
        /// </summary>
        /// <param name="providerId">Id of the provider. See SearchProvider.<see cref="SearchProvider.name"/>.id.</param>
        /// <param name="isEnabled">If true, enable the provider to perform query.</param>
        public void SetFilter(string providerId, bool isEnabled)
        {
            var provider = m_Providers.FirstOrDefault(p => p.id == providerId);

            if (!isEnabled && provider != null)
            {
                SetProviders(m_Providers.Where(p => p != provider).ToList());
            }
            else if (isEnabled && provider == null)
            {
                provider = SearchService.GetProvider(providerId);
                if (provider != null)
                {
                    SetProviders(m_Providers.Concat(new[] { provider }).ToList());
                }
            }
        }
Exemple #7
0
        static SearchContext CreateContextFromAttribute(SearchContextAttribute attribute)
        {
            var providers = attribute.providerIds.Select(id => SearchService.GetProvider(id))
                            .Concat(attribute.instantiableProviders.Select(type => SearchService.GetProvider(type))).Where(p => p != null);

            if (!providers.Any())
            {
                providers = SearchService.GetObjectProviders();
            }

            var searchText  = attribute.query;
            var searchQuery = GetSearchQueryFromFromAttribute(attribute);

            if (searchQuery != null)
            {
                searchText = searchQuery.text;
                providers  = QuickSearch.GetMergedProviders(providers, searchQuery.providerIds);
            }

            var context = SearchService.CreateContext(providers, searchText);

            return(context);
        }
        SearchTable LoadDefaultTableConfig(bool reset, string id = null, SearchTable defaultConfig = null)
        {
            if (!reset)
            {
                var sessionSearchTableData = SessionState.GetString(GetDefaultGroupId(id), null);
                if (!string.IsNullOrEmpty(sessionSearchTableData))
                {
                    return(SearchTable.Import(sessionSearchTableData));
                }
            }

            if (searchView is QuickSearch qs)
            {
                var providers = qs.context.GetProviders();
                var provider  = providers.Count == 1 ? providers.FirstOrDefault() : SearchService.GetProvider(qs.currentGroup);
                if (provider?.tableConfig != null)
                {
                    return(provider.tableConfig(context));
                }
            }

            return(defaultConfig ?? SearchTable.CreateDefault());
        }
Exemple #9
0
        public void ObjectIconDropDown(Rect position, SerializedProperty iconProperty)
        {
            const float kDropDownArrowMargin = 2;
            const float kDropDownArrowWidth  = 12;
            const float kDropDownArrowHeight = 12;

            if (s_IconTextureInactive == null)
            {
                s_IconTextureInactive = (Material)EditorGUIUtility.LoadRequired("Inspectors/InactiveGUI.mat");
            }

            if (s_IconButtonStyle == null)
            {
                s_IconButtonStyle = new GUIStyle("IconButton")
                {
                    fixedWidth = 0, fixedHeight = 0
                }
            }
            ;

            void SelectIcon(UnityEngine.Object obj, bool isCanceled)
            {
                if (!isCanceled)
                {
                    iconProperty.objectReferenceValue = obj;
                    iconProperty.serializedObject.ApplyModifiedProperties();
                    SearchService.RefreshWindows();
                }
            }

            if (EditorGUI.DropdownButton(position, GUIContent.none, FocusType.Passive, s_IconButtonStyle))
            {
                SearchUtils.ShowIconPicker(SelectIcon);
                GUIUtility.ExitGUI();
            }

            if (Event.current.type == EventType.Repaint)
            {
                var contentPosition = position;

                contentPosition.xMin += kDropDownArrowMargin;
                contentPosition.xMax -= kDropDownArrowMargin + kDropDownArrowWidth / 2;
                contentPosition.yMin += kDropDownArrowMargin;
                contentPosition.yMax -= kDropDownArrowMargin + kDropDownArrowWidth / 2;

                Rect arrowRect = new Rect(
                    contentPosition.x + contentPosition.width - kDropDownArrowWidth / 2,
                    contentPosition.y + contentPosition.height - kDropDownArrowHeight / 2,
                    kDropDownArrowWidth, kDropDownArrowHeight);
                Texture2D icon = null;

                if (!iconProperty.hasMultipleDifferentValues)
                {
                    icon = iconProperty.objectReferenceValue as Texture2D ?? AssetPreview.GetMiniThumbnail(targets[0]);
                }
                if (icon == null)
                {
                    icon = Icons.favorite;
                }

                Vector2 iconSize = contentPosition.size;

                if (icon)
                {
                    iconSize.x = Mathf.Min(icon.width, iconSize.x);
                    iconSize.y = Mathf.Min(icon.height, iconSize.y);
                }
                Rect iconRect = new Rect(
                    contentPosition.x + contentPosition.width / 2 - iconSize.x / 2,
                    contentPosition.y + contentPosition.height / 2 - iconSize.y / 2,
                    iconSize.x, iconSize.y);

                GUI.DrawTexture(iconRect, icon, ScaleMode.ScaleToFit);
                if (s_IconDropDown == null)
                {
                    s_IconDropDown = EditorGUIUtility.IconContent("Icon Dropdown");
                }
                GUIStyle.none.Draw(arrowRect, s_IconDropDown, false, false, false, false);
            }
        }

        void AddProvider(ReorderableList list)
        {
            var menu = new GenericMenu();
            var disabledProviders = GetDisabledProviders().ToList();

            for (var i = 0; i < disabledProviders.Count; ++i)
            {
                var provider = disabledProviders[i];
                menu.AddItem(new GUIContent(provider.name), false, AddProvider, provider);
                if (!provider.isExplicitProvider && i + 1 < disabledProviders.Count && disabledProviders[i + 1].isExplicitProvider)
                {
                    menu.AddSeparator(string.Empty);
                }
            }
            menu.ShowAsContext();
        }

        void AddProvider(object providerObj)
        {
            if (providerObj is SearchProvider provider && !m_EnabledProviderIds.Contains(provider.id))
            {
                m_EnabledProviderIds.Add(provider.id);
                UpdateEnabledProviders();
            }
        }

        void RemoveProvider(ReorderableList list)
        {
            var index = list.index;

            if (index != -1 && index < m_EnabledProviderIds.Count)
            {
                var toRemove = SearchService.GetProvider(m_EnabledProviderIds[index]);
                if (toRemove == null)
                {
                    return;
                }
                m_EnabledProviderIds.Remove(toRemove.id);
                UpdateEnabledProviders();

                if (index >= list.count)
                {
                    list.index = list.count - 1;
                }
            }
        }

        void UpdateEnabledProviders()
        {
            m_ProvidersProperty.arraySize = m_EnabledProviderIds.Count;
            for (var i = 0; i < m_EnabledProviderIds.Count; ++i)
            {
                m_ProvidersProperty.GetArrayElementAtIndex(i).stringValue = m_EnabledProviderIds[i];
            }
            serializedObject.ApplyModifiedProperties();
            SetupContext();
        }

        void DrawProviderElement(Rect rect, int index, bool selected, bool focused)
        {
            if (index >= 0 && index < m_EnabledProviderIds.Count)
            {
                GUI.Label(rect, SearchService.GetProvider(m_EnabledProviderIds[index])?.name ?? "<unknown>");
            }
        }

        void CheckContext()
        {
            if (m_SearchContext.searchText != m_TextProperty.stringValue)
            {
                SetupContext();
            }
        }
    }