using AddInPlugin;
|
using AddInPlugin.Util;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
using Microsoft.Win32;
|
using OpenTap;
|
using OpenTap.Addin;
|
using OpenTap.Addin.Util;
|
using OpenTap.Diagnostic;
|
using OpenTap.Tui.Views;
|
using OpenTapEditor.UI;
|
using System.Collections.ObjectModel;
|
using System.IO;
|
using System.Reflection;
|
using System.Security.Cryptography;
|
using System.Windows;
|
using System.Windows.Controls;
|
using UtilLib;
|
|
namespace OpenTapEditor;
|
|
/// <summary>
|
/// Interaction logic for MainWindow.xaml
|
/// </summary>
|
[ObservableObject]
|
public partial class MainWindow : Window
|
{
|
|
[ObservableProperty]
|
private ObservableCollection<MenuItem> fileItems;
|
|
[ObservableProperty]
|
private ObservableCollection<TabItemData> tabItems = new ObservableCollection<TabItemData>();
|
|
[ObservableProperty]
|
private ObservableCollection<MenuItem> fileMenuItems = new ObservableCollection<MenuItem>();
|
|
[ObservableProperty]
|
private TabItemData selectedTab;
|
|
public MainWindow()
|
{
|
InitializeComponent();
|
RefreshFileMenuItems();
|
ResultSettings.Current.Add(new UIListener(this));
|
Log.AddListener(logControl);
|
PostUIMsgHandler.OnPostUIMsg += PostUIMsgHandler_OnPostUIMsg;
|
StationGlobalsManager.Register(UIStationGlobalsManager.Instance);
|
VariableResolver.Register(new DefaultVariableResolver());
|
}
|
|
private void PostUIMsgHandler_OnPostUIMsg(object? sender, PostUIMsg e)
|
{
|
logControl.EventsLogged(new List<Event>
|
{
|
new Event{
|
Message = $"string:{e.StringData} bool:{e.BoolData} number:{e.NumberData}"
|
}
|
});
|
}
|
|
private void LoadRecentFiles()
|
{
|
historyFile.Clear();
|
try
|
{
|
var list = XmlHelper.DeserializeFromXml<List<string>>(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "RecentFiles.xml"));
|
if (list != null)
|
{
|
foreach (var file in list)
|
{
|
historyFile.Enqueue(file);
|
}
|
}
|
}
|
catch
|
{
|
historyFile = new Queue<string>(10);
|
}
|
}
|
|
private void RefreshFileMenuItems()
|
{
|
FileMenuItems.Clear();
|
|
var child = new MenuItem()
|
{
|
Header = "新建",
|
};
|
child.Click += (sender, e) =>
|
{
|
var testPlan = new TestPlan();
|
var tabItem = new TabItemData
|
{
|
Content = new SequencePanel("New Seq.TapPlan", testPlan)
|
};
|
TabItems.Add(tabItem);
|
SelectedTab = tabItem;
|
};
|
FileMenuItems.Add(child);
|
|
child = new MenuItem()
|
{
|
Header = "打开",
|
};
|
child.Click += MenuItem_Click;
|
FileMenuItems.Add(child);
|
var panel = SelectedTab?.Content as SequencePanel;
|
|
if (panel != null)
|
{
|
child = new MenuItem()
|
{
|
Header = $"保存{panel.TabName}",
|
};
|
child.Click += (sender, e) => { panel.TrySaveTestStep(); };
|
}
|
else
|
{
|
child = new MenuItem()
|
{
|
Header = $"保存",
|
IsEnabled = false
|
};
|
}
|
FileMenuItems.Add(child);
|
|
if (panel != null)
|
{
|
child = new MenuItem()
|
{
|
Header = $"另存{panel.TabName}",
|
};
|
child.Click += (sender, e) => { panel.TrySaveAs(); };
|
}
|
else
|
{
|
child = new MenuItem()
|
{
|
Header = $"另存",
|
IsEnabled = false
|
};
|
}
|
FileMenuItems.Add(child);
|
}
|
|
private void SaveRecentFiles()
|
{
|
var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config");
|
if (!Directory.Exists(dir))
|
{
|
Directory.CreateDirectory(dir);
|
}
|
var path = Path.Combine(dir, "RecentFiles.xml");
|
XmlHelper.SerializeToXml(path, historyFile);
|
}
|
|
private Queue<string> historyFile = new Queue<string>(10);
|
|
|
public static Type GetEnumerableElementType(Type enumType)
|
{
|
if (enumType.IsArray)
|
return enumType.GetElementType();
|
|
var ienumInterface = enumType.GetInterface("IEnumerable`1") ?? enumType;
|
if (ienumInterface != null)
|
return ienumInterface.GetGenericArguments().FirstOrDefault();
|
|
return typeof(object);
|
}
|
|
private void OpenStepSettingWin()
|
{
|
var win = new StepWindow()
|
{
|
Owner = Window.GetWindow(this)
|
};
|
if (win.ShowDialog() == true)
|
{
|
|
}
|
}
|
|
private void MenuItem_Click(object sender, RoutedEventArgs e)
|
{
|
var item = sender as MenuItem;
|
if (item?.Tag?.ToString() == "UISetting")
|
{
|
UISettiingWin win = new UISettiingWin
|
{
|
Owner = this
|
};
|
win.ShowDialog();
|
return;
|
}
|
|
switch (item?.Header)
|
{
|
case "打开":
|
TryOpenTestPlanNew();
|
break;
|
case "保存":
|
// TrySaveTestStep();
|
break;
|
case "另存":
|
break;
|
case "自定义测试步骤":
|
OpenStepSettingWin();
|
break;
|
case "openSetting":
|
var setting = new SettingWin()
|
{
|
Owner = this
|
};
|
setting.ShowDialog();
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void self_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
{
|
/// 保存一下StationGlobals变量
|
UIStationGlobalsManager.Instance.WriteToLocal(UIStationGlobalsManager.Instance.Datasource);
|
}
|
|
private void CloseTabItem_Click(object sender, RoutedEventArgs e)
|
{
|
try
|
{
|
if (sender is Button button && button.Tag is TabItemData tabItem)
|
{
|
if (tabItem.Content.HasChanged)
|
{
|
if (SelectedTab != tabItem)
|
{
|
SelectedTab = tabItem;
|
}
|
var res = MessageBox.Show("是否保存?", "提示", MessageBoxButton.YesNoCancel);
|
if (res == MessageBoxResult.Cancel)
|
{
|
return;
|
}
|
if (res == MessageBoxResult.Yes)
|
{
|
var panel = (SequencePanel)tabItem.Content;
|
if (!panel.TrySaveTestStep())
|
{
|
return;
|
}
|
}
|
}
|
TabItems.Remove(tabItem);
|
}
|
}
|
catch (Exception ex)
|
{
|
|
}
|
}
|
|
private void TryOpenTestPlanNew()
|
{
|
OpenFileDialog ofd = new OpenFileDialog()
|
{
|
Filter = "Test Plan|*.TapPlan",
|
DefaultExt = ".TapPlan"
|
};
|
if (ofd.ShowDialog() == true)
|
{
|
try
|
{
|
var testPlan = TestPlan.Load(ofd.FileName);
|
var tabItem = new TabItemData
|
{
|
Content = new SequencePanel(Path.GetFileName(ofd.FileName), testPlan)
|
};
|
TabItems.Add(tabItem);
|
SelectedTab = tabItem;
|
|
|
|
// historyFile.Enqueue(ofd.FileName);
|
// SaveRecentFiles();
|
}
|
catch (Exception ex)
|
{
|
MessageBox.Show($"打开测试计划失败: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
}
|
}
|
}
|
|
partial void OnSelectedTabChanged(TabItemData value)
|
{
|
RefreshFileMenuItems();
|
}
|
}
|