Exemple #1
0
        /// <summary>
        /// Delete Node and all subtree
        /// </summary>
        private void ACTION_DeleteNode()
        {
            string nm = (CONTEXT_LIST_VIEW_ITEM == null) ? CONTEXT_TREE_NODE.Text : (CONTEXT_LIST_VIEW_ITEM.SubItems[1].Text + " {" + CONTEXT_LIST_VIEW_ITEM.SubItems[2].Text + "}");

            if (MessageBox.Show("Do you want to proceed and delete node '" + nm + "'?", "Delete node", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                if (CONTEXT_LIST_VIEW_ITEM == null)
                {
                    VXmlNode NodeToDelete = cont.GetNode(VSLib.ConvertStringToLong(CONTEXT_TREE_NODE.Name));
                    VXmlNode pnode        = NodeToDelete.ParentNode;
                    if (CONTEXT_REF_NODE == null)
                    {
                        if (pnode == null)
                        {
                            if (MessageBox.Show("You are about to delete root node." + "\r\n" +
                                                "Storage will be closed in this case after deletion." + "\r\n" +
                                                "Do you want to proceed?", "Delete node", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
                            {
                                return;
                            }
                        }
                    }

                    tsNode.Text = "Deleting node ...";
                    Application.DoEvents();
                    Cursor.Current = Cursors.WaitCursor;
                    cont.Begin();
                    try
                    {
                        if (CONTEXT_LIST_VIEW_ITEM != null)
                        {
                            string rid = NodeToDelete.ID;
                            NodeToDelete.Remove();
                            CONTEXT_LIST_VIEW_ITEM.Remove();
                            for (int i = 0; i < CONTEXT_TREE_NODE.Nodes.Count; i++)
                            {
                                if (CONTEXT_TREE_NODE.Nodes[i].Name == rid)
                                {
                                    CONTEXT_TREE_NODE.Nodes[i].Remove();
                                    break;
                                }
                            }
                        }
                        else
                        {
                            if (CONTEXT_REF_NODE == null)
                            {
                                CONTEXT_XML_NODE.Remove();
                                if (pnode == null)
                                {
                                    Cursor.Current = Cursors.Default;
                                    ACTION_CloseStorage();
                                    return;
                                }
                            }
                            else
                            {
                                CONTEXT_REF_NODE.Remove();
                            }

                            tvCat.SelectedNode = CONTEXT_TREE_NODE.Parent;
                            CONTEXT_TREE_NODE.Remove();
                        }
                    }
                    catch (VXmlException e1)
                    {
                        MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK);
                    }
                    cont.Commit();
                    tsNode.Text = "";
                    SELECT_Node();
                    Cursor.Current = Cursors.Default;
                }
                else
                {
                    if (MENU_NODE_SELECTED_TYPE == DEFX.GET_NODETYPE(DEFX.NODE_TYPE_ATTRIBUTE))
                    {
                        CONTEXT_XML_NODE.RemoveAttribute(MENU_NODE_SELECTED_NAME);
                    }
                    else if (MENU_NODE_SELECTED_TYPE == DEFX.GET_NODETYPE(DEFX.NODE_TYPE_COMMENT))
                    {
                        CONTEXT_XML_NODE.RemoveComment(MENU_NODE_SELECTED_NAME);
                    }
                    else if (MENU_NODE_SELECTED_TYPE == DEFX.GET_NODETYPE(DEFX.NODE_TYPE_TEXT))
                    {
                        CONTEXT_XML_NODE.RemoveText(MENU_NODE_SELECTED_NAME);
                    }
                    //else // Tag
                    //    CONTEXT_XML_NODE.RemoveTag.RemoveTagByName(MENU_NODE_SELECTED_NAME);

                    SELECT_Node(true, CONTEXT_TREE_NODE);
                }
            }
        }