Browse Source

Added initial editing (refactoring) support to the class editor.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2267 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Itar Bar-Haim 19 years ago
parent
commit
e5631e90ae
  1. 1
      src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj
  2. 73
      src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs
  3. 271
      src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs
  4. 5
      src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj
  5. 57
      src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/MembersList.cs

1
src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj

@ -80,6 +80,7 @@ @@ -80,6 +80,7 @@
<Compile Include="Decorators\SizeGripDecorator.cs" />
<Content Include="ClassCanvas.cd" />
<Content Include="ClassCanvas.cd" />
<None Include="ClassDiagramAddin.sln" />
</ItemGroup>
<ItemGroup>
<Folder Include="Shapes" />

73
src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs

@ -9,10 +9,12 @@ @@ -9,10 +9,12 @@
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Refactoring;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.TextEditor;
@ -34,6 +36,9 @@ namespace ClassDiagramAddin @@ -34,6 +36,9 @@ namespace ClassDiagramAddin
public ClassEditorPad()
{
editor.MemberActivated += EditorMemberActivated;
editor.MemberModified += EditorMemberModified;
editor.ParameterActivated += EditorParameterActivated;
editor.ParameterModified += EditorParameterModified;
}
private void EditorMemberActivated (object sender, IMemberEventArgs e)
@ -42,7 +47,73 @@ namespace ClassDiagramAddin @@ -42,7 +47,73 @@ namespace ClassDiagramAddin
FileService.JumpToFilePosition(compUnit.FileName,
e.Member.Region.BeginLine - 1,
e.Member.Region.BeginColumn - 1);
}
private void EditorParameterActivated (object sender, IParameterEventArgs e)
{
ICompilationUnit compUnit = e.Method.DeclaringType.CompilationUnit;
FileService.JumpToFilePosition(compUnit.FileName,
e.Parameter.Region.BeginLine - 1,
e.Parameter.Region.BeginColumn - 1);
}
private void EditorMemberModified (object sender, IMemberModificationEventArgs e)
{
switch (e.Modification)
{
case Modification.Name:
DialogResult dr = MessageBox.Show("Rename all occurances?", "Rename Member", MessageBoxButtons.YesNoCancel);
if (dr == DialogResult.Cancel) e.Cancel = true;
else if (dr == DialogResult.Yes)
{
FindReferencesAndRenameHelper.RenameMember(e.Member, e.NewValue);
}
else
{
// TODO - place local renameing code here.
}
break;
case Modification.Type:
// TODO - place type replacment code here.
break;
case Modification.Modifier:
// TODO - place visibility replacment code here.
break;
case Modification.Summary:
// TODO - place summary replacment code here.
break;
}
}
private void EditorParameterModified (object sender, IParameterModificationEventArgs e)
{
switch (e.Modification)
{
case Modification.Name:
DialogResult dr = MessageBox.Show("Rename all occurances?", "Rename Parameter", MessageBoxButtons.YesNoCancel);
if (dr == DialogResult.Cancel) e.Cancel = true;
else if (dr == DialogResult.Yes)
{
ResolveResult local = new LocalResolveResult(e.Method, new DefaultField.ParameterField(e.Parameter.ReturnType, e.Parameter.Name, e.Parameter.Region, e.Method.DeclaringType));
List<Reference> list = RefactoringService.FindReferences(local, null);
if (list == null) return;
FindReferencesAndRenameHelper.RenameReferences(list, e.NewValue);
}
else
{
// TODO - place local renameing code here.
}
break;
case Modification.Type:
// TODO - place type replacment code here.
break;
case Modification.Modifier:
// TODO - place visibility replacment code here.
break;
case Modification.Summary:
// TODO - place summary replacment code here.
break;
}
}
/// <summary>

271
src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs

