Beispiel #1
0
        private void SetupContext()
        {
            m_Results?.Dispose();
            m_ResultView?.Dispose();
            if (m_SearchContext != null)
            {
                m_SearchContext.Dispose();
                m_SearchContext.asyncItemReceived -= OnAsyncItemsReceived;
            }

            var providerIds = m_EnabledProviderIds.Count != 0 ? m_EnabledProviderIds : SearchService.GetActiveProviders().Select(p => p.id);

            m_SearchContext = SearchService.CreateContext(providerIds, m_TextProperty.stringValue, SearchSettings.GetContextOptions());
            m_SearchContext.asyncItemReceived += OnAsyncItemsReceived;
            m_Results    = new SortedSearchList(m_SearchContext);
            m_ResultView = new SearchResultView(m_Results);

            RefreshResults();
        }
Beispiel #2
0
        public static string ReplaceText(string searchText, string replacement, int cursorPos, out int insertTokenPos)
        {
            var replaceFrom = cursorPos - 1;

            while (replaceFrom >= 0 && !SearchPropositionOptions.IsDelimiter(searchText[replaceFrom]))
            {
                replaceFrom--;
            }
            if (replaceFrom == -1)
            {
                replaceFrom = 0;
            }
            else
            {
                replaceFrom++;
            }

            var activeProviders = SearchService.GetActiveProviders();

            foreach (var provider in activeProviders)
            {
                if (replaceFrom + provider.filterId.Length > searchText.Length || provider.filterId.Length == 1)
                {
                    continue;
                }

                var stringViewTest = new StringView(searchText, replaceFrom, replaceFrom + provider.filterId.Length);
                if (stringViewTest == provider.filterId)
                {
                    replaceFrom += provider.filterId.Length;
                    break;
                }
            }

            var replaceTo = IndexOfDelimiter(searchText, cursorPos);

            if (replaceTo == -1)
            {
                replaceTo = searchText.Length;
            }

            if (searchText.Substring(replaceFrom, replaceTo - replaceFrom).StartsWith(replacement, StringComparison.OrdinalIgnoreCase))
            {
                insertTokenPos = cursorPos;
                return(searchText);
            }

            var sb = new StringBuilder(searchText);

            sb.Remove(replaceFrom, replaceTo - replaceFrom);
            sb.Insert(replaceFrom, replacement);

            var insertion = sb.ToString();

            insertTokenPos = insertion.LastIndexOf('\t');
            if (insertTokenPos != -1)
            {
                insertion = insertion.Remove(insertTokenPos, 1);
            }
            return(insertion);
        }
        public QueryHelperWidget(bool blockMode, ISearchView view = null)
        {
            m_BlockMode = blockMode;
            drawBorder  = true;

            m_Areas = new QueryBuilder("")
            {
                drawBackground = false,
            };
            m_Areas.AddBlock(new QueryAreaBlock(m_Areas, k_All, ""));

            var builtinSearches = SearchTemplateAttribute.GetAllQueries();
            var allProviders    = view != null && view.context != null?view.context.GetProviders() : SearchService.GetActiveProviders();

            var generalProviders  = allProviders.Where(p => !p.isExplicitProvider);
            var explicitProviders = allProviders.Where(p => p.isExplicitProvider);
            var providers         = generalProviders.Concat(explicitProviders);

            if (blockMode)
            {
                m_ActiveSearchProviders = providers.Where(p => p.id != "expression" && (p.fetchPropositions != null || builtinSearches.Any(sq => sq.searchText.StartsWith(p.filterId) || sq.GetProviderIds().Any(pid => p.id == pid)))).ToArray();
            }
            else
            {
                m_ActiveSearchProviders = providers.ToArray();
            }

            foreach (var p in m_ActiveSearchProviders)
            {
                m_Areas.AddBlock(new QueryAreaBlock(m_Areas, p));
            }
            m_Areas.@readonly = true;
            foreach (var b in m_Areas.blocks)
            {
                b.tooltip = $"Double click to search in: {b.value}";
            }

            if (string.IsNullOrEmpty(m_CurrentAreaFilterId))
            {
                m_CurrentAreaFilterId = SearchSettings.helperWidgetCurrentArea;
            }
            m_Searches = new QueryHelperSearchGroup(m_BlockMode, L10n.Tr("Searches"));

            ChangeCurrentAreaFilter(m_CurrentAreaFilterId);

            PopulateSearches(builtinSearches);
            RefreshSearches();
            BindSearchView(view);
        }
Beispiel #4
0
 public static ISearchView ShowWindow(string searchQuery)
 {
     return(ShowWindow(searchQuery, SearchService.GetActiveProviders()));
 }