using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.Win32;
using OpenTap;
using OpenTap.Addin;
using System.IO;
using System.Windows;
using System.Windows.Controls;
namespace OpenTapEditor;
///
/// Interaction logic for SequencePanel.xaml
///
[ObservableObject]
public partial class SequencePanel : UserControl, ITabItem
{
private TestPlan Plan;
private TapThread testPlanThread;
[ObservableProperty]
private ITestStep selectedTestStep;
[ObservableProperty]
private bool isRunning = false;
[ObservableProperty]
private bool hasChanged = false;
[ObservableProperty]
private string tabName;
public SequencePanel(string tabName, TestPlan plan)
{
TabName = tabName;
InitializeComponent();
Plan = plan;
bcSetting.Source = Plan;
treeView.Plan = Plan;
variableControl.SetPlan(Plan);
variableControl.SequenceChanged += VariableControl_SequenceChanged;
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 = sender as Button;
switch (btn.Content)
{
case "运行":
RunTestPlan();
break;
case "停止":
StopRunTestPlan();
break;
default:
break;
}
}
private void RunTestPlan()
{
IsRunning = true;
testPlanThread = TapThread.Start(() =>
{
var res = ResultSettings.Current;
Plan.Execute(treeView.Datasource.SequenceName, ResultSettings.Current, null);
IsRunning = false;
});
}
private void StopRunTestPlan()
{
testPlanThread?.Abort();
}
public bool TrySaveTestStep()
{
if (!string.IsNullOrEmpty(Plan.Path))
{
Plan.Save(Plan.Path);
HasChanged = false;
TabName = Path.GetFileName(Plan.Path);
return true;
}
else
{
SaveFileDialog sfd = new SaveFileDialog()
{
Filter = "Test Plan|*.TapPlan",
DefaultExt = ".TapPlan"
};
if (sfd.ShowDialog() == true)
{
UIStationGlobalsManager.Instance.WriteToLocal(UIStationGlobalsManager.Instance.Datasource);
Plan.Save(sfd.FileName);
HasChanged = false;
TabName = Path.GetFileName(Plan.Path);
return true;
}
}
return false;
}
public void TrySaveAs()
{
SaveFileDialog sfd = new SaveFileDialog()
{
Filter = "Test Plan|*.TapPlan",
DefaultExt = ".TapPlan"
};
if (sfd.ShowDialog() == true)
{
UIStationGlobalsManager.Instance.WriteToLocal(UIStationGlobalsManager.Instance.Datasource);
Plan.Save(sfd.FileName);
HasChanged = false;
TabName = Path.GetFileName(Plan.Path);
}
}
private void treeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs