/// <summary> /// Display next level of the child nodes - recursively /// </summary> /// <param name="parent"></param> private void SHOW_Childs() { VXmlNode node; TreeNodeCollection tc; Cursor.Current = Cursors.WaitCursor; tvCat.BeginUpdate(); if (CONTEXT_TREE_NODE == null) { node = cont; CONTEXT_XML_NODE = cont; CONTEXT_TREE_NODE = tvCat.Nodes.Add(node.ID, UTIL_PrepareName(node)); CONTEXT_TREE_NODE.ImageKey = node.NodeType; ACTION_SetTreeNodeName(CONTEXT_TREE_NODE, node); tc = CONTEXT_TREE_NODE.Nodes; tvCat.SelectedNode = CONTEXT_TREE_NODE; } else { tc = CONTEXT_TREE_NODE.Nodes; node = CONTEXT_XML_NODE; } tc.Clear(); if ((node.NodeTypeCode != DEFX.NODE_TYPE_ATTRIBUTE) & (node.NodeTypeCode != DEFX.NODE_TYPE_COMMENT) & (node.NodeTypeCode != DEFX.NODE_TYPE_TEXT)) { VXmlNodeCollection cn = node.AllChildNodes; for (int i = 0; i < cn.Count; i++) { VXmlNode c = cn[i]; TreeNode tn = tc.Add(c.ID, UTIL_PrepareName(c)); tn.ImageKey = (c.NodeTypeCode == DEFX.NODE_TYPE_REFERENCE) ? ((VXmlReference)c).ReferenceNode.NodeType : c.NodeType; ACTION_SetTreeNodeName(tn, c); } } tvCat.EndUpdate(); Cursor.Current = Cursors.Default; }
/// <summary> /// Search (XQL) /// </summary> private void ACTION_SearchNode() { VXmlNode n = null; string st = mnuSearchTextBox.Text.Trim(); if (st.Length > 0) { if (tsSearchType.Text == "ID") { int nv = 0; bool IsNumeric = int.TryParse(st, out nv); if (IsNumeric & (nv > 0)) { n = cont.GetNode((long)nv); if (n != null) { SHOW_NodeInTree(n); } else { MessageBox.Show("Node is not found, ID=" + nv.ToString(), "Lookup node", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show("Invalid node ID in request", "Lookup node", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { decimal d = 0; if (CONTEXT_LIST_VIEW_ITEM == null) { n = CONTEXT_XML_NODE; } else { n = cont.GetNode(VSLib.ConvertStringToLong(CONTEXT_LIST_VIEW_ITEM.SubItems[0].Text)); } if (n.NodeTypeCode == DEFX.NODE_TYPE_REFERENCE) { n = ((VXmlReference)n).ReferenceNode; } //n = CONTEXT_XML_NODE; // cont.GetNode(VSLib.ConvertStringToLong(tvCat.SelectedNode.Name)); VXmlNodeCollection l = null; try { lbResult.Items.Clear(); pnQuery.Visible = true; tsNodeCount.Text = "Running query..."; Application.DoEvents(); Cursor.Current = Cursors.WaitCursor; long l_start = DateTime.Now.Ticks; l = n.SelectNodes(st); long l_end = DateTime.Now.Ticks; d = l_end - l_start; } catch (VXmlException e1) { MessageBox.Show(e1.Message, "Error", MessageBoxButtons.OK); } if (l != null) { tsNodeCount.Text = "Selected " + l.Count.ToString() + " nodes in " + (d / 10000000).ToString("F") + " seconds"; Application.DoEvents(); Cursor.Current = Cursors.WaitCursor; lbResult.BeginUpdate(); for (int i = 0; i < l.Count; i++) { lbResult.Items.Add("<Id:" + l[i].Id.ToString("D8") + "><Name:" + l[i].Name + "><Type:" + l[i].NodeType + ">"); } lbResult.EndUpdate(); } else { tsNodeCount.Text = ""; } Cursor.Current = Cursors.Default; pnQuery.Visible = true; mnuHide.Visible = true; SHOW_Buttons(); } } }