Esempio n. 1
0
		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;														  
		}
Esempio n. 2
0
        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);
            }
        }