@ -31,6 +31,10 @@ namespace ClassDiagram @@ -31,6 +31,10 @@ namespace ClassDiagram
public partial class ClassEditor
{
TreeListView membersList = new TreeListView();
VisibilityModifiersEditor visibilityModifierEditor = new VisibilityModifiersEditor();
ParameterModifiersEditor parameterModifierEditor = new ParameterModifiersEditor();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ClassEditor));
Dictionary<Type, TreeListViewItem> addMemberItems = new Dictionary<Type, TreeListViewItem>();
@ -40,6 +44,17 @@ namespace ClassDiagram @@ -40,6 +44,17 @@ namespace ClassDiagram
IClass currClass;
public event EventHandler<IMemberEventArgs> MemberActivated = delegate {};
public event EventHandler<IParameterEventArgs> ParameterActivated = delegate {};
public event EventHandler<IMemberModificationEventArgs> MemberModified = delegate {};
public event EventHandler<IParameterModificationEventArgs> ParameterModified = delegate {};
TreeListViewItem editedItem = null;
ColumnHeader nameCol;
ColumnHeader typeCol;
ColumnHeader modifierCol;
ColumnHeader summaryCol;
public ClassEditor()
{
@ -48,10 +63,10 @@ namespace ClassDiagram @@ -48,10 +63,10 @@ namespace ClassDiagram
//
InitializeComponent();
ColumnHeader nameCol = membersList.Columns.Add("Name");
ColumnHeader typeCol = membersList.Columns.Add("Type");
ColumnHeader modifierCol = membersList.Columns.Add("Modifier");
ColumnHeader summaryCol = membersList.Columns.Add("Summary");
nameCol = membersList.Columns.Add("Name");
typeCol = membersList.Columns.Add("Type");
modifierCol = membersList.Columns.Add("Modifier");
summaryCol = membersList.Columns.Add("Summary");
nameCol.Width = 160;
typeCol.Width = 100;
@ -73,6 +88,7 @@ namespace ClassDiagram @@ -73,6 +88,7 @@ namespace ClassDiagram
membersList.SmallImageList.Images.Add("CloseBrace", (Bitmap)resources.GetObject("closebrace"));
membersList.SmallImageList.Images.Add("EmptyBraces", (Bitmap)resources.GetObject("emptybraces"));
membersList.LabelEdit = true;
membersList.Sorting = SortOrder.None;
membersList.ShowPlusMinus = true;
membersList.FullRowSelect = true;
@ -81,6 +97,8 @@ namespace ClassDiagram @@ -81,6 +97,8 @@ namespace ClassDiagram
membersList.HeaderStyle = ColumnHeaderStyle.Nonclickable;
membersList.DoubleClick += HandleDoubleClick;
membersList.BeforeLabelEdit += BeforeEdit;
membersList.AfterLabelEdit += AfterEdit;
Controls.Add(membersList);
membersList.Dock = DockStyle.Fill;
@ -108,8 +126,134 @@ namespace ClassDiagram @@ -108,8 +126,134 @@ namespace ClassDiagram
else
{
IMember itemMember = membersList.SelectedItems[0].Tag as IMember;
IParameter itemParameter = membersList.SelectedItems[0].Tag as IParameter;
if (itemMember != null)
{
MemberActivated(this, new IMemberEventArgs(itemMember));
}
else if (itemParameter != null)
{
IMethod method = membersList.SelectedItems[0].Parent.Tag as IMethod;
if (method != null)
ParameterActivated(this, new IParameterEventArgs(method, itemParameter));
}
}
}
private void BeforeEdit(object sender, TreeListViewBeforeLabelEditEventArgs e)
{
editedItem = membersList.SelectedItems[0];
if (addMemberItems.ContainsValue(editedItem))
{
e.Cancel = true;
}
else if (addParameterItems.ContainsValue(editedItem))
{
e.Cancel = true;
}
else
{
IMember itemMember = editedItem.Tag as IMember;
IParameter itemParameter = editedItem.Tag as IParameter;
if (itemMember != null)
{
if (e.ColumnIndex == nameCol.Index)
{
}
else if (e.ColumnIndex == typeCol.Index)
{
}
else if (e.ColumnIndex == modifierCol.Index)
{
e.Editor = visibilityModifierEditor;
}
else if (e.ColumnIndex == summaryCol.Index)
{
}
else
{
e.Cancel = true;
}
}
else if (itemParameter != null)
{
if (e.ColumnIndex == nameCol.Index)
{
}
else if (e.ColumnIndex == typeCol.Index)
{
}
else if (e.ColumnIndex == modifierCol.Index)
{
e.Editor = parameterModifierEditor;
}
else if (e.ColumnIndex == summaryCol.Index)
{
}
else
{
e.Cancel = true;
}
}
else
{
e.Cancel = true;
}
}
}
private void AfterEdit (object sender, TreeListViewLabelEditEventArgs e)
{
Modification modification = Modification.None;
if (e.ColumnIndex == nameCol.Index)
{
modification = Modification.Name;
}
else if (e.ColumnIndex == typeCol.Index)
{
modification = Modification.Type;
}
else if (e.ColumnIndex == modifierCol.Index)
{
modification = Modification.Modifier;
}
else if (e.ColumnIndex == summaryCol.Index)
{
modification = Modification.Summary;
}
else
{
e.Cancel = true;
}
if (!e.Cancel)
{
IMember member = editedItem.Tag as IMember;
IParameter parameter = editedItem.Tag as IParameter;
if (member != null)
{
IMemberModificationEventArgs mmea = new IMemberModificationEventArgs(member, modification, e.Label);
MemberModified(this, mmea);
e.Cancel = mmea.Cancel;
}
else if (parameter != null)
{
IMethod method = editedItem.Parent.Tag as IMethod;
if (method == null)
{
e.Cancel = true;
}
else
{
IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, modification, e.Label);
ParameterModified(this, pmea);
e.Cancel = pmea.Cancel;
}
}
else
{
e.Cancel = true;
}
}
}
@ -243,7 +387,10 @@ namespace ClassDiagram @@ -243,7 +387,10 @@ namespace ClassDiagram
TreeListViewItem parameter = new TreeListViewItem(param.Name);
parameter.ImageKey = imageKey;
parameter.SubItems.Add (param.ReturnType.Name);
parameter.SubItems.Add (param.Modifiers.ToString());
parameter.SubItems.Add (param.Documentation);
item.Items.Add(parameter);
parameter.Tag = param;
imageKey = "Comma";
}
TreeListViewItem addParam = new TreeListViewItem("<add parameter>");
@ -285,12 +432,11 @@ namespace ClassDiagram @@ -285,12 +432,11 @@ namespace ClassDiagram
return control1;
}
}
public class IMemberEventArgs : EventArgs
{
IMember member;
public IMemberEventArgs(IMember member)
public IMemberEventArgs (IMember member)
{
this.member = member;
}
@ -300,4 +446,115 @@ namespace ClassDiagram @@ -300,4 +446,115 @@ namespace ClassDiagram
get { return member; }
}
}
public class IParameterEventArgs : EventArgs
{
IParameter parameter;
IMethod method;
public IParameterEventArgs (IMethod method, IParameter parameter)
{
this.method = method;
this.parameter = parameter;
}
public IParameter Parameter
{
get { return parameter; }
}
public IMethod Method
{
get { return method; }
}
}
public enum Modification { None, Name, Type, Modifier, Summary }
public class IMemberModificationEventArgs : IMemberEventArgs
{
Modification modification;
string newValue;
bool cancel = false;
public IMemberModificationEventArgs(IMember member, Modification modification, string newValue)
: base (member)
{
this.modification = modification;
this.newValue = newValue;
}
public Modification Modification
{
get { return modification; }
}
public string NewValue
{
get { return newValue; }
}
public bool Cancel
{
get { return cancel; }
set { cancel = value; }
}
}
public class IParameterModificationEventArgs : IParameterEventArgs
{
Modification modification;
string newValue;
bool cancel = false;
public IParameterModificationEventArgs(IMethod method, IParameter parameter, Modification modification, string newValue)
: base (method, parameter)
{
this.modification = modification;
this.newValue = newValue;
}
public Modification Modification
{
get { return modification; }
}
public string NewValue
{
get { return newValue; }
}
public bool Cancel
{
get { return cancel; }
set { cancel = value; }
}
}
internal class VisibilityModifiersEditor : ComboBox
{
public VisibilityModifiersEditor()
{
this.DropDownStyle = ComboBoxStyle.DropDownList;
Items.Add(ICSharpCode.NRefactory.Ast.Modifiers.Public);
Items.Add(ICSharpCode.NRefactory.Ast.Modifiers.Private);
Items.Add(ICSharpCode.NRefactory.Ast.Modifiers.Protected);
Items.Add(ICSharpCode.NRefactory.Ast.Modifiers.Internal);
}
}
internal class ParameterModifiersEditor : ComboBox
{
public ParameterModifiersEditor()
{
this.DropDownStyle = ComboBoxStyle.DropDownList;
Items.Add(ParameterModifiers.In);
Items.Add(ParameterModifiers.Out);
Items.Add(ParameterModifiers.Ref);
Items.Add(ParameterModifiers.Params);
Items.Add(ParameterModifiers.Optional);
}
}
}

