From f8bca48db3ed55bebe7ae1cdd293487b3fb5c909 Mon Sep 17 00:00:00 2001 From: "Muyuan Li (from Dev Box)" Date: Fri, 17 Apr 2026 15:56:08 +0800 Subject: [PATCH] Settings UX: enable toggle, Load/Refresh button, greyed-out Apply - Add master toggle to enable/disable Python scripts feature entirely (IsPythonScriptsEnabled in settings model, ViewModel, and runtime) - Button shows 'Load scripts' initially, changes to 'Refresh scripts' after first load - Edit dialog 'Apply changes' button is greyed out until a field changes (tracks initial snapshot vs current values for all fields) - Runtime BuildPythonScriptFormats respects IsPythonScriptsEnabled Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../AdvancedPaste/Helpers/IUserSettings.cs | 2 + .../AdvancedPaste/Helpers/UserSettings.cs | 3 + .../ViewModels/OptionsViewModel.cs | 5 ++ .../AdvancedPastePythonScriptSettings.cs | 3 + .../SettingsXAML/Views/AdvancedPastePage.xaml | 18 ++++- .../Views/AdvancedPastePage.xaml.cs | 80 ++++++++++++++++++- .../Settings.UI/Strings/en-us/Resources.resw | 6 ++ .../ViewModels/AdvancedPasteViewModel.cs | 23 ++++++ 8 files changed, 134 insertions(+), 6 deletions(-) diff --git a/src/modules/AdvancedPaste/AdvancedPaste/Helpers/IUserSettings.cs b/src/modules/AdvancedPaste/AdvancedPaste/Helpers/IUserSettings.cs index 96b8c23583..f60edd85ea 100644 --- a/src/modules/AdvancedPaste/AdvancedPaste/Helpers/IUserSettings.cs +++ b/src/modules/AdvancedPaste/AdvancedPaste/Helpers/IUserSettings.cs @@ -29,6 +29,8 @@ namespace AdvancedPaste.Settings public IReadOnlyList PythonScriptActions { get; } + public bool IsPythonScriptsEnabled { get; } + public string PythonScriptsFolder { get; } public string PythonExecutablePath { get; } diff --git a/src/modules/AdvancedPaste/AdvancedPaste/Helpers/UserSettings.cs b/src/modules/AdvancedPaste/AdvancedPaste/Helpers/UserSettings.cs index 94403900b9..956f60c1e5 100644 --- a/src/modules/AdvancedPaste/AdvancedPaste/Helpers/UserSettings.cs +++ b/src/modules/AdvancedPaste/AdvancedPaste/Helpers/UserSettings.cs @@ -57,6 +57,8 @@ namespace AdvancedPaste.Settings public string PythonScriptsFolder { get; private set; } + public bool IsPythonScriptsEnabled { get; private set; } + public string PythonExecutablePath { get; private set; } public int PythonScriptTimeoutSeconds { get; private set; } = 30; @@ -159,6 +161,7 @@ namespace AdvancedPaste.Settings _customActions.AddRange(properties.CustomActions.Value.Where(customAction => customAction.IsShown && customAction.IsValid)); var pythonScripts = properties.PythonScripts ?? new AdvancedPastePythonScriptSettings(); + IsPythonScriptsEnabled = pythonScripts.IsEnabled; PythonScriptsFolder = string.IsNullOrWhiteSpace(pythonScripts.ScriptsFolder) ? GetDefaultScriptsFolder() : pythonScripts.ScriptsFolder; diff --git a/src/modules/AdvancedPaste/AdvancedPaste/ViewModels/OptionsViewModel.cs b/src/modules/AdvancedPaste/AdvancedPaste/ViewModels/OptionsViewModel.cs index deb9bd535a..71982cc5c6 100644 --- a/src/modules/AdvancedPaste/AdvancedPaste/ViewModels/OptionsViewModel.cs +++ b/src/modules/AdvancedPaste/AdvancedPaste/ViewModels/OptionsViewModel.cs @@ -433,6 +433,11 @@ namespace AdvancedPaste.ViewModels private IEnumerable BuildPythonScriptFormats() { + if (!_userSettings.IsPythonScriptsEnabled) + { + yield break; + } + var folder = _userSettings.PythonScriptsFolder; if (string.IsNullOrWhiteSpace(folder)) { diff --git a/src/settings-ui/Settings.UI.Library/AdvancedPastePythonScriptSettings.cs b/src/settings-ui/Settings.UI.Library/AdvancedPastePythonScriptSettings.cs index bbe24c4417..fc116f7f4a 100644 --- a/src/settings-ui/Settings.UI.Library/AdvancedPastePythonScriptSettings.cs +++ b/src/settings-ui/Settings.UI.Library/AdvancedPastePythonScriptSettings.cs @@ -9,6 +9,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library; public sealed class AdvancedPastePythonScriptSettings { + [JsonPropertyName("isEnabled")] + public bool IsEnabled { get; set; } + [JsonPropertyName("scriptsFolder")] public string ScriptsFolder { get; set; } = string.Empty; diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml index 5dcdb24359..9e3fb0cbe7 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/AdvancedPastePage.xaml @@ -392,7 +392,14 @@ - + + + + + + + @@ -418,7 +425,8 @@ ToolTipService.ToolTip="Open folder" /> - + @@ -443,13 +451,15 @@ x:Name="PythonScriptListExpander" x:Uid="AdvancedPaste_PythonScriptList" HeaderIcon="{ui:FontIcon Glyph=}" + IsEnabled="{x:Bind ViewModel.IsPythonScriptsEnabled, Mode=OneWay}" IsExpanded="True" ItemsSource="{x:Bind ViewModel.PythonScriptActions, Mode=OneWay}">