@@ -20,36 +20,48 @@ public enum DelimiterOptions
20
20
Slash = 47
21
21
}
22
22
23
- public class GeneralSettingsViewModel : SettingsViewModelBase , ISettingsViewModel
23
+ public sealed class GeneralSettingsViewModel : SettingsViewModelBase < Rubberduck . Settings . GeneralSettings > , ISettingsViewModel < Rubberduck . Settings . GeneralSettings >
24
24
{
25
25
private readonly IOperatingSystem _operatingSystem ;
26
26
private readonly IMessageBox _messageBox ;
27
27
private readonly IVbeSettings _vbeSettings ;
28
+ private readonly IFilePersistanceService < HotkeySettings > _hotkeyService ;
28
29
29
30
private bool _indenterPrompted ;
30
- private readonly ReadOnlyCollection < Type > _experimentalFeatureTypes ;
31
-
32
- public GeneralSettingsViewModel ( Configuration config , IOperatingSystem operatingSystem , IMessageBox messageBox , IVbeSettings vbeSettings , IEnumerable < Type > experimentalFeatureTypes )
31
+ private readonly IReadOnlyList < Type > _experimentalFeatureTypes ;
32
+
33
+ public GeneralSettingsViewModel (
34
+ Configuration config ,
35
+ IOperatingSystem operatingSystem ,
36
+ IMessageBox messageBox ,
37
+ IVbeSettings vbeSettings ,
38
+ IExperimentalTypesProvider experimentalTypesProvider ,
39
+ IFilePersistanceService < Rubberduck . Settings . GeneralSettings > service ,
40
+ IFilePersistanceService < HotkeySettings > hotkeyService )
41
+ : base ( service )
33
42
{
34
43
_operatingSystem = operatingSystem ;
35
44
_messageBox = messageBox ;
36
45
_vbeSettings = vbeSettings ;
37
- _experimentalFeatureTypes = experimentalFeatureTypes . ToList ( ) . AsReadOnly ( ) ;
46
+ _experimentalFeatureTypes = experimentalTypesProvider . ExperimentalTypes ;
38
47
Languages = new ObservableCollection < DisplayLanguageSetting > (
39
- new [ ]
40
- {
41
- new DisplayLanguageSetting ( "en-US" ) ,
42
- new DisplayLanguageSetting ( "fr-CA" ) ,
43
- new DisplayLanguageSetting ( "de-DE" ) ,
44
- new DisplayLanguageSetting ( "cs-CZ" )
45
- } ) ;
46
-
47
- LogLevels = new ObservableCollection < MinimumLogLevel > ( LogLevelHelper . LogLevels . Select ( l => new MinimumLogLevel ( l . Ordinal , l . Name ) ) ) ;
48
+ new [ ]
49
+ {
50
+ new DisplayLanguageSetting ( "en-US" ) ,
51
+ new DisplayLanguageSetting ( "fr-CA" ) ,
52
+ new DisplayLanguageSetting ( "de-DE" ) ,
53
+ new DisplayLanguageSetting ( "cs-CZ" )
54
+ } ) ;
55
+
56
+ LogLevels = new ObservableCollection < MinimumLogLevel > (
57
+ LogLevelHelper . LogLevels . Select ( l => new MinimumLogLevel ( l . Ordinal , l . Name ) ) ) ;
48
58
TransferSettingsToView ( config . UserSettings . GeneralSettings , config . UserSettings . HotkeySettings ) ;
49
59
50
60
ShowLogFolderCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => ShowLogFolder ( ) ) ;
51
- ExportButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => ExportSettings ( ) ) ;
61
+ ExportButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => ExportSettings ( GetCurrentGeneralSettings ( ) ) ) ;
52
62
ImportButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => ImportSettings ( ) ) ;
63
+
64
+ _hotkeyService = hotkeyService ;
53
65
}
54
66
55
67
public List < ExperimentalFeatures > ExperimentalFeatures { get ; set ; }
@@ -147,7 +159,7 @@ public bool CompileBeforeParse
147
159
148
160
if ( value && _vbeSettings . CompileOnDemand )
149
161
{
150
- if ( ! SynchronizeVBESettings ( ) )
162
+ if ( ! SynchronizeVbeSettings ( ) )
151
163
{
152
164
return ;
153
165
}
@@ -181,7 +193,7 @@ public bool SetDpiUnawareEnabled
181
193
}
182
194
}
183
195
184
- private bool SynchronizeVBESettings ( )
196
+ private bool SynchronizeVbeSettings ( )
185
197
{
186
198
if ( ! _messageBox . ConfirmYesNo ( RubberduckUI . GeneralSettings_CompileBeforeParse_WarnCompileOnDemandEnabled ,
187
199
RubberduckUI . GeneralSettings_CompileBeforeParse_WarnCompileOnDemandEnabled_Caption , true ) )
@@ -276,10 +288,17 @@ private Rubberduck.Settings.GeneralSettings GetCurrentGeneralSettings()
276
288
} ;
277
289
}
278
290
291
+ protected override void TransferSettingsToView ( Rubberduck . Settings . GeneralSettings toLoad )
292
+ {
293
+ TransferSettingsToView ( toLoad , null ) ;
294
+ }
295
+
279
296
private void TransferSettingsToView ( IGeneralSettings general , IHotkeySettings hottkey )
280
297
{
281
298
SelectedLanguage = Languages . First ( l => l . Code == general . Language . Code ) ;
282
- Hotkeys = new ObservableCollection < HotkeySetting > ( hottkey . Settings ) ;
299
+ Hotkeys = hottkey == null
300
+ ? new ObservableCollection < HotkeySetting > ( )
301
+ : new ObservableCollection < HotkeySetting > ( hottkey . Settings ) ;
283
302
ShowSplashAtStartup = general . CanShowSplash ;
284
303
CheckVersionAtStartup = general . CanCheckVersion ;
285
304
CompileBeforeParse = general . CompileBeforeParse ;
@@ -297,7 +316,10 @@ private void TransferSettingsToView(IGeneralSettings general, IHotkeySettings ho
297
316
. ToList ( ) ;
298
317
}
299
318
300
- private void ImportSettings ( )
319
+ protected override string DialogLoadTitle => SettingsUI . DialogCaption_LoadGeneralSettings ;
320
+ protected override string DialogSaveTitle => SettingsUI . DialogCaption_SaveGeneralSettings ;
321
+
322
+ protected override void ImportSettings ( )
301
323
{
302
324
using ( var dialog = new OpenFileDialog
303
325
{
@@ -307,17 +329,15 @@ private void ImportSettings()
307
329
{
308
330
dialog . ShowDialog ( ) ;
309
331
if ( string . IsNullOrEmpty ( dialog . FileName ) ) return ;
310
- var service = new XmlPersistanceService < Rubberduck . Settings . GeneralSettings > { FilePath = dialog . FileName } ;
311
- var general = service . Load ( new Rubberduck . Settings . GeneralSettings ( ) ) ;
312
- var hkService = new XmlPersistanceService < HotkeySettings > { FilePath = dialog . FileName } ;
313
- var hotkey = hkService . Load ( new HotkeySettings ( ) ) ;
332
+ var general = Service . Load ( new Rubberduck . Settings . GeneralSettings ( ) , dialog . FileName ) ;
333
+ var hotkey = _hotkeyService . Load ( new HotkeySettings ( ) , dialog . FileName ) ;
314
334
//Always assume Smart Indenter registry import has been prompted if importing.
315
335
general . IsSmartIndenterPrompted = true ;
316
336
TransferSettingsToView ( general , hotkey ) ;
317
337
}
318
338
}
319
339
320
- private void ExportSettings ( )
340
+ protected override void ExportSettings ( Rubberduck . Settings . GeneralSettings settings )
321
341
{
322
342
using ( var dialog = new SaveFileDialog
323
343
{
@@ -327,10 +347,8 @@ private void ExportSettings()
327
347
{
328
348
dialog . ShowDialog ( ) ;
329
349
if ( string . IsNullOrEmpty ( dialog . FileName ) ) return ;
330
- var service = new XmlPersistanceService < Rubberduck . Settings . GeneralSettings > { FilePath = dialog . FileName } ;
331
- service . Save ( GetCurrentGeneralSettings ( ) ) ;
332
- var hkService = new XmlPersistanceService < HotkeySettings > { FilePath = dialog . FileName } ;
333
- hkService . Save ( new HotkeySettings { Settings = Hotkeys . ToArray ( ) } ) ;
350
+ Service . Save ( settings , dialog . FileName ) ;
351
+ _hotkeyService . Save ( new HotkeySettings { Settings = Hotkeys . ToArray ( ) } , dialog . FileName ) ;
334
352
}
335
353
}
336
354
}
0 commit comments