diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj
index db8a910da8..6c088d23e2 100644
--- a/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj
+++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassCanvas/ClassCanvas.csproj
@@ -80,6 +80,7 @@
+
diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs
index 670ed81e90..a6a5acccd1 100644
--- a/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs
+++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassDiagramAddin/Src/ClassEditorPad.cs
@@ -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
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
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 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;
+ }
}
///
diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs
index 488a7b147b..c945ca2bd9 100644
--- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs
+++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs
@@ -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 addMemberItems = new Dictionary();
@@ -40,6 +44,17 @@ namespace ClassDiagram
IClass currClass;
public event EventHandler MemberActivated = delegate {};
+ public event EventHandler ParameterActivated = delegate {};
+
+ public event EventHandler MemberModified = delegate {};
+ public event EventHandler ParameterModified = delegate {};
+
+ TreeListViewItem editedItem = null;
+
+ ColumnHeader nameCol;
+ ColumnHeader typeCol;
+ ColumnHeader modifierCol;
+ ColumnHeader summaryCol;
public ClassEditor()
{
@@ -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
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
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
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
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("");
@@ -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
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);
+ }
+ }
}
diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj
index 34e3fe6d68..238acb0180 100644
--- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj
+++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj
@@ -42,7 +42,6 @@
ClassEditor.cs
-
@@ -50,6 +49,10 @@
ICSharpCode.TextEditor
False
+
+ {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}
+ NRefactory
+
{2748AD25-9C63-4E12-877B-4DCE96FBED54}
ICSharpCode.SharpDevelop
diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/MembersList.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/MembersList.cs
deleted file mode 100644
index 8b732427c4..0000000000
--- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/MembersList.cs
+++ /dev/null
@@ -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
-{
- ///
- /// Description of MembersList.
- ///
- public class MembersList where MT : IMember
- {
- TreeListViewItem titleItem;
- TreeListViewItem addNewMember;
- TreeListView treeListView;
-
- public MembersList(string title, ICollection 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)
- {
-
- }
- }
-}