home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD172973192001.psc / XMLTree.cls < prev   
Encoding:
Visual Basic class definition  |  2001-03-19  |  7.7 KB  |  249 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "XMLTree"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16.  
  17. Private mCurrKey As String
  18. Private mXMLIsLoaded As Boolean
  19. Private mCurrFileName As String
  20. Private oDoc As DOMDocument
  21. Private mTreeView As TreeView
  22. Private mMaxID As Integer
  23.  
  24. Public Sub ChangeAttribute(AttributeName As String, NewValue As String)
  25. 'changes an attribute
  26. Dim currXMLNode As MSXML.IXMLDOMElement
  27.     Set currXMLNode = oDoc.nodeFromID(mCurrKey)
  28.     currXMLNode.setAttribute AttributeName, NewValue
  29.  
  30. End Sub
  31. Public Sub ChangeText(NewValue As String)
  32.     Set currXMLNode = oDoc.nodeFromID(mCurrKey)
  33.     currXMLNode.Text = NewValue
  34. End Sub
  35.  
  36.  
  37. Public Sub SetTreeView(ByRef oTreeView As TreeView)
  38. 'sets an internal reference to the treeview object of the form
  39.     Set mTreeView = oTreeView
  40. End Sub
  41.  
  42. Public Property Get CurrFileName() As String
  43. 'allows to catch the current file name
  44.     CurrFileName = mCurrFileName
  45. End Property
  46. Public Property Get XMLIsLoaded() As Boolean
  47. 'is there an XML loaded in the object
  48.     XMLIsLoaded = mXMLIsLoaded
  49. End Property
  50.  
  51. Public Property Let CurrKey(ByVal vData As String)
  52. 'when the user clicks on a node, the instance has to be updated via this property
  53.     mCurrKey = vData
  54. End Property
  55.  
  56.  
  57. Public Property Get CurrKey() As String
  58. ' to fetch the current key
  59.     CurrKey = mCurrKey
  60. End Property
  61.  
  62.  
  63.  
  64. Public Sub DeleteNode()
  65. 'delete a node in the XML tree
  66. Dim currXMLNode As MSXML.IXMLDOMElement
  67.     
  68.     Set currXMLNode = oDoc.nodeFromID(mCurrKey)
  69.     Set nuts = currXMLNode.parentNode.removeChild(currXMLNode)
  70.     mTreeView.Nodes.Remove (mCurrKey)
  71. End Sub
  72.  
  73. Public Function SaveAsXMLFile(ByVal FilePath As String) As Boolean
  74. 'save as function
  75. oDoc.save FilePath
  76. AddLog "XML saved to " & FilePath
  77. End Function
  78.  
  79. Public Function SaveXMLFile() As Boolean
  80. ' save the XML tree to ... an XML file
  81. oDoc.save mCurrFileName
  82. AddLog "XML saved"
  83. End Function
  84.  
  85. Public Function CloseXMLFile() As Boolean
  86. 'set the internal content to nothing
  87. Class_Initialize
  88. AddLog "XML file closed"
  89. End Function
  90.  
  91. Public Function OpenXMLFile(ByVal FilePath As String) As Boolean
  92. 'open an existing xml file and start filling the tree on the form
  93.     Set oDoc = New DOMDocument
  94.     oDoc.async = False
  95.     'oDoc.validateOnParse = False 'If validation is not important, skip it
  96.     oDoc.Load FilePath
  97.     If oDoc.parseError.errorCode = 0 Then
  98.         AddLog "Parsing OK"
  99.          mTreeView.Nodes.Clear
  100.          'this starts the filling process
  101.         AddTreeNode mTreeView, oDoc.documentElement
  102.         AddLog "Tree is loaded in XMLTree instance"
  103.         mCurrFileName = FilePath
  104.         AddLog "Internal file name:" & mCurrFileName
  105.         mXMLIsLoaded = True
  106.         
  107.         OpenXMLFile = True
  108.     Else
  109.         AddLog "Parsing was not successful"
  110.         AddLog oDoc.parseError.reason & vbCrLf & oDoc.parseError.Line & vbCrLf & oDoc.parseError.srcText
  111.         mXMLIsLoaded = False
  112.         OpenXMLFile = False
  113.     End If
  114. End Function
  115. Private Sub AddTreeNode(ByRef objTreeView As TreeView, ByRef oElem As IXMLDOMNode, Optional ByRef oTreeNode As Node)
  116. 'this will fill up this object and the treeview on the form as well
  117.     Dim oNewNode As Node
  118.     Dim oNodeList As IXMLDOMNodeList
  119.     Dim i As Long
  120.     'Debug.Print oTreeNode.Text
  121.     If oTreeNode Is Nothing Then
  122.         Set oNewNode = objTreeView.Nodes.Add
  123.     Else
  124.         Set oNewNode = objTreeView.Nodes.Add(oTreeNode, tvwChild)
  125.     End If
  126.     
  127.     oNewNode.Expanded = False
  128.     nodeName = oElem.nodeName
  129.     Select Case nodeName
  130.         Case "folder", "folders"
  131.             use = oElem.Attributes.getNamedItem("DIRNAME").Text
  132.             oNewNode.Image = 1
  133.         Case "file"
  134.             use = oElem.Attributes.getNamedItem("FILENAME").Text
  135.             oNewNode.Image = 3
  136.         Case "TITLE", "URL"
  137.             use = oElem.Text
  138.              oNewNode.Image = 4
  139.     Case Else
  140.         use = "unhandled: " & oElem.nodeName
  141.     End Select
  142.     oNewNode.Text = use
  143.     oNewNode.Key = oElem.Attributes.getNamedItem("ID").Text
  144.     UpdateMaxID oNewNode.Key
  145.     
  146.     Set oNodeList = oElem.childNodes
  147.     If oElem.nodeName = "file" Then
  148.         Set t = objTreeView.Nodes.Add(oNewNode, tvwChild)
  149.         t.Text = oElem.childNodes(0).Text
  150.         t.Key = oElem.childNodes(0).Attributes.getNamedItem("ID").Text
  151.         t.Image = 4
  152.         UpdateMaxID t.Key
  153.         Set t = objTreeView.Nodes.Add(oNewNode, tvwChild)
  154.         t.Text = oElem.childNodes(1).Text
  155.         t.Key = oElem.childNodes(1).Attributes.getNamedItem("ID").Text
  156.         t.Image = 5
  157.         UpdateMaxID t.Key
  158.     Else
  159.         
  160.         For i = 0 To oNodeList.length - 1
  161.             AddTreeNode mTreeView, oNodeList.Item(i), oNewNode
  162.         Next
  163.     End If
  164. End Sub
  165.  
  166.  
  167. Public Sub CreateXMLNode(ByVal eNodeType As NodeType, ByVal Name As String, Optional ByVal Title As String, Optional ByVal URL As String)
  168. 'this method creates a new file/folder node
  169. Dim currXMLNode As MSXML.IXMLDOMElement
  170. Dim URLNode As MSComctlLib.Node
  171. Dim newXMLnode As MSXML.IXMLDOMElement
  172. Dim IDnode As MSXML.IXMLDOMNode
  173. On Error Resume Next
  174. If mCurrKey = "ID1" Then
  175.     Set currXMLNode = oDoc.documentElement
  176. Else
  177.     Set currXMLNode = oDoc.nodeFromID(mCurrKey)
  178. End If
  179.     Set currTreeNode = mTreeView.Nodes.Item(mCurrKey)
  180.     Set newnode = mTreeView.Nodes.Add(currTreeNode, tvwChild)
  181.     Select Case eNodeType
  182.  
  183.     Case eFolder 'folder
  184.         newnode.Text = Name
  185.         newnode.Image = 1
  186.         mMaxID = mMaxID + 1
  187.         newnode.Key = "ID" & mMaxID
  188.     
  189.         Set newXMLnode = currXMLNode.appendChild(oDoc.createElement("folder"))
  190.         newXMLnode.setAttribute "ID", "ID" & mMaxID
  191.         newXMLnode.setAttribute "DIRNAME", Name
  192.         
  193.         
  194.     Case eFile 'file
  195.         newnode.Text = Name
  196.         newnode.Image = 3
  197.         mMaxID = mMaxID + 1
  198.         newnode.Key = "ID" & mMaxID
  199.         
  200.         Set titlenode = mTreeView.Nodes.Add(newnode, tvwChild)
  201.         titlenode.Text = Title
  202.         titlenode.Image = 4
  203.         
  204.         Set URLNode = mTreeView.Nodes.Add(newnode, tvwChild)
  205.         URLNode.Text = URL
  206.         URLNode.Image = 5
  207.         
  208.         
  209.         mMaxID = mMaxID + 1
  210.         Set newxmlfilenode = currXMLNode.appendChild(oDoc.createElement("file"))
  211.         newxmlfilenode.setAttribute "ID", "ID" & mMaxID
  212.         titlenode.Key = "ID" & mMaxID
  213.         newxmlfilenode.setAttribute "FILENAME", Name
  214.         
  215.         mMaxID = mMaxID + 1
  216.         Set newxmlTitlenode = newxmlfilenode.appendChild(oDoc.createElement("TITLE"))
  217.         newxmlTitlenode.setAttribute "ID", "ID" & mMaxID
  218.         URLNode.Key = "ID" & mMaxID
  219.         newxmlTitlenode.Text = Title
  220.         
  221.         mMaxID = mMaxID + 1
  222.         Set newxmlURLnode = newxmlfilenode.appendChild(oDoc.createElement("URL"))
  223.         newxmlURLnode.setAttribute "ID", "ID" & mMaxID
  224.         newxmlURLnode.Text = URL
  225.         
  226.         Set currXMLNode = newxmlfilenode
  227.         
  228.     End Select
  229.  
  230. End Sub
  231. Private Sub UpdateMaxID(ByVal sID As String)
  232. 'the maximal ID is not a strict incrementing number but changes when you delete or add nodes
  233. inID = CInt(Right(sID, Len(sID) - 2))
  234.     If inID > mMaxID Then
  235.         mMaxID = inID
  236.     End If
  237. End Sub
  238.  
  239.  
  240. Private Sub Class_Initialize()
  241. 'standard class ini
  242.     Set oDoc = Nothing
  243.     mCurrKey = 0
  244.     mXMLIsLoaded = False
  245.     mCurrFileName = ""
  246.     mcurrFilepath = ""
  247.     mMaxID = 1
  248. End Sub
  249.