Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit c8ea901

Browse files
committed
Make settings properties notification-aware
Also add supporting for generating complex properties like UIState
1 parent 98ff88f commit c8ea901

File tree

4 files changed

+44
-9
lines changed

4 files changed

+44
-9
lines changed

src/GitHub.Exports/Settings/generated/IPackageSettings.tt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ namespace GitHub.Settings
2222
void Save();
2323
<#
2424
foreach (var j in json["settings"].Children()) {
25+
var type = j["type"].ToString();
26+
if (type == "object")
27+
type = j["typename"].ToString();
2528
#>
26-
<#= j["type"] #> <#= j["name"] #> { get; set; }
29+
<#= type #> <#= j["name"] #> { get; set; }
2730
<#
2831
}
2932
#>
30-
UIState UIState { get; }
3133
}
3234
}

src/GitHub.VisualStudio/Settings/PackageSettings.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
using Microsoft.VisualStudio.Shell.Settings;
66
using SettingsStore = GitHub.Helpers.SettingsStore;
77
using GitHub.Settings;
8+
using GitHub.Primitives;
89

910
namespace GitHub.VisualStudio.Settings
1011
{
1112
[Export(typeof(IPackageSettings))]
1213
[PartCreationPolicy(CreationPolicy.Shared)]
13-
public partial class PackageSettings : IPackageSettings
14+
public partial class PackageSettings : NotificationAwareObject, IPackageSettings
1415
{
1516
readonly SettingsStore settingsStore;
1617

@@ -20,15 +21,11 @@ public PackageSettings([Import(typeof(SVsServiceProvider))] IServiceProvider ser
2021
var sm = new ShellSettingsManager(serviceProvider);
2122
settingsStore = new SettingsStore(sm.GetWritableSettingsStore(SettingsScope.UserSettings), Info.ApplicationInfo.ApplicationSafeName);
2223
LoadSettings();
23-
UIState = SimpleJson.DeserializeObject<UIState>((string)settingsStore.Read("UIState", "{}"));
2424
}
2525

26-
public UIState UIState { get; }
27-
2826
public void Save()
2927
{
3028
SaveSettings();
31-
settingsStore.Write("UIState", SimpleJson.SerializeObject(UIState));
3229
}
3330
}
3431
}

src/GitHub.VisualStudio/Settings/generated/PackageSettings.tt

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,28 @@ var json = JObject.Parse(File.ReadAllText(file));
1616
*/
1717

1818
using GitHub.Settings;
19+
using GitHub.Primitives;
20+
using GitHub.VisualStudio.Helpers;
1921

2022
namespace GitHub.VisualStudio.Settings {
2123

22-
public partial class PackageSettings : IPackageSettings
24+
public partial class PackageSettings : NotificationAwareObject, IPackageSettings
2325
{
2426

2527
<#
2628
foreach (var j in json["settings"].Children()) {
29+
var type = j["type"].ToString();
30+
if (type == "object")
31+
type = j["typename"].ToString();
32+
var field = Char.ToLower(j["name"].ToString()[0]) + j["name"].ToString().Substring(1);
2733
#>
28-
public <#= j["type"] #> <#= j["name"] #> { get; set; }
34+
<#= type #> <#= field #>;
35+
public <#= type #> <#= j["name"] #>
36+
{
37+
get { return <#= field #>; }
38+
set { <#= field #> = value; this.RaisePropertyChange(); }
39+
}
40+
2941
<#
3042
}
3143
#>
@@ -34,9 +46,18 @@ foreach (var j in json["settings"].Children()) {
3446
{
3547
<#
3648
foreach (var j in json.Children().Children().Children()) {
49+
if (j["type"].ToString() == "object")
50+
{
51+
#>
52+
<#= j["name"] #> = SimpleJson.DeserializeObject<<#= j["typename"] #>>((string)settingsStore.Read("<#= j["name"] #>", "{}"));
53+
<#
54+
}
55+
else
56+
{
3757
#>
3858
<#= j["name"] #> = (<#= j["type"] #>)settingsStore.Read("<#= j["name"] #>", <#= j["default"] #>);
3959
<#
60+
}
4061
}
4162
#>
4263
}
@@ -45,9 +66,18 @@ foreach (var j in json.Children().Children().Children()) {
4566
{
4667
<#
4768
foreach (var j in json.Children().Children().Children()) {
69+
if (j["type"].ToString() == "object")
70+
{
71+
#>
72+
settingsStore.Write("<#= j["name"] #>", SimpleJson.SerializeObject(<#= j["name"] #>));
73+
<#
74+
}
75+
else
76+
{
4877
#>
4978
settingsStore.Write("<#= j["name"] #>", <#= j["name"] #>);
5079
<#
80+
}
5181
}
5282
#>
5383
}

src/common/settings.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
"name": "CollectMetrics",
55
"type": "bool",
66
"default": 'true'
7+
},
8+
{
9+
"name": "UIState",
10+
"type": "object",
11+
"typename": "UIState",
12+
"default": 'null'
713
}
814
]
915
}

0 commit comments

Comments
 (0)