using CommunityToolkit.Mvvm.ComponentModel;
|
using OpenTap;
|
using OpenTapEditor.Provider;
|
using System.Collections.ObjectModel;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Windows;
|
using System.Windows.Controls;
|
|
namespace OpenTapEditor
|
{
|
/// <summary>
|
/// SettingWin.xaml 的交互逻辑
|
/// </summary>
|
[ObservableObject]
|
public partial class SettingWin : Window
|
{
|
|
private IEnumerable<TypeData> settings;
|
|
private DutSettings dutSettings;
|
private InstrumentSettings instSettings;
|
private IEnumerable<ITypeData> dutComponents;
|
private IEnumerable<ITypeData> instComponents;
|
|
[ObservableProperty]
|
public ObservableCollection<IDut> duts;
|
|
[ObservableProperty]
|
public ObservableCollection<IInstrument> insts;
|
|
|
|
public SettingWin()
|
{
|
DataContext = this;
|
InitializeComponent();
|
LoadDUTs();
|
}
|
|
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 LoadDUTs()
|
{
|
try
|
{
|
var settings = TypeData.GetDerivedTypes<ComponentSettings>()
|
.Where(x => x.CanCreateInstance && (x.GetAttribute<BrowsableAttribute>()?.Browsable ?? true));
|
this.settings = settings.OfType<TypeData>();
|
foreach (var setting in this.settings)
|
{
|
ComponentSettings obj = null;
|
try
|
{
|
obj = ComponentSettings.GetCurrent(setting.Load());
|
if (obj == null) continue;
|
if (obj is DutSettings ds)
|
{
|
dutSettings = ds;
|
Duts = new ObservableCollection<IDut>(ds);
|
}
|
else if (obj is InstrumentSettings ist)
|
{
|
instSettings = ist;
|
Insts = new ObservableCollection<IInstrument>(ist);
|
}
|
var setgroup = setting.GetAttribute<SettingsGroupAttribute>()?.GroupName ?? "Settings";
|
var name = setting.GetDisplayAttribute().Name;
|
}
|
catch (Exception ex)
|
{
|
//Log.Error(ex);
|
//ComponentSettings.SaveAllCurrentSettings();
|
}
|
}
|
ITypeData parentType = null;
|
TypeData AsTypeData(ITypeData typedata)
|
{
|
do
|
{
|
if (typedata is TypeData td)
|
return td;
|
typedata = typedata?.BaseType;
|
} while (typedata != null);
|
return null;
|
}
|
|
dutComponents = TypeData.GetDerivedTypes(TypeData.FromType(GetEnumerableElementType(typeof(DutSettings))))
|
.Where(x => x.CanCreateInstance)
|
.Where(x => x.GetAttribute<BrowsableAttribute>()?.Browsable ?? true)
|
.Where(x => parentType == null ? true : TestStepList.AllowChild(AsTypeData(parentType).Type, AsTypeData(x)?.Type));
|
|
instComponents = TypeData.GetDerivedTypes(TypeData.FromType(GetEnumerableElementType(typeof(InstrumentSettings))))
|
.Where(x => x.CanCreateInstance)
|
.Where(x => x.GetAttribute<BrowsableAttribute>()?.Browsable ?? true)
|
.Where(x => parentType == null ? true : TestStepList.AllowChild(AsTypeData(parentType).Type, AsTypeData(x)?.Type));
|
|
// ComponentSettings.SaveAllCurrentSettings();
|
|
}
|
catch (Exception ex)
|
{
|
|
}
|
}
|
|
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
{
|
if (e.AddedItems == null || e.AddedItems.Count <= 0) return;
|
if (sender == dutsView)
|
{
|
var obj = (Dut)e.AddedItems[0];
|
AnnotationCollection annotation = AnnotationCollection.Annotate(obj);
|
StackPanel stack = DutControlProvider.GetControl(annotation);
|
dutSettingPanel.Child = stack;
|
}
|
else {
|
var obj = (Instrument)e.AddedItems[0];
|
AnnotationCollection annotation = AnnotationCollection.Annotate(obj);
|
StackPanel stack = DutControlProvider.GetControl(annotation);
|
instSettingPanel.Child = stack;
|
}
|
}
|
|
private void Window_Closing(object sender, CancelEventArgs e)
|
{
|
ComponentSettings.SaveAllCurrentSettings();
|
}
|
}
|
}
|