예제 #1
0
        public static PABCNETCodeCompletionWindow ShowCompletionWindow(Form parent, TextEditorControl control, string fileName, ICompletionDataProvider completionDataProvider, char firstChar, bool visibleKeyPressed, bool is_by_dot,PascalABCCompiler.Parsers.KeywordKind keyw)
		{
        	ICompletionData[] completionData = (completionDataProvider as VisualPascalABC.CodeCompletionProvider).GenerateCompletionDataWithKeyword(fileName, control.ActiveTextAreaControl.TextArea, firstChar, keyw);
			if (completionData == null || completionData.Length == 0) {
				return null;
			}
            PABCNETCodeCompletionWindow codeCompletionWindow = new PABCNETCodeCompletionWindow(completionDataProvider, completionData, parent, control, visibleKeyPressed, is_by_dot);
			codeCompletionWindow.ShowCompletionWindow();
			return codeCompletionWindow;
		}
예제 #2
0
        public static PABCNETCodeCompletionWindow ShowCompletionWindowWithFirstChar(Form parent, TextEditorControl control, string fileName, ICompletionDataProvider completionDataProvider, char firstChar, PascalABCCompiler.Parsers.KeywordKind keyw)
        {
        	ICompletionData[] completionData = (completionDataProvider as VisualPascalABC.CodeCompletionProvider).GenerateCompletionDataByFirstChar(fileName, control.ActiveTextAreaControl.TextArea, firstChar, keyw);
        	if (completionData == null || completionData.Length == 0) {
				return null;
			}
        	(completionDataProvider as VisualPascalABC.CodeCompletionProvider).preSelection = firstChar.ToString();
            PABCNETCodeCompletionWindow codeCompletionWindow = new PABCNETCodeCompletionWindow(completionDataProvider, completionData, parent, control, true, false);
			codeCompletionWindow.ShowCompletionWindow();
			return codeCompletionWindow;
        }
예제 #3
0
        public static PABCNETCodeCompletionWindow ShowOverridableMethodsCompletionWindows(Form parent, TextEditorControl control, string fileName, ICompletionDataProvider completionDataProvider)
        {
        	ICompletionData[] completionData = (completionDataProvider as VisualPascalABC.CodeCompletionProvider).GenerateCompletionDataForOverridableMethods(fileName, control.ActiveTextAreaControl.TextArea);
        	if (completionData == null || completionData.Length == 0) {
				return null;
			}
        	PABCNETCodeCompletionWindow codeCompletionWindow = new PABCNETCodeCompletionWindow(completionDataProvider, completionData, parent, control, false, false);
			codeCompletionWindow.is_overrided_meths = true;
        	codeCompletionWindow.ShowCompletionWindow();
			return codeCompletionWindow;
        }
예제 #4
0
        public static PABCNETCodeCompletionWindow ShowCompletionWindow(Form parent, TextEditorControl control, string fileName, ICompletionDataProvider completionDataProvider, char firstChar, bool visibleKeyPressed, bool is_by_dot, PascalABCCompiler.Parsers.KeywordKind keyw)
        {
            ICompletionData[] completionData = (completionDataProvider as VisualPascalABC.CodeCompletionProvider).GenerateCompletionDataWithKeyword(fileName, control.ActiveTextAreaControl.TextArea, firstChar, keyw);
            if (completionData == null || completionData.Length == 0)
            {
                return(null);
            }
            PABCNETCodeCompletionWindow codeCompletionWindow = new PABCNETCodeCompletionWindow(completionDataProvider, completionData, parent, control, visibleKeyPressed, is_by_dot);

            codeCompletionWindow.ShowCompletionWindow();
            return(codeCompletionWindow);
        }
예제 #5
0
        public static PABCNETCodeCompletionWindow ShowCompletionWindowWithFirstChar(Form parent, TextEditorControl control, string fileName, ICompletionDataProvider completionDataProvider, char firstChar, PascalABCCompiler.Parsers.KeywordKind keyw)
        {
            ICompletionData[] completionData = (completionDataProvider as VisualPascalABC.CodeCompletionProvider).GenerateCompletionDataByFirstChar(fileName, control.ActiveTextAreaControl.TextArea, firstChar, keyw);
            if (completionData == null || completionData.Length == 0)
            {
                return(null);
            }
            (completionDataProvider as VisualPascalABC.CodeCompletionProvider).preSelection = firstChar.ToString();
            PABCNETCodeCompletionWindow codeCompletionWindow = new PABCNETCodeCompletionWindow(completionDataProvider, completionData, parent, control, true, false);

            codeCompletionWindow.ShowCompletionWindow();
            return(codeCompletionWindow);
        }
