Browse Source

- added InlineUIElementGenerator and AvalonEditEditorUIService

- finished OverrideToStringMethodCommand and OverrideToStringMethodDialog

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5255 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Siegfried Pammer 17 years ago
parent
commit
b03fe447ab
  1. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  2. 32
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs
  3. 17
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/InlineUIElementGenerator.cs
  4. 2
      src/AddIns/Misc/SharpRefactoring/SharpRefactoring.csproj
  5. 67
      src/AddIns/Misc/SharpRefactoring/Src/Gui/InlineRefactorDialog.cs
  6. 119
      src/AddIns/Misc/SharpRefactoring/Src/Gui/OverrideToStringMethodDialog.cs
  7. 50
      src/AddIns/Misc/SharpRefactoring/Src/Gui/Wrapper.cs
  8. 14
      src/AddIns/Misc/SharpRefactoring/Src/OverrideToStringMethodCommand.cs

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -71,6 +71,7 @@ @@ -71,6 +71,7 @@
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\AvalonEditDisplayBinding.cs" />
<Compile Include="Src\AvalonEditEditorUIService.cs" />
<Compile Include="Src\AvalonEditViewContent.cs" />
<Compile Include="Src\BracketHighlightRenderer.cs" />
<Compile Include="Src\CodeEditor.cs" />
@ -86,7 +87,7 @@ @@ -86,7 +87,7 @@
<Compile Include="Src\Commands\SortSelectionCommand.cs" />
<Compile Include="Src\Commands\SurroundWithCommand.cs" />
<Compile Include="Src\CustomCommands.cs" />
<Compile Include="Src\DialogElementGenerator.cs" />
<Compile Include="Src\InlineUIElementGenerator.cs" />
<Compile Include="Src\IconBarManager.cs" />
<Compile Include="Src\IconBarMargin.cs" />
<Compile Include="Src\Options\BehaviorOptions.xaml.cs">

32
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditEditorUIService.cs

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
using System;
using System.Windows;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.AvalonEdit.AddIn
{
public class AvalonEditEditorUIService : IEditorUIService
{
TextView textView;
public AvalonEditEditorUIService(TextView textView)
{
this.textView = textView;
}
public IInlineUIElement CreateInlineUIElement(ITextAnchor position, UIElement element)
{
InlineUIElementGenerator inline = new InlineUIElementGenerator(textView, element, position);
this.textView.ElementGenerators.Add(inline);
return inline;
}
}
}

17
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DialogElementGenerator.cs → src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/InlineUIElementGenerator.cs

@ -47,21 +47,4 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -47,21 +47,4 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.textView.ElementGenerators.Remove(this);
}
}
public class AvalonEditEditorUIService : IEditorUIService
{
TextView textView;
public AvalonEditEditorUIService(TextView textView)
{
this.textView = textView;
}
public IInlineUIElement CreateInlineUIElement(ITextAnchor position, UIElement element)
{
InlineUIElementGenerator inline = new InlineUIElementGenerator(textView, element, position);
this.textView.ElementGenerators.Add(inline);
return inline;
}
}
}

2
src/AddIns/Misc/SharpRefactoring/SharpRefactoring.csproj

@ -79,6 +79,8 @@ @@ -79,6 +79,8 @@
<DependentUpon>ExtractMethodForm.cs</DependentUpon>
</Compile>
<Compile Include="Src\Gui\InlineRefactorDialog.cs" />
<Compile Include="Src\Gui\OverrideToStringMethodDialog.cs" />
<Compile Include="Src\Gui\Wrapper.cs" />
<Compile Include="Src\MethodExtractorBase.cs" />
<Compile Include="Src\OverrideToStringMethodCommand.cs" />
<Compile Include="Src\ParameterCheckRefactoringMenuBuilder.cs" />

