Browse Source

enter and escape now work properly in inline refactoring dialogs

pull/1/head
Siegfried Pammer 15 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 @@ -57,7 +57,10 @@ namespace SharpRefactoring.Gui
LanguageProperties language = parseInfo.CompilationUnit.Language;
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();
@ -95,17 +98,26 @@ namespace SharpRefactoring.Gui @@ -95,17 +98,26 @@ namespace SharpRefactoring.Gui
{
}
void IActiveElement.Deactivate()
void IActiveElement.Deactivate(SnippetEventArgs e)
{
if (e.Reason == DeactivateReason.ReturnPressed)
OKButtonClick(null, null);
Deactivate();
}
bool deactivated;
void Deactivate()
{
if (Element == null)
throw new InvalidOperationException("no IInlineUIElement set!");
if (deactivated)
return;
deactivated = true;
Element.Remove();
context.Deactivate(null);
}
}
}

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

@ -58,7 +58,7 @@ namespace SharpRefactoring.Gui @@ -58,7 +58,7 @@ namespace SharpRefactoring.Gui
{
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();
@ -103,11 +103,11 @@ namespace SharpRefactoring.Gui @@ -103,11 +103,11 @@ namespace SharpRefactoring.Gui
foreach (CtorParamWrapper w in filtered)
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(
item => item is AnchorSnippetElement &&
(item as AnchorSnippetElement).Name.Equals("parameterList", StringComparison.OrdinalIgnoreCase)
) as AnchorSnippetElement;
item => item is AnchorElement &&
(item as AnchorElement).Name.Equals("parameterList", StringComparison.OrdinalIgnoreCase)
) as AnchorElement;
if (parameterList != null) {
StringBuilder pList = new StringBuilder();
@ -122,13 +122,13 @@ namespace SharpRefactoring.Gui @@ -122,13 +122,13 @@ namespace SharpRefactoring.Gui
pList.Append(language.CodeGenerator.GenerateCode(parameters[i], ""));
}
// parameterList.Text = pList.ToString();
parameterList.Text = pList.ToString();
}
StringBuilder builder = new StringBuilder();
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();

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

@ -24,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.Snippets @@ -24,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
/// <summary>
/// Called when the interactive mode is deactivated.
/// </summary>
void Deactivate();
void Deactivate(SnippetEventArgs e);
/// <summary>
/// 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 @@ -237,7 +237,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
currentStatus = Status.RaisingDeactivated;
TextArea.PopStackedInputHandler(myInputHandler);
foreach (IActiveElement element in registeredElements) {
element.Deactivate();
element.Deactivate(e);
}
if (Deactivated != null)
Deactivated(this, e);

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

@ -24,14 +24,12 @@ namespace ICSharpCode.AvalonEdit.Snippets @@ -24,14 +24,12 @@ namespace ICSharpCode.AvalonEdit.Snippets
public override void Insert(InsertionContext context)
{
int start = context.InsertionPosition;
context.InsertText("");
int end = context.InsertionPosition;
AnchorSegment segment = new AnchorSegment(context.Document, start, end - start);
context.RegisterActiveElement(this, new AnchorSnippetElement(segment, "", Name, context));
AnchorSegment segment = new AnchorSegment(context.Document, start, 0);
context.RegisterActiveElement(this, new AnchorElement(segment, "", Name, context));
}
}
public sealed class AnchorSnippetElement : IActiveElement
public sealed class AnchorElement : IActiveElement
{
public bool IsEditable {
get { return false; }
@ -44,7 +42,7 @@ namespace ICSharpCode.AvalonEdit.Snippets @@ -44,7 +42,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
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.context = context;
@ -71,7 +69,7 @@ namespace ICSharpCode.AvalonEdit.Snippets @@ -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 @@ -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 @@ -100,7 +100,7 @@ namespace ICSharpCode.AvalonEdit.Snippets
this.Text = GetText();
}
public void Deactivate()
public void Deactivate(SnippetEventArgs e)
{
TextDocumentWeakEventManager.TextChanged.RemoveListener(context.Document, this);
context.TextArea.TextView.BackgroundRenderers.Remove(background);

Loading…
Cancel
Save