using CommunityToolkit.Mvvm.ComponentModel;
|
using Microsoft.Win32;
|
using OpenTap;
|
using SeqEditor.Util;
|
using System.IO;
|
using System.Windows;
|
using System.Windows.Controls;
|
using System.Windows.Data;
|
|
namespace OpenTapEditor;
|
|
public enum RuningMode
|
{
|
Stop = 0,
|
Running = 1,
|
RunningInStepMode = 2,
|
RunningInDebugMode = 3,
|
RunningInDebugModeButStep = 4
|
}
|
|
/// <summary>
|
/// Interaction logic for SequencePanel.xaml
|
/// </summary>
|
[ObservableObject]
|
public partial class SequencePanel : UserControl, ITabItem, IStepRunStatus
|
{
|
[ObservableProperty]
|
private TestPlan plan;
|
|
[ObservableProperty]
|
private ITestStep selectedTestStep;
|
|
[ObservableProperty]
|
private bool isRunning = false;
|
|
[ObservableProperty]
|
private bool hasChanged = false;
|
|
[ObservableProperty]
|
private RuningMode runingMode = RuningMode.Stop;
|
|
public StepSettingView SettingView { get => settingView; }
|
|
public string TabName
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(Plan?.Path)) return "New.TapPlan";
|
return Path.GetFileName(Plan.Path);
|
}
|
set
|
{
|
}
|
}
|
|
private ManualResetEvent SingleStepHandle = new ManualResetEvent(true);
|
|
public event EventHandler RunningFinished;
|
|
public SequencePanel(TestPlan plan)
|
{
|
Plan = plan;
|
InitializeComponent();
|
// bcSetting.Source = Plan;
|
|
BindingOperations.SetBinding(CbShowDetailLog, CheckBox.IsCheckedProperty,
|
new Binding(nameof(TestPlan.ShowDetailLog))
|
{
|
Source = Plan,
|
Mode = BindingMode.TwoWay,
|
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
|
});
|
|
treeView.Plan = Plan;
|
|
childSeqPanel.SetPlan(Plan);
|
childSeqPanel.SequencePropertyChanged += VariableControl_SequenceChanged;
|
|
|
variableControl.SetPlan(Plan);
|
Plan.ChildTestSteps.ChildStepsChanged += ChildTestSteps_ChildStepsChanged;
|
Plan.ChildTestSteps.CollectionChanged += ChildTestSteps_CollectionChanged;
|
}
|
|
private void VariableControl_SequenceChanged(object? sender, EventArgs e)
|
{
|
HasChanged = true;
|
}
|
|
private void ChildTestSteps_ChildStepsChanged(TestStepList senderList, TestStepList.ChildStepsChangedAction Action, ITestStep Object, int Index)
|
{
|
HasChanged = true;
|
}
|
|
private void ChildTestSteps_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
{
|
HasChanged = true;
|
}
|
|
private void Button_Click(object sender, RoutedEventArgs e)
|
{
|
var btn = (Button)sender;
|
switch (btn.Tag)
|
{
|
case "运行":
|
RunBtn();
|
break;
|
case "调试":
|
SeqEditorUI.Instance.RunTestPlan(Plan, treeView.Datasource.SequenceName, RuningMode.RunningInDebugMode);
|
//RunTestPlan(RuningMode.RunningInDebugMode);
|
break;
|
case "单步运行":
|
StepRuning();
|
break;
|
case "停止":
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void RunBtn()
|
{
|
if (IsRunning)
|
{
|
if (RuningMode == RuningMode.RunningInStepMode)
|
{
|
RuningMode = RuningMode.Running;
|
SingleStepHandle.Set();
|
return;
|
}
|
|
if (RuningMode == RuningMode.RunningInDebugModeButStep)
|
{
|
RuningMode = RuningMode.RunningInDebugMode;
|
SingleStepHandle.Set();
|
return;
|
}
|
|
if (RuningMode == RuningMode.RunningInDebugMode)
|
{
|
SingleStepHandle.Set();
|
return;
|
}
|
}
|
else
|
{
|
SeqEditorUI.Instance.RunTestPlan(Plan, treeView.Datasource.SequenceName, RuningMode.Running);
|
}
|
}
|
|
private void StepRuning()
|
{
|
if (IsRunning && RuningMode != RuningMode.Running)
|
{
|
if (RuningMode == RuningMode.RunningInDebugMode)
|
{
|
RuningMode = RuningMode.RunningInDebugModeButStep;
|
}
|
SingleStepHandle.Set();
|
}
|
else
|
{
|
SeqEditorUI.Instance.RunTestPlan(Plan, treeView.Datasource.SequenceName, RuningMode.RunningInStepMode);
|
}
|
}
|
|
public bool TrySaveTestStep(Func<string, bool> check)
|
{
|
if (!string.IsNullOrEmpty(Plan.Path))
|
{
|
Plan.Save(Plan.Path);
|
HasChanged = false;
|
OnPropertyChanged(nameof(TabName));
|
return true;
|
}
|
return TrySaveAs(check);
|
}
|
|
public bool TrySaveAs(Func<string, bool> check)
|
{
|
SaveFileDialog sfd = new SaveFileDialog()
|
{
|
Filter = "Test Plan|*.TapPlan",
|
DefaultExt = ".TapPlan"
|
};
|
if (sfd.ShowDialog() == true)
|
{
|
if (check.Invoke(sfd.FileName))
|
{
|
Plan.Save(sfd.FileName);
|
HasChanged = false;
|
OnPropertyChanged(nameof(TabName));
|
return true;
|
}
|
}
|
return false;
|
}
|
|
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
|
{
|
if (e.NewValue != null)
|
{
|
settingView.UpdateSource((ITestStep)e.NewValue);
|
SelectedTestStep = (ITestStep)e.NewValue;
|
}
|
}
|
|
private void variableControl_SelectedSequenceChanged(object sender, TestStepList e)
|
{
|
treeView.Datasource = e;
|
settingView.Seq = e;
|
variableControl.SetSeq(e);
|
}
|
|
public void ComplatedStepId(Guid id)
|
{
|
Dispatcher.BeginInvoke(() =>
|
{
|
treeView.ComplatedIds[id] = true;
|
treeView.UpdateStepStatus();
|
});
|
}
|
|
public void CurrentStepId(Guid id)
|
{
|
Dispatcher.BeginInvoke(() =>
|
{
|
treeView.ComplatedIds.TryRemove(id, out _);
|
treeView.UpdateStepStatus();
|
treeView.RunningStepId = id;
|
});
|
}
|
|
private void self_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
|
{
|
|
}
|
|
public void Close()
|
{
|
variableControl.SetPlan(null);
|
settingView = null;
|
Plan = null;
|
treeView.Unload();
|
}
|
}
|