/
githubmirror
/
PowerToys
Обзор
Документация
Войти
/
githubmirror
/
PowerToys
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/settings-ui/Settings.UI.Controls/QuickAccess/QuickAccessViewModel.cs
177 строк
8 KB
Noraa Junker
Shortcut Guide V2 (#40834)
21 май 2026, 18:27
Не верифицирован
21 май 2026, 18:27
9699d8a
Код
Авторство
О чём код?
// 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; using System.Collections.ObjectModel; using ManagedCommon; using Microsoft.PowerToys.Settings.UI.Library; using Microsoft.PowerToys.Settings.UI.Library.Helpers; using Microsoft.PowerToys.Settings.UI.Library.Interfaces; using Microsoft.PowerToys.Settings.UI.Library.ViewModels.Commands; using Microsoft.UI.Dispatching; using Microsoft.Windows.ApplicationModel.Resources; namespace Microsoft.PowerToys.Settings.UI.Controls { public partial class QuickAccessViewModel : Observable { private readonly ISettingsRepository<GeneralSettings> _settingsRepository; // Pulling in KBMSettingsRepository separately as we need to listen to changes in the // UseNewEditor property to determine the visibility of the KeyboardManager quick access item. private readonly SettingsRepository<KeyboardManagerSettings> _kbmSettingsRepository; private readonly IQuickAccessLauncher _launcher; private readonly Func<ModuleType, bool> _isModuleGpoDisabled; private readonly Func<ModuleType, bool> _isModuleGpoEnabled; private readonly ResourceLoader _resourceLoader; private readonly DispatcherQueue _dispatcherQueue; private GeneralSettings _generalSettings; public ObservableCollection<QuickAccessItem> Items { get; } = new(); public QuickAccessViewModel( ISettingsRepository<GeneralSettings> settingsRepository, IQuickAccessLauncher launcher, Func<ModuleType, bool> isModuleGpoDisabled, Func<ModuleType, bool> isModuleGpoEnabled, ResourceLoader resourceLoader) { _settingsRepository = settingsRepository; _launcher = launcher; _isModuleGpoDisabled = isModuleGpoDisabled; _isModuleGpoEnabled = isModuleGpoEnabled; _resourceLoader = resourceLoader; _dispatcherQueue = DispatcherQueue.GetForCurrentThread(); _generalSettings = _settingsRepository.SettingsConfig; _generalSettings.AddEnabledModuleChangeNotification(ModuleEnabledChanged); _settingsRepository.SettingsChanged += OnSettingsChanged; _kbmSettingsRepository = SettingsRepository<KeyboardManagerSettings>.GetInstance(SettingsUtils.Default); _kbmSettingsRepository.SettingsChanged += OnKbmSettingsChanged; InitializeItems(); } private void OnSettingsChanged(GeneralSettings newSettings) { if (_dispatcherQueue != null) { _dispatcherQueue.TryEnqueue(() => { _generalSettings = newSettings; _generalSettings.AddEnabledModuleChangeNotification(ModuleEnabledChanged); RefreshItemsVisibility(); }); } } private void InitializeItems() { AddFlyoutMenuItem(ModuleType.ColorPicker); AddFlyoutMenuItem(ModuleType.CmdPal); AddFlyoutMenuItem(ModuleType.EnvironmentVariables); AddFlyoutMenuItem(ModuleType.FancyZones); AddFlyoutMenuItem(ModuleType.Hosts); AddFlyoutMenuItem(ModuleType.KeyboardManager); AddFlyoutMenuItem(ModuleType.LightSwitch); AddFlyoutMenuItem(ModuleType.MouseWithoutBorders); AddFlyoutMenuItem(ModuleType.PowerDisplay); AddFlyoutMenuItem(ModuleType.PowerLauncher); AddFlyoutMenuItem(ModuleType.PowerOCR); AddFlyoutMenuItem(ModuleType.RegistryPreview); AddFlyoutMenuItem(ModuleType.MeasureTool); AddFlyoutMenuItem(ModuleType.ShortcutGuide); AddFlyoutMenuItem(ModuleType.Workspaces); } private void AddFlyoutMenuItem(ModuleType moduleType) { if (_isModuleGpoDisabled(moduleType)) { return; } Items.Add(new QuickAccessItem { Title = _resourceLoader.GetString(Microsoft.PowerToys.Settings.UI.Library.Helpers.ModuleHelper.GetModuleLabelResourceName(moduleType)), Tag = moduleType, Visible = GetItemVisibility(moduleType), Description = GetModuleToolTip(moduleType), Icon = Microsoft.PowerToys.Settings.UI.Library.Helpers.ModuleHelper.GetModuleTypeFluentIconName(moduleType), Command = new RelayCommand(() => _launcher.Launch(moduleType)), }); } private void ModuleEnabledChanged() { if (_dispatcherQueue != null) { _dispatcherQueue.TryEnqueue(() => { _generalSettings = _settingsRepository.SettingsConfig; _generalSettings.AddEnabledModuleChangeNotification(ModuleEnabledChanged); RefreshItemsVisibility(); }); } } private void RefreshItemsVisibility() { foreach (var item in Items) { if (item.Tag is ModuleType moduleType) { bool visible = GetItemVisibility(moduleType); item.Visible = visible; } } } private void OnKbmSettingsChanged(KeyboardManagerSettings newSettings) { if (_dispatcherQueue != null) { _dispatcherQueue.TryEnqueue(() => { RefreshItemsVisibility(); }); } } private bool GetItemVisibility(ModuleType moduleType) { // Generally, if gpo is enabled or if module enabled, then quick access item is visible. bool visible = _isModuleGpoEnabled(moduleType) || Microsoft.PowerToys.Settings.UI.Library.Helpers.ModuleHelper.GetIsModuleEnabled(_generalSettings, moduleType); // For KeyboardManager Quick Access item is only shown when using the new editor if (moduleType == ModuleType.KeyboardManager) { visible = visible && _kbmSettingsRepository.SettingsConfig.Properties.UseNewEditor; } return visible; } private string GetModuleToolTip(ModuleType moduleType) { return moduleType switch { ModuleType.ColorPicker => SettingsRepository<ColorPickerSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.ToString(), ModuleType.FancyZones => SettingsRepository<FancyZonesSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.FancyzonesEditorHotkey.Value.ToString(), ModuleType.PowerDisplay => SettingsRepository<PowerDisplaySettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.ToString(), ModuleType.KeyboardManager => SettingsRepository<KeyboardManagerSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.DefaultEditorShortcut.ToString(), ModuleType.LightSwitch => SettingsRepository<LightSwitchSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ToggleThemeHotkey.Value.ToString(), ModuleType.PowerLauncher => SettingsRepository<PowerLauncherSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.OpenPowerLauncher.ToString(), ModuleType.PowerOCR => SettingsRepository<PowerOcrSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.ToString(), ModuleType.Workspaces => SettingsRepository<WorkspacesSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.Hotkey.Value.ToString(), ModuleType.MeasureTool => SettingsRepository<MeasureToolSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ActivationShortcut.ToString(), ModuleType.ShortcutGuide => SettingsRepository<ShortcutGuideSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.OpenShortcutGuide.ToString(), ModuleType.MouseWithoutBorders => SettingsRepository<MouseWithoutBordersSettings>.GetInstance(SettingsUtils.Default).SettingsConfig.Properties.ReconnectShortcut.ToString(), _ => string.Empty, }; } } }