初始化项目
This commit is contained in:
729
BLV_Studio/ModelGrid/RowNode.vb
Normal file
729
BLV_Studio/ModelGrid/RowNode.vb
Normal file
@@ -0,0 +1,729 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user