From 1b325f01ae7a1ddeab56b66255903bc1daebb34f Mon Sep 17 00:00:00 2001 From: Itar Bar-Haim Date: Fri, 23 Feb 2007 16:40:59 +0000 Subject: [PATCH] Switching to use TreeViewAdv instead of TreeListView. Work in progress. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2393 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../ClassEditor/ClassEditor.Designer.cs | 109 ++++ .../ClassDiagram/ClassEditor/ClassEditor.cs | 554 ++++++++++++------ .../ClassEditor/ClassEditor.csproj | 16 + .../ClassDiagram/ClassEditor/ClassEditor.resx | 37 -- 4 files changed, 509 insertions(+), 207 deletions(-) diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.Designer.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.Designer.cs index 661144745d..4e579665d1 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.Designer.cs +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.Designer.cs @@ -36,15 +36,124 @@ namespace ClassDiagram /// private void InitializeComponent() { + this.membersList = new Aga.Controls.Tree.TreeViewAdv(); + this.nameCol = new Aga.Controls.Tree.TreeColumn(); + this.typeCol = new Aga.Controls.Tree.TreeColumn(); + this.modifierCol = new Aga.Controls.Tree.TreeColumn(); + this.summaryCol = new Aga.Controls.Tree.TreeColumn(); + this._icon = new Aga.Controls.Tree.NodeControls.NodeIcon(); + this._name = new Aga.Controls.Tree.NodeControls.NodeTextBox(); + this._type = new Aga.Controls.Tree.NodeControls.NodeComboBox(); + this._modifiers = new Aga.Controls.Tree.NodeControls.NodeComboBox(); + this._summary = new Aga.Controls.Tree.NodeControls.NodeTextBox(); this.SuspendLayout(); // + // membersList + // + this.membersList.BackColor = System.Drawing.SystemColors.Window; + this.membersList.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.membersList.Columns.Add(this.nameCol); + this.membersList.Columns.Add(this.typeCol); + this.membersList.Columns.Add(this.modifierCol); + this.membersList.Columns.Add(this.summaryCol); + this.membersList.Cursor = System.Windows.Forms.Cursors.Default; + this.membersList.DefaultToolTipProvider = null; + this.membersList.Dock = System.Windows.Forms.DockStyle.Fill; + this.membersList.DragDropMarkColor = System.Drawing.Color.Black; + this.membersList.FullRowSelect = true; + this.membersList.LineColor = System.Drawing.SystemColors.ControlDark; + this.membersList.Location = new System.Drawing.Point(0, 0); + this.membersList.Model = null; + this.membersList.Name = "membersList"; + this.membersList.NodeControls.Add(this._icon); + this.membersList.NodeControls.Add(this._name); + this.membersList.NodeControls.Add(this._type); + this.membersList.NodeControls.Add(this._modifiers); + this.membersList.NodeControls.Add(this._summary); + this.membersList.Search.BackColor = System.Drawing.Color.Pink; + this.membersList.Search.FontColor = System.Drawing.Color.Black; + this.membersList.SelectedNode = null; + this.membersList.ShowLines = false; + this.membersList.Size = new System.Drawing.Size(603, 299); + this.membersList.TabIndex = 0; + this.membersList.Text = "treeViewAdv1"; + this.membersList.UseColumns = true; + this.membersList.NodeMouseDoubleClick += new System.EventHandler(this.MembersListNodeMouseDoubleClick); + // + // nameCol + // + this.nameCol.Header = "Name"; + this.nameCol.SortOrder = System.Windows.Forms.SortOrder.None; + this.nameCol.Width = 80; + // + // typeCol + // + this.typeCol.Header = "Type"; + this.typeCol.SortOrder = System.Windows.Forms.SortOrder.None; + this.typeCol.Width = 80; + // + // modifierCol + // + this.modifierCol.Header = "Modifier"; + this.modifierCol.SortOrder = System.Windows.Forms.SortOrder.None; + this.modifierCol.Width = 80; + // + // summaryCol + // + this.summaryCol.Header = "Summary"; + this.summaryCol.SortOrder = System.Windows.Forms.SortOrder.None; + this.summaryCol.Width = 320; + // + // _icon + // + this._icon.DataPropertyName = "MemberIcon"; + this._icon.IncrementalSearchEnabled = false; + this._icon.ParentColumn = this.nameCol; + // + // _name + // + this._name.DataPropertyName = "MemberName"; + this._name.EditEnabled = true; + this._name.ParentColumn = this.nameCol; + // + // _type + // + this._type.DataPropertyName = "MemberType"; + this._type.EditEnabled = true; + this._type.ParentColumn = this.typeCol; + // + // _modifiers + // + this._modifiers.DataPropertyName = "MemberModifier"; + this._modifiers.EditEnabled = true; + this._modifiers.ParentColumn = this.modifierCol; + this._modifiers.EditorShowing += new System.ComponentModel.CancelEventHandler(this._modifiersEditorShowing); + // + // _summary + // + this._summary.DataPropertyName = "MemberSummary"; + this._summary.EditEnabled = true; + this._summary.ParentColumn = this.summaryCol; + this._summary.Trimming = System.Drawing.StringTrimming.EllipsisCharacter; + // // ClassEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.membersList); this.Name = "ClassEditor"; this.Size = new System.Drawing.Size(603, 299); this.ResumeLayout(false); } + private Aga.Controls.Tree.NodeControls.NodeIcon _icon; + private Aga.Controls.Tree.NodeControls.NodeComboBox _modifiers; + private Aga.Controls.Tree.NodeControls.NodeComboBox _type; + private Aga.Controls.Tree.NodeControls.NodeTextBox _summary; + private Aga.Controls.Tree.NodeControls.NodeTextBox _name; + private Aga.Controls.Tree.TreeViewAdv membersList; + private Aga.Controls.Tree.TreeColumn nameCol; + private Aga.Controls.Tree.TreeColumn typeCol; + private Aga.Controls.Tree.TreeColumn modifierCol; + private Aga.Controls.Tree.TreeColumn summaryCol; } } diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs index 15662a65e9..d11d863dfe 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.cs @@ -23,23 +23,20 @@ using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.TextEditor; +using Aga.Controls.Tree; +using Aga.Controls.Tree.NodeControls; namespace ClassDiagram { - /// - /// Description of UserControl1. - /// 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(); - Dictionary addParameterItems = new Dictionary(); + Dictionary addMemberItems = new Dictionary(); + Dictionary addParameterItems = new Dictionary(); Dictionary> classTypeGroupCreators = new Dictionary>(); IClass currClass; @@ -52,107 +49,295 @@ namespace ClassDiagram public event EventHandler ClassMemberAdded = delegate {}; - TreeListViewItem editedItem = null; + TreeModel model = new TreeModel(); - ColumnHeader nameCol; - ColumnHeader typeCol; - ColumnHeader modifierCol; - ColumnHeader summaryCol; + //TreeListViewItem editedItem = null; + /* + TreeColumn nameCol = new TreeColumn("Name", 100); + TreeColumn typeCol = new TreeColumn("Type", 100); + TreeColumn modifierCol = new TreeColumn("Modifier", 100); + TreeColumn summaryCol = new TreeColumn("Summary", 100); + */ - public ClassEditor() + private class GroupNode : Node { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); + public GroupNode(Type groupType, string title) + : base (title) + { + this.groupType = groupType; + } - nameCol = membersList.Columns.Add("Name"); - typeCol = membersList.Columns.Add("Type"); - modifierCol = membersList.Columns.Add("Modifier"); - summaryCol = membersList.Columns.Add("Summary"); + Type groupType; - nameCol.Width = 160; - typeCol.Width = 100; - modifierCol.Width = 100; - summaryCol.Width = 200; + public Type GroupType { + get { return groupType; } + } - 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. - 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.LabelEdit = true; - membersList.Sorting = SortOrder.None; - membersList.ShowPlusMinus = true; - membersList.FullRowSelect = true; + void UpdateValues() + { + IMethod methodMember = member as IMethod; + IEvent eventMember = member as IEvent; + IProperty propertyMember = member as IProperty; + IField fieldMember = member as IField; + + int iconIndex = -1; + try + { + 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; - membersList.HeaderStyle = ColumnHeaderStyle.Nonclickable; + IAmbience ambience; + IMember member; + ClassEditor editor; - membersList.DoubleClick += HandleDoubleClick; - membersList.BeforeLabelEdit += BeforeEdit; - membersList.AfterLabelEdit += AfterEdit; + public IMember Member + { + get { return member; } + set { member = value; UpdateValues(); } + } - Controls.Add(membersList); - membersList.Dock = DockStyle.Fill; + private string memberName; + public string MemberName + { + get { return memberName; } + set + { + IMemberModificationEventArgs mmea = new IMemberModificationEventArgs(member, Modification.Name, value); + editor.EmitMemberModified(mmea); + } + } - 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; //??? + protected Image icon; + public Image MemberIcon + { + get { return icon; } + } + + 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(); - item.SubItems.Add(ambience.Convert(VoidReturnType.Instance)); - item.SubItems.Add(ModifierEnum.Public.ToString()); - item.SubItems.Add(""); - item.Text = "[method name]"; - item.BeginEdit(0);*/ + get { return parameter.Name; } + set + { + IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, Modification.Name, value); + editor.EmitParameterModified(pmea); + } + } + + 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; - IParameter itemParameter = item.Tag as IParameter; - if (itemMember != null) + get { return parameter.Modifiers.ToString(); } + set { - 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; - if (method != null) - ParameterActivated(this, new IParameterEventArgs(method, itemParameter)); + IParameterModificationEventArgs pmea = new IParameterModificationEventArgs(method, parameter, Modification.Summary, value); + editor.EmitParameterModified(pmea); } } } + private class AddParameterNode : Node + { + public AddParameterNode (Image icon) : base ("") + { + 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) { - editedItem = membersList.SelectedItems[0]; + editedItem = model.Nodes[membersList.SelectedNodes[0].Index]; IMember itemMember = editedItem.Tag as IMember; IParameter itemParameter = editedItem.Tag as IParameter; @@ -202,10 +387,10 @@ namespace ClassDiagram e.Cancel = true; } } - + */ private void AfterEdit (object sender, TreeListViewLabelEditEventArgs e) { - IProjectContent pc = ProjectService.CurrentProject.CreateProjectContent(); + /* Modification modification = Modification.None; if (e.ColumnIndex == nameCol.Index) { @@ -229,7 +414,9 @@ namespace ClassDiagram } if (e.Cancel) return; - + */ + /* + IProjectContent pc = ProjectService.CurrentProject.CreateProjectContent(); IMember member = null; if (addMemberItems.ContainsValue(editedItem)) @@ -268,7 +455,8 @@ namespace ClassDiagram ClassMemberAdded(this, memberargs); return; } - + */ + /* member = editedItem.Tag as IMember; IParameter parameter = editedItem.Tag as IParameter; if (member != null) @@ -295,6 +483,7 @@ namespace ClassDiagram { e.Cancel = true; } + */ } private void SetClassGroups (IClass classType) @@ -317,7 +506,7 @@ namespace ClassDiagram public void SetClass (IClass classType) { membersList.BeginUpdate(); - membersList.Items.Clear(); + model.Nodes.Clear(); currClass = classType; if (classType != null) @@ -326,15 +515,15 @@ namespace ClassDiagram membersList.EndUpdate(); } - private TreeListViewItem AddGroup(string title, ICollection members) where MT : IMember + private Node AddGroup(string title, ICollection members) where MT : IMember { if (members == null) return null; - - TreeListViewItem group = new TreeListViewItem(title); - group.ForeColor = Color.Gray; - group.Font = new Font(group.Font, FontStyle.Bold); - group.Items.Sortable = false; - group.Tag = typeof(MT); + GroupNode group = new GroupNode(typeof(MT), title); + //TreeListViewItem group = new TreeListViewItem(title); +// group.ForeColor = Color.Gray; +// group.Font = new Font(group.Font, FontStyle.Bold); +// group.Items.Sortable = false; +// group.Tag = typeof(MT); IAmbience ambience = GetAmbience(); @@ -342,77 +531,28 @@ namespace ClassDiagram { foreach (IMember member in members) { - TreeListViewItem memberItem = CreateMemberItem(member, ambience); - - IMethod methodMember = memberItem.Tag as IMethod; - - group.Items.Add(memberItem); + MemberNode memberItem = CreateMemberItem(member, ambience); + group.Nodes.Add(memberItem); + IMethod methodMember = memberItem.Member as IMethod; if (methodMember != null) 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); - membersList.Items.Add(group); + model.Nodes.Add(group); return group; } - private TreeListViewItem CreateMemberItem(IMember member, IAmbience ambience) + private MemberNode CreateMemberItem(IMember member, IAmbience ambience) { - IMethod methodMember = member as IMethod; - 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; + MemberNode memberItem = new MemberNode(member, ambience, this); return memberItem; } - private void AddAddItem(Type memberType, TreeListViewItem group) + private void AddAddItem(Type memberType, GroupNode group) { string str = ""; @@ -421,54 +561,65 @@ namespace ClassDiagram else if (memberType == typeof(IProperty)) str = ""; else if (memberType == typeof(IField)) str = ""; - TreeListViewItem addNewMember = new TreeListViewItem(str); - addNewMember.ForeColor = SystemColors.GrayText; - group.Items.Add(addNewMember); + Node addNewMember = new Node(str); // TODO set color + //addNewMember.ForeColor = SystemColors.GrayText; + group.Nodes.Add(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; - addItem.SubItems.Add(ambience.Convert(member.ReturnType)); - addItem.SubItems.Add(member.Modifiers.ToString()); - addItem.SubItems.Add(GetSummary(member)); + return GetSummary(parameter.Documentation, @"/docroot/param[@name='"+parameter.Name+"']"); } - private string GetSummary (IDecoration decoration) + private static string GetSummary (string documentation, string xpath) { - StringReader strReader = new StringReader("" + decoration.Documentation + ""); + StringReader strReader = new StringReader("" + documentation + ""); XmlDocument doc = new XmlDocument(); doc.Load(strReader); XPathNavigator nav = doc.CreateNavigator(); - XPathNodeIterator ni = nav.Select(@"/docroot/summary"); + XPathNodeIterator ni = nav.Select(xpath); if (ni.MoveNext()) return ni.Current.InnerXml; else 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) { - 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(""); - if (imageKey == "OpenBrace") - addParam.ImageKey = "EmptyBraces"; + ParameterNode parameter = new ParameterNode(param, GetAmbience(), currentImage, this); + currentImage = comma; + item.Nodes.Add(parameter); + } + if (currentImage == openBrace) + currentImage = emptyBraces; else - addParam.ImageKey = "CloseBrace"; - addParam.ForeColor = Color.Gray; - item.Items.Add (addParam); + currentImage = closeBrace; + + AddParameterNode addParam = new AddParameterNode(currentImage); + // addParam.ForeColor = Color.Gray; + item.Nodes.Add(addParam); addParameterItems[method] = addParam; } @@ -498,6 +649,69 @@ namespace ClassDiagram else 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 } diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj index 0dc3c1b02a..b9134c3cf4 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.csproj @@ -56,6 +56,10 @@ {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} NRefactory + + {E73BB233-D88B-44A7-A98F-D71EE158381D} + Aga.Controls + {2748AD25-9C63-4E12-877B-4DCE96FBED54} ICSharpCode.SharpDevelop @@ -71,10 +75,22 @@ ICSharpCode.SharpDevelop.Dom False + + {8035765F-D51F-4A0C-A746-2FD100E19419} + ICSharpCode.SharpDevelop.Widgets + + + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} + AddinScout + {B08385CD-F0CC-488C-B4F4-EEB34B6D2688} TreeListView + + {1F261725-6318-4434-A1B1-6C70CE4CD324} + UnitTesting + \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.resx b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.resx index 65b73a8485..7080a7d118 100644 --- a/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.resx +++ b/src/AddIns/DisplayBindings/ClassDiagram/ClassEditor/ClassEditor.resx @@ -117,41 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Qk32AAAAAAAAAHYAAAAoAAAAEAAAABAAAAABAAQAAAAAAAAAAADEDgAAxA4AABAAAAAQAAAAAAAA/wAA - gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD///////// - ////////////8I/////////4CP////////8H/////////wD/////////AP////////8A/////////wD/ - ////////AP////////8A/////////wD/////////AP////////8H////////+Aj////////wj/////// - //////// - - - - - Qk32AAAAAAAAAHYAAAAoAAAAEAAAABAAAAABAAQAAAAAAAAAAADEDgAAxA4AABAAAAAQAAAAAAAA/wAA - gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD///////// - ////////////8A//////////AP////////8A//////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////// - - - - - Qk32AAAAAAAAAHYAAAAoAAAAEAAAABAAAAABAAQAAAAAAAAAAADEDgAAxA4AABAAAAAQAAAAAAAA/wAA - gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD///////// - ////////////+A////////+Aj////////3D/////////AP////////8A/////////wD/////////AP// - //////8A/////////wD/////////AP////////8A/////////3D/////////gI/////////4D/////// - //////// - - - - - Qk32AAAAAAAAAHYAAAAoAAAAEAAAABAAAAABAAQAAAAAAAAAAADEDgAAxA4AABAAAAAQAAAAAAAA/wAA - gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD///////// - //////////+A//8I////+Aj//4CP///3D///8H////AP///wD///8A////AP///wD///8A////AP///w - D///8A////AP///wD///8A////AP///wD///8A////AP///3D///8H////gI//+Aj////4D//wj///// - //////// - - \ No newline at end of file