using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Tango.DispenserAnalyzer.UI.Models; using Tango.SharedUI; namespace Tango.DispenserAnalyzer.UI.ViewModels { [JsonObject(MemberSerialization.OptIn)] public class CollectionSettings : ViewModel { private string _name; [JsonProperty] public string Name { get { return _name; } set { _name = value; } } private ObservableCollection _settings; [JsonProperty] public ObservableCollection Settings { get { return _settings; } set { _settings = value; RaisePropertyChangedAuto(); } } public CollectionSettings(string name) { _settings = new ObservableCollection(); Name = name; } public void AddSettings(List settings) { settings.ForEach(x => Settings.Add(x)); } } public class SettingsVM : ViewModel, IDisposable { #region Properties public Dictionary ChangedValues { get; set; } private ObservableCollection _settings; public ObservableCollection Settings { get { return _settings; } set { _settings = value; RaisePropertyChangedAuto(); } } #endregion public SettingsVM() { _settings = new ObservableCollection(); ChangedValues = new Dictionary(); InitPBUTestSettings(); InitProcessSettings(); InitFlowTestSettings(); } private void InitPBUTestSettings() { CollectionSettings model = new CollectionSettings("Pressure build up"); List list = new List(); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.PBUPassFail, "4.5 sec")); model.AddSettings(list); list.ForEach(x => x.SettingValueEvent += new EventHandler(OnSettingValueChanged)); Settings.Add(model); } private void InitFlowTestSettings() { CollectionSettings model = new CollectionSettings("Flow test"); List list = new List(); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.FlowPBUPassFail, "4.5 sec")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.ExcludeAnalysis, "1800 reads")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.AvgMinValue, "1400-1850 [mbar]", true)); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxMinRange, "450 reads")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxMinIntervals, "450 reads")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MaxError, "1.67%")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.TakeOffMaxMin, "3")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.CancelMovingAVG, "False")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.DividerMaxError, "1500")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.DeviationAtRevolutionsMin, AnalyzerSettingsEnum.DeviationAtRevolutionsMax, "200-218")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.DirectoryPath, "")); list.ForEach(x => x.SettingValueEvent += new EventHandler(OnSettingValueChanged)); model.AddSettings(list); Settings.Add(model); } private void InitProcessSettings() { CollectionSettings model = new CollectionSettings("Process"); List list = new List(); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.TimeInterval, "0.1 sec")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.StartCalculation, "600 sec")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.EndCalculation, "900 sec")); list.Add(new BaseSettingModel(AnalyzerSettingsEnum.MovingAvg, "50 points")); list.ForEach(x => x.SettingValueEvent += new EventHandler(OnSettingValueChanged)); model.AddSettings(list); Settings.Add(model); } private void OnSettingValueChanged(object sender, EventArgs e) { if (sender is BaseSettingModel) { BaseSettingModel settingModel = sender as BaseSettingModel; if (settingModel.IsRangeVisible) { ChangedValues[AnalyzerSettingsEnum.AvgMinValue] = settingModel.MinRangeValue; ChangedValues[AnalyzerSettingsEnum.AvgMaxValue] = settingModel.MaxRangeValue; } else ChangedValues[settingModel._enumName] = settingModel.PropertyValue; } } public Dictionary GetChanges() { return ChangedValues; } public void Dispose() { Settings.ToList().ForEach(x => { x.Settings.ToList().ForEach(k => k.SettingValueEvent -= OnSettingValueChanged); }); } } }