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(); }
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); }
public static ISearchView ShowWindow(string searchQuery) { return(ShowWindow(searchQuery, SearchService.GetActiveProviders())); }