1
// EventCreationCompletionData.cs
4
// Mike Krüger <mkrueger@novell.com>
6
// Copyright (c) 2008 Novell, Inc (http://www.novell.com)
8
// Permission is hereby granted, free of charge, to any person obtaining a copy
9
// of this software and associated documentation files (the "Software"), to deal
10
// in the Software without restriction, including without limitation the rights
11
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
// copies of the Software, and to permit persons to whom the Software is
13
// furnished to do so, subject to the following conditions:
15
// The above copyright notice and this permission notice shall be included in
16
// all copies or substantial portions of the Software.
18
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
30
using MonoDevelop.Projects.Gui.Completion;
31
using MonoDevelop.Projects.Dom;
32
using MonoDevelop.Projects.Dom.Output;
34
using MonoDevelop.Ide.Gui;
35
using MonoDevelop.Ide.Gui.Content;
36
using CSharpBinding.FormattingStrategy;
38
namespace MonoDevelop.CSharpBinding
40
public class EventCreationCompletionData : CompletionData, IActionCompletionData
43
IMember callingMember;
47
public EventCreationCompletionData (TextEditor editor, IType delegateType, IEvent evt, string parameterList, IMember callingMember, IType declaringType) : base (null)
49
if (delegateType is InstantiatedType) {
50
this.DisplayText = "Handle" + evt.Name;
52
this.DisplayText = "Handle" + evt.Name;
54
if (declaringType.SearchMember (this.DisplayText, true).Count > 0) {
55
for (int i = 1; i < 10000; i++) {
56
if (declaringType.SearchMember (this.DisplayText + i.ToString (), true).Count == 0) {
57
this.DisplayText = this.DisplayText + i.ToString ();
63
this.parameterList = parameterList;
64
this.callingMember = callingMember;
65
this.Icon = delegateType.Methods.First ().StockIcon;
66
this.initialOffset = editor.CursorPosition;
69
public void InsertCompletionText (ICompletionWidget widget, ICodeCompletionContext context)
71
// insert add/remove event handler code after +=/-=
72
editor.DeleteText (initialOffset, editor.CursorPosition - initialOffset);
73
editor.InsertText (editor.CursorPosition, this.DisplayText + ";");
75
// Search opening bracket of member
76
int pos = editor.GetPositionFromLineColumn (callingMember.BodyRegion.Start.Line, callingMember.BodyRegion.Start.Column);
77
pos = Math.Max (pos, editor.SearchChar (pos, '{'));
79
// Search closing bracket of member
80
pos = editor.SearchBracketForward (pos + 1, '{', '}') + 1;
81
// int lastPos = editor.GetPositionFromLineColumn (callingMember.DeclaringType.BodyRegion.End.Line, callingMember.DeclaringType.BodyRegion.End.Column);
82
pos = Math.Min (pos /*Math.Min (pos, lastPos)*/, editor.TextLength - 1);
84
// Insert new event handler after closing bracket
85
string indent = NewOverrideCompletionData.GetIndentString (editor, editor.GetPositionFromLineColumn (callingMember.Location.Line + 1, 0));
86
StringBuilder sb = new StringBuilder ();
90
if (callingMember.IsStatic)
91
sb.Append ("static ");
92
sb.Append ("void ");sb.Append (this.DisplayText);sb.Append (this.parameterList);sb.AppendLine ();
93
sb.Append (indent);sb.Append ("{");sb.AppendLine ();
94
sb.Append (indent);sb.Append (TextEditorProperties.IndentString);
95
int cursorPos = pos + sb.Length;
97
sb.Append (indent);sb.Append ("}");
98
editor.InsertText (pos, sb.ToString ());
99
editor.CursorPosition = cursorPos;