Vereinsmeisterschaften  22aa7800eae54b428d40e835886cefe1fdefdfdf
This is a software that can be used to manage the internal competition of the swimming club Illertissen called "Vereinsmeisterschaften".
Loading...
Searching...
No Matches
WorkspaceSettingsGroup.cs
1using CommunityToolkit.Mvvm.ComponentModel;
2
4{
8 public partial class WorkspaceSettingsGroup : ObservableObject, IEquatable<WorkspaceSettingsGroup>, ICloneable
9 {
10 #region Properties
11
15 [ObservableProperty]
16 private string _groupKey;
17
21 public List<IWorkspaceSetting> Settings { get; set; } = new List<IWorkspaceSetting>();
22
26 public bool HasChanged => Settings.Any(s => s.HasChanged);
27
28 #endregion
29
30 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
32 #region Setting management methods
33
39 public void AddSetting<T>(WorkspaceSetting<T> setting) => AddSetting(setting as IWorkspaceSetting);
40
46 public void AddSetting(IWorkspaceSetting setting)
47 {
48 if (Settings.Where(s => string.Compare(s.Key, setting.Key, true) == 0).Any())
49 {
50 // A setting with the same key already exists
51 throw new ArgumentException($"A setting with the key '{setting.Key}' already exists.", nameof(setting));
52 }
53 else
54 {
55 Settings.Add(setting);
56 setting.PropertyChanged += (sender, e) =>
57 {
58 switch (e.PropertyName)
59 {
60 case nameof(IWorkspaceSetting.HasChanged): OnPropertyChanged(nameof(HasChanged)); break;
61 default: break;
62 }
63 };
64 }
65 }
66
73 public WorkspaceSetting<T> GetSetting<T>(string settingKey) => (WorkspaceSetting<T>)GetSetting(settingKey);
74
80 public IWorkspaceSetting GetSetting(string settingKey) => Settings.FirstOrDefault(s => string.Compare(s.Key, settingKey, true) == 0);
81
91 public WorkspaceSetting<T> MakeSureSettingExists<T>(string settingKey, T defaultValue, T minValue = default, T maxValue = default)
92 {
93 WorkspaceSetting<T> setting = GetSetting<T>(settingKey);
94 if (setting == null)
95 {
96 setting = new WorkspaceSetting<T>(settingKey, defaultValue, minValue, maxValue);
97 AddSetting(setting);
98 }
99 else
100 {
101 setting.DefaultValue = defaultValue;
102 }
103 return setting;
104 }
105
106 #endregion
107
108 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
109
110 #region Reset
111
115 public void Reset()
116 {
117 foreach (IWorkspaceSetting setting in Settings)
118 {
119 setting.Reset();
120 }
121 }
122
123 #endregion
124
125 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
126
127 #region Constructors
128
133 {
134 }
135
140 public WorkspaceSettingsGroup(string groupKey) => GroupKey = groupKey;
141
147 {
148 GroupKey = other.GroupKey;
149 foreach(IWorkspaceSetting setting in other.Settings)
150 {
151 if (setting is ICloneable cloneableSetting)
152 {
153 AddSetting((IWorkspaceSetting)cloneableSetting.Clone());
154 }
155 else
156 {
157 AddSetting(setting); // This assumes the value is immutable or does not require cloning
158 }
159 }
160 }
161
162 #endregion
163
164 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
165
166 #region IEquatable, ICloneable
167
168 public override bool Equals(object obj)
169 => obj is WorkspaceSettingsGroup g && g.Settings.SequenceEqual(Settings);
170
171 public bool Equals(WorkspaceSettingsGroup other)
172 => Equals((object)other);
173
174 public override int GetHashCode()
175 => Settings.GetHashCode();
176
177 public object Clone()
178 => new WorkspaceSettingsGroup(this);
179
180 #endregion
181 }
182}
void AddSetting(IWorkspaceSetting setting)
Add a new IWorkspaceSetting
List< IWorkspaceSetting > Settings
List with IWorkspaceSetting instances belonging to this group.
WorkspaceSettingsGroup(string groupKey)
Create a new instance and set the group key.
bool HasChanged
Indicating if any of the Settings has changed.
WorkspaceSetting< T > GetSetting< T >(string settingKey)
Get the setting with the requested key.
WorkspaceSettingsGroup(WorkspaceSettingsGroup other)
Copy Constructor.
void AddSetting< T >(WorkspaceSetting< T > setting)
Add a new WorkspaceSetting<T>
IWorkspaceSetting GetSetting(string settingKey)
Get the setting with the requested key.
WorkspaceSetting< T > MakeSureSettingExists< T >(string settingKey, T defaultValue, T minValue=default, T maxValue=default)
Try to get the WorkspaceSetting<T> with the requested key and add a new setting with the default valu...
Interface for a single workspace setting.
bool HasChanged
Indicating if the UntypedValue and UntypedSnapshotValue differ.
void Reset()
Set the UntypedValue to the UntypedSnapshotValue