Skip to content

Commit 1efea16

Browse files
authored
Merge pull request #3685 from rkapka/rkapka-master
Enhances default settings for TODO markers; moves defaults to app.config/settings file.
2 parents 4a6db52 + 303b589 commit 1efea16

15 files changed

+116
-87
lines changed

RetailCoder.VBE/Properties/Settings.Designer.cs

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RetailCoder.VBE/Properties/Settings.settings

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,17 @@
145145
<CommandTypeName>TestExplorerCommand</CommandTypeName>
146146
&lt;/HotkeySetting&gt;</Value>
147147
</Setting>
148+
<Setting Name="ToDoMarker_ToDo" Type="Rubberduck.Settings.ToDoMarker" Scope="Application">
149+
<Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
150+
&lt;ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="TODO" /&gt;</Value>
151+
</Setting>
152+
<Setting Name="ToDoMarker_Note" Type="Rubberduck.Settings.ToDoMarker" Scope="Application">
153+
<Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
154+
&lt;ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="NOTE" /&gt;</Value>
155+
</Setting>
156+
<Setting Name="ToDoMarker_Bug" Type="Rubberduck.Settings.ToDoMarker" Scope="Application">
157+
<Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
158+
&lt;ToDoMarker xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Text="BUG" /&gt;</Value>
159+
</Setting>
148160
</Settings>
149161
</SettingsFile>

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@
373373
<Compile Include="RubberduckProgId.cs" />
374374
<Compile Include="Settings\CodeInspectionConfigProvider.cs" />
375375
<Compile Include="Settings\ExperimentalFeatures.cs" />
376-
<Compile Include="Settings\DefaultHotkeySettings.cs" />
376+
<Compile Include="Settings\DefaultSettings.cs" />
377377
<Compile Include="Settings\GeneralConfigProvider.cs" />
378378
<Compile Include="Settings\HotkeySettings.cs" />
379379
<Compile Include="Settings\HotkeyConfigProvider.cs" />

RetailCoder.VBE/Settings/DefaultHotkeySettings.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
4+
namespace Rubberduck.Settings
5+
{
6+
public class DefaultSettings<T>
7+
{
8+
public IEnumerable<T> Defaults { get; }
9+
10+
public DefaultSettings()
11+
{
12+
var properties = typeof(Properties.Settings).GetProperties().Where(prop => prop.PropertyType == typeof(T));
13+
14+
Defaults = properties.Select(prop => prop.GetValue(Properties.Settings.Default)).Cast<T>();
15+
}
16+
}
17+
}

RetailCoder.VBE/Settings/HotkeyConfigProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ public class HotkeyConfigProvider : IConfigProvider<HotkeySettings>
1111
public HotkeyConfigProvider(IPersistanceService<HotkeySettings> persister)
1212
{
1313
_persister = persister;
14-
_defaultHotkeys = new DefaultHotkeySettings().Hotkeys;
14+
_defaultHotkeys = new DefaultSettings<HotkeySetting>().Defaults;
1515
}
1616

1717
public HotkeySettings Create()
1818
{
1919
var prototype = new HotkeySettings(_defaultHotkeys);
2020

21+
// Loaded settings don't contain defaults, so we need to use the `Settings` property to combine user settings with defaults.
2122
var loaded = _persister.Load(prototype);
2223
if (loaded != null)
2324
{

RetailCoder.VBE/Settings/ToDoListConfigProvider.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
1-
using Rubberduck.SettingsProvider;
1+
using System.Collections.Generic;
2+
using Rubberduck.SettingsProvider;
23

34
namespace Rubberduck.Settings
45
{
56
public class ToDoListConfigProvider : IConfigProvider<ToDoListSettings>
67
{
78
private readonly IPersistanceService<ToDoListSettings> _persister;
9+
private readonly IEnumerable<ToDoMarker> _defaultMarkers;
810

911
public ToDoListConfigProvider(IPersistanceService<ToDoListSettings> persister)
1012
{
1113
_persister = persister;
14+
_defaultMarkers = new DefaultSettings<ToDoMarker>().Defaults;
1215
}
1316

1417
public ToDoListSettings Create()
1518
{
16-
var prototype = new ToDoListSettings();
19+
var prototype = new ToDoListSettings(_defaultMarkers);
1720
return _persister.Load(prototype) ?? prototype;
1821
}
1922

2023
public ToDoListSettings CreateDefaults()
2124
{
22-
return new ToDoListSettings();
25+
return new ToDoListSettings(_defaultMarkers);
2326
}
2427

2528
public void Save(ToDoListSettings settings)

RetailCoder.VBE/Settings/ToDoListSettings.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Xml.Serialization;
5-
using Rubberduck.UI;
65

76
namespace Rubberduck.Settings
87
{
9-
interface IToDoListSettings
8+
internal interface IToDoListSettings
109
{
1110
ToDoMarker[] ToDoMarkers { get; set; }
1211
}
@@ -27,18 +26,16 @@ public ToDoMarker[] ToDoMarkers
2726
}
2827
}
2928

29+
/// <Summary>
30+
/// Default constructor required for XML serialization.
31+
/// </Summary>
3032
public ToDoListSettings()
3133
{
32-
var note = new ToDoMarker(RubberduckUI.TodoMarkerNote);
33-
var todo = new ToDoMarker(RubberduckUI.TodoMarkerTodo);
34-
var bug = new ToDoMarker(RubberduckUI.TodoMarkerBug);
35-
36-
ToDoMarkers = new[] { note, todo, bug };
3734
}
3835

39-
public ToDoListSettings(IEnumerable<ToDoMarker> markers)
36+
public ToDoListSettings(IEnumerable<ToDoMarker> defaultMarkers)
4037
{
41-
_markers = markers;
38+
_markers = defaultMarkers;
4239
}
4340

4441
public bool Equals(ToDoListSettings other)

RetailCoder.VBE/Settings/ToDoMarkers.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Configuration;
23
using System.Xml.Serialization;
34

45
namespace Rubberduck.Settings
@@ -8,6 +9,7 @@ public interface IToDoMarker
89
string Text { get; set; }
910
}
1011

12+
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
1113
[XmlType(AnonymousType = true)]
1214
public class ToDoMarker : IToDoMarker
1315
{
@@ -35,7 +37,7 @@ public ToDoMarker(string text, TodoPriority priority) : this(text)
3537
{
3638
}
3739

38-
/// <summary> Convert this object into a string representation. Over-riden for easy databinding.</summary>
40+
/// <summary> Convert this object into a string representation. Overriden for easy databinding.</summary>
3941
/// <returns> The Text property. </returns>
4042
public override string ToString()
4143
{
@@ -44,9 +46,7 @@ public override string ToString()
4446

4547
public override bool Equals(object obj)
4648
{
47-
var other = obj as ToDoMarker;
48-
49-
if (other == null)
49+
if (!(obj is ToDoMarker other))
5050
{
5151
return false;
5252
}

RetailCoder.VBE/UI/RubberduckUI.Designer.cs

Lines changed: 0 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)