730 lines
16 KiB
VB.net
730 lines
16 KiB
VB.net
Public NotInheritable Class RowNode
|
||
''' <summary>可见节点总数 </summary>
|
||
Friend _visibleCount As Integer
|
||
|
||
''' <summary>节点等级 </summary>
|
||
Private _lever As Integer
|
||
|
||
''' <summary>动作是否执行 </summary>
|
||
Private _action As Boolean
|
||
|
||
Public Sub New()
|
||
RowType = RowTypeEnum.DeviceEventAction
|
||
|
||
_action = True
|
||
Compile = True
|
||
|
||
DeviceAlias = String.Empty
|
||
Description = String.Empty
|
||
DelayTime = "0"
|
||
DelayUnit = "ms"
|
||
Params = New List(Of AttributeRowNodeTag)
|
||
|
||
Expanded = True
|
||
Visible = True
|
||
AllChildCount = 0
|
||
_lever = 0
|
||
_visibleCount = 0
|
||
Nodes = New RowNodes(Me)
|
||
|
||
RowListIndex = 0
|
||
RowList = New List(Of RowNode)()
|
||
RowList.Add(Me)
|
||
End Sub
|
||
|
||
|
||
#Region "节点特有属性"
|
||
|
||
''' <summary>
|
||
''' 事件编号
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property eventId As String
|
||
|
||
''' <summary>
|
||
''' 节点类型
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property RowType As RowTypeEnum
|
||
|
||
''' <summary>
|
||
''' 节点名称
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Name As String
|
||
|
||
''' <summary>
|
||
''' 节点接口属性,从XML读出来,仅对设备对象有效
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property [Interface] As String
|
||
|
||
''' <summary>
|
||
''' 节点显示文本
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Text As String
|
||
|
||
''' <summary>
|
||
''' 节点描述
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Description As String
|
||
|
||
''' <summary>
|
||
''' 设备别名
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DeviceAlias As String
|
||
|
||
''' <summary>
|
||
''' 设备是否具有别名
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property HasAlias As Boolean
|
||
|
||
''' <summary>
|
||
''' 设备类型
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DeviceType As String
|
||
|
||
''' <summary>
|
||
''' 设备名称
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DeviceName As String
|
||
|
||
''' <summary>
|
||
''' 设备方法
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DeviceMothed As String
|
||
|
||
''' <summary>
|
||
''' 延时时间
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DelayTime As String
|
||
|
||
''' <summary>
|
||
''' DEV_TYPE_DATA
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DEV_TYPE_DATA As String
|
||
|
||
''' <summary>
|
||
''' PROTOCOL_VER
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property PROTOCOL_VER As String
|
||
|
||
|
||
|
||
Public Enum CfgTypeEnum
|
||
''' <summary>
|
||
''' 0.默认类型
|
||
''' </summary>
|
||
CfgType_Default
|
||
|
||
''' <summary>
|
||
''' 1.小宝命令集
|
||
''' </summary>
|
||
CfgType_XiaoBaoCMD
|
||
|
||
''' <summary>
|
||
''' 2.设备存在
|
||
''' </summary>
|
||
CfgType_DeviceExists
|
||
End Enum
|
||
|
||
Public Enum RowTypeEnum
|
||
''' <summary>
|
||
''' 0.根节点
|
||
''' </summary>
|
||
RootNode
|
||
|
||
''' <summary>
|
||
''' 1.酒店组
|
||
''' </summary>
|
||
HotelGroup
|
||
|
||
''' <summary>
|
||
''' 2.酒店项目
|
||
''' </summary>
|
||
Hotel
|
||
|
||
''' <summary>
|
||
''' 3.酒店户型
|
||
''' </summary>
|
||
HotelRoomType
|
||
|
||
''' <summary>
|
||
''' 4.主机模型
|
||
''' </summary>
|
||
Model
|
||
|
||
''' <summary>
|
||
''' 5.主机模型属性集
|
||
''' </summary>
|
||
ModelAttributes
|
||
|
||
''' <summary>
|
||
''' 6.主机模型属性分组
|
||
''' </summary>
|
||
ModelAttributeGroup
|
||
|
||
''' <summary>
|
||
''' 7.主机模型属性
|
||
''' </summary>
|
||
ModelAttribute
|
||
|
||
''' <summary>
|
||
''' 8.模型外设组
|
||
''' </summary>
|
||
DeviceGroup
|
||
|
||
''' <summary>
|
||
''' 9.模型外设对象
|
||
''' </summary>
|
||
DeviceObject
|
||
|
||
''' <summary>
|
||
''' 10.模型外设属性组
|
||
''' </summary>
|
||
DeviceAttributes
|
||
|
||
''' <summary>
|
||
''' 11.模型外设方法组
|
||
''' </summary>
|
||
DeviceMothods
|
||
|
||
''' <summary>
|
||
''' 12.模型外设事件组
|
||
''' </summary>
|
||
DeviceEvents
|
||
|
||
''' <summary>
|
||
''' 13.模型外设属性
|
||
''' </summary>
|
||
DeviceAttribute
|
||
|
||
''' <summary>
|
||
''' 14.模型外设方法
|
||
''' </summary>
|
||
DeviceMothod
|
||
|
||
''' <summary>
|
||
''' 15.模型外设事件
|
||
''' </summary>
|
||
DeviceEvent
|
||
|
||
''' <summary>
|
||
''' 16.模型外设事件动作执行方式组
|
||
''' </summary>
|
||
DeviceEventActionModeGroup
|
||
|
||
''' <summary>
|
||
''' 17.模型外设事件动作执行方式
|
||
''' </summary>
|
||
DeviceEventActionMode
|
||
|
||
''' <summary>
|
||
''' 18.模型外设事件条件
|
||
''' </summary>
|
||
DeviceEventConditionItem
|
||
|
||
''' <summary>
|
||
''' 19.模型外设事件条件
|
||
''' </summary>
|
||
DeviceEventAllConditions
|
||
|
||
''' <summary>
|
||
''' 20.条件组节点
|
||
''' </summary>
|
||
DeviceEventConditions
|
||
|
||
''' <summary>
|
||
''' 21.模型外设事件执行动作组集合
|
||
''' </summary>
|
||
DeviceEventAllActions
|
||
|
||
''' <summary>
|
||
''' 22.模型外设事件执行动作组
|
||
''' </summary>
|
||
DeviceEventActions
|
||
|
||
''' <summary>
|
||
''' 23.模型外设事件执行动作
|
||
''' </summary>
|
||
DeviceEventAction
|
||
|
||
''' <summary>
|
||
''' 24.情景模式组
|
||
''' </summary>
|
||
ContextualModels
|
||
|
||
''' <summary>
|
||
''' 25.情景模式
|
||
''' </summary>
|
||
ContextualModel
|
||
|
||
''' <summary>
|
||
''' 26.外设模型
|
||
''' </summary>
|
||
ExternalModel
|
||
|
||
''' <summary>
|
||
''' 27.属性集 = XiaoBaoCMD
|
||
''' </summary>
|
||
ModelAttributes_XiaoBaoCMD
|
||
|
||
''' <summary>
|
||
''' 28.属性 = XiaoBaoCMD
|
||
''' </summary>
|
||
ModelAttribute_XiaoBaoCMD
|
||
|
||
''' <summary>
|
||
''' 29.属性集 = 设备存在
|
||
''' </summary>
|
||
ModelAttributes_DeviceExists
|
||
|
||
''' <summary>
|
||
''' 30.属性 = 设备存在
|
||
''' </summary>
|
||
ModelAttribute_DeviceExists
|
||
|
||
End Enum
|
||
|
||
|
||
''' <summary>
|
||
''' 延时单位
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property DelayUnit As String
|
||
|
||
''' <summary>
|
||
''' 动作执行参数
|
||
''' </summary>
|
||
Public Params As List(Of AttributeRowNodeTag)
|
||
|
||
|
||
''' <summary>
|
||
''' 动作是否执行,仅代表表格上的勾选状态,参与编译属性参考Compile属性
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Action As Boolean
|
||
Get
|
||
Return _action
|
||
End Get
|
||
Set(value As Boolean)
|
||
_action = value
|
||
|
||
UpdateCompile()
|
||
End Set
|
||
End Property
|
||
|
||
''' <summary>
|
||
''' 动作是否参与编译
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Compile As Boolean
|
||
|
||
''' <summary>
|
||
''' 节点标签
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Tag As Object
|
||
#End Region
|
||
|
||
|
||
#Region "节点公共属性"
|
||
|
||
''' <summary>
|
||
''' 节点是否处于展开状态
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Expanded() As Boolean
|
||
|
||
''' <summary>
|
||
''' 节点是否处于可见状态
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Visible() As Boolean
|
||
|
||
''' <summary>
|
||
''' 节点的级别,可见节点级别从0开始
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Lever As Integer
|
||
Get
|
||
Return _lever
|
||
End Get
|
||
Set(value As Integer)
|
||
_lever = value
|
||
For Each node As RowNode In Nodes
|
||
node.Lever = _lever + 1
|
||
Next
|
||
End Set
|
||
End Property
|
||
|
||
''' <summary>
|
||
''' 节点在父节点中的索引,可见节点级别从0开始
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Index As Integer
|
||
|
||
|
||
''' <summary>
|
||
''' 下一级子节点总数
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public ReadOnly Property Count() As Integer
|
||
Get
|
||
Return Nodes.Count
|
||
End Get
|
||
End Property
|
||
|
||
''' <summary>
|
||
''' 所有子节点中,可见子节点总数
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public ReadOnly Property VisibleNodesCount() As Integer
|
||
Get
|
||
Return _visibleCount
|
||
End Get
|
||
End Property
|
||
|
||
|
||
''' <summary>
|
||
''' 所有子节点总数
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property AllChildCount() As Integer
|
||
|
||
|
||
''' <summary>
|
||
''' 当前节点树的起始节点
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property HeadNode() As RowNode
|
||
|
||
''' <summary>
|
||
''' 当前节点的父节点
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property ParentNode() As RowNode
|
||
|
||
''' <summary>
|
||
''' 当前节点的同级上一节点,若当前节点为首节点则返回nothing
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property PrevNode() As RowNode
|
||
|
||
''' <summary>
|
||
''' 当前节点的同级下一节点,若当前节点为尾节点则返回nothing
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property NextNode() As RowNode
|
||
|
||
|
||
|
||
''' <summary>
|
||
''' 节点所属节点数组的位置,从0开始,即头结点的的索引
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property RowListIndex As Integer
|
||
|
||
|
||
''' <summary>
|
||
''' 节点树的所有节点集合
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property RowList As List(Of RowNode)
|
||
|
||
|
||
''' <summary>
|
||
''' 子节点集合
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Property Nodes As RowNodes
|
||
#End Region
|
||
|
||
|
||
#Region "节点操作"
|
||
''' <summary>
|
||
''' 更新节点参与编译属性
|
||
''' </summary>
|
||
Friend Sub UpdateCompile()
|
||
If ParentNode Is Nothing Then
|
||
Compile = Action
|
||
Else
|
||
Compile = Action AndAlso ParentNode.Compile
|
||
End If
|
||
|
||
For Each node As RowNode In Nodes
|
||
node.Compile = Action AndAlso node.ParentNode.Compile
|
||
|
||
node.UpdateCompile()
|
||
Next
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 获取所有子节点
|
||
''' </summary>
|
||
Friend Function GetAllChildsNodeList(argRowNode As RowNode, ByVal lstChildNodeList As List(Of RowNode)) As Boolean
|
||
If argRowNode.Nodes.Count < 1 Then Return False
|
||
|
||
'将指定节点的所有子节点平铺加入到lstChildNodeList列表中
|
||
For Each tmpNode As RowNode In argRowNode.Nodes
|
||
lstChildNodeList.Add(tmpNode)
|
||
'如有子节点则递归调用,直到子节点数量为零(没有子节点)
|
||
If tmpNode.Nodes.Count > 0 Then GetAllChildsNodeList(tmpNode, lstChildNodeList)
|
||
Next
|
||
|
||
Return True
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' 更新可见子节点总数
|
||
''' </summary>
|
||
''' <param name="count"></param>
|
||
Friend Sub UpdateVisibleCount(count As Integer)
|
||
_visibleCount += count
|
||
If ParentNode IsNot Nothing Then ParentNode.UpdateVisibleCount(count)
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 更新子节点可见
|
||
''' </summary>
|
||
Friend Sub UpdateVisible(Optional isForceSetVisible As Boolean = False,
|
||
Optional isVisible As Boolean = True)
|
||
For Each node As RowNode In Nodes
|
||
'Momo 0416 增加强制参数,某些情况下通过传参强制设定visible状态
|
||
If isForceSetVisible = True Then
|
||
node.Visible = isVisible
|
||
Else
|
||
node.Visible = Expanded AndAlso Visible
|
||
End If
|
||
|
||
node.UpdateVisible()
|
||
Next
|
||
End Sub
|
||
|
||
|
||
''' <summary>
|
||
''' 展开节点
|
||
''' </summary>
|
||
Public Sub Expand()
|
||
If Expanded Then Return
|
||
Expanded = True
|
||
|
||
Dim num As Integer
|
||
For Each node As RowNode In Nodes
|
||
num += node.VisibleNodesCount + 1
|
||
Next
|
||
UpdateVisibleCount(num)
|
||
|
||
'更新子节点是否可见
|
||
UpdateVisible()
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 展开所有节点包括子节点
|
||
''' </summary>
|
||
Public Sub ExpandAll()
|
||
Expand()
|
||
|
||
'展开所有节点
|
||
For Each node As RowNode In Nodes
|
||
node.ExpandAll()
|
||
'展开的同时,设置属性为可见
|
||
node.Visible = True
|
||
Next
|
||
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 折叠节点
|
||
''' </summary>
|
||
Public Sub Collapse()
|
||
If Expanded = False Then Return
|
||
Expanded = False
|
||
|
||
'更新可见总数
|
||
Dim num As Integer
|
||
For Each node As RowNode In Nodes
|
||
num += node.VisibleNodesCount + 1
|
||
Next
|
||
UpdateVisibleCount(0 - num)
|
||
|
||
'更新子节点是否可见
|
||
UpdateVisible()
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 收缩所有节点包括子节点
|
||
''' </summary>
|
||
Public Sub CollapseAll()
|
||
Collapse()
|
||
|
||
'收缩所有节点
|
||
For Each node As RowNode In Nodes
|
||
node.CollapseAll()
|
||
Next
|
||
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 展开或折叠节点
|
||
''' </summary>
|
||
Public Sub Toggle()
|
||
If Expanded Then
|
||
Collapse()
|
||
Else
|
||
Expand()
|
||
End If
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 增加子节点
|
||
''' </summary>
|
||
Public Sub AddNode(node As RowNode)
|
||
Nodes.Add(node)
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 插入子节点
|
||
''' </summary>
|
||
Public Sub InsertNode(index As Integer, childNode As RowNode)
|
||
Nodes.Insert(index, childNode)
|
||
End Sub
|
||
|
||
|
||
Public Sub RemoveChildNode(childNode As RowNode)
|
||
|
||
Nodes.Remove(childNode)
|
||
End Sub
|
||
|
||
Public Sub RemoveChildAt(index As Integer)
|
||
If index >= Nodes.Count Then Return
|
||
Dim child As RowNode = CType(Nodes.Item(index), RowNode)
|
||
Nodes.RemoveAt(index)
|
||
End Sub
|
||
|
||
|
||
''' <summary>
|
||
''' 移除本身节点
|
||
''' </summary>
|
||
Public Function Remove() As Boolean
|
||
ParentNode.Nodes.Remove(Me)
|
||
Return True
|
||
End Function
|
||
|
||
|
||
''' <summary>
|
||
''' 清空节点所有子节点
|
||
''' </summary>
|
||
Public Sub Clear()
|
||
Nodes.Clear()
|
||
End Sub
|
||
|
||
|
||
''' <summary>
|
||
''' 节点上移
|
||
''' </summary>
|
||
Public Sub MoveUp()
|
||
If Index = 0 Then Return
|
||
|
||
If Remove() = False Then Return
|
||
ParentNode.Nodes.Insert(Index - 1, Me)
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 节点下移
|
||
''' </summary>
|
||
Public Sub MoveDown()
|
||
If Index = ParentNode.Nodes.Count - 1 Then Return
|
||
|
||
If Remove() = False Then Return
|
||
ParentNode.Nodes.Insert(Index + 1, Me)
|
||
End Sub
|
||
|
||
''' <summary>
|
||
''' 节点左移
|
||
''' </summary>
|
||
Public Sub MoveLeft()
|
||
If _lever = 0 Then Return
|
||
If Remove() = False Then Return
|
||
ParentNode.ParentNode.Nodes.Insert(ParentNode.Index + 1, Me)
|
||
|
||
'更新节点可见与可见子节点数
|
||
End Sub
|
||
|
||
|
||
''' <summary>
|
||
''' 节点右移
|
||
''' </summary>
|
||
Public Sub MoveRight()
|
||
If Index = 0 Then Return
|
||
|
||
If Remove() = False Then Return
|
||
Dim rNode As RowNode = CType(ParentNode.Nodes(Index - 1), RowNode)
|
||
rNode.Nodes.Add(Me)
|
||
|
||
'更新节点可见与可见子节点数
|
||
End Sub
|
||
|
||
'''' <summary>
|
||
'''' 交换两个节点信息 err
|
||
'''' </summary>
|
||
'''' <returns></returns>
|
||
'Public Function Exchange(ByRef argRowNode1 As RowNode,
|
||
' ByRef argRowNode2 As RowNode,
|
||
' ByRef argErrMsg As String) As Boolean
|
||
' Try
|
||
' If argRowNode1.RowType <> argRowNode2.RowType Then
|
||
' argErrMsg = "两个节点类型不同,不可进行交换!"
|
||
' Return False
|
||
' End If
|
||
|
||
' Dim tmpNode As RowNode = argRowNode1
|
||
|
||
' argRowNode1 = argRowNode2
|
||
' argRowNode2 = tmpNode
|
||
' Catch ex As Exception
|
||
' argErrMsg = ex.Message.ToString
|
||
' Return False
|
||
' End Try
|
||
|
||
' Return True
|
||
'End Function
|
||
|
||
''' <summary>
|
||
''' 节点深复制,创建一个完全相同信息的节点(功能待测试)
|
||
''' </summary>
|
||
''' <returns></returns>
|
||
Public Function Clone() As RowNode
|
||
Dim cpNode As New RowNode
|
||
|
||
With cpNode
|
||
.RowType = RowType
|
||
|
||
.Action = Action
|
||
|
||
.Nodes = New RowNodes(cpNode)
|
||
|
||
'todo:克隆功能待重写
|
||
End With
|
||
|
||
Return cpNode
|
||
End Function
|
||
#End Region
|
||
|
||
|
||
#Region "节点类型"
|
||
#End Region
|
||
|
||
End Class
|
||
|