コード例 #1
0
        public bool SelectObject(ISearchContext context,
                                 Action <Object, bool> selectHandler, Action <Object> trackingHandler)
        {
            var selectContext = (ObjectSelectorSearchContext)context;
            var viewFlags     = SearchFlags.OpenPicker;

            if (Utils.IsRunningTests())
            {
                viewFlags |= SearchFlags.Dockable;
            }
            SearchAnalytics.SendEvent(null, SearchAnalytics.GenericEventType.QuickSearchPickerOpens, "", "object", "ObjectSelectorEngine");
            var searchQuery = string.Join(" ", context.requiredTypeNames.Select(tn => tn == null ? "" : $"t:{tn.ToLowerInvariant()}"));

            if (string.IsNullOrEmpty(searchQuery))
            {
                searchQuery = "";
            }
            else
            {
                searchQuery += " ";
            }
            var viewstate = new SearchViewState(
                SearchService.CreateContext(GetObjectSelectorProviders(selectContext), searchQuery, viewFlags), selectHandler, trackingHandler,
                selectContext.requiredTypeNames.First(), selectContext.requiredTypes.First());

            qsWindow = SearchService.ShowPicker(viewstate) as QuickSearch;
            return(qsWindow != null);
        }
コード例 #2
0
 // Evaluate arguments as search expressions
 public IEnumerable <object> EvaluateArgs(bool reevaluateLiterals = false)
 {
     using (var context = SearchService.CreateContext(""))
     {
         return(EvaluateArgs(context, reevaluateLiterals).ToList()); // Calling ToList to force evaluation so context is not used after disposal.
     }
 }
コード例 #3
0
 public IEnumerable <object> Evaluate(bool reevaluateLiterals = false)
 {
     using (var context = SearchService.CreateContext(""))
     {
         return(Evaluate(context, reevaluateLiterals).ToList());
     }
 }
コード例 #4
0
 private void BuildContext()
 {
     if (providerIds != null && providerIds.Length > 0)
     {
         m_Context = SearchService.CreateContext(providerIds, searchText ?? string.Empty, searchFlags);
     }
     else
     {
         m_Context = SearchService.CreateContext(searchText ?? string.Empty, searchFlags | SearchFlags.OpenDefault);
     }
     m_WasDeserialized = false;
 }
コード例 #5
0
        internal static void OpenScenePicker()
        {
            var searchContext = SearchService.CreateContext(CreateOpenSceneProviders(), string.Empty);

            SearchService.ShowPicker(new SearchViewState(searchContext, OnSceneSelected)
            {
                flags = SearchViewFlags.DisableInspectorPreview |
                        SearchViewFlags.DisableSavedSearchQuery |
                        SearchViewFlags.GridView,
                title           = L10n.Tr("Scenes"),
                excludeNoneItem = true
            });
        }
コード例 #6
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();
        }
コード例 #7
0
        public bool SelectObject(ISearchContext context,
                                 Action <Object, bool> selectHandler, Action <Object> trackingHandler)
        {
            var selectContext = (ObjectSelectorSearchContext)context;
            var viewFlags     = SearchFlags.OpenPicker;

            if (Utils.IsRunningTests())
            {
                viewFlags |= SearchFlags.Dockable;
            }
            SearchAnalytics.SendEvent(null, SearchAnalytics.GenericEventType.QuickSearchPickerOpens, "", "object", "ObjectSelectorEngine");
            var viewstate = new SearchViewState(
                SearchService.CreateContext("", viewFlags), selectHandler, trackingHandler,
                selectContext.requiredTypeNames.First(), selectContext.requiredTypes.First());


            qsWindow = SearchService.ShowPicker(viewstate) as QuickSearch;

            return(qsWindow != null);
        }
コード例 #8
0
 static IEnumerable <SearchItem> FetchScenes(SearchContext context, SearchProvider provider)
 {
     using (var findContext = SearchService.CreateContext("find", $"(*.unity) {context.searchQuery}"))
         using (var request = SearchService.Request(findContext))
         {
             foreach (var r in request)
             {
                 if (r == null)
                 {
                     yield return(null);
                 }
                 else
                 {
                     r.provider = provider;
                     r.data     = null;
                     yield return(r);
                 }
             }
         }
 }
コード例 #9
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);
        }
コード例 #10
0
        public static bool TryParse(StringView text, out QueryMarker marker)
        {
            marker = none;
            if (!IsQueryMarker(text))
            {
                return(false);
            }

            var innerText = text.Substring(k_StartToken.Length, text.Length - k_StartToken.Length - k_EndToken.Length);

            var indexOfColon = innerText.IndexOf(':');

            if (indexOfColon < 0)
            {
                return(false);
            }

            var controlType     = innerText.Substring(0, indexOfColon).Trim().ToString();
            var args            = new List <StringView>();
            var level           = 0;
            var currentArgStart = indexOfColon + 1;

            for (var i = currentArgStart; i < innerText.Length; ++i)
            {
                if (ParserUtils.IsOpener(innerText[i]))
                {
                    ++level;
                }
                if (ParserUtils.IsCloser(innerText[i]))
                {
                    --level;
                }
                if (innerText[i] != ',' || level != 0)
                {
                    continue;
                }
                if (i + 1 == innerText.Length)
                {
                    return(false);
                }

                args.Add(innerText.Substring(currentArgStart, i - currentArgStart).Trim());
                currentArgStart = i + 1;
            }

            if (currentArgStart == innerText.Length)
            {
                return(false); // No arguments
            }
            // Extract the final argument, since there is no comma after the last argument
            args.Add(innerText.Substring(currentArgStart, innerText.Length - currentArgStart).Trim());

            var queryMarkerArguments = new List <QueryMarkerArgument>();

            using (var context = SearchService.CreateContext(""))
            {
                foreach (var arg in args)
                {
                    var parserArgs = new SearchExpressionParserArgs(arg, context, SearchExpressionParserFlags.ImplicitLiterals);
                    SearchExpression expression = null;
                    try
                    {
                        expression = SearchExpression.Parse(parserArgs);
                    }
                    catch (SearchExpressionParseException)
                    { }

                    if (expression == null || !expression.types.HasAny(SearchExpressionType.Literal))
                    {
                        queryMarkerArguments.Add(new QueryMarkerArgument {
                            rawText = arg, expression = expression, value = expression == null ? arg.ToString() : null
                        });
                        continue;
                    }
                    var results             = expression.Execute(context);
                    var resolvedValue       = results.FirstOrDefault(item => item != null);
                    var resolvedValueObject = resolvedValue?.value;
                    queryMarkerArguments.Add(new QueryMarkerArgument {
                        rawText = arg, expression = expression, value = resolvedValueObject
                    });
                }
            }

            marker = new QueryMarker {
                type = controlType, text = text, args = queryMarkerArguments.ToArray()
            };
            return(true);
        }
コード例 #11
0
 internal override SearchContext CreateQueryContext(ISearchQuery query)
 {
     return(SearchService.CreateContext(context?.GetProviders(), query.searchText, context?.options ?? SearchFlags.Default));
 }
コード例 #12
0
        internal static SearchExpression Parse(string text, SearchExpressionParserFlags options = SearchExpressionParserFlags.Default)
        {
            var searchContext = SearchService.CreateContext(text);

            return(Parse(searchContext, options));
        }
コード例 #13
0
        public static ISearchView ShowWindow(string searchQuery, IEnumerable <SearchProvider> providers)
        {
            var context = SearchService.CreateContext(providers, searchQuery);

            return(SearchService.ShowWindow(context, topic: "Expression", saveFilters: false));
        }