예제 #6
0
        public static PABCNETCodeCompletionWindow ShowOverridableMethodsCompletionWindows(Form parent, TextEditorControl control, string fileName, ICompletionDataProvider completionDataProvider)
        {
            ICompletionData[] completionData = (completionDataProvider as VisualPascalABC.CodeCompletionProvider).GenerateCompletionDataForOverridableMethods(fileName, control.ActiveTextAreaControl.TextArea);
            if (completionData == null || completionData.Length == 0)
            {
                return(null);
            }
            PABCNETCodeCompletionWindow codeCompletionWindow = new PABCNETCodeCompletionWindow(completionDataProvider, completionData, parent, control, false, false);

            codeCompletionWindow.is_overrided_meths = true;
            codeCompletionWindow.ShowCompletionWindow();
            return(codeCompletionWindow);
        }
        /// <summary>
        /// Return true to handle the keypress, return false to let the text area handle the keypress
        /// </summary>
        bool TextAreaKeyEventHandler(char key)
        {
            if (!WorkbenchServiceFactory.Workbench.UserOptions.AllowCodeCompletion || !VisualPABCSingleton.MainForm.VisualEnvironmentCompiler.compilerLoaded) return false;
            if (CodeCompletion.CodeCompletionController.CurrentParser == null) return false;
            if (codeCompletionWindow != null)
            {
                // If completion window is open and wants to handle the key, don't let the text area
                // handle it
                if (codeCompletionWindow.ProcessKeyEvent(key))
                    return true;
            }
            else
            {
                PABCNETCodeCompletionWindow ccw = CodeCompletionNamesOnlyInModuleAction.comp_windows[editor.ActiveTextAreaControl.TextArea] as PABCNETCodeCompletionWindow;

                if (ccw != null && CodeCompletionNamesOnlyInModuleAction.is_begin)
                {
                    CodeCompletionNamesOnlyInModuleAction.is_begin = false;
                    if (key != ' ')
                        ccw.ProcessKeyEvent(key);
                    else
                        ccw.ProcessKeyEvent('_');
                }
                else if (ccw != null && ccw.ProcessKeyEvent(key))
                    return true;
            }
            if (key == '.')
            {
                if (CodeCompletion.CodeCompletionController.CurrentParser == null) return false;
                if (WorkbenchServiceFactory.Workbench.UserOptions.CodeCompletionDot)
                {
                    completionDataProvider = new CodeCompletionProvider();

                    codeCompletionWindow = PABCNETCodeCompletionWindow.ShowCompletionWindow(
                        VisualPABCSingleton.MainForm,					// The parent window for the completion window
                        editor, 					// The text editor to show the window for
                        editor.FileName,		// Filename - will be passed back to the provider
                        completionDataProvider,		// Provider to get the list of possible completions
                        key,							// Key pressed - will be passed to the provider
                        true,
                        true,
                        PascalABCCompiler.Parsers.KeywordKind.None
                    );
                    CodeCompletionNamesOnlyInModuleAction.is_begin = true;
                    CodeCompletionNamesOnlyInModuleAction.comp_windows[editor.ActiveTextAreaControl.TextArea] = codeCompletionWindow;
                    if (codeCompletionWindow != null)
                        codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow);
                }
            }
            else if (key == '(' || key == '[' || key == ',')
            {
                if (CodeCompletion.CodeCompletionController.CurrentParser == null) return false;
                if (VisualPABCSingleton.MainForm.UserOptions.CodeCompletionParams)
                {
                    ICSharpCode.TextEditor.Gui.InsightWindow.IInsightDataProvider idp = new DefaultInsightDataProvider(-1, false, key);
                    if (insightWindow == null || insightWindow.InsightProviderStackLength == 0)
                    {
                        insightWindow = new PABCNETInsightWindow(VisualPABCSingleton.MainForm, editor);
                        insightWindow.Font = new Font(Constants.CompletionInsightWindowFontName, insightWindow.Font.Size);
                        insightWindow.Closed += new EventHandler(CloseInsightWindow);
                    }
                    else
                    {
                        (idp as DefaultInsightDataProvider).defaultIndex = insightWindow.GetCurrentData();
                        (idp as DefaultInsightDataProvider).cur_param_num = (insightWindow.GetInsightProvider() as DefaultInsightDataProvider).param_count;

                    }
                    insightWindow.AddInsightDataProvider(idp, editor.FileName);
                    insightWindow.ShowInsightWindow();
                }
            }
            else if (key == ' ')
            {
                if (CodeCompletion.CodeCompletionController.CurrentParser == null) return false;
                if (VisualPABCSingleton.MainForm.UserOptions.CodeCompletionDot)
                {
                    PascalABCCompiler.Parsers.KeywordKind keyw = KeywordChecker.TestForKeyword(editor.Document.TextContent, editor.ActiveTextAreaControl.TextArea.Caret.Offset - 1);
                    if (keyw == PascalABCCompiler.Parsers.KeywordKind.New || VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense && keyw == PascalABCCompiler.Parsers.KeywordKind.Uses)
                    {
                        completionDataProvider = new CodeCompletionProvider();
                        codeCompletionWindow = PABCNETCodeCompletionWindow.ShowCompletionWindow(
                            VisualPABCSingleton.MainForm,					// The parent window for the completion window
                            editor, 					// The text editor to show the window for
                            editor.FileName,		// Filename - will be passed back to the provider
                            completionDataProvider,		// Provider to get the list of possible completions
                            ' ',							// Key pressed - will be passed to the provider
                            true,
                            false,
                            keyw
                        );
                        CodeCompletionNamesOnlyInModuleAction.comp_windows[editor.ActiveTextAreaControl.TextArea] = codeCompletionWindow;
                        if (codeCompletionWindow != null)
                            codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow);
                        //return true;
                    }
                }
            }
            else if (key == '\n')
            {
                if (VisualPABCSingleton.MainForm.UserOptions.AllowCodeCompletion && CodeCompletion.CodeCompletionController.CurrentParser != null)
                {
                    try
                    {
                        CodeCompletion.DomConverter dconv = (CodeCompletion.DomConverter)CodeCompletion.CodeCompletionController.comp_modules[editor.FileName];
                        if (dconv != null)
                        {
                            CodeCompletion.SymScope ss = dconv.FindScopeByLocation(editor.ActiveTextAreaControl.TextArea.Caret.Line + 1, editor.ActiveTextAreaControl.TextArea.Caret.Column + 1);
                            ss.IncreaseEndLine();
                        }
                    }
                    catch
                    {

                    }
                }
            }
            else if (codeCompletionWindow == null && VisualPABCSingleton.MainForm.UserOptions.EnableSmartIntellisense && (char.IsLetter(key) || key == '_'))
            {
                if (VisualPABCSingleton.MainForm.UserOptions.CodeCompletionDot)
                {
                    if (CodeCompletion.CodeCompletionController.CurrentParser == null) return false;
                    PascalABCCompiler.Parsers.KeywordKind keyw = KeywordChecker.TestForKeyword(editor.Document.TextContent, editor.ActiveTextAreaControl.TextArea.Caret.Offset - 1);
                    if (CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.IsDefinitionIdentifierAfterKeyword(keyw))
                        return false;

                    if (editor.ActiveTextAreaControl.TextArea.Caret.Offset > 0 && (char.IsLetterOrDigit(editor.Document.TextContent[editor.ActiveTextAreaControl.TextArea.Caret.Offset - 1]) || editor.Document.TextContent[editor.ActiveTextAreaControl.TextArea.Caret.Offset - 1] == '_'))
                        return false;
                    completionDataProvider = new CodeCompletionProvider();
                    codeCompletionWindow = PABCNETCodeCompletionWindow.ShowCompletionWindowWithFirstChar(
                        VisualPABCSingleton.MainForm,					// The parent window for the completion window
                        editor, 					// The text editor to show the window for
                        editor.FileName,		// Filename - will be passed back to the provider
                        completionDataProvider,		// Provider to get the list of possible completions
                        key,						// Key pressed - will be passed to the provider
                        keyw
                    );
                    CodeCompletionNamesOnlyInModuleAction.comp_windows[editor.ActiveTextAreaControl.TextArea] = codeCompletionWindow;
                    if (codeCompletionWindow != null)
                        codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow);

                }
            }
            /*else if (codeCompletionWindow == null && key == '\n')
            {
            	if (mainForm.UserOptions.AllowCodeFormatting)
                {
            		if (CodeCompletion.CodeCompletionController.currentParser == null) return false;
            		string bracket = CodeCompletion.CodeCompletionController.currentParser.LanguageInformation.GetBodyStartBracket();
            		string end_bracket = CodeCompletion.CodeCompletionController.currentParser.LanguageInformation.GetBodyEndBracket();
            		if (bracket != null)
            		{
            			int i = editor.ActiveTextAreaControl.TextArea.Caret.Offset-1;
            			int j = bracket.Length-1;
            			bool eq=true;
            			while (i >= 0 && j >= 0)
            			{
            				if (editor.Document.TextContent[i] != bracket[j])
            				{
            					eq = false;
            					break;
            				}
            				i--; j--;
            			}
            			if (eq && j<0)
            			{
            				TextArea textArea = editor.ActiveTextAreaControl.TextArea;
            				int col = textArea.Caret.Column-bracket.Length;
							textArea.InsertString("\n\n"+end_bracket);
							textArea.Caret.Column = 0;
							textArea.Caret.Line = textArea.Caret.Line-1;
							textArea.Caret.Column = VisualPABCSingleton.MainForm.UserOptions.CursorTabCount+col;
							return true;
            			}
            		}
            	}
            }*/

            return false;
        }
 void CloseCodeCompletionWindow(object sender, EventArgs e)
 {
     if (codeCompletionWindow != null)
     {
         codeCompletionWindow.Closed -= new EventHandler(CloseCodeCompletionWindow);
         CodeCompletionProvider.disp.Reset();
         CodeCompletion.AssemblyDocCache.Reset();
         CodeCompletion.UnitDocCache.Reset();
         codeCompletionWindow.Dispose();
         CodeCompletionNamesOnlyInModuleAction.comp_windows[editor.ActiveTextAreaControl.TextArea] = null;
         codeCompletionWindow = null;
     }
 }
 public void CloseCodeCompletionWindow(object sender, EventArgs e)
 {
     if (codeCompletionWindow != null)
     {
         codeCompletionWindow.Closed -= new EventHandler(CloseCodeCompletionWindow);
         CodeCompletionProvider.disp.Reset();
         CodeCompletion.AssemblyDocCache.Reset();
         CodeCompletion.UnitDocCache.Reset();
         codeCompletionWindow.Dispose();
         codeCompletionWindow = null;
     }
     comp_windows[textArea] = null;
 }
