/// <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); } } }