diff --git a/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Helpers/SettingsManager.cs b/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Helpers/SettingsManager.cs new file mode 100644 index 000000000000..21a40b12d99e --- /dev/null +++ b/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/Helpers/SettingsManager.cs @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; +using Microsoft.CommandPalette.Extensions.Toolkit; + +namespace TemplateCmdPalExtension; + +internal sealed partial class SettingsManager : JsonSettingsManager +{ + private static readonly string _namespace = "templatecmdpalextension"; + + private static string Namespaced(string propertyName) => $"{_namespace}.{propertyName}"; + + // TODO: Add your settings here. For example: + // private readonly ToggleSetting _myToggle = new( + // Namespaced(nameof(MyToggle)), + // "My toggle setting", + // "Description of my toggle setting", + // false); + + // TODO: Add accessors for each setting. For example: + // public bool MyToggle => _myToggle.Value; + + internal static string SettingsJsonPath() + { + var directory = Utilities.BaseSettingsPath("TemplateCmdPalExtension"); + Directory.CreateDirectory(directory); + + return Path.Combine(directory, "settings.json"); + } + + public SettingsManager() + { + FilePath = SettingsJsonPath(); + + // TODO: Register your settings here. For example: + // Settings.Add(_myToggle); + + // Load settings from file upon initialization + LoadSettings(); + + Settings.SettingsChanged += (_, _) => SaveSettings(); + } +} diff --git a/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/TemplateCmdPalExtensionCommandsProvider.cs b/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/TemplateCmdPalExtensionCommandsProvider.cs index 45acf7185693..8dc7b6b7c5a4 100644 --- a/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/TemplateCmdPalExtensionCommandsProvider.cs +++ b/src/modules/cmdpal/ExtensionTemplate/TemplateCmdPalExtension/TemplateCmdPalExtension/TemplateCmdPalExtensionCommandsProvider.cs @@ -10,19 +10,25 @@ namespace TemplateCmdPalExtension; public partial class TemplateCmdPalExtensionCommandsProvider : CommandProvider { private readonly ICommandItem[] _commands; + private readonly SettingsManager _settingsManager = new(); public TemplateCmdPalExtensionCommandsProvider() { DisplayName = "TemplateDisplayName"; Icon = IconHelpers.FromRelativePath("Assets\\StoreLogo.png"); _commands = [ - new CommandItem(new TemplateCmdPalExtensionPage()) { Title = DisplayName }, + new CommandItem(new TemplateCmdPalExtensionPage()) + { + Title = DisplayName, + MoreCommands = [new CommandContextItem(_settingsManager.Settings.SettingsPage)], + }, ]; + + Settings = _settingsManager.Settings; } public override ICommandItem[] TopLevelCommands() { return _commands; } - }