using AddInPlugin; using AddInPlugin.Entity; using CommunityToolkit.Mvvm.ComponentModel; using OpenTap; using OpenTap.Addin.Util; using OpenTapEditor.Provider; using OpenTapEditor.Util; using System.IO; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; namespace OpenTapEditor { /// /// AdapterSetting.xaml 的交互逻辑 /// [ObservableObject] public partial class AdapterSetting : Window { [ObservableProperty] private string stepName; [ObservableProperty] private string stepGroup; [ObservableProperty] private string typeName; [ObservableProperty] private List groupSource = new List(); private ITestStep step; private AdapterData data; private bool isEdit; private IList datasource; public AdapterSetting() { DataContext = this; InitializeComponent(); GroupSource = StepTypeLoader.CustomSteps.Select(s => s.GroupBy) .Distinct().ToList(); } public bool? Open(ITestStep step, IList datasource) { try { this.datasource = datasource; TypeName = step.GetType().Name; this.step = step; data = new AdapterData(); isEdit = false; UpdateSource(this.step); } catch (Exception ex) { } return this.ShowDialog(); } public bool? Open(AdapterData data, IList datasource, bool isEdit) { this.isEdit = isEdit; StepGroup = data.Group; if (isEdit) { StepName = data.Name; this.data = data; } else { this.data = new AdapterData(); } this.datasource = datasource; TapSerializer serializer = new TapSerializer(); ITestStep step = (ITestStep)serializer.DeserializeFromString(data.Xml, TypeData.FromType(typeof(ITestStep))); this.step = step; UpdateSource(this.step); return this.ShowDialog(); } private void UpdateSource(object obj) { //var annotations = AnnotationCollection.Annotate(obj); view.Children.Clear(); //view.Children.Add(DutControlProvider.GetControl(annotations)); view.Children.Add(FormGroupProvider.GetControl(obj, null)); } private void Button_Click(object sender, RoutedEventArgs e) { var btn = (Button)sender; if (btn.IsCancel) { this.Close(); return; } try { if (string.IsNullOrEmpty(StepName)) { FgName.ValidateResult = Panuon.WPF.UI.ValidateResult.Error; FgName.Message = "请输入名称"; return; } var temp = datasource.FirstOrDefault(e => e.Name == this.StepName); if (temp != null && temp != data) { FgName.ValidateResult = Panuon.WPF.UI.ValidateResult.Error; FgName.Message = "名称不能重复"; return; } TapSerializer serializer = new TapSerializer(); using (var str = new MemoryStream()) { serializer.Serialize(str, this.step); var xmlCache = Encoding.UTF8.GetString(str.ToArray()); //XmlDocument doc = new XmlDocument(); //doc.LoadXml(xmlCache); //XmlNode myNode = doc.DocumentElement; data.Name = this.StepName; data.Group = this.StepGroup; data.Xml = xmlCache; data.DataValue = new SerializableDictionary(); if (this.step is VariableTestStep vts && vts.MethodVariables != null) { foreach (var mv in vts.MethodVariables) { data.DataValue[mv.Name] = mv.ValueStr; } } if (!isEdit) { datasource.Add(data); } StepTypeLoader.SaveAdapterStep(); this.Close(); } } catch (Exception ex) { } } private void ComboBox_GotFocus(object sender, RoutedEventArgs e) { var comboBox = (ComboBox)sender; comboBox.IsDropDownOpen = true; } private void ComboBox_Loaded(object sender, RoutedEventArgs e) { var comboBox = (ComboBox)sender; comboBox.AddHandler(TextBoxBase.TextChangedEvent, new TextChangedEventHandler(ComboBox_GotFocus)); comboBox.Loaded -= ComboBox_Loaded; } } }