src/dotnet/JetBrains.PresentationAssistant/PresentationAssistantSettingsStore.cs (49 lines of code) (raw):
using JetBrains.Application;
using JetBrains.Application.DataContext;
using JetBrains.Application.Settings;
using JetBrains.DataFlow;
using JetBrains.Lifetimes;
namespace JetBrains.ReSharper.Plugins.PresentationAssistant
{
[ShellComponent]
public class PresentationAssistantSettingsStore
{
private readonly ISettingsStore settingsStore;
private readonly DataContexts dataContexts;
public PresentationAssistantSettingsStore(Lifetime lifetime, ISettingsStore settingsStore, DataContexts dataContexts)
{
this.settingsStore = settingsStore;
this.dataContexts = dataContexts;
SettingsChanged = new SimpleSignal(lifetime, "Presentation Assistant settings changed");
var key = settingsStore.Schema.GetKey<PresentationAssistantSettings>();
settingsStore.Changed.Advise(lifetime, args =>
{
foreach (var changedEntry in args.ChangedEntries)
{
if (changedEntry.Parent == key)
{
if (changedEntry.LocalName == "Enabled")
SettingsChanged.Fire();
break;
}
}
});
}
public SimpleSignal SettingsChanged { get; }
public PresentationAssistantSettings GetSettings()
{
var boundSettings = BindSettingsStore();
return boundSettings.GetKey<PresentationAssistantSettings>(SettingsOptimization.OptimizeDefault);
}
public void SetSettings(PresentationAssistantSettings settings)
{
var boundSettings = BindSettingsStore();
boundSettings.SetKey(settings, SettingsOptimization.OptimizeDefault);
}
private IContextBoundSettingsStore BindSettingsStore()
{
var store = settingsStore.BindToContextTransient(ContextRange.Smart((l, _) => dataContexts.CreateOnSelection(l)));
return store;
}
}
}