14 public partial class NewWorkspaceSettingsDialog : CustomDialog, INotifyDataErrorInfo
18 private readonly TaskCompletionSource<MessageDialogResult> _tcs;
20 public NewWorkspaceSettingsDialog()
22 InitializeComponent();
23 _tcs =
new TaskCompletionSource<MessageDialogResult>();
28 public NewWorkspaceSettingsDialog(MetroWindow parentWindow) : base(parentWindow)
30 InitializeComponent();
31 _tcs =
new TaskCompletionSource<MessageDialogResult>();
42 public string NewWorkspaceFolder
44 get {
return (
string)GetValue(NewWorkspaceFolderProperty); }
45 set { SetValue(NewWorkspaceFolderProperty, value); }
47 public static readonly DependencyProperty NewWorkspaceFolderProperty = DependencyProperty.Register(nameof(NewWorkspaceFolder), typeof(
string), typeof(NewWorkspaceSettingsDialog),
new PropertyMetadata(
"", OnPropertyChanged));
49 public bool CopyDefaultTemplates
51 get {
return (
bool)GetValue(CopyDefaultTemplatesProperty); }
52 set { SetValue(CopyDefaultTemplatesProperty, value); }
54 public static readonly DependencyProperty CopyDefaultTemplatesProperty = DependencyProperty.Register(nameof(CopyDefaultTemplates), typeof(
bool), typeof(NewWorkspaceSettingsDialog),
new PropertyMetadata(
true, OnPropertyChanged));
56 public string PreviousWorkspaceFolder
58 get {
return (
string)GetValue(PreviousWorkspaceFolderProperty); }
59 set { SetValue(PreviousWorkspaceFolderProperty, value); }
61 public static readonly DependencyProperty PreviousWorkspaceFolderProperty = DependencyProperty.Register(nameof(PreviousWorkspaceFolder), typeof(
string), typeof(NewWorkspaceSettingsDialog),
new PropertyMetadata(
"", OnPropertyChanged));
63 public bool CopyCompetitions
65 get {
return (
bool)GetValue(CopyCompetitionsProperty); }
66 set { SetValue(CopyCompetitionsProperty, value); }
68 public static readonly DependencyProperty CopyCompetitionsProperty = DependencyProperty.Register(nameof(CopyCompetitions), typeof(
bool), typeof(NewWorkspaceSettingsDialog),
new PropertyMetadata(
false, OnPropertyChanged));
70 public bool CopyCompetitionDistanceRules
72 get {
return (
bool)GetValue(CopyCompetitionDistanceRulesProperty); }
73 set { SetValue(CopyCompetitionDistanceRulesProperty, value); }
75 public static readonly DependencyProperty CopyCompetitionDistanceRulesProperty = DependencyProperty.Register(nameof(CopyCompetitionDistanceRules), typeof(
bool), typeof(NewWorkspaceSettingsDialog),
new PropertyMetadata(
false, OnPropertyChanged));
77 public bool CopyTemplates
79 get {
return (
bool)GetValue(CopyTemplatesProperty); }
80 set { SetValue(CopyTemplatesProperty, value); }
82 public static readonly DependencyProperty CopyTemplatesProperty = DependencyProperty.Register(nameof(CopyTemplates), typeof(
bool), typeof(NewWorkspaceSettingsDialog),
new PropertyMetadata(
false, OnPropertyChanged));
85 private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
87 NewWorkspaceSettingsDialog dialog = d as NewWorkspaceSettingsDialog;
88 if(dialog ==
null) {
return; }
97 #region Dialog Handling
107 private ICommand _dialogResultNegativeCommand;
113 _tcs.TrySetResult(MessageDialogResult.Negative);
116 private ICommand _dialogResultAffirmativeCommand;
123 _tcs.TrySetResult(MessageDialogResult.Affirmative);
124 }, () => !
string.IsNullOrEmpty(NewWorkspaceFolder) &&
125 !(CopyTemplates && CopyDefaultTemplates)));
133 private readonly Dictionary<string, List<string>> _errors =
new();
135 public bool HasErrors => _errors.Any();
137 public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
139 public IEnumerable GetErrors(
string propertyName)
141 if (propertyName !=
null && _errors.ContainsKey(propertyName))
143 return _errors[propertyName];
145 return Enumerable.Empty<
string>();
148 private void AddError(
string propertyName,
string error)
150 if (!_errors.ContainsKey(propertyName))
152 _errors[propertyName] =
new List<string>();
154 _errors[propertyName].Add(error);
155 ErrorsChanged?.Invoke(
this,
new DataErrorsChangedEventArgs(propertyName));
158 private void ClearErrors(
string propertyName)
160 if (_errors.Remove(propertyName))
162 ErrorsChanged?.Invoke(
this,
new DataErrorsChangedEventArgs(propertyName));
166 private void Validate()
168 ClearErrors(nameof(NewWorkspaceFolder));
169 ClearErrors(nameof(CopyTemplates));
170 ClearErrors(nameof(CopyDefaultTemplates));
172 if (
string.IsNullOrEmpty(NewWorkspaceFolder))
174 AddError(nameof(NewWorkspaceFolder), Properties.Resources.EmptyPathString);
177 if (CopyTemplates && CopyDefaultTemplates)
179 AddError(nameof(CopyTemplates), Properties.Resources.OnlyOneOptionCanBeActiveString);
180 AddError(nameof(CopyDefaultTemplates), Properties.Resources.OnlyOneOptionCanBeActiveString);