using rabi_splitter_WPF.Annotations; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace rabi_splitter_WPF { public class ExportableVariable { // Do not make these properties public. private static int nextAvailableId = 0; private readonly int _id; private readonly string _displayName; private ExportableVariable(string displayName) { _id = nextAvailableId++; _displayName = displayName; } public int Id { get { return _id; } } public string DisplayName { get { return _displayName; } } public static List GetAll() { return new List() { new ExportableVariable("TestVariable") }; } #region Equals, GetHashCode public override bool Equals(object obj) { var otherValue = obj as ExportableVariable; if (otherValue == null) return false; return _id.Equals(otherValue.Id); } public override int GetHashCode() { return _id.GetHashCode(); } #endregion } public class VariableExportSetting : INotifyPropertyChanged { private ExportableVariable _selectedVariable; private string _outputFileName; private string _outputFormat; private bool _isExporting; #region Dictionaries private static Dictionary _variableCaptions; public Dictionary VariableCaptions { get { if (_variableCaptions == null) { _variableCaptions = ExportableVariable.GetAll().ToDictionary(ev => ev, ev => ev.DisplayName); } return _variableCaptions; } } #endregion public VariableExportSetting() { // Default values _selectedVariable = null; _outputFileName = ""; _outputFormat = ""; _isExporting = false; } #region Parameters public ExportableVariable SelectedVariable { get { return _selectedVariable; } set { if (value.Equals(_selectedVariable)) return; _selectedVariable = value; OnPropertyChanged(nameof(SelectedVariable)); } } public string OutputFileName { get { return _outputFileName; } set { if (value.Equals(_outputFileName)) return; _outputFileName = value; OnPropertyChanged(nameof(OutputFileName)); } } public string OutputFormat { get { return _outputFormat; } set { if (value.Equals(_outputFormat)) return; _outputFormat = value; OnPropertyChanged(nameof(OutputFormat)); } } public bool IsExporting { get { return _isExporting; } set { if (value.Equals(_isExporting)) return; _isExporting = value; OnPropertyChanged(nameof(IsExporting)); } } #endregion public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }