| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 | 
							- namespace HistoryView.ViewModels.Dialogs;
 
- internal partial class ChannedDetailViewModel(Data.Hardwares hardwares, MessageBoxHelper messageBoxHelper, HubSender sender, HistoryViewer historyViewer, UserInformation user) : ObservableObject, IDialogAwareTitle
 
- {
 
-     public DialogCloseListener RequestClose { get; set; }
 
-     public string Title { get; set; } = "Channel Setting";
 
-     [ObservableProperty]
 
-     private Mini8Info? _Mini8Info;
 
-     [ObservableProperty]
 
-     private Channel? _Channel;
 
-     [ObservableProperty]
 
-     private Channel? _ChannelSet;
 
-     [ObservableProperty]
 
-     private UserInformation? _UserInfo;
 
-     [ObservableProperty]
 
-     private ObservableCollection<string>? _BackWords;
 
-     [ObservableProperty]
 
-     private RealtimeDataPlotHelper? _PlotHelper;
 
-     public bool CanCloseDialog() => true;
 
-     public void OnDialogClosed()
 
-     {
 
-         this.PlotHelper?.Dispose();
 
-         this.Mini8Info = null;
 
-         this.Channel = null;
 
-         this.ChannelSet = null;
 
-         this.UserInfo = null;
 
-         this.BackWords = null;
 
-         this.PlotHelper = null;
 
-     }
 
-     public void OnDialogOpened(IDialogParameters parameters)
 
-     {
 
-         this.UserInfo = user;
 
-         this.PlotHelper = new();
 
-         if (parameters.TryGetValue("Channel", out Channel? channel) && channel is not null)
 
-         {
 
-             this.Channel = channel;
 
-             this.PlotHelper.InitPlot(channel);
 
-             this.BackWords ??= [];
 
-             HashSet<string> hs = [];
 
-             if (hardwares.Mini8s.TryGetValue(channel.Mini8Index, out Mini8Info? mini8Info) && mini8Info is not null)
 
-                 this.Mini8Info = mini8Info;
 
-             foreach (Channel item in hardwares.Mini8Channels[channel.Mini8Index].Values)
 
-             {
 
-                 if (item is null || string.IsNullOrEmpty(item.Name))
 
-                     continue;
 
-                 hs.Add(item.Name);
 
-             }
 
-             this.BackWords.AddRange(hs);
 
-         }
 
-         this.ChannelSet = new();
 
-         channel.Adapt(this.ChannelSet);
 
-     }
 
-     [RelayCommand]
 
-     private async Task Operate(string para)
 
-     {
 
-         bool succcess = false;
 
-         if (this.ChannelSet is null)
 
-             goto Hint;
 
-         if (this.Channel is not null &&
 
-             this.Channel.Inhibit == Inhibit.Disable &&
 
-             this.ChannelSet.Inhibit == Inhibit.Disable)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Inhibit Status: {this.Channel.Inhibit}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         if (ChannelSet.Caps < ChannelSet.CapsWarning ||
 
-             ChannelSet.CapsWarning < ChannelSet.FloorWarning ||
 
-             ChannelSet.FloorWarning < ChannelSet.Floor)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Please follow the rule:{Environment.NewLine} Caps > CapsWarning > FloorWarning > Floor", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         if (this.Channel is not null && this.Channel.ChannelMode != ChannelMode.Control)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Channel Mode: {this.Channel.ChannelMode}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         IDialogResult result = await messageBoxHelper.ShowAsync(Compare(), MessageBoxButton.OKCancel, MessageBoxImage.Question);
 
-         if (result.Result != ButtonResult.OK)
 
-             return;
 
-         succcess = sender.SendSetValue(this.ChannelSet);
 
-     Hint:
 
-         if (!succcess)
 
-             await messageBoxHelper.ShowAsync("Failed", MessageBoxButton.OK, MessageBoxImage.Error);
 
-     }
 
-     [RelayCommand]
 
-     private async Task EnableAT()
 
-     {
 
-         if (this.Channel is null)
 
-             return;
 
-         if (this.Channel.Inhibit == Inhibit.Disable)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Inhibit Status: {this.Channel.Inhibit}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         if (this.Channel.ChannelMode != ChannelMode.Control)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Channel Mode: {this.Channel.ChannelMode}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         switch (this.Channel.AutoTuneStatus)
 
-         {
 
-             case AutoTuneStatus.Ready:
 
-             case AutoTuneStatus.Complete:
 
-             case AutoTuneStatus.Aborted:
 
-             case AutoTuneStatus.Timeout:
 
-             case AutoTuneStatus.Overflow:
 
-             case AutoTuneStatus.Unavailable:
 
-                 break;
 
-             case AutoTuneStatus.Triggered:
 
-             case AutoTuneStatus.Tuning:
 
-                 await messageBoxHelper.ShowAsync($"AutoTune Status: {this.Channel.AutoTuneStatus}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-                 return;
 
-             default:
 
-                 break;
 
-         }
 
-         IDialogResult? result = await messageBoxHelper.ShowAsync((string)App.Current.Resources["SendParameter"], MessageBoxButton.OKCancel, MessageBoxImage.Question);
 
-         if (result is null || result.Result != ButtonResult.OK)
 
-             return;
 
-         if (!sender.EnableAT(this.Channel.Mini8Index, this.Channel.ChannelIndex, true))
 
-             await messageBoxHelper.ShowAsync("Failed", MessageBoxButton.OK, MessageBoxImage.Error);
 
-     }
 
-     [RelayCommand]
 
-     private async Task AbortAT()
 
-     {
 
-         if (this.Channel is null)
 
-             return;
 
-         if (this.Channel.Inhibit == Inhibit.Disable)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Inhibit Status: {this.Channel.Inhibit}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         if (this.Channel.ChannelMode != ChannelMode.Control)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Channel Mode: {this.Channel.ChannelMode}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         IDialogResult? result = await messageBoxHelper.ShowAsync((string)App.Current.Resources["SendParameter"], MessageBoxButton.OKCancel, MessageBoxImage.Question);
 
-         if (result is null || result.Result != ButtonResult.OK)
 
-             return;
 
-         if (!sender.EnableAT(this.Channel.Mini8Index, this.Channel.ChannelIndex, false))
 
-             await messageBoxHelper.ShowAsync("Failed", MessageBoxButton.OK, MessageBoxImage.Error);
 
-     }
 
-     [RelayCommand]
 
-     private async Task EnableChannel(string para)
 
-     {
 
-         if (this.Channel is null)
 
-             return;
 
-         if (string.IsNullOrEmpty(para))
 
-             return;
 
-         IDialogResult? result = await messageBoxHelper.ShowAsync((string)App.Current.Resources["SendParameter"], MessageBoxButton.OKCancel, MessageBoxImage.Question);
 
-         if (result is null || result.Result != ButtonResult.OK)
 
-             return;
 
-         bool isSuccess = para switch
 
-         {
 
-             "Enable" => sender.EnableChannel(this.Channel.Mini8Index, this.Channel.ChannelIndex, Inhibit.Enable),
 
-             "Disable" => sender.EnableChannel(this.Channel.Mini8Index, this.Channel.ChannelIndex, Inhibit.Disable),
 
-             "Control" => sender.SwitchChannelMode(this.Channel.Mini8Index, this.Channel.ChannelIndex, ChannelMode.Control),
 
-             "Monitor" => sender.SwitchChannelMode(this.Channel.Mini8Index, this.Channel.ChannelIndex, ChannelMode.Monitor),
 
-             _ => false
 
-         };
 
-         if (!isSuccess)
 
-             await messageBoxHelper.ShowAsync("Failed", MessageBoxButton.OK, MessageBoxImage.Error);
 
-     }
 
-     [RelayCommand]
 
-     private async Task ApplyPID()
 
-     {
 
-         if (this.ChannelSet is null || this.Channel is null)
 
-             return;
 
-         if (this.Channel.Inhibit == Inhibit.Disable)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Inhibit Status: {this.Channel.Inhibit}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         if (this.Channel.ChannelMode != ChannelMode.Control)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Channel Mode: {this.Channel.ChannelMode}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         switch (this.Channel.AutoTuneStatus)
 
-         {
 
-             case AutoTuneStatus.Complete:
 
-                 break;
 
-             case AutoTuneStatus.Ready:
 
-             case AutoTuneStatus.Aborted:
 
-             case AutoTuneStatus.Timeout:
 
-             case AutoTuneStatus.Overflow:
 
-             case AutoTuneStatus.Unavailable:
 
-             case AutoTuneStatus.Triggered:
 
-             case AutoTuneStatus.Tuning:
 
-             default:
 
-                 await messageBoxHelper.ShowAsync($"AutoTune Status: {this.Channel.AutoTuneStatus}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-                 return;
 
-         }
 
-         this.ChannelSet.Running_P = this.Channel.AutoTune_P;
 
-         this.ChannelSet.Running_I = this.Channel.AutoTune_I;
 
-         this.ChannelSet.Running_D = this.Channel.AutoTune_D;
 
-         IDialogResult? result = await messageBoxHelper.ShowAsync(Compare(), MessageBoxButton.OKCancel, MessageBoxImage.Question);
 
-         if (result is null || result.Result != ButtonResult.OK)
 
-             return;
 
-         bool success = sender.SelectPID(this.Channel.Mini8Index, this.Channel.ChannelIndex, ActiveTuneSet.Running);
 
-         success &= sender.SendSetValue(this.ChannelSet);
 
-         if (!success)
 
-             await messageBoxHelper.ShowAsync("Failed", MessageBoxButton.OK, MessageBoxImage.Error);
 
-     }
 
-     [RelayCommand]
 
-     private async Task SelectPID(string para)
 
-     {
 
-         if (this.Channel is null)
 
-             return;
 
-         if (this.Channel.Inhibit == Inhibit.Disable)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Inhibit Status: {this.Channel.Inhibit}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         if (this.Channel.ChannelMode != ChannelMode.Control)
 
-         {
 
-             await messageBoxHelper.ShowAsync($"Channel Mode: {this.Channel.ChannelMode}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-             return;
 
-         }
 
-         switch (this.Channel.AutoTuneStatus)
 
-         {
 
-             case AutoTuneStatus.Ready:
 
-             case AutoTuneStatus.Complete:
 
-             case AutoTuneStatus.Aborted:
 
-             case AutoTuneStatus.Timeout:
 
-             case AutoTuneStatus.Overflow:
 
-             case AutoTuneStatus.Unavailable:
 
-                 break;
 
-             case AutoTuneStatus.Triggered:
 
-             case AutoTuneStatus.Tuning:
 
-                 await messageBoxHelper.ShowAsync($"AutoTune Status: {this.Channel.AutoTuneStatus}", MessageBoxButton.OK, MessageBoxImage.Error);
 
-                 return;
 
-             default:
 
-                 break;
 
-         }
 
-         if (string.IsNullOrEmpty(para))
 
-             return;
 
-         IDialogResult? result = await messageBoxHelper.ShowAsync((string)App.Current.Resources["SendParameter"], MessageBoxButton.OKCancel, MessageBoxImage.Question);
 
-         if (result is null || result.Result != ButtonResult.OK)
 
-             return;
 
-         bool isSuccess = para switch
 
-         {
 
-             "Running" => sender.SelectPID(this.Channel.Mini8Index, this.Channel.ChannelIndex, ActiveTuneSet.Running),
 
-             "Autotune" => sender.SelectPID(this.Channel.Mini8Index, this.Channel.ChannelIndex, ActiveTuneSet.AutoTune),
 
-             _ => false
 
-         };
 
-         if (!isSuccess)
 
-             await messageBoxHelper.ShowAsync("Failed", MessageBoxButton.OK, MessageBoxImage.Error);
 
-     }
 
-     [RelayCommand]
 
-     private void ViewHistory()
 
-     {
 
-         if (this.Channel is null)
 
-             return;
 
-         if (!historyViewer.StartChannelHistory(Channel.Mini8Index, Channel.ChannelIndex))
 
-             return;
 
-     }
 
-     [RelayCommand]
 
-     private void Exit() => this.RequestClose.Invoke();
 
-     private string Compare()
 
-     {
 
-         if (this.ChannelSet is null || Channel is null)
 
-             return string.Empty;
 
-         StringBuilder sb = new();
 
-         sb.AppendLine((string)App.Current.Resources["SendParameter"]);
 
-         SBHelper("SetValue", Channel.SetPoint, ChannelSet.SetPoint, sb);
 
-         SBHelper("Caps", Channel.Caps, ChannelSet.Caps, sb);
 
-         SBHelper("Floor", Channel.Floor, ChannelSet.Floor, sb);
 
-         SBHelper("CapsWarning", Channel.CapsWarning, ChannelSet.CapsWarning, sb);
 
-         SBHelper("FloorWarning", Channel.FloorWarning, ChannelSet.FloorWarning, sb);
 
-         SBHelper("Running_P", Channel.Running_P, ChannelSet.Running_P, sb);
 
-         SBHelper("Running_I", Channel.Running_I, ChannelSet.Running_I, sb);
 
-         SBHelper("Running_D", Channel.Running_D, ChannelSet.Running_D, sb);
 
-         SBHelper("SetpointUpRate", Channel.SetpointUpRate, ChannelSet.SetpointUpRate, sb);
 
-         SBHelper("SetpointDownRate", Channel.SetpointDownRate, ChannelSet.SetpointDownRate, sb);
 
-         return sb.ToString();
 
-     }
 
-     private static void SBHelper<T>(string title, T oldValue, T newValue, StringBuilder sb) where T : IComparable
 
-     {
 
-         if (oldValue.CompareTo(newValue) != 0)
 
-             sb.AppendLine($"{title.PadRight(20)} {oldValue.ToString()!.PadRight(6)} -->  {newValue}");
 
-     }
 
- }
 
 
  |