示例#1
0
        /// <summary>Adds a context menu to a TreeNode control</summary>
        /// <param name="node">TreeNode where to add the context menu</param>
        /// <param name="tree">Current application form</param>
        public static void AddContextMenu(TreeNode node, TreeBuilderControl tree, QueryOptions options)
        {
            tree.addMenu.Items.Clear();
            var tmplbl = tree.lblQAExpander;

            tree.gbQuickActions.Controls.Clear();
            tree.gbQuickActions.Controls.Add(tmplbl);
            if (node == null && tree.tvFetch.Nodes.Count > 0)
            {
                node = tree.tvFetch.Nodes[0];
            }
            if (node != null)
            {
                var nodecapabilities = new FetchNodeCapabilities(node.Name, true);

                if (nodecapabilities.Multiple)
                {
                    tree.addOneMoreToolStripMenuItem.Text = "More " + nodecapabilities.Name;
                    tree.addOneMoreToolStripMenuItem.Tag  = "MORE-" + nodecapabilities.Name;
                    AddLinkFromCapability(tree, "+" + nodecapabilities.Name, "MORE-" + nodecapabilities.Name);
                }
                if (nodecapabilities.Attributes && tree.selectAttributesToolStripMenuItem.Enabled)
                {
                    AddLinkFromCapability(tree, "Select Attributes", "SelectAttributes");
                }
                foreach (var childcapability in nodecapabilities.ChildTypes)
                {
                    if (childcapability.Name == "all-attributes" && !options.ShowAllAttributes)
                    {
                        continue;
                    }
                    if (childcapability.Name == "-")
                    {
                        tree.addMenu.Items.Add(new ToolStripSeparator());
                    }
                    else if (childcapability.Multiple || !node.Nodes.ContainsKey(childcapability.Name))
                    {
                        AddMenuFromCapability(tree.addMenu, childcapability.Name);
                        AddLinkFromCapability(tree, childcapability.Name, null, childcapability.Name == "#comment");
                    }
                }
                if (tree.addMenu.Items.Count == 0)
                {
                    var dummy = tree.addMenu.Items.Add("nothing to add");
                    dummy.Enabled = false;
                }

                tree.addOneMoreToolStripMenuItem.Visible       = nodecapabilities.Multiple;
                tree.selectAttributesToolStripMenuItem.Visible = nodecapabilities.Attributes;
                tree.deleteToolStripMenuItem.Enabled           = nodecapabilities.Delete;
                tree.commentToolStripMenuItem.Enabled          = nodecapabilities.Comment;
                tree.uncommentToolStripMenuItem.Enabled        = nodecapabilities.Uncomment;

                node.ContextMenuStrip = tree.nodeMenu;
            }
        }
示例#2
0
        internal static TreeNode AddChildNode(TreeNode parentNode, string name, FetchXmlBuilder fxb, TreeNode sisterNode = null)
        {
            var childNode = new TreeNode(name);

            childNode.Tag  = new Dictionary <string, string>();
            childNode.Name = childNode.Text.Replace(" ", "");
            if (name == "#comment")
            {
                childNode.ForeColor = System.Drawing.Color.Gray;
            }
            if (parentNode != null)
            {
                if (sisterNode != null)
                {
                    parentNode.Nodes.Insert(sisterNode.Index + 1, childNode);
                }
                else
                {
                    var parentCap = new FetchNodeCapabilities(parentNode.Name, true);
                    var nodeIndex = parentCap.IndexOfChild(name);
                    var pos       = 0;
                    while (pos < parentNode.Nodes.Count && nodeIndex >= parentCap.IndexOfChild(parentNode.Nodes[pos].Name))
                    {
                        pos++;
                    }
                    if (pos == parentNode.Nodes.Count)
                    {
                        parentNode.Nodes.Add(childNode);
                    }
                    else
                    {
                        parentNode.Nodes.Insert(pos, childNode);
                    }
                }
            }
            Validate(childNode, fxb);
            return(childNode);
        }