예제 #10
0
        public override void Execute(TextArea _textArea)
        {
            //try
            {
                textArea = _textArea;
                int off = textArea.Caret.Offset;
                string text = textArea.Document.TextContent.Substring(0, textArea.Caret.Offset);
                if (key == '\0')
                    if (off > 2 && text[off - 1] == '/' && text[off - 2] == '/' && text[off - 3] == '/')
                    {
                        CodeCompletionActionsManager.GenerateCommentTemplate(textArea);
                        return;
                    }
                    else
                    {
                        string prev = get_prev_text(text, off - 1);
                        if (!string.IsNullOrEmpty(prev))
                        {
                            CodeCompletionActionsManager.GenerateTemplate(prev, textArea);
                            return;
                        }
                    }
                if (!WorkbenchServiceFactory.Workbench.UserOptions.CodeCompletionDot)
                    return;
                if (CodeCompletion.CodeCompletionController.CurrentParser == null) return;
                CodeCompletionProvider completionDataProvider = new CodeCompletionProvider();

                bool is_pattern = false;


                is_begin = true;

                completionDataProvider.preSelection = CodeCompletion.CodeCompletionController.CurrentParser.LanguageInformation.FindPattern(off, text, out is_pattern);

                if (!is_pattern && off > 0 && text[off - 1] == '.')
                    key = '$';
                codeCompletionWindow = PABCNETCodeCompletionWindow.ShowCompletionWindow(
                    VisualPABCSingleton.MainForm,					// The parent window for the completion window
                    textArea.MotherTextEditorControl, 					// The text editor to show the window for
                    textArea.MotherTextEditorControl.FileName,		// Filename - will be passed back to the provider
                    completionDataProvider,		// Provider to get the list of possible completions
                    key,							// Key pressed - will be passed to the provider
                    false,
                    false,
                    PascalABCCompiler.Parsers.KeywordKind.None
                );
                key = '_';
                CodeCompletionNamesOnlyInModuleAction.comp_windows[textArea] = codeCompletionWindow;

                if (codeCompletionWindow != null)
                {
                    // ShowCompletionWindow can return null when the provider returns an empty list
                    codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow);
                }
            }
            //catch (Exception e)
            {

            }
        }
예제 #11
0
 public static void GenerateOverridableMethods(TextArea textArea)
 {
     if (CodeCompletion.CodeCompletionController.CurrentParser == null) return;
     ccp = new CodeCompletionProvider();
     _textArea = textArea;
     int off = textArea.Caret.Offset;
     codeCompletionWindow = PABCNETCodeCompletionWindow.ShowOverridableMethodsCompletionWindows
         (VisualPABCSingleton.MainForm, textArea.MotherTextEditorControl, textArea.MotherTextEditorControl.FileName, ccp);
     CodeCompletionAllNamesAction.comp_windows[textArea] = codeCompletionWindow;
     if (codeCompletionWindow != null)
     {
         // ShowCompletionWindow can return null when the provider returns an empty list
         codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow);
     }
 }