예제 #1
0
        private async Task ShowCompletion(TriggerMode triggerMode)
        {
            if (CompletionProvider == null)
            {
                return;
            }

            int offset;

            GetCompletionDocument(out offset);
            var completionChar = triggerMode == TriggerMode.Text ? Document.GetCharAt(offset - 1) : (char?)null;
            var results        = await CompletionProvider.GetCompletionData(offset, completionChar,
                                                                            triggerMode == TriggerMode.SignatureHelp).ConfigureAwait(true);

            if (results.OverloadProvider != null)
            {
                results.OverloadProvider.Refresh();

                if (_insightWindow != null && _insightWindow.IsVisible)
                {
                    _insightWindow.Provider = results.OverloadProvider;
                }
                else
                {
                    _insightWindow = new OverloadInsightWindow(TextArea)
                    {
                        Provider   = results.OverloadProvider,
                        Background = CompletionBackground,
                        Style      = TryFindResource(typeof(InsightWindow)) as Style
                    };
                    _insightWindow.Show();
                    _insightWindow.Closed += (o, args) => _insightWindow = null;
                }
                return;
            }

            if (_completionWindow == null && results.CompletionData?.Any() == true)
            {
                _insightWindow?.Close();

                // Open code completion after the user has pressed dot:
                _completionWindow = new CompletionWindow(TextArea)
                {
                    MinWidth   = 200,
                    Background = CompletionBackground,
                    CloseWhenCaretAtBeginning = triggerMode == TriggerMode.Completion
                };
                if (completionChar != null && char.IsLetterOrDigit(completionChar.Value))
                {
                    _completionWindow.StartOffset -= 1;
                }

                var data = _completionWindow.CompletionList.CompletionData;
                ICompletionDataEx selected = null;
                foreach (var completion in results.CompletionData) //.OrderBy(item => item.SortText))
                {
                    if (completion.IsSelected)
                    {
                        selected = completion;
                    }
                    data.Add(completion);
                }
                if (selected != null)
                {
                    _completionWindow.CompletionList.SelectedItem = selected;
                }
                _completionWindow.Show();
                _completionWindow.Closed += (o, args) => { _completionWindow = null; };
            }
        }
예제 #2
0
        private async Task ShowCompletion(bool controlSpace)
        {
            if (CompletionProvider == null)
            {
                return;
            }

            if (_completionWindow == null)
            {
                int offset;
                GetCompletionDocument(out offset);
                var completionChar = controlSpace ? (char?)null : Document.GetCharAt(offset - 1);
                var results        = await CompletionProvider.GetCompletionData(offset, completionChar).ConfigureAwait(true);

                if (_insightWindow == null && results.OverloadProvider != null)
                {
                    _insightWindow = new OverloadInsightWindow(TextArea)
                    {
                        Provider   = results.OverloadProvider,
                        Background = CompletionBackground,
                    };
                    _insightWindow.Show();
                    _insightWindow.Closed += (o, args) => _insightWindow = null;
                    return;
                }

                if (_completionWindow == null && results.CompletionData.Any())
                {
                    // Open code completion after the user has pressed dot:
                    _completionWindow = new CompletionWindow(TextArea)
                    {
                        Background = CompletionBackground,
                        CloseWhenCaretAtBeginning = controlSpace
                    };
                    if (completionChar != null && char.IsLetterOrDigit(completionChar.Value))
                    {
                        _completionWindow.StartOffset -= 1;
                    }

                    var data = _completionWindow.CompletionList.CompletionData;
                    ICompletionDataEx selected = null;
                    foreach (var completion in results.CompletionData) //.OrderBy(item => item.SortText))
                    {
                        if (completion.IsSelected)
                        {
                            selected = completion;
                        }
                        data.Add(completion);
                    }
                    if (selected != null)
                    {
                        _completionWindow.CompletionList.SelectedItem = selected;
                    }
                    _completionWindow.Show();
                    _completionWindow.Closed += (o, args) =>
                    {
                        _completionWindow = null;
                    };
                }
            }

            //if (!string.IsNullOrEmpty(enteredText) && _insightWindow != null)
            //{
            //    //whenver text is entered update the provider
            //    var provider = _insightWindow.Provider as CSharpOverloadProvider;
            //    if (provider != null)
            //    {
            //        //since the text has not been added yet we need to tread it as if the char has already been inserted
            //        var offset = 0;
            //        var doc = GetCompletionDocument(out offset);
            //        provider.Update(doc, offset);
            //        //if the windows is requested to be closed we do it here
            //        if (provider.RequestClose)
            //        {
            //            _insightWindow.Close();
            //            _insightWindow = null;
            //        }
            //    }
            //}
        }