67
src/AddIns/Misc/SharpRefactoring/Src/Gui/InlineRefactorDialog.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
@ -73,7 +74,7 @@ namespace SharpRefactoring.Gui @@ -73,7 +74,7 @@ namespace SharpRefactoring.Gui
}
protected abstract UIElement CreateContentElement();
protected abstract void GenerateCode(CodeGenerator generator, IClass currentClass);
protected abstract string GenerateCode(CodeGenerator generator, IClass currentClass);
void OKButtonClick(object sender, RoutedEventArgs e)
{
@ -86,7 +87,7 @@ namespace SharpRefactoring.Gui @@ -86,7 +87,7 @@ namespace SharpRefactoring.Gui
CodeGenerator generator = parseInfo.CompilationUnit.Language.CodeGenerator;
IClass current = parseInfo.CompilationUnit.GetInnermostClass(editor.Caret.Line, editor.Caret.Column);
GenerateCode(generator, current);
editor.Document.Insert(anchor.Offset, GenerateCode(generator, current) ?? "");
}
Element.Remove();
@ -100,66 +101,4 @@ namespace SharpRefactoring.Gui @@ -100,66 +101,4 @@ namespace SharpRefactoring.Gui
Element.Remove();
}
}
public class OverrideToStringMethodDialog : InlineRefactorDialog
{
ListBox listBox;
List<EntityWrapper> fields;
ITextAnchor parameterListAnchor;
public OverrideToStringMethodDialog(ITextEditor editor, ITextAnchor anchor, ITextAnchor parameterListAnchor, IList<IField> fields)
: base(editor, anchor)
{
this.parameterListAnchor = parameterListAnchor;
this.fields = fields.Select(f => new EntityWrapper() { Entity = f }).ToList();
this.listBox.ItemsSource = this.fields.Select(i => i.Create());
}
protected override UIElement CreateContentElement()
{
listBox = new ListBox() {
Margin = new Thickness(3)
};
return listBox;
}
protected override void GenerateCode(CodeGenerator generator, IClass currentClass)
{
var fields = this.fields
.Where(f => f.IsChecked)
.Select(f2 => CreateAssignment(f2.Entity.Name, f2.Entity.Name))
.ToArray();
generator.InsertCodeInClass(currentClass, new RefactoringDocumentAdapter(editor.Document), anchor.Line, fields);
}
Statement CreateAssignment(string memberName, string parameter)
{
return new ExpressionStatement(
new AssignmentExpression(
new MemberReferenceExpression(new ThisReferenceExpression(), memberName),
AssignmentOperatorType.Assign,
new IdentifierExpression(parameter)
)
);
}
}
class EntityWrapper
{
public IEntity Entity { get; set; }
public bool IsChecked { get; set; }
public object Create()
{
CheckBox box = new CheckBox() {
Content = Entity.Name
};
box.Checked += delegate { this.IsChecked = true; };
box.Unchecked += delegate { this.IsChecked = false; };
return box;
}
}
}

119
src/AddIns/Misc/SharpRefactoring/Src/Gui/OverrideToStringMethodDialog.cs

