You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							103 lines
						
					
					
						
							4.0 KiB
						
					
					
				
			
		
		
	
	
							103 lines
						
					
					
						
							4.0 KiB
						
					
					
				// CSharp Editor Example with Code Completion | 
						|
// Copyright (c) 2006, Daniel Grunwald | 
						|
// All rights reserved. | 
						|
//  | 
						|
// Redistribution and use in source and binary forms, with or without modification, are  | 
						|
// permitted provided that the following conditions are met: | 
						|
//  | 
						|
// - Redistributions of source code must retain the above copyright notice, this list  | 
						|
//   of conditions and the following disclaimer. | 
						|
//  | 
						|
// - Redistributions in binary form must reproduce the above copyright notice, this list | 
						|
//   of conditions and the following disclaimer in the documentation and/or other materials  | 
						|
//   provided with the distribution. | 
						|
//  | 
						|
// - Neither the name of the ICSharpCode team nor the names of its contributors may be used to  | 
						|
//   endorse or promote products derived from this software without specific prior written  | 
						|
//   permission. | 
						|
//  | 
						|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS  | 
						|
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY  | 
						|
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR  | 
						|
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  | 
						|
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  | 
						|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER  | 
						|
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  | 
						|
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
						|
 | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Drawing; | 
						|
using System.Windows.Forms; | 
						|
using System.IO; | 
						|
using System.Threading; | 
						|
 | 
						|
using ICSharpCode.TextEditor; | 
						|
using ICSharpCode.TextEditor.Gui; | 
						|
using ICSharpCode.TextEditor.Gui.CompletionWindow; | 
						|
 | 
						|
namespace CSharpEditor | 
						|
{ | 
						|
	class CodeCompletionKeyHandler | 
						|
	{ | 
						|
		MainForm mainForm; | 
						|
		TextEditorControl editor; | 
						|
		CodeCompletionWindow codeCompletionWindow; | 
						|
		 | 
						|
		private CodeCompletionKeyHandler(MainForm mainForm, TextEditorControl editor) | 
						|
		{ | 
						|
			this.mainForm = mainForm; | 
						|
			this.editor = editor; | 
						|
		} | 
						|
		 | 
						|
		public static CodeCompletionKeyHandler Attach(MainForm mainForm, TextEditorControl editor) | 
						|
		{ | 
						|
			CodeCompletionKeyHandler h = new CodeCompletionKeyHandler(mainForm, editor); | 
						|
			 | 
						|
			editor.ActiveTextAreaControl.TextArea.KeyEventHandler += h.TextAreaKeyEventHandler; | 
						|
			 | 
						|
			// When the editor is disposed, close the code completion window | 
						|
			editor.Disposed += h.CloseCodeCompletionWindow; | 
						|
			 | 
						|
			return h; | 
						|
		} | 
						|
		 | 
						|
		/// <summary> | 
						|
		/// Return true to handle the keypress, return false to let the text area handle the keypress | 
						|
		/// </summary> | 
						|
		bool TextAreaKeyEventHandler(char key) | 
						|
		{ | 
						|
			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; | 
						|
			} | 
						|
			if (key == '.') { | 
						|
				ICompletionDataProvider completionDataProvider = new CodeCompletionProvider(mainForm); | 
						|
				 | 
						|
				codeCompletionWindow = CodeCompletionWindow.ShowCompletionWindow( | 
						|
					mainForm,					// The parent window for the completion window | 
						|
					editor, 					// The text editor to show the window for | 
						|
					MainForm.DummyFileName,		// 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 | 
						|
				); | 
						|
				if (codeCompletionWindow != null) { | 
						|
					// ShowCompletionWindow can return null when the provider returns an empty list | 
						|
					codeCompletionWindow.Closed += new EventHandler(CloseCodeCompletionWindow); | 
						|
				} | 
						|
			} | 
						|
			return false; | 
						|
		} | 
						|
		 | 
						|
		void CloseCodeCompletionWindow(object sender, EventArgs e) | 
						|
		{ | 
						|
			if (codeCompletionWindow != null) { | 
						|
				codeCompletionWindow.Closed -= new EventHandler(CloseCodeCompletionWindow); | 
						|
				codeCompletionWindow.Dispose(); | 
						|
				codeCompletionWindow = null; | 
						|
			} | 
						|
		} | 
						|
	} | 
						|
}
 | 
						|
 |