using AddInPlugin.Entity;
using CommunityToolkit.Mvvm.ComponentModel;
using OpenTap;
using OpenTap.Addin.Annotation;
using OpenTapEditor.Util;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace OpenTapEditor
{
///
/// Steps.xaml 的交互逻辑
///
[ObservableObject]
public partial class StepWindow : Window
{
[ObservableProperty]
private ObservableCollection steps;
[ObservableProperty]
private ObservableCollection customSteps = new ObservableCollection();
[ObservableProperty]
private object targetType;
public bool IsAddChild { get; set; } = false;
public bool Changed { get; private set; } = false;
public StepWindow()
{
DataContext = this;
Changed = false;
InitializeComponent();
LoadSteps();
}
private void LoadSteps()
{
Steps = new ObservableCollection(StepTypeLoader.Steps.Where(e => e.GetAttribute() != null).ToList());
CustomSteps = StepTypeLoader.CustomSteps;
}
private void HandleDoubleClick(object sender, MouseButtonEventArgs e)
{
TargetType = ((ListViewItem)e.Source).DataContext;
DialogResult = true;
this.Close();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var btn = (Button)sender;
switch (btn.Tag)
{
case "Create":
TryAddNewAdapter(btn.DataContext);
break;
case "Copy":
TryEditAdapter(btn.DataContext, false);
break;
case "Edit":
TryEditAdapter(btn.DataContext, true);
break;
case "Delete":
TryDeleteAdapter(btn.DataContext);
break;
}
}
private void TryAddNewAdapter(object obj)
{
if (obj == null)
{
return;
}
try
{
if (obj is ITypeData type)
{
var newStep = (ITestStep)type.CreateInstance();
var setting = new AdapterSetting
{
Owner = this
};
setting.Open(newStep, CustomSteps);
}
else if (obj is AdapterData data)
{
}
}
catch (Exception ex)
{
}
}
private void TryEditAdapter(object obj, bool isEdit)
{
if (obj == null)
{
return;
}
try
{
if (obj is AdapterData data)
{
var setting = new AdapterSetting
{
Owner = this
};
setting.Open(data, CustomSteps, isEdit);
}
}
catch (Exception ex)
{
}
}
private void TryDeleteAdapter(object obj)
{
if (obj == null)
{
return;
}
try
{
if (obj is AdapterData data)
{
if (MessageBox.Show($"确定要删除 [{data.Name}] 吗?", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
CustomSteps.Remove(data);
StepTypeLoader.SaveAdapterStep();
}
}
}
catch (Exception ex)
{
}
}
}
}