public ContextMenu BuildContextMenu(TreeNode tn, NodeDef n) { ContextMenu cm = new ContextMenu(); bool first = true; // Populate from this node's popup collection. if (n.PopupItems.Count != 0) { foreach (Popup popup in n.PopupItems) { NodeMenuItem nmi = new NodeMenuItem(popup.Text, tn, n, null, popup); if (popup.PopupItems.Count == 0) { nmi.Click += new EventHandler(OnContextItem); nmi.Enabled = ((NodeInstance)tn.Tag).Instance.IsEnabled(popup.Tag, popup.Enabled); } BuildChildPopups(nmi, popup, tn, n, null); cm.MenuItems.Add(nmi); } first = false; } // For each child node, populate from the child's ParentPopupItems collection. foreach (NodeDef child in n.Nodes) { NodeDef refNode = child; // Resolve any referenced node. if (child.IsRef) { if (!nodeList.ContainsKey(child.RefName)) { throw new ApplicationException("referenced node does not exist."); } refNode = nodeList[child.RefName]; } if (refNode.ParentPopupItems.Count != 0) { if (!first) { if (child.Separator) { cm.MenuItems.Add(new NodeMenuItem("-", tn, n, null, null)); } } first = false; // Populate the items. foreach (Popup popup in refNode.ParentPopupItems) { NodeMenuItem nmi = new NodeMenuItem(popup.Text, tn, n, refNode, popup); if (popup.PopupItems.Count == 0) { nmi.Click += new EventHandler(OnContextItem); nmi.Enabled = ((NodeInstance)tn.Tag).Instance.IsEnabled(popup.Tag, popup.Enabled); } BuildChildPopups(nmi, popup, tn, n, refNode); cm.MenuItems.Add(nmi); //NodeMenuItem nmi = new NodeMenuItem(popup.Text, tn, n, refNode, popup); //nmi.Click += new EventHandler(OnContextItem); //nmi.Enabled = ((NodeInstance)tn.Tag).Instance.IsEnabled(popup.Tag, popup.Enabled); //cm.MenuItems.Add(nmi); } } } // Add custom items. NodeMenuItem spacer = new NodeMenuItem("-", tn, n, null, null); cm.MenuItems.Add(spacer); NodeMenuItem collapse = new NodeMenuItem("Collapse", tn, n, null, null); collapse.Click += new EventHandler(OnCollapse); cm.MenuItems.Add(collapse); NodeMenuItem expand = new NodeMenuItem("Expand", tn, n, null, null); expand.Click += new EventHandler(OnExpand); cm.MenuItems.Add(expand); NodeMenuItem expandAll = new NodeMenuItem("Expand All", tn, n, null, null); expandAll.Click += new EventHandler(OnExpandAll); cm.MenuItems.Add(expandAll); return cm; }
protected void BuildChildPopups(NodeMenuItem nmi, Popup popup, TreeNode tn, NodeDef n, NodeDef refNode) { foreach (Popup childPopup in popup.PopupItems) { NodeMenuItem nmiChild = new NodeMenuItem(childPopup.Text, tn, n, refNode, childPopup); if (childPopup.PopupItems.Count == 0) { nmiChild.Click += new EventHandler(OnContextItem); nmiChild.Enabled = ((NodeInstance)tn.Tag).Instance.IsEnabled(childPopup.Tag, childPopup.Enabled); } BuildChildPopups(nmiChild, childPopup, tn, n, refNode); nmi.MenuItems.Add(nmiChild); } }