初始化
This commit is contained in:
225
BLV_Studio/Nodes.vb
Normal file
225
BLV_Studio/Nodes.vb
Normal file
@@ -0,0 +1,225 @@
|
||||
Option Explicit On
|
||||
|
||||
Public Class Nodes
|
||||
|
||||
#Region "公共变量"
|
||||
|
||||
Private mobjNodes As Collection
|
||||
Private mOwner As Node
|
||||
Private mobjFirstNode As Node
|
||||
Private mobjLastNode As Node
|
||||
Private mintKey As Integer
|
||||
|
||||
#End Region
|
||||
#Region "Public属性"
|
||||
|
||||
Public ReadOnly Property FirstNode() As Node
|
||||
Get
|
||||
Return mobjFirstNode
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public ReadOnly Property LastNode() As Node
|
||||
Get
|
||||
Return mobjLastNode
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Default Public ReadOnly Property Item(ByVal Key As Object) As Node
|
||||
Get
|
||||
On Error Resume Next
|
||||
|
||||
Item = mobjNodes.Item(Key)
|
||||
|
||||
If Err.Number <> 0 Then
|
||||
Return Nothing
|
||||
End If
|
||||
End Get
|
||||
End Property
|
||||
|
||||
#End Region
|
||||
#Region "Public方法"
|
||||
|
||||
Public Sub New(ByVal Owner As Node)
|
||||
mobjNodes = New Collection
|
||||
mOwner = Owner
|
||||
End Sub
|
||||
|
||||
Public Sub Dispose()
|
||||
Me.Dispose(True)
|
||||
End Sub
|
||||
|
||||
Public Function Add() As Node
|
||||
Return Add("", "")
|
||||
End Function
|
||||
|
||||
Public Function Add(ByVal Text As String) As Node
|
||||
Return Add(Text, "")
|
||||
End Function
|
||||
|
||||
Public Function Add(ByVal Text As String, ByVal Tag As String) As Node
|
||||
mintKey = mintKey + 1
|
||||
Dim objNode As New Node("N" & mintKey, Text, Tag, mOwner.Level + 1, mOwner)
|
||||
If mobjNodes.Count = 0 Then
|
||||
mobjFirstNode = objNode
|
||||
mobjLastNode = objNode
|
||||
Else
|
||||
mobjLastNode.NextNode = objNode
|
||||
objNode.PrevNode = mobjLastNode
|
||||
mobjLastNode = objNode
|
||||
End If
|
||||
mobjNodes.Add(objNode, objNode.Key)
|
||||
|
||||
mOwner.UpdateChindrenCount(1)
|
||||
If mOwner.Expanded Then
|
||||
mOwner.UpdateVisibleNodesCount(1)
|
||||
End If
|
||||
|
||||
Return objNode
|
||||
End Function
|
||||
|
||||
Public Sub Add(ByVal Count As Integer)
|
||||
Dim i As Integer
|
||||
For i = 1 To Count
|
||||
Call Add()
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Sub Clear()
|
||||
Dim i As Integer
|
||||
Dim objNode As Node
|
||||
|
||||
If mobjNodes Is Nothing Then
|
||||
Return
|
||||
End If
|
||||
|
||||
If mobjNodes.Count = 0 Then
|
||||
Return
|
||||
End If
|
||||
|
||||
mOwner.UpdateChindrenCount(-mobjNodes.Count)
|
||||
If mOwner.Expanded Then
|
||||
mOwner.UpdateVisibleNodesCount(-mobjNodes.Count)
|
||||
End If
|
||||
|
||||
mobjLastNode = Nothing
|
||||
mobjFirstNode = Nothing
|
||||
|
||||
For i = mobjNodes.Count To 1 Step -1
|
||||
objNode = mobjNodes.Item(i)
|
||||
If objNode.HasChildren Then
|
||||
objNode.Nodes.Clear()
|
||||
End If
|
||||
mobjNodes.Remove(i)
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Public Function Count() As Integer
|
||||
Return mobjNodes.Count
|
||||
End Function
|
||||
|
||||
Public Function InsertBefore(ByVal Key As String, ByVal Text As String, ByVal Tag As String) As Node
|
||||
'在指定Key的前面插入一个新的节点
|
||||
mintKey = mintKey + 1
|
||||
Dim objNode1 As Node = mobjNodes.Item(Key)
|
||||
Dim objNode2 As Node = objNode1.PrevNode
|
||||
Dim objNode As New Node("N" & mintKey, Text, Tag, mOwner.Level + 1, mOwner)
|
||||
|
||||
objNode.NextNode = objNode1
|
||||
objNode.PrevNode = objNode2
|
||||
objNode1.PrevNode = objNode
|
||||
If Not objNode2 Is Nothing Then
|
||||
objNode2.NextNode = objNode
|
||||
Else
|
||||
mobjFirstNode = objNode
|
||||
End If
|
||||
mobjNodes.Add(objNode, objNode.Key)
|
||||
|
||||
mOwner.UpdateChindrenCount(1)
|
||||
If mOwner.Expanded Then
|
||||
mOwner.UpdateVisibleNodesCount(1)
|
||||
End If
|
||||
|
||||
Return objNode
|
||||
End Function
|
||||
|
||||
Public Function InsertAfter(ByVal Key As String, ByVal Text As String, ByVal Tag As String) As Node
|
||||
'在指定Key的后面插入一个新的节点
|
||||
mintKey = mintKey + 1
|
||||
Dim objNode1 As Node = mobjNodes.Item(Key)
|
||||
Dim objNode2 As Node = objNode1.NextNode
|
||||
Dim objNode As New Node("N" & mintKey, Text, Tag, mOwner.Level + 1, mOwner)
|
||||
|
||||
objNode.PrevNode = objNode1
|
||||
objNode.NextNode = objNode2
|
||||
objNode1.NextNode = objNode
|
||||
If Not objNode2 Is Nothing Then
|
||||
objNode2.PrevNode = objNode
|
||||
Else
|
||||
mobjLastNode = objNode
|
||||
End If
|
||||
mobjNodes.Add(objNode, objNode.Key)
|
||||
|
||||
mOwner.UpdateChindrenCount(1)
|
||||
If mOwner.Expanded Then
|
||||
mOwner.UpdateVisibleNodesCount(1)
|
||||
End If
|
||||
|
||||
Return objNode
|
||||
End Function
|
||||
|
||||
Public Sub Remove(ByVal Key As Object)
|
||||
Dim objNode As Node
|
||||
objNode = mobjNodes.Item(Key)
|
||||
|
||||
If mobjNodes.Count <= 1 Then
|
||||
mobjFirstNode = Nothing
|
||||
mobjLastNode = Nothing
|
||||
Else
|
||||
If objNode.PrevNode Is Nothing Then 'FirstNode
|
||||
mobjFirstNode = objNode.NextNode
|
||||
mobjFirstNode.PrevNode = Nothing
|
||||
Else
|
||||
objNode.PrevNode.NextNode = objNode.NextNode
|
||||
End If
|
||||
If objNode.NextNode Is Nothing Then 'LastNode
|
||||
mobjLastNode = objNode.PrevNode
|
||||
mobjLastNode.NextNode = Nothing
|
||||
Else
|
||||
objNode.NextNode.PrevNode = objNode.PrevNode
|
||||
End If
|
||||
End If
|
||||
|
||||
If objNode.HasChildren Then
|
||||
objNode.Nodes.Clear()
|
||||
End If
|
||||
|
||||
mobjNodes.Remove(Key)
|
||||
mOwner.UpdateChindrenCount(-1)
|
||||
If mOwner.Expanded Then
|
||||
mOwner.UpdateVisibleNodesCount(-1)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
#Region "其它"
|
||||
|
||||
Protected Overrides Sub Finalize()
|
||||
Try
|
||||
Me.Dispose(False)
|
||||
Finally
|
||||
MyBase.Finalize()
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
|
||||
Clear()
|
||||
mobjNodes = Nothing
|
||||
If disposing Then
|
||||
GC.SuppressFinalize(Me)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user