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) - { - - } - } -}