@ -0,0 +1,119 @@ @@ -0,0 +1,119 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Editor;
namespace SharpRefactoring.Gui
{
public class OverrideToStringMethodDialog : InlineRefactorDialog
{
ListBox listBox;
List<Wrapper<IField>> fields;
public OverrideToStringMethodDialog(ITextEditor editor, ITextAnchor anchor, IList<IField> fields)
: base(editor, anchor)
{
this.fields = fields.Select(f => new Wrapper<IField>() { Entity = f }).ToList();
this.listBox.ItemsSource = this.fields.Select(i => i.Create(null));
}
protected override UIElement CreateContentElement()
{
TextBlock block = new TextBlock() {
Text = StringParser.Parse("${res:AddIns.SharpRefactoring.OverrideToStringMethod.Description}"),
Margin = new Thickness(3),
TextWrapping = TextWrapping.Wrap
};
listBox = new ListBox() {
Margin = new Thickness(3)
};
block.SetValue(DockPanel.DockProperty, Dock.Top);
return new DockPanel() {
Children = {
block,
listBox
}
};
}
protected override string GenerateCode(CodeGenerator generator, IClass currentClass)
{
var fields = this.fields
.Where(f => f.IsChecked)
.Select(f2 => f2.Entity.Name)
.ToArray();
if (fields.Any()) {
StringBuilder formatString = new StringBuilder("[" + currentClass.Name + " ");
for (int i = 0; i < fields.Length; i++) {
if (i != 0)
formatString.Append(", ");
formatString.AppendFormat("{0}={{{1}}}", generator.GetPropertyName(fields[i]), i);
}
formatString.Append("]");
return "return string.Format(\"" + formatString.ToString() + "\", " + string.Join(", ", fields) + ");";
}
return "return string.Format(\"[" + currentClass.Name + "]\");";
}
}
/* List<Wrapper<IField>> checkedItems = new List<Wrapper<IField>>();
void CheckChange(Wrapper<IField> field)
{
if (field.IsChecked)
checkedItems.Add(field);
else
checkedItems.Remove(field);
string text = string.Join(", ", this.checkedItems.Select(f2 => PrintVariableDeclaration(f2.Entity)));
editor.Document.Replace(parameterListAnchorStart.Offset, parameterListAnchorEnd.Offset - parameterListAnchorStart.Offset, text);
}
string PrintVariableDeclaration(IField field)
{
if (field.ReturnType == null)
return "? " + field.Name;
else {
TypeReference type = CodeGenerator.ConvertType(field.ReturnType, new ClassFinder(field));
return ((type.IsKeyword) ? TypeReference.PrimitiveTypesCSharpReverse[type.Type] : type.Type) + " " + field.Name;
}
}
Statement CreateAssignment(string memberName, string parameter)
{
return new ExpressionStatement(
new AssignmentExpression(
new MemberReferenceExpression(new ThisReferenceExpression(), memberName),
AssignmentOperatorType.Assign,
new IdentifierExpression(parameter)
)
);
}
*/
}

50
src/AddIns/Misc/SharpRefactoring/Src/Gui/Wrapper.cs

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Siegfried Pammer" email="siegfriedpammer@gmail.com" />
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Ast;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Editor;
namespace SharpRefactoring.Gui
{
class Wrapper<T> where T : IEntity
{
public T Entity { get; set; }
public bool IsChecked { get; set; }
public object Create(Action<Wrapper<T>> checkChange)
{
CheckBox box = new CheckBox() {
Content = Entity.Name
};
box.Checked += delegate {
this.IsChecked = true;
if (checkChange != null)
checkChange(this);
};
box.Unchecked += delegate {
this.IsChecked = false;
if (checkChange != null)
checkChange(this);
};
return box;
}
}
}

14
src/AddIns/Misc/SharpRefactoring/Src/OverrideToStringMethodCommand.cs

@ -6,9 +6,6 @@ @@ -6,9 +6,6 @@
// </file>
using System;
using System.Linq;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
@ -44,15 +41,14 @@ namespace SharpRefactoring @@ -44,15 +41,14 @@ namespace SharpRefactoring
ITextAnchor anchor = textEditor.Document.CreateAnchor(textEditor.Caret.Offset);
anchor.MovementType = AnchorMovementType.AfterInsertion;
textEditor.Document.Insert(anchor.Offset, "public override ToString()\n{\n\t");
var line = textEditor.Document.GetLineForOffset(textEditor.Caret.Offset);
ITextAnchor parameterListAnchor = textEditor.Document.CreateAnchor(anchor.Offset - ")\n{\n\t".Length);
parameterListAnchor.SurviveDeletion = true;
parameterListAnchor.MovementType = AnchorMovementType.AfterInsertion;
string indent = DocumentUtilitites.GetWhitespaceAfter(textEditor.Document, line.Offset);
textEditor.Document.Insert(anchor.Offset + 1, "\n\t\n}\n");
textEditor.Document.Insert(anchor.Offset, "public override string ToString()\n" + indent + "{\n" + indent + "\t");
textEditor.Document.Insert(anchor.Offset + 1, indent + "}\n");
InlineRefactorDialog dialog = new OverrideToStringMethodDialog(textEditor, anchor, parameterListAnchor, current.Fields);
InlineRefactorDialog dialog = new OverrideToStringMethodDialog(textEditor, anchor, current.Fields);
dialog.Element = uiService.CreateInlineUIElement(anchor, dialog);
}

Loading…
Cancel
Save