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 e) { if (e.NewValue != null) { settingView.UpdateSource(e.NewValue); SelectedTestStep = (ITestStep)e.NewValue; } } private void variableControl_SelectedSequenceChanged(object sender, TestStepList e) { treeView.Datasource = e; } }