示例#1
0
        private void Search()
        {
            stack.Clear();

            if (hasSearch)
            {
                searchCancellationTokenSource?.Cancel();

                if (hasSufficientSearch)
                {
                    var queryNow = query;

                    searchCancellationTokenSource = new CancellationTokenSource();
                    var searchCancellationToken = searchCancellationTokenSource.Token;

                    ExecuteTask(delegate
                    {
                        if (searchCancellationToken.IsCancellationRequested)
                        {
                            return;
                        }

                        DisplayProgressBar($"Searching for '{queryNow}'...", 0);

                        lock (guiLock)
                        {
                            searchRoot.children.Clear();
                            searchRoot.isPopulated = false;
                        }

                        Populate(searchRoot, tree.OrderedSearchResults(query, searchCancellationToken).Cancellable(searchCancellationToken).Take(LudiqCore.Configuration.maxSearchResults));
                        activeSelectedIndex = activeNodes.Count >= 1 ? 0 : -1;
                    });
                }
                else
                {
                    ExecuteTask(delegate
                    {
                        lock (guiLock)
                        {
                            searchRoot.children.Clear();
                            searchRoot.isPopulated = true;
                        }
                    });
                }

                stack.Push(searchRoot);
            }
            else
            {
                stack.Push(root);
                animTarget      = 1;
                lastRepaintTime = DateTime.Now;
                return;
            }
        }
示例#2
0
        private void Search()
        {
            while (stack.Count > 0 && stack[stack.Count - 1].option is SearchOption)
            {
                stack.RemoveAt(stack.Count - 1);
            }

            if (hasSearch)
            {
                searchCancellationTokenSource?.Cancel();

                var query = this.query;

                var parent     = (stack.Count > 1 ? stack[stack.Count - 1] : null);
                var searchNode = new FuzzyOptionNode(new SearchOption(query));

                searchCancellationTokenSource = new CancellationTokenSource();
                var searchCancellationToken = searchCancellationTokenSource.Token;

                ExecuteTask(() =>
                {
                    DisplayProgressBar($"Searching for \"{query}\"...", 0);

                    if (searchCancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    lock (guiLock)
                    {
                        searchNode.children.Clear();
                        searchNode.isPopulated = false;
                    }

                    Populate(searchNode, tree.OrderedSearchResults(query, parent?.option, searchCancellationToken).Take(LudiqCore.Configuration.maxSearchResults));
                    activeSelectedIndex = activeNodes.Count >= 1 ? 0 : -1;
                });

                stack.Add(searchNode);
            }
            else
            {
                animTarget      = 1;
                animAncestor    = null;
                lastRepaintTime = DateTime.UtcNow;
            }
        }