using CommunityToolkit.Mvvm.ComponentModel; using NationalInstruments.TestStand.Interop.API; using System.Collections.ObjectModel; using System.Runtime.InteropServices; namespace Plugin.SeqEditor.Entity { public partial class StepUI : ObservableObject { ~StepUI() { if (step != null) { Marshal.ReleaseComObject(step); } } public Step step { get; private set; } public Sequence sequence { get; private set; } public event EventHandler SettingChanged; public int IndexInSequence { get { return sequence.GetStepIndex(Name, StepGroup); } } public StepUI(Step step, Sequence sequence) { this.step = step; this.sequence = sequence; } public void UpdatePropertyChanged(string name) { OnPropertyChanged(name); } protected new void OnPropertyChanged(string name) { base.OnPropertyChanged(name); SettingChanged?.Invoke(this, name); } public string Name { get => step?.Name; set { if (step != null) { step.Name = value; OnPropertyChanged(nameof(Name)); } } } public string Description { get => step?.Description; } public string RunMode { get => step?.GetRunModeEx(); set { if (step != null) { step.SetRunModeEx(value); OnPropertyChanged(nameof(RunMode)); } } } public string Type { get => step?.StepType?.Name; } public bool CanChangeAdapter { get => step?.CanChangeAdapter() ?? true; } public string Adapter { get => step?.AdapterKeyName; set { if (step != null) { step.ChangeAdapter(value); OnPropertyChanged(nameof(RunMode)); } } } public StepGroups StepGroup { get { return step.StepGroup; } } [ObservableProperty] private string group; [ObservableProperty] public ObservableCollection children = new(); public override string ToString() { return Name; } } }