From 841c866cd8ae9712f85daf7c1aa85cfecd15e3d2 Mon Sep 17 00:00:00 2001
From: dk02ssq <344912654@qq.com>
Date: Thu, 15 May 2025 11:12:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=B2=98=E8=B4=B4=E4=B8=8E?=
=?UTF-8?q?=E6=89=B9=E9=87=8F=E6=92=A4=E9=94=80=E5=8A=9F=E8=83=BD=E4=B8=8A?=
=?UTF-8?q?=E7=BA=BF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 78 +++---
UTS_Core/UTSModule/Station/FrmStationPlan.vb | 18 ++
.../GridNodeTextChangedCommand.vb | 37 ++-
.../Station/PlanNodeTextChangedEventArgs.vb | 12 +
UTS_Core/UTSModule/Station/RowNode.vb | 43 +++-
UTS_Core/UTSModule/Station/RowNodeGrid.vb | 193 +++++++++-----
UTS_Core/UTSModule/Station/StationPlanGrid.vb | 239 ++++++++++--------
7 files changed, 401 insertions(+), 219 deletions(-)
diff --git a/.gitignore b/.gitignore
index a756875..6563abe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,41 +1,47 @@
-#
-#ignore thumbnails created by windows
-Thumbs.db
-#Ignore files build by Visual Studio
-*.obj
-*.exe
-*.pdb
-*.user
-*.aps
-*.pch
-*.vspscc
-*_i.c
-*_p.c
-*.ncb
-*.suo
-*.tlb
-*.tlh
-*.bak
-*.cache
-*.ilk
-*.log
-[Bb]in/
-[Dd]ebug*/
-*.sbr
-obj/
-
-[Rr]elease*/
-_ReSharper*/
-[Tt]est[Rr]esult*
-packages
-
-
-log.txt
-/.vs
.vs/
-node_modules/
+# .NET编译生成文件
+[Bb]in
+[Oo]bj
+[Dd]ebug*/
+*.pdb
+*.user
+*.suo
+*.cache
+*.ilk
+*.ncb
+*.opensdf
+*.sdf
+*.vsp
+*.vspscc
+
+# 发布输出
+publish/
+*.pubxml
+
+# NuGet包
+packages/
+*.nupkg
+
+# Visual Studio临时文件
+_ReSharper.*
+*.resharper
+[Tt]emp/
+
+# MSTest测试结果
+TestResults/
+*.trx
+
+# Rider IDE
.idea/
-.DS_Store
+*.sln.iml
+# VS Code
+.vscode/
+*.code-workspace
+# 用户特定文件
+*.userprefs
+
+# 构建日志
+msbuild.log
diff --git a/UTS_Core/UTSModule/Station/FrmStationPlan.vb b/UTS_Core/UTSModule/Station/FrmStationPlan.vb
index 1b01e6f..3646427 100644
--- a/UTS_Core/UTSModule/Station/FrmStationPlan.vb
+++ b/UTS_Core/UTSModule/Station/FrmStationPlan.vb
@@ -118,6 +118,24 @@ Namespace UTSModule.Station
Public Sub PlanGridSelectChanged(sender As Object, ByVal e As PlanNodeSelectChangedEventArgs)
TsBtnBackward.Enabled = _planGrid.CanBackward
TsBtnForward.Enabled = _planGrid.CanForward
+
+ '表格移动
+ If GrdStationPlan Is Nothing OrElse GrdStationPlan.Tree.SelectedNode Is Nothing Then Return
+ Dim canMove As Boolean = True
+ Dim startMoveRow As Integer = GrdStationPlan.Selection.FirstRow
+ Dim moveRows As Integer = GrdStationPlan.Selection.LastRow - GrdStationPlan.Selection.FirstRow + 1
+ Dim startLever As Integer = GrdStationPlan.Tree.FindNode(startMoveRow).Level
+ For i As Integer = startMoveRow To startMoveRow + moveRows - 1
+ If startLever <> GrdStationPlan.Tree.FindNode(startMoveRow).Level Then
+ canMove = False
+ Exit For
+ End If
+ Next
+
+ TsBtnMoveDown.Enabled = canMove
+ TsBtnMoveLeft.Enabled = canMove
+ TsBtnMoveRight.Enabled = canMove
+ TsBtnMoveUp.Enabled = canMove
End Sub
Public Sub PlanGridCommandChanged(sender As Object, e As EventArgs)
diff --git a/UTS_Core/UTSModule/Station/GridNodeCommands/GridNodeTextChangedCommand.vb b/UTS_Core/UTSModule/Station/GridNodeCommands/GridNodeTextChangedCommand.vb
index 92270c0..ea739ad 100644
--- a/UTS_Core/UTSModule/Station/GridNodeCommands/GridNodeTextChangedCommand.vb
+++ b/UTS_Core/UTSModule/Station/GridNodeCommands/GridNodeTextChangedCommand.vb
@@ -1,24 +1,35 @@
-Public Class GridNodeTextChangedCommand : Implements ICommand
+Imports UTS_Core.UTSModule.Station
- Private ReadOnly grd As FlexCell.Grid
- Private ReadOnly row As Integer
- Private ReadOnly col As Integer
- Private ReadOnly beforeText As String
- Private ReadOnly afterText As String
+Public Class GridNodeTextChangedCommand : Implements ICommand
- Sub New(grd As FlexCell.Grid, row As Integer, col As Integer, beforeText As String, afterText As String)
+ Private ReadOnly grd As StationPlanGrid
+ Private ReadOnly dic As Dictionary(Of Integer, TextChangedRowNode)
+
+ Sub New(grd As StationPlanGrid, dic As Dictionary(Of Integer, TextChangedRowNode))
Me.grd = grd
- Me.row = row
- Me.col = col
- Me.beforeText = beforeText
- Me.afterText = afterText
+ Me.dic = dic
End Sub
Public Sub Redo() Implements ICommand.Redo
- grd.Cell(row, col).Text = afterText
+ For Each row As Integer In dic.Keys
+ grd.UpdateGrid2(dic(row).AfterRowNode)
+ Next
+
End Sub
Public Sub Undo() Implements ICommand.Undo
- grd.Cell(row, col).Text = beforeText
+
+ For Each row As Integer In dic.Keys
+ grd.UpdateGrid2(dic(row).BeforeRowNode)
+ Next
+
End Sub
End Class
+
+Public Class TextChangedRowNode
+
+ Public Property BeforeRowNode As RowNode
+
+ Public Property AfterRowNode As RowNode
+
+End Class
diff --git a/UTS_Core/UTSModule/Station/PlanNodeTextChangedEventArgs.vb b/UTS_Core/UTSModule/Station/PlanNodeTextChangedEventArgs.vb
index d8b5553..80629e5 100644
--- a/UTS_Core/UTSModule/Station/PlanNodeTextChangedEventArgs.vb
+++ b/UTS_Core/UTSModule/Station/PlanNodeTextChangedEventArgs.vb
@@ -26,6 +26,18 @@
'''
Public Property Node() As RowNode
+ '''
+ ''' 修改前的节点
+ '''
+ '''
+ Public Property BeforeNode() As RowNode
+
+
+ '''
+ ''' 修改类型
+ '''
+ '''
+
Public Property ChangeType() As RowNodeChangeType
End Class
diff --git a/UTS_Core/UTSModule/Station/RowNode.vb b/UTS_Core/UTSModule/Station/RowNode.vb
index 0866c75..f266ce6 100644
--- a/UTS_Core/UTSModule/Station/RowNode.vb
+++ b/UTS_Core/UTSModule/Station/RowNode.vb
@@ -406,6 +406,12 @@ Namespace UTSModule.Station
Dim cpNode As New RowNode
With cpNode
+ .RowListIndex = RowListIndex
+
+ .Pause = Pause
+ .ControlType = ControlType
+ .SaveToDb = SaveToDb
+
.RowType = RowType
.Action = Action
@@ -428,19 +434,44 @@ Namespace UTSModule.Station
.Parameters.Add(param.Clone())
Next
- .RowNodes = New RowNodeCollection(cpNode)
- .Children = New List(Of RowNode)()
+ '.RowNodes = New RowNodeCollection(cpNode)
+ '.Children = New List(Of RowNode)()
- 'todo:克隆功能待重写
+ ''todo:克隆功能待重写
- For Each child As RowNode In Children
- .RowNodes.Add(child.Clone())
- Next
+ 'For Each child As RowNode In Children
+ ' .RowNodes.Add(child.Clone())
+ 'Next
End With
Return cpNode
End Function
+ Public Sub CopyFrom(node As RowNode)
+ With node
+ .RowListIndex = RowListIndex
+
+ Pause = .Pause
+ ControlType = .ControlType
+ SaveToDb = .SaveToDb
+
+ RowType = .RowType
+ Action = .Action
+ RecordName = .RecordName
+ Retry = .Retry
+ RetryInterval = .RetryInterval
+ [Label] = String.Copy(.Label)
+ Description = String.Copy(.Description)
+ ErrorCode = String.Copy(.ErrorCode)
+ ErrorMessage = String.Copy(.ErrorMessage)
+ CommandType = String.Copy(.CommandType)
+ Command = String.Copy(.Command)
+ Parameters.Clear()
+ For Each param As TestCmdParam In .Parameters
+ Parameters.Add(param.Clone())
+ Next
+ End With
+ End Sub
#End Region
#Region "节点样式"
diff --git a/UTS_Core/UTSModule/Station/RowNodeGrid.vb b/UTS_Core/UTSModule/Station/RowNodeGrid.vb
index 14d02b4..9c7dd8f 100644
--- a/UTS_Core/UTSModule/Station/RowNodeGrid.vb
+++ b/UTS_Core/UTSModule/Station/RowNodeGrid.vb
@@ -140,15 +140,20 @@ Namespace UTSModule.Station
#Region "表格事件处理"
+ Private _isUpload As Boolean
+ Private _beforeNode As RowNode
+
Private Sub Grid_CellChange(sender As Object, e As CellChangeEventArgs)
If ActiveRowNode Is Nothing Then Return
-
If _cellChanged = GridCellChangedEnum.None Then _cellChanged = GridCellChangedEnum.RowNodeInfo
If _cellChanged <> GridCellChangedEnum.RowNodeInfo Then Return
+
+ If Not _isUpload Then _beforeNode = ActiveRowNode.Clone
+ _isUpload = True
+
If e.Col = ColNames.ColValue Then
Dim value As String = _grd.Cell(e.Row, e.Col).Text
- Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType
- changeType = RowNodeChangedEventArgs.RowNodeChangeType.None
+ Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType = RowNodeChangedEventArgs.RowNodeChangeType.None
Select Case e.Row
Case RowNames.Action
ActiveRowNode.Action = _grd.Cell(e.Row, e.Col).BooleanValue
@@ -157,8 +162,55 @@ Namespace UTSModule.Station
ActiveRowNode.Label = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Label
Case RowNames.CommandType
+ Dim cmdType As String = _grd.Cell(RowNames.CommandType, ColNames.ColValue).Text
+ If String.Compare(ActiveRowNode.CommandType, cmdType) <> 0 Then
+ ActiveRowNode.CommandType = cmdType
+ ActiveRowNode.Command = ""
+ ActiveRowNode.Parameters.Clear()
+ ActiveRowNode.Action = Not String.IsNullOrWhiteSpace(ActiveRowNode.Command)
+ CommandTypeChanged(ActiveRowNode)
+ End If
ActiveRowNode.CommandType = value
changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
+ Case RowNames.ControlType
+ ActiveRowNode.ControlType = _grd.Cell(RowNames.ControlType, ColNames.ColValue).Text
+ Case RowNames.Command
+ Dim cmdName As String = _grd.Cell(RowNames.Command, ColNames.ColValue).Text
+ If String.Compare(ActiveRowNode.Command, cmdName) <> 0 Then
+ ActiveRowNode.Command = cmdName
+ ActiveRowNode.Parameters.Clear()
+ ActiveRowNode.Action = Not String.IsNullOrWhiteSpace(ActiveRowNode.Command)
+
+ '拷贝所有参数到当前节点信息中
+ Dim planCommand As TestCmd = _testCmdManager.GetCommand(ActiveRowNode.CommandType, ActiveRowNode.Command)
+ If planCommand Is Nothing Then Return
+ For Each cmdParam As TestCmdParam In planCommand.Params
+ ActiveRowNode.Parameters.Add(cmdParam.Clone())
+ Next
+
+ '更新行节点信息表格内容
+ CommandChanged(ActiveRowNode)
+ End If
+
+ ActiveRowNode.Command = value
+ changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
+ Case RowNames.ErrorCode
+ Dim codeMsg As String = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text
+ Dim errCode As String = ErrCodeManager.CodeMsgToCode(codeMsg)
+ If String.Compare(ActiveRowNode.ErrorCode, errCode) <> 0 Then
+ ActiveRowNode.ErrorCode = errCode
+ ActiveRowNode.ErrorMessage = _errCodeManager(ActiveRowNode.ErrorCode).Msg
+ _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text = errCode
+ _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor = _errCodeManager(ActiveRowNode.ErrorCode).Color
+ _grd.Cell(RowNames.ErrorMessage, ColNames.ColValue).BackColor = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor
+ ErrCodeChanged(ActiveRowNode)
+ End If
+ ActiveRowNode.ErrorCode = value
+ changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
+ Case RowNames.ErrorMessage
+ ActiveRowNode.ErrorMessage = value
+ changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
+
Case RowNames.RowType
ActiveRowNode.RowType = CType([Enum].Parse(GetType(RowNode.RowTypeEnum), value), RowNode.RowTypeEnum)
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RowType
@@ -177,18 +229,7 @@ Namespace UTSModule.Station
Case RowNames.RetryInterval
ActiveRowNode.RetryInterval = CInt(value)
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RetryInterval
- Case RowNames.ErrorCode
- ActiveRowNode.ErrorCode = value
- changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
- Case RowNames.ErrorMessage
- ActiveRowNode.ErrorMessage = value
- changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
- Case RowNames.CommandType
- ActiveRowNode.CommandType = value
- changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
- Case RowNames.Command
- ActiveRowNode.Command = value
- changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
+
Case >= RowNames.Parameters
If e.Row - RowNames.Parameters > ActiveRowNode.Parameters.Count - 1 Then Return
ActiveRowNode.Parameters(e.Row - RowNames.Parameters).Value = value
@@ -197,13 +238,16 @@ Namespace UTSModule.Station
If changeType = RowNodeChangedEventArgs.RowNodeChangeType.None Then Return
- Dim args As New RowNodeChangedEventArgs With {
- .Node = ActiveRowNode,
- .ChangeType = changeType
- }
- RaiseEvent RowNodeTextChanged(sender, args)
+ If _beforeNode IsNot Nothing Then
+ Dim args As New RowNodeChangedEventArgs With {
+ .Node = ActiveRowNode,
+ .BeforeNode = _beforeNode,
+ .ChangeType = changeType
+ }
+ RaiseEvent RowNodeTextChanged(sender, args)
+ End If
End If
-
+ _isUpload = False
_cellChanged = GridCellChangedEnum.None
End Sub
@@ -218,6 +262,9 @@ Namespace UTSModule.Station
_grd.Cell(row, ColNames.ColName).Text = node.Parameters(idx).Desc
_grd.Cell(row, ColNames.ColValue).Text = node.Parameters(idx).Value
Next
+
+ _grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).BackColor = Color.LightGray
+ _grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).Alignment = AlignmentEnum.RightCenter
End Sub
@@ -227,6 +274,9 @@ Namespace UTSModule.Station
_grd.Cell(RowNames.Command, ColNames.ColValue).Text = node.Command
_grd.Cell(RowNames.Parameters, ColNames.ColName).Text = RowNames.Parameters.ToString()
_grd.Cell(RowNames.Parameters, ColNames.ColValue).Text = ""
+
+ _grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).BackColor = Color.LightGray
+ _grd.Range(RowNames.LineNumber, ColNames.ColName, _grd.Rows - 1, ColNames.ColName).Alignment = AlignmentEnum.RightCenter
End Sub
Private Sub ErrCodeChanged(node As RowNode)
@@ -239,47 +289,62 @@ Namespace UTSModule.Station
'''
'''
Private Sub Grid_ComboClick(sender As Object, e As ComboClickEventArgs)
- If ActiveRowNode Is Nothing Then Return
- Select Case _grdSingleRowDropRow
- Case RowNames.ControlType
- ActiveRowNode.ControlType = _grd.Cell(RowNames.ControlType, ColNames.ColValue).Text
- Case RowNames.CommandType
- '如果命令类型变化则,清空命令
- Dim cmdType As String = _grd.Cell(RowNames.CommandType, ColNames.ColValue).Text
- If String.Compare(ActiveRowNode.CommandType, cmdType) <> 0 Then
- ActiveRowNode.CommandType = cmdType
- ActiveRowNode.Command = ""
- ActiveRowNode.Parameters.Clear()
- CommandTypeChanged(ActiveRowNode)
- End If
- Case RowNames.Command
- Dim cmdName As String = _grd.Cell(RowNames.Command, ColNames.ColValue).Text
- If String.Compare(ActiveRowNode.Command, cmdName) <> 0 Then
- ActiveRowNode.Command = cmdName
- ActiveRowNode.Parameters.Clear()
+ 'If ActiveRowNode Is Nothing Then Return
+ 'Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType = RowNodeChangedEventArgs.RowNodeChangeType.None
+ 'Dim beforeNode As RowNode = ActiveRowNode.Clone
+ 'Select Case _grdSingleRowDropRow
+ ' Case RowNames.ControlType
+ ' ActiveRowNode.ControlType = _grd.Cell(RowNames.ControlType, ColNames.ColValue).Text
+ ' changeType = RowNodeChangedEventArgs.RowNodeChangeType.ControlType
+ ' Case RowNames.CommandType
+ ' '如果命令类型变化则,清空命令
+ ' Dim cmdType As String = _grd.Cell(RowNames.CommandType, ColNames.ColValue).Text
+ ' If String.Compare(ActiveRowNode.CommandType, cmdType) <> 0 Then
+ ' ActiveRowNode.CommandType = cmdType
+ ' ActiveRowNode.Command = ""
+ ' ActiveRowNode.Parameters.Clear()
+ ' CommandTypeChanged(ActiveRowNode)
+ ' changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
+ ' End If
+ ' Case RowNames.Command
+ ' Dim cmdName As String = _grd.Cell(RowNames.Command, ColNames.ColValue).Text
+ ' If String.Compare(ActiveRowNode.Command, cmdName) <> 0 Then
+ ' ActiveRowNode.Command = cmdName
+ ' ActiveRowNode.Parameters.Clear()
- '拷贝所有参数到当前节点信息中
- Dim planCommand As TestCmd = _testCmdManager.GetCommand(ActiveRowNode.CommandType, ActiveRowNode.Command)
- If planCommand Is Nothing Then Return
- For Each cmdParam As TestCmdParam In planCommand.Params
- ActiveRowNode.Parameters.Add(cmdParam.Clone())
- Next
+ ' '拷贝所有参数到当前节点信息中
+ ' Dim planCommand As TestCmd = _testCmdManager.GetCommand(ActiveRowNode.CommandType, ActiveRowNode.Command)
+ ' If planCommand Is Nothing Then Return
+ ' For Each cmdParam As TestCmdParam In planCommand.Params
+ ' ActiveRowNode.Parameters.Add(cmdParam.Clone())
+ ' Next
- '更新行节点信息表格内容
- CommandChanged(ActiveRowNode)
- End If
- Case RowNames.ErrorCode
- Dim codeMsg As String = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text
- Dim errCode As String = ErrCodeManager.CodeMsgToCode(codeMsg)
- If String.Compare(ActiveRowNode.ErrorCode, errCode) <> 0 Then
- ActiveRowNode.ErrorCode = errCode
- ActiveRowNode.ErrorMessage = _errCodeManager(ActiveRowNode.ErrorCode).Msg
- _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text = errCode
- _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor = _errCodeManager(ActiveRowNode.ErrorCode).Color
- _grd.Cell(RowNames.ErrorMessage, ColNames.ColValue).BackColor = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor
- ErrCodeChanged(ActiveRowNode)
- End If
- End Select
+ ' '更新行节点信息表格内容
+ ' CommandChanged(ActiveRowNode)
+ ' changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
+ ' End If
+ ' Case RowNames.ErrorCode
+ ' Dim codeMsg As String = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text
+ ' Dim errCode As String = ErrCodeManager.CodeMsgToCode(codeMsg)
+ ' If String.Compare(ActiveRowNode.ErrorCode, errCode) <> 0 Then
+ ' ActiveRowNode.ErrorCode = errCode
+ ' ActiveRowNode.ErrorMessage = _errCodeManager(ActiveRowNode.ErrorCode).Msg
+ ' _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).Text = errCode
+ ' _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor = _errCodeManager(ActiveRowNode.ErrorCode).Color
+ ' _grd.Cell(RowNames.ErrorMessage, ColNames.ColValue).BackColor = _grd.Cell(RowNames.ErrorCode, ColNames.ColValue).BackColor
+ ' ErrCodeChanged(ActiveRowNode)
+ ' changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
+ ' End If
+ 'End Select
+
+ 'If changeType = RowNodeChangedEventArgs.RowNodeChangeType.None Then Return
+
+ 'Dim args As New RowNodeChangedEventArgs With {
+ ' .Node = ActiveRowNode,
+ ' .BeforeNode = beforeNode,
+ ' .ChangeType = changeType
+ '}
+ 'RaiseEvent RowNodeTextChanged(sender, args)
End Sub
'''
@@ -316,9 +381,9 @@ Namespace UTSModule.Station
_grd.ComboBox(0).Items.Add(RowNode.RowTypeEnum.Control)
_grd.ComboBox(0).Items.Add(RowNode.RowTypeEnum.Flow)
_grd.ComboBox(0).Items.Add(RowNode.RowTypeEnum.Module)
- Case RowNames.Parameters'特殊处理Call命令
- _grd.ComboBox(0).Items.Clear()
- _grd.ComboBox(0).Items.Addrange(UTS_Core.UTSModule.Test.UtsTester.CreateTester.GetCustomModuleName())
+ Case RowNames.Parameters '特殊处理Call命令
+ _grd.ComboBox(0).Items.Clear()
+ _grd.ComboBox(0).Items.AddRange(UTS_Core.UTSModule.Test.UtsTester.CreateTester.GetCustomModuleName())
End Select
End Sub
@@ -446,7 +511,7 @@ Namespace UTSModule.Station
Else
.Rows = RowNames.Parameters + 1
-
+
.Cell(RowNames.Parameters, ColNames.ColName).Text = RowNames.Parameters.ToString()
.Cell(RowNames.Parameters, col).CellType = CellTypeEnum.TextBox
.Cell(RowNames.Parameters, col).Text = ""
diff --git a/UTS_Core/UTSModule/Station/StationPlanGrid.vb b/UTS_Core/UTSModule/Station/StationPlanGrid.vb
index 4eb0df2..f46f7eb 100644
--- a/UTS_Core/UTSModule/Station/StationPlanGrid.vb
+++ b/UTS_Core/UTSModule/Station/StationPlanGrid.vb
@@ -64,7 +64,19 @@ Namespace UTSModule.Station
''' 节点执行可撤销事件
Public Event PlanGridCommandChanged(ByVal sender As Object, ByVal e As EventArgs)
+ ''' 粘贴操作计时器
+ Private WithEvents _userActionTimer As New Timer()
+ ''' 计时器超时时间
+ Private Const UserActionTimeout As Integer = 300 ' ms
+
+ Private _dicTextChangedRowNode As New Dictionary(Of Integer, TextChangedRowNode) '记录文本修改的行号和节点对象
+
+
+
+ '''
+ ''' 构造函数
+ '''
Sub New()
NodeStartRow = 1
@@ -77,8 +89,58 @@ Namespace UTSModule.Station
_testCmdManager = TestCmdManager.CreateManager()
_errCodeManager = ErrCodeManager.CreateManager()
+
+ _userActionTimer.Interval = UserActionTimeout
+ _userActionTimer.Stop()
End Sub
+ '''
+ ''' 表格内容改变处理事件
+ '''
+ Private Sub OnUserAction(node As RowNode)
+ If CommandManager.IsRuning Then Return
+
+ ' 每次用户操作都重置计时器
+ _userActionTimer.Stop()
+ _userActionTimer.Start()
+
+ '记录当前活动节点
+ If Not _dicTextChangedRowNode.ContainsKey(node.RowListIndex) Then
+ _dicTextChangedRowNode.Add(node.RowListIndex, New TextChangedRowNode With {.BeforeRowNode = node.Clone})
+ End If
+ End Sub
+
+ Private Sub OnUserActionEnd(node As RowNode)
+ If CommandManager.IsRuning Then Return
+
+ '记录当前活动节点
+ If _dicTextChangedRowNode.ContainsKey(node.RowListIndex) Then
+ _dicTextChangedRowNode(node.RowListIndex).AfterRowNode = node.Clone
+ End If
+ End Sub
+
+ '''
+ ''' 粘贴操作计时器超时处理事件
+ '''
+ '''
+ '''
+ Private Sub _userActionTimer_Tick(sender As Object, e As EventArgs) Handles _userActionTimer.Tick
+ _userActionTimer.Stop()
+
+ OnUserActionTimeout()
+ End Sub
+
+ Private Sub OnUserActionTimeout()
+ If CommandManager.IsRuning = False Then
+ CommandManager.AddUndoCommand(New GridNodeTextChangedCommand(Me, _dicTextChangedRowNode))
+
+ RaiseEvent PlanGridCommandChanged(Nothing, Nothing)
+ End If
+
+ _dicTextChangedRowNode = New Dictionary(Of Integer, TextChangedRowNode)
+ End Sub
+
+
'''
''' 屏蔽表格引发自定义事件,避免行节点内容修改,todo:暂未完成
'''
@@ -474,7 +536,7 @@ Namespace UTSModule.Station
Return Color.DarkSlateGray
End If
Case "ComPort"
- Return Color.DarkCyan
+ Return Color.Olive
Case "UtsComPort"
Return Color.SeaGreen
Case "Converter"
@@ -852,21 +914,26 @@ Namespace UTSModule.Station
Private Function ParamsToString(params As List(Of TestCmdParam)) As String
Return String.Join($" {_paramChar} ", params.Select(Function(p) p.Value))
-
- 'Dim result As New StringBuilder
-
- 'For i As Integer = 0 To params.Count - 1
- ' If i = 0 Then
- ' result.Append(params(i).Value)
- ' Else
- ' result.Append($" {_paramChar} {params(i).Value}")
- ' End If
- 'Next
-
- 'Return result.ToString()
End Function
+ Public Sub UpdateGrid2(node As RowNode)
+ Dim row As Integer = node.RowListIndex
+ Dim rowNode As RowNode = _headNode.RowList(row)
+ rowNode.CopyFrom(node)
+ _uploading = True
+ UpdateGrid(_grd, row, rowNode)
+ _uploading = False
+
+ '触发事件
+ If SkipEvent Then Return
+ Dim event2 As New PlanNodeSelectChangedEventArgs With {.Node = node,
+ .LineNumber = row,
+ .LineActionEn = node.Action
+ }
+
+ RaiseEvent PlanNodeSelectChanged(_grd, event2)
+ End Sub
Public Sub UpdateGrid(grd As Grid, row As Integer, node As RowNode)
Dim rowCmdType As String
@@ -1012,13 +1079,13 @@ Namespace UTSModule.Station
Private Sub CommandChanged(node As RowNode)
- _grd.Cell(node.RowListIndex, ColNames.Parameters).Text = ParamsToString(node.Parameters)
_grd.Cell(node.RowListIndex, ColNames.Action).Text = IIf(node.Action, "1", "0").ToString
-
+ _grd.Cell(node.RowListIndex, ColNames.Parameters).Text = ParamsToString(node.Parameters)
End Sub
Private Sub CommandTypeChanged(node As RowNode)
- _grd.Cell(node.RowListIndex, ColNames.Command).Text = " "
+ _grd.Cell(node.RowListIndex, ColNames.Action).Text = IIf(node.Action, "1", "0").ToString
+ _grd.Cell(node.RowListIndex, ColNames.Command).Text = node.Command
_grd.Cell(node.RowListIndex, ColNames.Parameters).Text = ParamsToString(node.Parameters)
End Sub
@@ -1055,12 +1122,11 @@ Namespace UTSModule.Station
Dim changeType As RowNodeChangedEventArgs.RowNodeChangeType
changeType = RowNodeChangedEventArgs.RowNodeChangeType.None
- Dim cmd As ICommand
+ Dim beforeNode As RowNode = node.Clone()
+ OnUserAction(beforeNode)
Select Case e.Col
Case ColNames.[Pause]
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.Pause.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.[Pause] = _grd.Cell(e.Row, e.Col).BooleanValue
If node.[Pause] Then
_grd.Cell(e.Row, e.Col).BackColor = Color.Red
@@ -1068,8 +1134,6 @@ Namespace UTSModule.Station
_grd.Cell(e.Row, e.Col).BackColor = Color.White
End If
Case ColNames.Action
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.Action.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.Action = _grd.Cell(e.Row, e.Col).BooleanValue
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Action
If node.RowType = RowNode.RowTypeEnum.FixedModule Then
@@ -1079,8 +1143,6 @@ Namespace UTSModule.Station
NodeActionChanged(node)
Case ColNames.Description
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.Description.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.Description = _grd.Cell(e.Row, e.Col).Text
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Description
Case ColNames.[Label]
@@ -1093,7 +1155,6 @@ Namespace UTSModule.Station
_uploading = False
Return
Else
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.Label.ToString(), _grd.Cell(e.Row, e.Col).Text)
If Not String.IsNullOrEmpty(node.Label) Then RemoveLabelName(node.Label) '移出之前记录标签名称
node.Label = labelName
@@ -1107,8 +1168,6 @@ Namespace UTSModule.Station
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Label
End If
Case ColNames.ControlType
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.ControlType.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.ControlType = _grd.Cell(e.Row, e.Col).Text
If String.IsNullOrWhiteSpace(node.ControlType) Then
node.RowType = RowNode.RowTypeEnum.Flow
@@ -1119,11 +1178,11 @@ Namespace UTSModule.Station
Case ColNames.CommandType
If String.Compare(node.CommandType, _grd.Cell(e.Row, e.Col).Text) <> 0 Then
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.CommandType.ToString(), _grd.Cell(e.Row, e.Col).Text)
node.CommandType = _grd.Cell(e.Row, e.Col).Text
node.Command = ""
node.Parameters.Clear()
+ node.Action = Not String.IsNullOrWhiteSpace(node.Command)
CommandTypeChanged(node)
changeType = RowNodeChangedEventArgs.RowNodeChangeType.CommandType
@@ -1132,17 +1191,9 @@ Namespace UTSModule.Station
NodeActionChanged(node)
Case ColNames.Command
If node.Command <> _grd.Cell(e.Row, e.Col).Text Then
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.Command.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.Command = _grd.Cell(e.Row, e.Col).Text
-
- If String.IsNullOrWhiteSpace(node.Command) Then
- node.Action = False
- Else
- node.Action = True
- End If
-
node.Parameters.Clear()
+ node.Action = Not String.IsNullOrWhiteSpace(node.Command)
'拷贝所有参数到当前节点信息中
Dim planCommand As TestCmd = _testCmdManager.GetCommand(node.CommandType, node.Command)
@@ -1155,9 +1206,6 @@ Namespace UTSModule.Station
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Command
End If
Case ColNames.Parameters
- Dim pStr As String = ParamsToString(node.Parameters)
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, pStr, _grd.Cell(e.Row, e.Col).Text)
-
Dim str() As String = _grd.Cell(e.Row, e.Col).Text.Split(New Char() {_paramChar})
For i As Integer = 0 To node.Parameters.Count - 1
@@ -1169,8 +1217,6 @@ Namespace UTSModule.Station
Next
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Parameters
Case ColNames.SaveToDb
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.SaveToDb.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.SaveToDb = _grd.Cell(e.Row, e.Col).BooleanValue
changeType = RowNodeChangedEventArgs.RowNodeChangeType.SaveToDb
If node.RowType = RowNode.RowTypeEnum.FixedModule Then
@@ -1189,7 +1235,6 @@ Namespace UTSModule.Station
_uploading = False
Return
Else
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.RecordName.ToString(), recordName)
If IsExistRecordName(node.RecordName) Then RemoveRecordName(node.RecordName) '移出之前记录名称
node.RecordName = recordName
@@ -1199,31 +1244,21 @@ Namespace UTSModule.Station
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RecordName
End If
Case ColNames.Retry
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.Retry.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.Retry = _grd.Cell(e.Row, e.Col).IntegerValue
changeType = RowNodeChangedEventArgs.RowNodeChangeType.Retry
Case ColNames.RetryInterval
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.RetryInterval.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.RetryInterval = _grd.Cell(e.Row, e.Col).IntegerValue
changeType = RowNodeChangedEventArgs.RowNodeChangeType.RetryInterval
Case ColNames.ErrorCode
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.ErrorCode.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.ErrorCode = _grd.Cell(e.Row, e.Col).Text
changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
Case ColNames.ErrorMessage
- cmd = New GridNodeTextChangedCommand(_grd, e.Row, e.Col, node.ErrorMessage.ToString(), _grd.Cell(e.Row, e.Col).Text)
-
node.ErrorMessage = _grd.Cell(e.Row, e.Col).Text
changeType = RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
End Select
- If CommandManager.IsRuning = False AndAlso cmd IsNot Nothing Then
- CommandManager.RunCommand(cmd)
- RaiseEvent PlanGridCommandChanged(Nothing, Nothing)
- End If
+ OnUserActionEnd(node)
+
'触发事件
If SkipEvent Then Return
@@ -1236,6 +1271,7 @@ Namespace UTSModule.Station
Dim args As New RowNodeChangedEventArgs With {
.Node = node,
+ .BeforeNode = beforeNode,
.ChangeType = changeType
}
RaiseEvent RowNodeTextChanged(sender, args)
@@ -1533,8 +1569,10 @@ Namespace UTSModule.Station
Dim startNode As RowNode = _headNode.RowList(startMoveRow - _drawStartRow + 1)
For i As Integer = 1 To rows
node = _headNode.RowList(startMoveRow - _drawStartRow + i)
- If node.RowLever > startNode.RowLever Then Continue For
- If node.RowLever < startNode.RowLever Then Exit For
+ If startNode.RowLever <> node.RowLever Then
+ MsgBox("请选择同一级别节点再尝试此操作") '非同级别节点不移动
+ Return
+ End If
nodes.Add(node)
Next
@@ -1599,9 +1637,18 @@ Namespace UTSModule.Station
Dim startNode As RowNode = _headNode.RowList(startMoveRow - _drawStartRow + 1)
Dim prevNode As RowNode = startNode.PrevNode
-
If prevNode Is Nothing Then Return
+ Dim node As RowNode
+ For i As Integer = 2 To moveRows
+ node = _headNode.RowList(startMoveRow - _drawStartRow + i)
+ If startNode.RowLever <> node.RowLever Then
+ MsgBox("请选择同一级别节点再尝试此操作") '非同级别节点不移动
+ Return
+ End If
+ Next
+
+
Dim moveEndRow As Integer = prevNode.RowListIndex
Dim cmd As New GridNodeMoveUpCommand(Me, startMoveRow, moveRows, moveEndRow)
CommandManager.RunCommand(cmd) '添加到撤销堆栈执行
@@ -1612,10 +1659,20 @@ Namespace UTSModule.Station
Public Sub NodeMoveDown(startMoveRow As Integer, moveRows As Integer)
If _headNode Is Nothing Then Return
+ Dim startNode As RowNode = _headNode.RowList(startMoveRow - _drawStartRow + 1)
Dim endNode As RowNode = _headNode.RowList(startMoveRow + moveRows - _drawStartRow)
Dim nextNode As RowNode = endNode.NextNode
If nextNode Is Nothing Then Return
+ Dim node As RowNode
+ For i As Integer = 2 To moveRows
+ node = _headNode.RowList(startMoveRow - _drawStartRow + i)
+ If startNode.RowLever <> node.RowLever Then
+ MsgBox("请选择同一级别节点再尝试此操作") '非同级别节点不移动
+ Return
+ End If
+ Next
+
Dim moveEndRow As Integer = startMoveRow + nextNode.AllChildCount + 1
Dim cmd As New GridNodeMoveDownCommand(Me, startMoveRow, moveRows, moveEndRow)
CommandManager.RunCommand(cmd) '添加到撤销堆栈执行
@@ -1782,8 +1839,10 @@ Namespace UTSModule.Station
Dim moveEndRow As Integer = startNode.ParentNode.RowListIndex + startNode.ParentNode.AllChildCount + 1
For i As Integer = 1 To moveRows
node = _headNode.RowList(startMoveRow - _drawStartRow + i)
- If node.RowLever < startNode.RowLever Then Exit For '高于起始节点级别不移动
- If node.RowLever > startNode.RowLever Then Continue For
+ If startNode.RowLever <> node.RowLever Then
+ MsgBox("请选择同一级别节点再尝试此操作") '非同级别节点不移动
+ Return
+ End If
moveEndRow -= (node.AllChildCount + 1)
Next
@@ -1840,6 +1899,15 @@ Namespace UTSModule.Station
If startNode.RowLever < 1 Then Return '固定节点不移动
If startNode.PrevNode Is Nothing Then Return '没有上一级节点
+ Dim node As RowNode
+ For i As Integer = 2 To moveRows
+ node = _headNode.RowList(startMoveRow - _drawStartRow + i)
+ If startNode.RowLever <> node.RowLever Then
+ MsgBox("请选择同一级别节点再尝试此操作") '非同级别节点不移动
+ Return
+ End If
+ Next
+
Dim moveRightNodeIndex As Integer = startNode.PrevNode.Children.Count
Dim moveEndRow As Integer = startNode.PrevNode.RowListIndex + startNode.PrevNode.AllChildCount + 1
@@ -1900,53 +1968,25 @@ Namespace UTSModule.Station
With _grd
Select Case e.ChangeType
Case RowNodeChangedEventArgs.RowNodeChangeType.Action
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.Action, .Cell(row, ColNames.Action).Text, node.Action.ToString())
-
.Cell(row, ColNames.Action).Text = IIf(node.Action, "1", "0").ToString()
+ NodeActionChanged(node)
Case RowNodeChangedEventArgs.RowNodeChangeType.RowType
- 'If node.RowType = RowNode.RowTypeEnum.FixedModule Then
- ' .Cell(row, ColNames.Label).FontSize = 10
- ' .Cell(row, ColNames.Label).FontBold = True
- 'ElseIf node.RowType = RowNode.RowTypeEnum.Module Then
- ' .Cell(row, ColNames.Label).FontSize = 8
- ' .Cell(row, ColNames.Label).FontBold = True
- 'ElseIf node.RowType = RowNode.RowTypeEnum.Flow Then
- ' .Cell(row, ColNames.Label).FontSize = 8
- ' .Cell(row, ColNames.Label).FontBold = False
- 'End If
- 'NodeActionChanged(node)
NodeRowTypeChanged(node)
Case RowNodeChangedEventArgs.RowNodeChangeType.Label
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.Label, .Cell(row, ColNames.Label).Text, node.Label.ToString())
-
.Cell(row, ColNames.Label).Text = $"{node.Label}"
Case RowNodeChangedEventArgs.RowNodeChangeType.ControlType
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.ControlType, .Cell(row, ColNames.ControlType).Text, node.ControlType.ToString())
-
.Cell(row, ColNames.ControlType).Text = $"{node.ControlType}"
Case RowNodeChangedEventArgs.RowNodeChangeType.Description
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.Description, .Cell(row, ColNames.Description).Text, node.Description.ToString())
-
.Cell(row, ColNames.Description).Text = $"{node.Description}"
Case RowNodeChangedEventArgs.RowNodeChangeType.SaveToDb
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.SaveToDb, .Cell(row, ColNames.SaveToDb).Text, node.SaveToDb.ToString())
-
.Cell(row, ColNames.SaveToDb).Text = IIf(node.SaveToDb, "1", "0").ToString()
Case RowNodeChangedEventArgs.RowNodeChangeType.RecordName
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.RecordName, .Cell(row, ColNames.RecordName).Text, node.RecordName.ToString())
-
.Cell(row, ColNames.RecordName).Text = $"{node.RecordName}"
Case RowNodeChangedEventArgs.RowNodeChangeType.Retry
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.Retry, .Cell(row, ColNames.Retry).Text, node.Retry.ToString())
-
.Cell(row, ColNames.Retry).Text = $"{node.Retry}"
Case RowNodeChangedEventArgs.RowNodeChangeType.RetryInterval
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.RetryInterval, .Cell(row, ColNames.RetryInterval).Text, node.RetryInterval.ToString())
-
.Cell(row, ColNames.RetryInterval).Text = $"{node.RetryInterval}"
Case RowNodeChangedEventArgs.RowNodeChangeType.ErrorCode
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.ErrorCode, .Cell(row, ColNames.ErrorCode).Text, node.ErrorCode.ToString())
-
.Cell(row, ColNames.ErrorCode).Text = $"{node.ErrorCode}"
If String.IsNullOrWhiteSpace(node.ErrorCode) = False Then
.Cell(row, ColNames.ErrorCode).BackColor = _errCodeManager(node.ErrorCode).Color
@@ -1956,35 +1996,34 @@ Namespace UTSModule.Station
.Cell(row, ColNames.ErrorMessage).BackColor = Color.White
End If
Case RowNodeChangedEventArgs.RowNodeChangeType.ErrorMessage
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.ErrorMessage, .Cell(row, ColNames.ErrorMessage).Text, node.ErrorMessage.ToString())
-
.Cell(row, ColNames.ErrorMessage).Text = $"{node.ErrorMessage}"
Case RowNodeChangedEventArgs.RowNodeChangeType.CommandType
If String.Compare(.Cell(row, ColNames.CommandType).Text, node.CommandType) <> 0 Then
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.CommandType, .Cell(row, ColNames.CommandType).Text, node.CommandType.ToString())
-
.Cell(row, ColNames.CommandType).Text = $"{node.CommandType}"
CommandTypeChanged(node)
+ NodeActionChanged(node)
End If
Case RowNodeChangedEventArgs.RowNodeChangeType.Command
If String.Compare(.Cell(row, ColNames.Command).Text, node.Command) <> 0 Then
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.Command, .Cell(row, ColNames.Command).Text, node.Command.ToString())
-
.Cell(row, ColNames.Command).Text = $"{node.Command}"
CommandChanged(node)
+ NodeActionChanged(node)
End If
Case RowNodeChangedEventArgs.RowNodeChangeType.Parameters
- cmd = New GridNodeTextChangedCommand(_grd, row, ColNames.Parameters, .Cell(row, ColNames.Parameters).Text, ParamsToString(node.Parameters))
-
.Cell(row, ColNames.Parameters).Text = $"{ParamsToString(node.Parameters)}"
End Select
End With
+ OnUserAction(e.BeforeNode)
+ OnUserActionEnd(e.Node)
+ 'If CommandManager.IsRuning = False Then
- If CommandManager.IsRuning = False AndAlso cmd IsNot Nothing Then
- CommandManager.RunCommand(cmd)
- RaiseEvent PlanGridCommandChanged(Nothing, Nothing)
- End If
+ ' Dim dic As New Dictionary(Of Integer, TextChangedRowNode) From {
+ ' {row, New TextChangedRowNode With {.BeforeRowNode = e.BeforeNode.Clone, .AfterRowNode = e.Node.Clone}}
+ ' }
+ ' CommandManager.AddUndoCommand(New GridNodeTextChangedCommand(Me, dic))
+ ' RaiseEvent PlanGridCommandChanged(Nothing, Nothing)
+ 'End If
StationEditStatusMonitor.StationEditStatus = StationEditStatusMonitor.StationEditStatusEnum.Changed