|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|