Browse Source

Fixed SD2-821: Cursor position after generating event handler

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1431 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
059d8e0873
  1. 17
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  2. 36
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CSharpDesignerGenerator.cs
  3. 4
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
  4. 7
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs

17
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs

@ -323,6 +323,16 @@ namespace ICSharpCode.FormsDesigner @@ -323,6 +323,16 @@ namespace ICSharpCode.FormsDesigner
protected abstract string CreateEventHandler(EventDescriptor edesc, string eventMethodName, string body, string indentation);
protected virtual int GetCursorLine(IDocument document, IMethod method)
{
return method.BodyRegion.BeginLine + 1;
}
protected virtual int GetCursorLineAfterEventHandlerCreation()
{
return 2;
}
/// <summary>
/// If found return true and int as position
/// </summary>
@ -341,7 +351,7 @@ namespace ICSharpCode.FormsDesigner @@ -341,7 +351,7 @@ namespace ICSharpCode.FormsDesigner
foreach (IMethod method in completeClass.Methods) {
if (method.Name == eventMethodName) {
position = method.Region.BeginLine + 1;
position = GetCursorLine(document, method);
file = method.DeclaringType.CompilationUnit.FileName;
return true;
}
@ -349,12 +359,13 @@ namespace ICSharpCode.FormsDesigner @@ -349,12 +359,13 @@ namespace ICSharpCode.FormsDesigner
viewContent.MergeFormChanges();
Reparse();
position = c.Region.EndLine + 1;
file = c.CompilationUnit.FileName;
int line = GetEventHandlerInsertionLine(c);
int offset = viewContent.Document.GetLineSegment(GetEventHandlerInsertionLine(c) - 1).Offset;
int offset = viewContent.Document.GetLineSegment(line - 1).Offset;
viewContent.Document.Insert(offset, CreateEventHandler(edesc, eventMethodName, body, tabs));
position = line + GetCursorLineAfterEventHandlerCreation();
return false;
}

36
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CSharpDesignerGenerator.cs

@ -19,19 +19,7 @@ namespace ICSharpCode.FormsDesigner @@ -19,19 +19,7 @@ namespace ICSharpCode.FormsDesigner
{
protected override DomRegion GetReplaceRegion(ICSharpCode.TextEditor.Document.IDocument document, IMethod method)
{
DomRegion r = method.BodyRegion;
int offset = document.PositionToOffset(new Point(r.BeginColumn - 1, r.BeginLine - 1));
string tmp = document.GetText(offset, 10);
while (offset < document.TextLength) {
char c = document.GetCharAt(offset++);
if (c == '{') {
return new DomRegion(r.BeginLine + 1, 1, r.EndLine, 1);
}
if (c != ' ') {
break;
}
}
return new DomRegion(r.BeginLine + 2, 1, r.EndLine, 1);
return new DomRegion(GetCursorLine(document, method), 1, method.BodyRegion.EndLine, 1);
}
protected override System.CodeDom.Compiler.CodeDomProvider CreateCodeProvider()
@ -52,6 +40,28 @@ namespace ICSharpCode.FormsDesigner @@ -52,6 +40,28 @@ namespace ICSharpCode.FormsDesigner
return b.ToString();
}
protected override int GetCursorLineAfterEventHandlerCreation()
{
return 3;
}
protected override int GetCursorLine(ICSharpCode.TextEditor.Document.IDocument document, IMethod method)
{
DomRegion r = method.BodyRegion;
int offset = document.PositionToOffset(new Point(r.BeginColumn - 1, r.BeginLine - 1));
string tmp = document.GetText(offset, 10);
while (offset < document.TextLength) {
char c = document.GetCharAt(offset++);
if (c == '{') {
return r.BeginLine + 1;
}
if (c != ' ') {
break;
}
}
return r.BeginLine + 2;
}
protected static string GenerateParams(EventDescriptor edesc, bool paramNames)
{
System.Type type = edesc.EventType;

4
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs

@ -289,7 +289,7 @@ namespace ICSharpCode.FormsDesigner @@ -289,7 +289,7 @@ namespace ICSharpCode.FormsDesigner
public void ShowSourceCode(int lineNumber)
{
ShowSourceCode();
textAreaControlProvider.TextEditorControl.ActiveTextAreaControl.JumpTo(lineNumber, 255);
textAreaControlProvider.TextEditorControl.ActiveTextAreaControl.JumpTo(lineNumber - 1);
}
public void ShowSourceCode(IComponent component, EventDescriptor edesc, string eventMethodName)
@ -300,7 +300,7 @@ namespace ICSharpCode.FormsDesigner @@ -300,7 +300,7 @@ namespace ICSharpCode.FormsDesigner
if (FileUtility.IsEqualFileName(file, this.TextEditorControl.FileName)) {
ShowSourceCode(position);
} else {
FileService.JumpToFilePosition(file, position, 255);
FileService.JumpToFilePosition(file, position - 1, 0);
}
}

7
src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaControl.cs

@ -313,6 +313,13 @@ namespace ICSharpCode.TextEditor @@ -313,6 +313,13 @@ namespace ICSharpCode.TextEditor
}
}
public void JumpTo(int line)
{
line = Math.Min(line, Document.TotalNumberOfLines - 1);
string text = Document.GetText(Document.GetLineSegment(line));
JumpTo(line, text.Length - text.TrimStart().Length);
}
public void JumpTo(int line, int column)
{
textArea.Focus();

Loading…
Cancel
Save