|
|
|
@ -23,23 +23,20 @@ using ICSharpCode.SharpDevelop.Project; |
|
|
|
using ICSharpCode.SharpDevelop.Gui; |
|
|
|
using ICSharpCode.SharpDevelop.Gui; |
|
|
|
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
|
|
|
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; |
|
|
|
using ICSharpCode.TextEditor; |
|
|
|
using ICSharpCode.TextEditor; |
|
|
|
|
|
|
|
using Aga.Controls.Tree; |
|
|
|
|
|
|
|
using Aga.Controls.Tree.NodeControls; |
|
|
|
|
|
|
|
|
|
|
|
namespace ClassDiagram |
|
|
|
namespace ClassDiagram |
|
|
|
{ |
|
|
|
{ |
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// Description of UserControl1.
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
public partial class ClassEditor |
|
|
|
public partial class ClassEditor |
|
|
|
{ |
|
|
|
{ |
|
|
|
TreeListView membersList = new TreeListView(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VisibilityModifiersEditor visibilityModifierEditor = new VisibilityModifiersEditor(); |
|
|
|
VisibilityModifiersEditor visibilityModifierEditor = new VisibilityModifiersEditor(); |
|
|
|
ParameterModifiersEditor parameterModifierEditor = new ParameterModifiersEditor(); |
|
|
|
ParameterModifiersEditor parameterModifierEditor = new ParameterModifiersEditor(); |
|
|
|
|
|
|
|
|
|
|
|
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ClassEditor)); |
|
|
|
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ClassEditor)); |
|
|
|
|
|
|
|
|
|
|
|
Dictionary<Type, TreeListViewItem> addMemberItems = new Dictionary<Type, TreeListViewItem>(); |
|
|
|
Dictionary<Type, Node> addMemberItems = new Dictionary<Type, Node>(); |
|
|
|
Dictionary<IMethod, TreeListViewItem> addParameterItems = new Dictionary<IMethod, TreeListViewItem>(); |
|
|
|
Dictionary<IMethod, Node> addParameterItems = new Dictionary<IMethod, Node>(); |
|
|
|
|
|
|
|
|
|
|
|
Dictionary<ClassType, Action<IClass>> classTypeGroupCreators = new Dictionary<ClassType, Action<IClass>>(); |
|
|
|
Dictionary<ClassType, Action<IClass>> classTypeGroupCreators = new Dictionary<ClassType, Action<IClass>>(); |
|
|
|
IClass currClass; |
|
|
|
IClass currClass; |
|
|
|
@ -52,107 +49,295 @@ namespace ClassDiagram |
|
|
|
|
|
|
|
|
|
|
|
public event EventHandler<IMemberEventArgs> ClassMemberAdded = delegate {}; |
|
|
|
public event EventHandler<IMemberEventArgs> ClassMemberAdded = delegate {}; |
|
|
|
|
|
|
|
|
|
|
|
TreeListViewItem editedItem = null; |
|
|
|
TreeModel model = new TreeModel(); |
|
|
|
|
|
|
|
|
|
|
|
ColumnHeader nameCol; |
|
|
|
//TreeListViewItem editedItem = null;
|
|
|
|
ColumnHeader typeCol; |
|
|
|
/* |
|
|
|
ColumnHeader modifierCol; |
|
|
|
TreeColumn nameCol = new TreeColumn("Name", 100); |
|
|
|
ColumnHeader summaryCol; |
|
|
|
TreeColumn typeCol = new TreeColumn("Type", 100); |
|
|
|
|
|
|
|
TreeColumn modifierCol = new TreeColumn("Modifier", 100); |
|
|
|
|
|
|
|
TreeColumn summaryCol = new TreeColumn("Summary", 100); |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
public ClassEditor() |
|
|
|
private class GroupNode : Node |
|
|
|
{ |
|
|
|
{ |
|
|
|
//
|
|
|
|
public GroupNode(Type groupType, string title) |
|
|
|
// The InitializeComponent() call is required for Windows Forms designer support.
|
|
|
|
: base (title) |
|
|
|
//
|
|
|
|
{ |
|
|
|
InitializeComponent(); |
|
|
|
this.groupType = groupType; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
nameCol = membersList.Columns.Add("Name"); |
|
|
|
Type groupType; |
|
|
|
typeCol = membersList.Columns.Add("Type"); |
|
|
|
|
|
|
|
modifierCol = membersList.Columns.Add("Modifier"); |
|
|
|
|
|
|
|
summaryCol = membersList.Columns.Add("Summary"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nameCol.Width = 160; |
|
|
|
public Type GroupType { |
|
|
|
typeCol.Width = 100; |
|
|
|
get { return groupType; } |
|
|
|
modifierCol.Width = 100; |
|
|
|
} |
|
|
|
summaryCol.Width = 200; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try |
|
|
|
public string MemberName |
|
|
|
{ |
|
|
|
{ |
|
|
|
membersList.SmallImageList = ClassBrowserIconService.ImageList; |
|
|
|
get { return base.Text; } |
|
|
|
} |
|
|
|
} |
|
|
|
catch |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private class MemberNode : Node |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
public MemberNode(IMember member, IAmbience ambience, ClassEditor editor) |
|
|
|
{ |
|
|
|
{ |
|
|
|
membersList.SmallImageList = new ImageList(); |
|
|
|
this.member = member; |
|
|
|
|
|
|
|
this.ambience = ambience; |
|
|
|
|
|
|
|
this.editor = editor; |
|
|
|
|
|
|
|
UpdateValues(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//TODO - check with the #D documentation how to add new icons correctly.
|
|
|
|
void UpdateValues() |
|
|
|
membersList.SmallImageList.Images.Add("OpenBrace", (Bitmap)resources.GetObject("openbrace")); |
|
|
|
{ |
|
|
|
membersList.SmallImageList.Images.Add("Comma", (Bitmap)resources.GetObject("comma")); |
|
|
|
IMethod methodMember = member as IMethod; |
|
|
|
membersList.SmallImageList.Images.Add("CloseBrace", (Bitmap)resources.GetObject("closebrace")); |
|
|
|
IEvent eventMember = member as IEvent; |
|
|
|
membersList.SmallImageList.Images.Add("EmptyBraces", (Bitmap)resources.GetObject("emptybraces")); |
|
|
|
IProperty propertyMember = member as IProperty; |
|
|
|
|
|
|
|
IField fieldMember = member as IField; |
|
|
|
membersList.LabelEdit = true; |
|
|
|
|
|
|
|
membersList.Sorting = SortOrder.None; |
|
|
|
int iconIndex = -1; |
|
|
|
membersList.ShowPlusMinus = true; |
|
|
|
try |
|
|
|
membersList.FullRowSelect = true; |
|
|
|
{ |
|
|
|
|
|
|
|
iconIndex = ClassBrowserIconService.GetIcon(member); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (iconIndex > -1) |
|
|
|
|
|
|
|
icon = ClassBrowserIconService.ImageList.Images[iconIndex]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (methodMember != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (methodMember.IsConstructor) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (methodMember.DeclaringType != null) |
|
|
|
|
|
|
|
memberName = methodMember.DeclaringType.Name; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
memberName = methodMember.Name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
memberName = methodMember.Name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (eventMember != null) memberName = eventMember.Name; |
|
|
|
|
|
|
|
if (propertyMember != null) memberName = ambience.Convert(propertyMember); |
|
|
|
|
|
|
|
if (fieldMember != null) memberName = ambience.Convert(fieldMember); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
membersList.Items.Sortable = false; |
|
|
|
IAmbience ambience; |
|
|
|
membersList.HeaderStyle = ColumnHeaderStyle.Nonclickable; |
|
|
|
IMember member; |
|
|
|
|
|
|
|
ClassEditor editor; |
|
|
|
|
|
|
|
|
|
|
|
membersList.DoubleClick += HandleDoubleClick; |
|
|
|
public IMember Member |
|
|
|
membersList.BeforeLabelEdit += BeforeEdit; |
|
|
|
{ |
|
|
|
membersList.AfterLabelEdit += AfterEdit; |
|
|
|
get { return member; } |
|
|
|
|
|
|
|
set { member = value; UpdateValues(); } |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Controls.Add(membersList); |
|
|
|
private string memberName; |
|
|
|
membersList.Dock = DockStyle.Fill; |
|
|
|
public string MemberName |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return memberName; } |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IMemberModificationEventArgs mmea = new IMemberModificationEventArgs(member, Modification.Name, value); |
|
|
|
|
|
|
|
editor.EmitMemberModified(mmea); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
classTypeGroupCreators.Add(ClassType.Class, SetClassGroups); |
|
|
|
protected Image icon; |
|
|
|
classTypeGroupCreators.Add(ClassType.Interface, SetClassGroups); |
|
|
|
public Image MemberIcon |
|
|
|
classTypeGroupCreators.Add(ClassType.Struct, SetClassGroups); |
|
|
|
{ |
|
|
|
classTypeGroupCreators.Add(ClassType.Enum, SetEnumGroups); |
|
|
|
get { return icon; } |
|
|
|
classTypeGroupCreators.Add(ClassType.Delegate, SetDelegateGroups); |
|
|
|
} |
|
|
|
//classTypeGroupCreators[ClassType.Module] = SetClassGroups; //???
|
|
|
|
|
|
|
|
|
|
|
|
public string MemberType |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return ambience.Convert(member.ReturnType); } |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IMemberModificationEventArgs mmea = new IMemberModificationEventArgs(member, Modification.Type, value); |
|
|
|
|
|
|
|
editor.EmitMemberModified(mmea); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string MemberModifiers |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return member.Modifiers.ToString(); } |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IMemberModificationEventArgs mmea = new IMemberModificationEventArgs(member, Modification.Modifier, value); |
|
|
|
|
|
|
|
editor.EmitMemberModified(mmea); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string MemberSummary |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return ClassEditor.GetSummary(member); } |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IMemberModificationEventArgs mmea = new IMemberModificationEventArgs(member, Modification.Summary, value); |
|
|
|
|
|
|
|
editor.EmitMemberModified(mmea); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void HandleDoubleClick (object sender, EventArgs e) |
|
|
|
private class ParameterNode : Node |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (membersList.SelectedItems.Count == 0) return; |
|
|
|
public ParameterNode(IParameter parameter, IAmbience ambience, Image icon, ClassEditor editor) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.ambience = ambience; |
|
|
|
|
|
|
|
this.icon = icon; |
|
|
|
|
|
|
|
this.parameter = parameter; |
|
|
|
|
|
|
|
this.editor = editor; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UpdateMethod(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IAmbience ambience; |
|
|
|
|
|
|
|
IParameter parameter; |
|
|
|
|
|
|
|
IMethod method; |
|
|
|
|
|
|
|
ClassEditor editor; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void UpdateMethod() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemberNode member = this.Parent as MemberNode; |
|
|
|
|
|
|
|
if (member != null) |
|
|
|
|
|
|
|
method = member.Member as IMethod; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
TreeListViewItem item = membersList.SelectedItems[0]; |
|
|
|
public IParameter Parameter { |
|
|
|
|
|
|
|
get { return parameter; } |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
parameter = value; |
|
|
|
|
|
|
|
UpdateMethod(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (addMemberItems.ContainsValue(item)) |
|
|
|
public string MemberName |
|
|
|
{ |
|
|
|
{ |
|
|
|
/* IAmbience ambience = GetAmbience(); |
|
|
|
get { return parameter.Name; } |
|
|
|
item.SubItems.Add(ambience.Convert(VoidReturnType.Instance)); |
|
|
|
set |
|
|
|
item.SubItems.Add(ModifierEnum.Public.ToString()); |
|
|
|
{ |
|
|
|
item.SubItems.Add(""); |
|
|
|
IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, Modification.Name, value); |
|
|
|
item.Text = "[method name]"; |
|
|
|
editor.EmitParameterModified(pmea); |
|
|
|
item.BeginEdit(0);*/ |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected Image icon; |
|
|
|
|
|
|
|
public Image MemberIcon |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return icon; } |
|
|
|
|
|
|
|
set { icon = value; } |
|
|
|
} |
|
|
|
} |
|
|
|
else if (addParameterItems.ContainsValue(item)) |
|
|
|
|
|
|
|
|
|
|
|
public string MemberType |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
get { return ambience.Convert(parameter.ReturnType); } |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, Modification.Type, value); |
|
|
|
|
|
|
|
editor.EmitParameterModified(pmea); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
|
|
|
|
|
|
|
|
public string MemberModifiers |
|
|
|
{ |
|
|
|
{ |
|
|
|
IMember itemMember = item.Tag as IMember; |
|
|
|
get { return parameter.Modifiers.ToString(); } |
|
|
|
IParameter itemParameter = item.Tag as IParameter; |
|
|
|
set |
|
|
|
if (itemMember != null) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
MemberActivated(this, new IMemberEventArgs(itemMember)); |
|
|
|
IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, Modification.Modifier, value); |
|
|
|
|
|
|
|
editor.EmitParameterModified(pmea); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (itemParameter != null) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string MemberSummary |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return ClassEditor.GetSummary(parameter); } |
|
|
|
|
|
|
|
set |
|
|
|
{ |
|
|
|
{ |
|
|
|
IMethod method = item.Parent.Tag as IMethod; |
|
|
|
IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, Modification.Summary, value); |
|
|
|
if (method != null) |
|
|
|
editor.EmitParameterModified(pmea); |
|
|
|
ParameterActivated(this, new IParameterEventArgs(method, itemParameter)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private class AddParameterNode : Node |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
public AddParameterNode (Image icon) : base ("<Add Parameter>") |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
this.icon = icon; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Image icon; |
|
|
|
|
|
|
|
public Image Icon { |
|
|
|
|
|
|
|
get { return icon; } |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string MemberName |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
get { return base.Text; } |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public ClassEditor() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// The InitializeComponent() call is required for Windows Forms designer support.
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
InitializeComponent(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
membersList.Model = model; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// try
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// membersList.SmallImageList = ClassBrowserIconService.ImageList;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// catch
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// membersList.SmallImageList = new ImageList();
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TODO - check with the #D documentation how to add new icons correctly.
|
|
|
|
|
|
|
|
//membersList.SmallImageList.Images.Add("OpenBrace", (Bitmap)resources.GetObject("openbrace"));
|
|
|
|
|
|
|
|
//membersList.SmallImageList.Images.Add("Comma", (Bitmap)resources.GetObject("comma"));
|
|
|
|
|
|
|
|
//membersList.SmallImageList.Images.Add("CloseBrace", (Bitmap)resources.GetObject("closebrace"));
|
|
|
|
|
|
|
|
//membersList.SmallImageList.Images.Add("EmptyBraces", (Bitmap)resources.GetObject("emptybraces"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// membersList.DoubleClick += HandleDoubleClick;
|
|
|
|
|
|
|
|
// membersList.BeforeLabelEdit += BeforeEdit;
|
|
|
|
|
|
|
|
// membersList.AfterLabelEdit += AfterEdit;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Controls.Add(membersList); |
|
|
|
|
|
|
|
membersList.Dock = DockStyle.Fill; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classTypeGroupCreators.Add(ClassType.Class, SetClassGroups); |
|
|
|
|
|
|
|
classTypeGroupCreators.Add(ClassType.Interface, SetClassGroups); |
|
|
|
|
|
|
|
classTypeGroupCreators.Add(ClassType.Struct, SetClassGroups); |
|
|
|
|
|
|
|
classTypeGroupCreators.Add(ClassType.Enum, SetEnumGroups); |
|
|
|
|
|
|
|
classTypeGroupCreators.Add(ClassType.Delegate, SetDelegateGroups); |
|
|
|
|
|
|
|
//classTypeGroupCreators[ClassType.Module] = SetClassGroups; //???
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void HandleDoubleClick (object sender, EventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
internal void EmitMemberModified(IMemberModificationEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemberModified(this, e); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
internal void EmitParameterModified(IParameterModificationEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ParameterModified(this, e); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
private void BeforeEdit(object sender, TreeListViewBeforeLabelEditEventArgs e) |
|
|
|
private void BeforeEdit(object sender, TreeListViewBeforeLabelEditEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
editedItem = membersList.SelectedItems[0]; |
|
|
|
editedItem = model.Nodes[membersList.SelectedNodes[0].Index]; |
|
|
|
|
|
|
|
|
|
|
|
IMember itemMember = editedItem.Tag as IMember; |
|
|
|
IMember itemMember = editedItem.Tag as IMember; |
|
|
|
IParameter itemParameter = editedItem.Tag as IParameter; |
|
|
|
IParameter itemParameter = editedItem.Tag as IParameter; |
|
|
|
@ -202,10 +387,10 @@ namespace ClassDiagram |
|
|
|
e.Cancel = true; |
|
|
|
e.Cancel = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
private void AfterEdit (object sender, TreeListViewLabelEditEventArgs e) |
|
|
|
private void AfterEdit (object sender, TreeListViewLabelEditEventArgs e) |
|
|
|
{ |
|
|
|
{ |
|
|
|
IProjectContent pc = ProjectService.CurrentProject.CreateProjectContent(); |
|
|
|
/* |
|
|
|
Modification modification = Modification.None; |
|
|
|
Modification modification = Modification.None; |
|
|
|
if (e.ColumnIndex == nameCol.Index) |
|
|
|
if (e.ColumnIndex == nameCol.Index) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -229,7 +414,9 @@ namespace ClassDiagram |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (e.Cancel) return; |
|
|
|
if (e.Cancel) return; |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
/* |
|
|
|
|
|
|
|
IProjectContent pc = ProjectService.CurrentProject.CreateProjectContent(); |
|
|
|
IMember member = null; |
|
|
|
IMember member = null; |
|
|
|
|
|
|
|
|
|
|
|
if (addMemberItems.ContainsValue(editedItem)) |
|
|
|
if (addMemberItems.ContainsValue(editedItem)) |
|
|
|
@ -268,7 +455,8 @@ namespace ClassDiagram |
|
|
|
ClassMemberAdded(this, memberargs); |
|
|
|
ClassMemberAdded(this, memberargs); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
/* |
|
|
|
member = editedItem.Tag as IMember; |
|
|
|
member = editedItem.Tag as IMember; |
|
|
|
IParameter parameter = editedItem.Tag as IParameter; |
|
|
|
IParameter parameter = editedItem.Tag as IParameter; |
|
|
|
if (member != null) |
|
|
|
if (member != null) |
|
|
|
@ -295,6 +483,7 @@ namespace ClassDiagram |
|
|
|
{ |
|
|
|
{ |
|
|
|
e.Cancel = true; |
|
|
|
e.Cancel = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void SetClassGroups (IClass classType) |
|
|
|
private void SetClassGroups (IClass classType) |
|
|
|
@ -317,7 +506,7 @@ namespace ClassDiagram |
|
|
|
public void SetClass (IClass classType) |
|
|
|
public void SetClass (IClass classType) |
|
|
|
{ |
|
|
|
{ |
|
|
|
membersList.BeginUpdate(); |
|
|
|
membersList.BeginUpdate(); |
|
|
|
membersList.Items.Clear(); |
|
|
|
model.Nodes.Clear(); |
|
|
|
|
|
|
|
|
|
|
|
currClass = classType; |
|
|
|
currClass = classType; |
|
|
|
if (classType != null) |
|
|
|
if (classType != null) |
|
|
|
@ -326,15 +515,15 @@ namespace ClassDiagram |
|
|
|
membersList.EndUpdate(); |
|
|
|
membersList.EndUpdate(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private TreeListViewItem AddGroup<MT>(string title, ICollection<MT> members) where MT : IMember |
|
|
|
private Node AddGroup<MT>(string title, ICollection<MT> members) where MT : IMember |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (members == null) return null; |
|
|
|
if (members == null) return null; |
|
|
|
|
|
|
|
GroupNode group = new GroupNode(typeof(MT), title); |
|
|
|
TreeListViewItem group = new TreeListViewItem(title); |
|
|
|
//TreeListViewItem group = new TreeListViewItem(title);
|
|
|
|
group.ForeColor = Color.Gray; |
|
|
|
// group.ForeColor = Color.Gray;
|
|
|
|
group.Font = new Font(group.Font, FontStyle.Bold); |
|
|
|
// group.Font = new Font(group.Font, FontStyle.Bold);
|
|
|
|
group.Items.Sortable = false; |
|
|
|
// group.Items.Sortable = false;
|
|
|
|
group.Tag = typeof(MT); |
|
|
|
// group.Tag = typeof(MT);
|
|
|
|
|
|
|
|
|
|
|
|
IAmbience ambience = GetAmbience(); |
|
|
|
IAmbience ambience = GetAmbience(); |
|
|
|
|
|
|
|
|
|
|
|
@ -342,77 +531,28 @@ namespace ClassDiagram |
|
|
|
{ |
|
|
|
{ |
|
|
|
foreach (IMember member in members) |
|
|
|
foreach (IMember member in members) |
|
|
|
{ |
|
|
|
{ |
|
|
|
TreeListViewItem memberItem = CreateMemberItem(member, ambience); |
|
|
|
MemberNode memberItem = CreateMemberItem(member, ambience); |
|
|
|
|
|
|
|
group.Nodes.Add(memberItem); |
|
|
|
IMethod methodMember = memberItem.Tag as IMethod; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
group.Items.Add(memberItem); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IMethod methodMember = memberItem.Member as IMethod; |
|
|
|
if (methodMember != null) |
|
|
|
if (methodMember != null) |
|
|
|
FillParams (memberItem, methodMember); |
|
|
|
FillParams (memberItem, methodMember); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
memberItem.SubItems.Add(ambience.Convert(member.ReturnType)); |
|
|
|
|
|
|
|
memberItem.SubItems.Add(member.Modifiers.ToString()); |
|
|
|
|
|
|
|
memberItem.SubItems.Add(GetSummary(member)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
AddAddItem(typeof(MT), group); |
|
|
|
AddAddItem(typeof(MT), group); |
|
|
|
|
|
|
|
|
|
|
|
membersList.Items.Add(group); |
|
|
|
model.Nodes.Add(group); |
|
|
|
return group; |
|
|
|
return group; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private TreeListViewItem CreateMemberItem(IMember member, IAmbience ambience) |
|
|
|
private MemberNode CreateMemberItem(IMember member, IAmbience ambience) |
|
|
|
{ |
|
|
|
{ |
|
|
|
IMethod methodMember = member as IMethod; |
|
|
|
MemberNode memberItem = new MemberNode(member, ambience, this); |
|
|
|
IEvent eventMember = member as IEvent; |
|
|
|
|
|
|
|
IProperty propertyMember = member as IProperty; |
|
|
|
|
|
|
|
IField fieldMember = member as IField; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int icon = -1; |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
icon = ClassBrowserIconService.GetIcon(member); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch {} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string memberName = ""; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (methodMember != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (methodMember.IsConstructor) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (methodMember.DeclaringType != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
memberName = methodMember.DeclaringType.Name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
memberName = methodMember.Name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
memberName = methodMember.Name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (eventMember != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
memberName = eventMember.Name; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (propertyMember != null) memberName = ambience.Convert(propertyMember); |
|
|
|
|
|
|
|
if (fieldMember != null) memberName = ambience.Convert(fieldMember); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TreeListViewItem memberItem = new TreeListViewItem(memberName, icon); |
|
|
|
|
|
|
|
memberItem.Items.Sortable = false; |
|
|
|
|
|
|
|
memberItem.Items.SortOrder = SortOrder.None; |
|
|
|
|
|
|
|
memberItem.Tag = member; |
|
|
|
|
|
|
|
return memberItem; |
|
|
|
return memberItem; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void AddAddItem(Type memberType, TreeListViewItem group) |
|
|
|
private void AddAddItem(Type memberType, GroupNode group) |
|
|
|
{ |
|
|
|
{ |
|
|
|
string str = ""; |
|
|
|
string str = ""; |
|
|
|
|
|
|
|
|
|
|
|
@ -421,54 +561,65 @@ namespace ClassDiagram |
|
|
|
else if (memberType == typeof(IProperty)) str = "<add property>"; |
|
|
|
else if (memberType == typeof(IProperty)) str = "<add property>"; |
|
|
|
else if (memberType == typeof(IField)) str = "<add field>"; |
|
|
|
else if (memberType == typeof(IField)) str = "<add field>"; |
|
|
|
|
|
|
|
|
|
|
|
TreeListViewItem addNewMember = new TreeListViewItem(str); |
|
|
|
Node addNewMember = new Node(str); // TODO set color
|
|
|
|
addNewMember.ForeColor = SystemColors.GrayText; |
|
|
|
//addNewMember.ForeColor = SystemColors.GrayText;
|
|
|
|
group.Items.Add(addNewMember); |
|
|
|
group.Nodes.Add(addNewMember); |
|
|
|
addMemberItems[memberType] = addNewMember; |
|
|
|
addMemberItems[memberType] = addNewMember; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void ConvertAddItemToMemberItem(TreeListViewItem addItem, IMember member, IAmbience ambience) |
|
|
|
private void ConvertAddItemToMemberItem(Node addItem, IMember member, IAmbience ambience) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
//addItem.
|
|
|
|
|
|
|
|
// addItem.ForeColor = SystemColors.ControlText;
|
|
|
|
|
|
|
|
// addItem.SubItems.Add(ambience.Convert(member.ReturnType));
|
|
|
|
|
|
|
|
// addItem.SubItems.Add(member.Modifiers.ToString());
|
|
|
|
|
|
|
|
// addItem.SubItems.Add(GetSummary(member));
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static string GetSummary (IDecoration decoration) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return GetSummary(decoration.Documentation, @"/docroot/summary"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static string GetSummary (IParameter parameter) |
|
|
|
{ |
|
|
|
{ |
|
|
|
addItem.ForeColor = SystemColors.ControlText; |
|
|
|
return GetSummary(parameter.Documentation, @"/docroot/param[@name='"+parameter.Name+"']"); |
|
|
|
addItem.SubItems.Add(ambience.Convert(member.ReturnType)); |
|
|
|
|
|
|
|
addItem.SubItems.Add(member.Modifiers.ToString()); |
|
|
|
|
|
|
|
addItem.SubItems.Add(GetSummary(member)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private string GetSummary (IDecoration decoration) |
|
|
|
private static string GetSummary (string documentation, string xpath) |
|
|
|
{ |
|
|
|
{ |
|
|
|
StringReader strReader = new StringReader("<docroot>" + decoration.Documentation + "</docroot>"); |
|
|
|
StringReader strReader = new StringReader("<docroot>" + documentation + "</docroot>"); |
|
|
|
XmlDocument doc = new XmlDocument(); |
|
|
|
XmlDocument doc = new XmlDocument(); |
|
|
|
doc.Load(strReader); |
|
|
|
doc.Load(strReader); |
|
|
|
XPathNavigator nav = doc.CreateNavigator(); |
|
|
|
XPathNavigator nav = doc.CreateNavigator(); |
|
|
|
XPathNodeIterator ni = nav.Select(@"/docroot/summary"); |
|
|
|
XPathNodeIterator ni = nav.Select(xpath); |
|
|
|
if (ni.MoveNext()) |
|
|
|
if (ni.MoveNext()) |
|
|
|
return ni.Current.InnerXml; |
|
|
|
return ni.Current.InnerXml; |
|
|
|
else |
|
|
|
else |
|
|
|
return String.Empty; |
|
|
|
return String.Empty; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void FillParams(TreeListViewItem item, IMethod method) |
|
|
|
private void FillParams(MemberNode item, IMethod method) |
|
|
|
{ |
|
|
|
{ |
|
|
|
string imageKey = "OpenBrace"; |
|
|
|
Image comma = (Image)resources.GetObject("Comma"); |
|
|
|
|
|
|
|
Image openBrace = (Image)resources.GetObject("OpenBrace"); |
|
|
|
|
|
|
|
Image closeBrace = (Image)resources.GetObject("CloseBrace"); |
|
|
|
|
|
|
|
Image emptyBraces = (Image)resources.GetObject("EmptyBraces"); |
|
|
|
|
|
|
|
Image currentImage = openBrace; |
|
|
|
foreach (IParameter param in method.Parameters) |
|
|
|
foreach (IParameter param in method.Parameters) |
|
|
|
{ |
|
|
|
{ |
|
|
|
TreeListViewItem parameter = new TreeListViewItem(param.Name); |
|
|
|
ParameterNode parameter = new ParameterNode(param, GetAmbience(), currentImage, this); |
|
|
|
parameter.ImageKey = imageKey; |
|
|
|
currentImage = comma; |
|
|
|
parameter.SubItems.Add (param.ReturnType.Name); |
|
|
|
item.Nodes.Add(parameter); |
|
|
|
parameter.SubItems.Add (param.Modifiers.ToString()); |
|
|
|
} |
|
|
|
parameter.SubItems.Add (param.Documentation); |
|
|
|
if (currentImage == openBrace) |
|
|
|
item.Items.Add(parameter); |
|
|
|
currentImage = emptyBraces; |
|
|
|
parameter.Tag = param; |
|
|
|
|
|
|
|
imageKey = "Comma"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
TreeListViewItem addParam = new TreeListViewItem("<add parameter>"); |
|
|
|
|
|
|
|
if (imageKey == "OpenBrace") |
|
|
|
|
|
|
|
addParam.ImageKey = "EmptyBraces"; |
|
|
|
|
|
|
|
else |
|
|
|
else |
|
|
|
addParam.ImageKey = "CloseBrace"; |
|
|
|
currentImage = closeBrace; |
|
|
|
addParam.ForeColor = Color.Gray; |
|
|
|
|
|
|
|
item.Items.Add (addParam); |
|
|
|
AddParameterNode addParam = new AddParameterNode(currentImage); |
|
|
|
|
|
|
|
// addParam.ForeColor = Color.Gray;
|
|
|
|
|
|
|
|
item.Nodes.Add(addParam); |
|
|
|
addParameterItems[method] = addParam; |
|
|
|
addParameterItems[method] = addParam; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -498,6 +649,69 @@ namespace ClassDiagram |
|
|
|
else |
|
|
|
else |
|
|
|
return null; |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void _modifiersEditorShowing(object sender, CancelEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemberNode memberItem = membersList.SelectedNode.Tag as MemberNode; |
|
|
|
|
|
|
|
ParameterNode parameterItem = membersList.SelectedNode.Tag as ParameterNode; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (memberItem != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Clear(); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ICSharpCode.NRefactory.Ast.Modifiers.Public); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ICSharpCode.NRefactory.Ast.Modifiers.Private); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ICSharpCode.NRefactory.Ast.Modifiers.Protected); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ICSharpCode.NRefactory.Ast.Modifiers.Internal); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (parameterItem != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ParameterModifiers.In); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ParameterModifiers.Out); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ParameterModifiers.Ref); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ParameterModifiers.Params); |
|
|
|
|
|
|
|
_modifiers.DropDownItems.Add(ParameterModifiers.Optional); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
e.Cancel = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MembersListNodeMouseDoubleClick(object sender, TreeNodeAdvMouseEventArgs e) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemberNode memberItem = e.Node.Tag as MemberNode; |
|
|
|
|
|
|
|
if (memberItem == null) return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (addMemberItems.ContainsValue(memberItem)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
/* IAmbience ambience = GetAmbience(); |
|
|
|
|
|
|
|
item.SubItems.Add(ambience.Convert(VoidReturnType.Instance)); |
|
|
|
|
|
|
|
item.SubItems.Add(ModifierEnum.Public.ToString()); |
|
|
|
|
|
|
|
item.SubItems.Add(""); |
|
|
|
|
|
|
|
item.Text = "[method name]"; |
|
|
|
|
|
|
|
item.BeginEdit(0);*/ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else if (addParameterItems.ContainsValue(memberItem)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IParameter itemParameter = memberItem.Member as IParameter; |
|
|
|
|
|
|
|
if (itemParameter != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemberNode methodNode = memberItem.Parent as MemberNode; |
|
|
|
|
|
|
|
if (methodNode != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
IMethod method = methodNode.Member as IMethod; |
|
|
|
|
|
|
|
if (method != null) |
|
|
|
|
|
|
|
ParameterActivated(this, new IParameterEventArgs(method, itemParameter)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
MemberActivated(this, new IMemberEventArgs(memberItem.Member)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public enum Modification { None, Name, Type, Modifier, Summary } |
|
|
|
public enum Modification { None, Name, Type, Modifier, Summary } |
|
|
|
|