Browse Source
- finished OverrideToStringMethodCommand and OverrideToStringMethodDialog git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5255 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61pull/1/head
8 changed files with 213 additions and 91 deletions
@ -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; |
||||
} |
||||
} |
||||
} |
||||
@ -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) |
||||
) |
||||
); |
||||
} |
||||
*/ |
||||
} |
||||
@ -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; |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue