/// <summary> /// Adds a context menu to a TreeNode control /// </summary> /// <param name="node">TreeNode where to add the context menu</param> /// <param name="form">Current application form</param> public static void AddContextMenu(TreeNode node, ChartEditorHelper form) { var collec = (Dictionary <string, ITLec.CRMChartGuy.Property>)node.Tag; HideAllContextMenuItems(form.nodeMenu); string nodeFullName = TreeNodeHelper.FullNodeName(node); /////////////////////////// var currentSection = Common.ChartStructure.Sections.Where(e => e.Name == nodeFullName).FirstOrDefault(); if (currentSection != null) { var subSections = currentSection.SubSections; foreach (var subSection in subSections) { // node. XmlNode chartEditorXmlNode = form.siteMapDoc.DocumentElement; bool existedSubSection = true; //Add Annotation foreach (XmlNode _node in chartEditorXmlNode.ChildNodes) { if (_node.Name.ToLower() == subSection.Name) { existedSubSection = false; break; } } if (existedSubSection) { ToolStripItem tsi = new ToolStripMenuItem(subSection.Name); tsi.Name = subSection.Name; //// tsi.Click += Tsi_Click; tsi.Click += delegate(object sender, EventArgs e) { subSectionMenuOnClick(sender, e, node); }; form.nodeMenu.Items.Add(tsi); //form.nodeMenu.Items.Add(subSection.Name, null, delegate (object sender, EventArgs e) //{ // subSectionMenuOnClick(sender, e, node); //}); } /* if (addAnotationsNode) * { * * XmlNode annotationNode = siteMapDoc.CreateElement("Annotations"); * XmlNode textAnnotation = siteMapDoc.CreateElement("TextAnnotation"); * annotationNode.AppendChild(textAnnotation); * * chartEditorXmlNode.AppendChild(annotationNode); * }*/ } } //////////////////////////////// switch (node.Text.Split(' ')[0]) { case "Title": case "Description": { form.deleteToolStripMenuItem.Visible = true; form.toolStripSeparatorAction.Visible = true; form.toolStripSeparatorBeginOfEdition.Visible = false; form.cutToolStripMenuItem.Enabled = true; form.copyToolStripMenuItem.Enabled = true; if (node.Parent != null && node.Parent.Nodes.Count == 1) { form.deleteToolStripMenuItem.Enabled = false; } } break; } node.ContextMenuStrip = form.nodeMenu; }
/// <summary> /// Adds a new TreeNode to the parent object from the XmlNode information /// </summary> /// <param name="parentObject">Object (TreeNode or TreeView) where to add a new TreeNode</param> /// <param name="xmlNode">Xml node from the sitemap</param> /// <param name="form">Current application form</param> /// <param name="isDisabled"> </param> public static void AddTreeViewNode(object parentObject, XmlNode xmlNode, ChartEditorHelper form, bool isDisabled = false) { TreeNode node = new TreeNode(xmlNode.Name); Dictionary <string, ITLec.CRMChartGuy.Property> attributes = new Dictionary <string, ITLec.CRMChartGuy.Property>(); if (xmlNode.NodeType != XmlNodeType.Text) { foreach (XmlAttribute attr in xmlNode.Attributes) { if (attr.Name == "CustomProperties") { TreeNode customNode = new TreeNode("CustomProperties"); Dictionary <string, ITLec.CRMChartGuy.Property> customAttributes = new Dictionary <string, ITLec.CRMChartGuy.Property>(); //todo string[] propertyItems = attr.Value.Replace(" ","").Split(','); string[] propertyItems = attr.Value.Split(','); foreach (string propertyItem in propertyItems) { if (!string.IsNullOrEmpty(propertyItem)) { string[] propertyItemStrs = propertyItem.Split('='); string propertyItemKey = propertyItemStrs[0].Trim(); string propertyItemValue = propertyItemStrs[1].Trim(); ITLec.CRMChartGuy.Property pro = new Property() { Value = propertyItemValue, Name = propertyItemKey }; customAttributes.Add(propertyItemKey, pro); } } customNode.Tag = customAttributes; node.Nodes.Add(customNode); } else { ITLec.CRMChartGuy.Property pro = new Property() { Value = attr.Value, Name = attr.Name }; attributes.Add(attr.Name, pro); } if (attr.Name == "ChartType") { ChartEditorHelper.ChartType = attr.Value; } } if (xmlNode.Attributes["Id"] != null) { node.Text += " (" + xmlNode.Attributes["Id"].Value + ")"; } if (xmlNode.Attributes["LCID"] != null) { node.Text += " (" + xmlNode.Attributes["LCID"].Value + ")"; } if (node.Text.ToLower() == "comment") { node.Text = string.Format("# - {0}", xmlNode.InnerText); } } else { node.Text = String.Format("# {0}", xmlNode.InnerText); } node.Name = node.Text.Replace(" ", ""); /* if (isDisabled) * { * if (node.Text.StartsWith("#")) * { * node.ToolTipText = "This is a comment in SiteMap"; * } * else * { * node.ToolTipText = * "This node is disabled and won't appear in Microsoft Dynamics CRM 2011. Right click this node and enable it and make it appear on Microsoft Dynamics CRM 2011"; * node.Text += " - disabled"; * attributes.Add("_disabled", "true"); * } * node.ForeColor = Color.Gray; * }*/ node.Tag = attributes; AddContextMenu(node, form); if (parentObject is TreeView) { ((TreeView)parentObject).Nodes.Add(node); } else if (parentObject is TreeNode) { ((TreeNode)parentObject).Nodes.Add(node); } else { throw new Exception("AddTreeViewNode: Unsupported control type"); } foreach (XmlNode childNode in xmlNode.ChildNodes) { if (childNode.NodeType == XmlNodeType.Comment) { var commentDoc = new XmlDocument(); try { commentDoc.LoadXml(childNode.InnerText); AddTreeViewNode(node, commentDoc.DocumentElement, form, true); } catch { commentDoc.LoadXml("<comment>" + childNode.InnerText + "</comment>"); foreach (XmlNode commentChildNode in commentDoc.DocumentElement.ChildNodes) { AddTreeViewNode(node, commentChildNode, form, true); } } } else if (childNode.NodeType == XmlNodeType.Element) { AddTreeViewNode(node, childNode, form); } else if (childNode.NodeType == XmlNodeType.Text) { var tvChildNode = new TreeNode("#" + childNode.InnerText); node.Nodes.Add(tvChildNode); } } }