mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 02:36:19 +02:00
[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:
@@ -1,7 +1,8 @@
|
||||
<Page
|
||||
<Page
|
||||
x:Class="Microsoft.PowerToys.Settings.UI.Views.PowerAccentPage"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:Lib="using:Microsoft.PowerToys.Settings.UI.Library"
|
||||
xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
@@ -9,6 +10,15 @@
|
||||
xmlns:ui="using:CommunityToolkit.WinUI"
|
||||
AutomationProperties.LandmarkType="Main"
|
||||
mc:Ignorable="d">
|
||||
<Page.Resources>
|
||||
<CollectionViewSource
|
||||
x:Name="LanguagesCustomViewSource"
|
||||
IsSourceGrouped="True"
|
||||
Source="{x:Bind ViewModel.LanguageGroups, Mode=OneWay}" />
|
||||
<DataTemplate x:Key="LanguageViewTemplate" x:DataType="Lib:PowerAccentLanguageModel">
|
||||
<TextBlock Text="{x:Bind Language}" />
|
||||
</DataTemplate>
|
||||
</Page.Resources>
|
||||
|
||||
<controls:SettingsPageControl
|
||||
x:Uid="QuickAccent"
|
||||
@@ -48,52 +58,98 @@
|
||||
</tkcontrols:SettingsExpander>
|
||||
</controls:SettingsGroup>
|
||||
|
||||
<controls:SettingsGroup x:Uid="QuickAccent_Language" IsEnabled="{x:Bind ViewModel.IsEnabled, Mode=OneWay}">
|
||||
<tkcontrols:SettingsCard x:Uid="QuickAccent_SelectedLanguage" HeaderIcon="{ui:FontIcon Glyph=}">
|
||||
<ComboBox MinWidth="{StaticResource SettingActionControlMinWidth}" SelectedIndex="{x:Bind Path=ViewModel.SelectedLangIndex, Mode=TwoWay}">
|
||||
<!-- These should be in the same order as the array items in PowerAccentViewModel.cs -->
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_All" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Bulgarian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Catalan" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Crimean" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Currency" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Croatian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Czech" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Danish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Gaeilge" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Gaidhlig" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Dutch" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Greek" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Estonian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Esperanto" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Finnish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_French" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_German" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Hebrew" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Hungarian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Icelandic" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_IPA" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Italian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Kurdish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Lithuanian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Macedonian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Maori" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Norwegian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Pinyin" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Polish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Portuguese" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Romanian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Romanization" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Slovak" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Slovenian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Spanish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Serbian" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Serbian_Cyrillic" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Swedish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Turkish" />
|
||||
<ComboBoxItem x:Uid="QuickAccent_SelectedLanguage_Welsh" />
|
||||
</ComboBox>
|
||||
</tkcontrols:SettingsCard>
|
||||
<controls:SettingsGroup
|
||||
x:Name="QuickAccent_Language"
|
||||
x:Uid="QuickAccent_Language"
|
||||
IsEnabled="{x:Bind ViewModel.IsEnabled, Mode=OneWay}">
|
||||
<tkcontrols:SettingsExpander
|
||||
x:Uid="QuickAccent_SelectedLanguage"
|
||||
HeaderIcon="{ui:FontIcon Glyph=}"
|
||||
IsExpanded="False">
|
||||
<CheckBox
|
||||
x:Name="QuickAccent_SelectedLanguage_All"
|
||||
x:Uid="QuickAccent_SelectedLanguage_All"
|
||||
Checked="QuickAccent_SelectedLanguage_SelectAll"
|
||||
IsThreeState="True"
|
||||
Unchecked="QuickAccent_SelectedLanguage_UnselectAll" />
|
||||
<tkcontrols:SettingsExpander.Items>
|
||||
<tkcontrols:SettingsCard>
|
||||
<ListView
|
||||
x:Name="QuickAccent_Language_Select"
|
||||
MinWidth="{StaticResource SettingActionControlMinWidth}"
|
||||
MinHeight="{StaticResource SettingActionControlMinWidth}"
|
||||
HorizontalContentAlignment="Stretch"
|
||||
VerticalContentAlignment="Stretch"
|
||||
ItemTemplate="{StaticResource LanguageViewTemplate}"
|
||||
ItemsSource="{x:Bind LanguagesCustomViewSource.View, Mode=OneWay}"
|
||||
Loaded="QuickAccent_Language_Select_Loaded"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Visible"
|
||||
ScrollViewer.HorizontalScrollMode="Enabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Visible"
|
||||
ScrollViewer.VerticalScrollMode="Enabled"
|
||||
SelectionChanged="QuickAccent_SelectedLanguage_SelectionChanged"
|
||||
SelectionMode="Multiple">
|
||||
<ListView.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<ItemsWrapGrid
|
||||
MaxWidth="{Binding ElementName=QuickAccent_Language, Path=ActualWidth}"
|
||||
ItemWidth="280"
|
||||
Orientation="Horizontal" />
|
||||
</ItemsPanelTemplate>
|
||||
</ListView.ItemsPanel>
|
||||
<ListView.ItemContainerStyle>
|
||||
<Style TargetType="ListViewItem">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ListViewItem">
|
||||
<ListViewItemPresenter
|
||||
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||
CheckBoxBorderBrush="{ThemeResource CheckBoxBorderThemeBrush}"
|
||||
CheckBoxBrush="{ThemeResource CheckBoxCheckBackgroundFillUnchecked}"
|
||||
CheckBoxCornerRadius="{ThemeResource ControlCornerRadius}"
|
||||
CheckBoxDisabledBorderBrush="{ThemeResource CheckBoxDisabledBorderThemeBrush}"
|
||||
CheckBoxDisabledBrush="{ThemeResource CheckBoxCheckBackgroundFillUncheckedDisabled}"
|
||||
CheckBoxPointerOverBorderBrush="{ThemeResource CheckBoxPointerOverBorderThemeBrush}"
|
||||
CheckBoxPointerOverBrush="{ThemeResource CheckBoxCheckBackgroundFillUncheckedPointerOver}"
|
||||
CheckBoxPressedBorderBrush="{ThemeResource CheckBoxPressedBorderThemeBrush}"
|
||||
CheckBoxPressedBrush="{ThemeResource CheckBoxCheckBackgroundFillUncheckedPressed}"
|
||||
CheckBoxSelectedBrush="{ThemeResource CheckBoxCheckBackgroundFillChecked}"
|
||||
CheckBoxSelectedDisabledBrush="{ThemeResource CheckBoxCheckBackgroundFillCheckedDisabled}"
|
||||
CheckBoxSelectedPointerOverBrush="{ThemeResource CheckBoxCheckBackgroundFillCheckedPointerOver}"
|
||||
CheckBoxSelectedPressedBrush="{ThemeResource CheckBoxCheckBackgroundFillCheckedPressed}"
|
||||
CheckBrush="{ThemeResource CheckBoxCheckGlyphForegroundChecked}"
|
||||
CheckDisabledBrush="{ThemeResource CheckBoxCheckGlyphForegroundCheckedDisabled}"
|
||||
CheckMode="Inline"
|
||||
CheckPressedBrush="{ThemeResource CheckBoxCheckGlyphForegroundUncheckedPressed}"
|
||||
ContentMargin="{TemplateBinding Padding}"
|
||||
ContentTransitions="{TemplateBinding ContentTransitions}"
|
||||
DisabledOpacity="{ThemeResource ListViewItemDisabledThemeOpacity}"
|
||||
ReorderHintOffset="{ThemeResource ListViewItemReorderHintThemeOffset}"
|
||||
SelectionCheckMarkVisualEnabled="True" />
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ListView.ItemContainerStyle>
|
||||
<ListView.GroupStyle>
|
||||
<GroupStyle>
|
||||
<GroupStyle.HeaderTemplate>
|
||||
<DataTemplate x:DataType="Lib:PowerAccentLanguageGroupModel">
|
||||
<Border AutomationProperties.AccessibilityView="Raw">
|
||||
<TextBlock
|
||||
AutomationProperties.AccessibilityView="Raw"
|
||||
Style="{ThemeResource SubtitleTextBlockStyle}"
|
||||
Text="{x:Bind Group}" />
|
||||
</Border>
|
||||
</DataTemplate>
|
||||
</GroupStyle.HeaderTemplate>
|
||||
</GroupStyle>
|
||||
</ListView.GroupStyle>
|
||||
</ListView>
|
||||
</tkcontrols:SettingsCard>
|
||||
</tkcontrols:SettingsExpander.Items>
|
||||
</tkcontrols:SettingsExpander>
|
||||
</controls:SettingsGroup>
|
||||
|
||||
<controls:SettingsGroup x:Uid="QuickAccent_Toolbar" IsEnabled="{x:Bind ViewModel.IsEnabled, Mode=OneWay}">
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user