5
src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj

@ -42,7 +42,6 @@ @@ -42,7 +42,6 @@
<EmbeddedResource Include="ClassEditor.resx">
<DependentUpon>ClassEditor.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="MembersList.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">
@ -50,6 +49,10 @@ @@ -50,6 +49,10 @@
<Name>ICSharpCode.TextEditor</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>

57
src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/MembersList.cs

@ -1,57 +0,0 @@ @@ -1,57 +0,0 @@
/*
* Created by SharpDevelop.
* User: itai
* Date: 20/10/2006
* Time: 20:41
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop;
namespace ClassDiagram
{
/// <summary>
/// Description of MembersList.
/// </summary>
public class MembersList<MT> where MT : IMember
{
TreeListViewItem titleItem;
TreeListViewItem addNewMember;
TreeListView treeListView;
public MembersList(string title, ICollection<MT> members, TreeListView tlv)
{
treeListView = tlv;
titleItem = tlv.Items.Add(title);
//tlv.SmallImageList = ClassBrowserIconService.ImageList;
if (members != null && members.Count != 0)
{
foreach (IMember member in members)
{
int icon = ClassBrowserIconService.GetIcon(member);
TreeListViewItem methodItem = titleItem.Items.Add(member.Name, icon);
}
}
addNewMember = titleItem.Items.Add("[Add]");
}
private void ItemActivated (object sender, EventArgs e)
{
}
}
}
Loading…
Cancel
Save