[QuickAccent]Multi-language selection (#35539)

* PowerAccent with multi-language selection

- Updated Language enum, method signatures, and settings to support multiple language selections.
- Remove ALL language and added special characters language instead.
- Modified UI to use ListView with checkboxes for language selection, including a "Select All" option.
- Adjusted ViewModel and code-behind to handle multi-selection logic.
- Updated Resources.resw and PowerAccentViewModel.cs to reflect these changes.

* Changes Language selection UI

- Groups languages into two groups
- Sort them by localized language name
- Remove unneeded looping when no languages selected
This commit is contained in:
Sergey Chernyaev
2024-12-02 16:21:56 +01:00
committed by GitHub
parent db23992aac
commit 54aab5d109
8 changed files with 398 additions and 197 deletions

View File

@@ -1,10 +1,12 @@
// 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.Linq;
using CommunityToolkit.WinUI;
using Microsoft.PowerToys.Settings.UI.Helpers;
using Microsoft.PowerToys.Settings.UI.Library;
using Microsoft.PowerToys.Settings.UI.ViewModels;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
namespace Microsoft.PowerToys.Settings.UI.Views
@@ -19,11 +21,65 @@ namespace Microsoft.PowerToys.Settings.UI.Views
ViewModel = new PowerAccentViewModel(settingsUtils, SettingsRepository<GeneralSettings>.GetInstance(settingsUtils), ShellPage.SendDefaultIPCMessage);
DataContext = ViewModel;
this.InitializeComponent();
this.InitializeControlsStates();
}
public void RefreshEnabledState()
{
ViewModel.RefreshEnabledState();
}
private void InitializeControlsStates()
{
SetCheckBoxStatus();
}
private void SetCheckBoxStatus()
{
if (ViewModel.SelectedLanguageOptions.Length == 0)
{
this.QuickAccent_SelectedLanguage_All.IsChecked = false;
this.QuickAccent_SelectedLanguage_All.IsThreeState = false;
}
else if (ViewModel.AllSelected)
{
this.QuickAccent_SelectedLanguage_All.IsChecked = true;
this.QuickAccent_SelectedLanguage_All.IsThreeState = false;
}
else
{
this.QuickAccent_SelectedLanguage_All.IsThreeState = true;
this.QuickAccent_SelectedLanguage_All.IsChecked = null;
}
}
private void QuickAccent_SelectedLanguage_SelectAll(object sender, RoutedEventArgs e)
{
this.QuickAccent_Language_Select.SelectAllSafe();
}
private void QuickAccent_SelectedLanguage_UnselectAll(object sender, RoutedEventArgs e)
{
this.QuickAccent_Language_Select.DeselectAll();
}
private void QuickAccent_SelectedLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var listView = sender as ListView;
ViewModel.SelectedLanguageOptions = listView.SelectedItems
.Select(item => item as PowerAccentLanguageModel)
.ToArray();
SetCheckBoxStatus();
}
private void QuickAccent_Language_Select_Loaded(object sender, RoutedEventArgs e)
{
foreach (var languageOption in ViewModel.SelectedLanguageOptions)
{
this.QuickAccent_Language_Select.SelectedItems.Add(languageOption);
}
}
}
}