Browse Source

enter and escape now work properly in inline refactoring dialogs

pull/1/head
Siegfried Pammer 16 years ago
parent
commit
80229423ff
  1. 18
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/AbstractInlineRefactorDialog.cs
  2. 14
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs
  3. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/IActiveElement.cs
  4. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/InsertionContext.cs
  5. 12
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetAnchorElement.cs
  6. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetBoundElement.cs
  7. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetReplaceableTextElement.cs

18
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/AbstractInlineRefactorDialog.cs

@ -57,7 +57,10 @@ namespace SharpRefactoring.Gui
LanguageProperties language = parseInfo.CompilationUnit.Language; LanguageProperties language = parseInfo.CompilationUnit.Language;
IClass current = parseInfo.CompilationUnit.GetInnermostClass(editor.Caret.Line, editor.Caret.Column); IClass current = parseInfo.CompilationUnit.GetInnermostClass(editor.Caret.Line, editor.Caret.Column);
editor.Document.Insert(anchor.Offset, GenerateCode(language, current) ?? ""); // Generate code could modify the document.
// So read anchor.Offset after code generation.
string code = GenerateCode(language, current) ?? "";
editor.Document.Insert(anchor.Offset, code);
} }
Deactivate(); Deactivate();
@ -95,17 +98,26 @@ namespace SharpRefactoring.Gui
{ {
} }
void IActiveElement.Deactivate() void IActiveElement.Deactivate(SnippetEventArgs e)
{ {
if (e.Reason == DeactivateReason.ReturnPressed)
OKButtonClick(null, null);
Deactivate(); Deactivate();
} }
bool deactivated;
void Deactivate() void Deactivate()
{ {
if (Element == null) if (Element == null)
throw new InvalidOperationException("no IInlineUIElement set!"); throw new InvalidOperationException("no IInlineUIElement set!");
if (deactivated)
return;
deactivated = true;
Element.Remove(); Element.Remove();
context.Deactivate(null);
} }
} }
} }

14
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/InsertCtorDialog.xaml.cs

@ -58,7 +58,7 @@ namespace SharpRefactoring.Gui
{ {
var line = editor.Document.GetLineForOffset(editor.Caret.Offset); var line = editor.Document.GetLineForOffset(editor.Caret.Offset);
string indent = DocumentUtilitites.GetWhitespaceAfter(editor.Document, line.Offset); string indent = DocumentUtilitites.GetWhitespaceAfter(editor.Document, line.Offset) + "\t";
var filtered = paramList.Where(p => p.IsSelected).OrderBy(p => p.Index).ToList(); var filtered = paramList.Where(p => p.IsSelected).OrderBy(p => p.Index).ToList();
@ -103,11 +103,11 @@ namespace SharpRefactoring.Gui
foreach (CtorParamWrapper w in filtered) foreach (CtorParamWrapper w in filtered)
block.AddChild(new ExpressionStatement(new AssignmentExpression(new MemberReferenceExpression(new ThisReferenceExpression(), w.MemberName), AssignmentOperatorType.Assign, new IdentifierExpression(w.ParameterName)))); block.AddChild(new ExpressionStatement(new AssignmentExpression(new MemberReferenceExpression(new ThisReferenceExpression(), w.MemberName), AssignmentOperatorType.Assign, new IdentifierExpression(w.ParameterName))));
AnchorSnippetElement parameterList = context.ActiveElements AnchorElement parameterList = context.ActiveElements
.FirstOrDefault( .FirstOrDefault(
item => item is AnchorSnippetElement && item => item is AnchorElement &&
(item as AnchorSnippetElement).Name.Equals("parameterList", StringComparison.OrdinalIgnoreCase) (item as AnchorElement).Name.Equals("parameterList", StringComparison.OrdinalIgnoreCase)
) as AnchorSnippetElement; ) as AnchorElement;
if (parameterList != null) { if (parameterList != null) {
StringBuilder pList = new StringBuilder(); StringBuilder pList = new StringBuilder();
@ -122,13 +122,13 @@ namespace SharpRefactoring.Gui
pList.Append(language.CodeGenerator.GenerateCode(parameters[i], "")); pList.Append(language.CodeGenerator.GenerateCode(parameters[i], ""));
} }
// parameterList.Text = pList.ToString(); parameterList.Text = pList.ToString();
} }
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
foreach (var element in block.Children.OfType<AbstractNode>()) { foreach (var element in block.Children.OfType<AbstractNode>()) {
builder.Append(language.CodeGenerator.GenerateCode(element, "")); builder.Append(language.CodeGenerator.GenerateCode(element, indent));
} }
return builder.ToString().Trim(); return builder.ToString().Trim();

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/IActiveElement.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
/// <summary> /// <summary>
/// Called when the interactive mode is deactivated. /// Called when the interactive mode is deactivated.
/// </summary> /// </summary>
void Deactivate(); void Deactivate(SnippetEventArgs e);
/// <summary> /// <summary>
/// Gets whether this element is editable (the user will be able to select it with Tab). /// Gets whether this element is editable (the user will be able to select it with Tab).

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/InsertionContext.cs

@ -237,7 +237,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
currentStatus = Status.RaisingDeactivated; currentStatus = Status.RaisingDeactivated;
TextArea.PopStackedInputHandler(myInputHandler); TextArea.PopStackedInputHandler(myInputHandler);
foreach (IActiveElement element in registeredElements) { foreach (IActiveElement element in registeredElements) {
element.Deactivate(); element.Deactivate(e);
} }
if (Deactivated != null) if (Deactivated != null)
Deactivated(this, e); Deactivated(this, e);

12
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetAnchorElement.cs

@ -24,14 +24,12 @@ namespace ICSharpCode.AvalonEdit.Snippets
public override void Insert(InsertionContext context) public override void Insert(InsertionContext context)
{ {
int start = context.InsertionPosition; int start = context.InsertionPosition;
context.InsertText(""); AnchorSegment segment = new AnchorSegment(context.Document, start, 0);
int end = context.InsertionPosition; context.RegisterActiveElement(this, new AnchorElement(segment, "", Name, context));
AnchorSegment segment = new AnchorSegment(context.Document, start, end - start);
context.RegisterActiveElement(this, new AnchorSnippetElement(segment, "", Name, context));
} }
} }
public sealed class AnchorSnippetElement : IActiveElement public sealed class AnchorElement : IActiveElement
{ {
public bool IsEditable { public bool IsEditable {
get { return false; } get { return false; }
@ -44,7 +42,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
get { return segment; } get { return segment; }
} }
public AnchorSnippetElement(AnchorSegment segment, string text, string name, InsertionContext context) public AnchorElement(AnchorSegment segment, string text, string name, InsertionContext context)
{ {
this.segment = segment; this.segment = segment;
this.context = context; this.context = context;
@ -71,7 +69,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
{ {
} }
public void Deactivate() public void Deactivate(SnippetEventArgs e)
{ {
} }
} }

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetBoundElement.cs

@ -103,7 +103,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
} }
} }
public void Deactivate() public void Deactivate(SnippetEventArgs e)
{ {
} }

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Snippets/SnippetReplaceableTextElement.cs

@ -100,7 +100,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
this.Text = GetText(); this.Text = GetText();
} }
public void Deactivate() public void Deactivate(SnippetEventArgs e)
{ {
TextDocumentWeakEventManager.TextChanged.RemoveListener(context.Document, this); TextDocumentWeakEventManager.TextChanged.RemoveListener(context.Document, this);
context.TextArea.TextView.BackgroundRenderers.Remove(background); context.TextArea.TextView.BackgroundRenderers.Remove(background);

Loading…
Cancel
Save