Browse Source

Language combobox

Krzysztof Krysiński 2 năm trước cách đây
mục cha
commit
cff7332d44

+ 1 - 1
src/PixiEditor/Data/Localization/LocalizationData.json

@@ -7,7 +7,7 @@
       "iconFileName": "en.png"
     },
     {
-      "name": "Polish",
+      "name": "Polski",
         "code": "pl",
         "localeFileName": "pl.json",
         "iconFileName": "pl.png"

BIN
src/PixiEditor/Images/LanguageFlags/en.png


BIN
src/PixiEditor/Images/LanguageFlags/pl.png


+ 8 - 0
src/PixiEditor/Localization/LanguageData.cs

@@ -5,5 +5,13 @@ public class LanguageData
     public string Name { get; set; }
     public string Code { get; set; }
     public string LocaleFileName { get; set; }
+    
+    // https://icons8.com/icon/set/flags/color
     public string IconFileName { get; set; }
+    public string IconPath => $"pack://application:,,,/PixiEditor;component/Images/LanguageFlags/{IconFileName}";
+    
+    public override string ToString()
+    {
+        return Name;
+    }
 }

+ 4 - 0
src/PixiEditor/PixiEditor.csproj

@@ -399,6 +399,10 @@
 		<Resource Include="Images\Commands\PixiEditor\Selection\AddToMask.png" />
 		<None Remove="Images\Commands\PixiEditor\Selection\NewToMask.png" />
 		<Resource Include="Images\Commands\PixiEditor\Selection\NewToMask.png" />
+		<None Remove="Images\LanguageFlags\en.png" />
+		<Resource Include="Images\LanguageFlags\en.png" />
+		<None Remove="Images\LanguageFlags\pl.png" />
+		<Resource Include="Images\LanguageFlags\pl.png" />
 	</ItemGroup>
 	<ItemGroup>
 		<None Include="..\LICENSE">

+ 3 - 2
src/PixiEditor/ViewModels/SettingsWindowViewModel.cs

@@ -1,12 +1,13 @@
-using System.IO;
+using System.Collections.ObjectModel;
+using System.IO;
 using System.Text;
-using PixiEditor.Helpers;
 using PixiEditor.Models.Commands;
 using PixiEditor.Models.Dialogs;
 using PixiEditor.ViewModels.SubViewModels.UserPreferences;
 using System.Windows;
 using System.Windows.Input;
 using Microsoft.Win32;
+using PixiEditor.Localization;
 using PixiEditor.Models.Commands.Attributes.Commands;
 using PixiEditor.Models.Commands.Templates;
 using PixiEditor.Models.UserPreferences;

+ 23 - 1
src/PixiEditor/ViewModels/SubViewModels/UserPreferences/Settings/GeneralSettings.cs

@@ -1,8 +1,12 @@
-namespace PixiEditor.ViewModels.SubViewModels.UserPreferences.Settings;
+using PixiEditor.Localization;
+
+namespace PixiEditor.ViewModels.SubViewModels.UserPreferences.Settings;
 
 internal class GeneralSettings : SettingsGroup
 {
     private bool imagePreviewInTaskbar = GetPreference(nameof(ImagePreviewInTaskbar), false);
+    private LanguageData selectedLanguage = ILocalizationProvider.Current.CurrentLanguage.LanguageData;
+    private List<LanguageData> availableLanguages = ILocalizationProvider.Current.LocalizationData.Languages.ToList();
 
     public bool ImagePreviewInTaskbar
     {
@@ -16,4 +20,22 @@ internal class GeneralSettings : SettingsGroup
         get => isDebugModeEnabled;
         set => RaiseAndUpdatePreference(ref isDebugModeEnabled, value);
     }
+    
+    public List<LanguageData> AvailableLanguages
+    {
+        get => availableLanguages;
+        set => SetProperty(ref availableLanguages, value);
+    }
+
+    public LanguageData SelectedLanguage
+    {
+        get => selectedLanguage;
+        set
+        {
+            if (SetProperty(ref selectedLanguage, value))
+            {
+                ILocalizationProvider.Current.LoadLanguage(value);
+            }
+        }
+    }
 }

+ 37 - 0
src/PixiEditor/Views/Dialogs/SettingsWindow.xaml

@@ -67,6 +67,43 @@
             <StackPanel Orientation="Vertical" Visibility="{Binding CurrentPage, Converter={converters:EqualityBoolToVisibilityConverter},
             ConverterParameter='General'}" Margin="15,10" Tag="27">
                 <Label Style="{StaticResource SettingsHeader}" views:Translator.Key="LANGUAGE"/>
+                <ComboBox Margin="27 5" Width="200" Height="25" FontSize="12" HorizontalAlignment="Left"
+                          ItemsSource="{Binding SettingsSubViewModel.General.AvailableLanguages}"
+                          SelectedItem="{Binding SettingsSubViewModel.General.SelectedLanguage, Mode=TwoWay}">
+                    <ComboBox.ItemTemplate>
+                        <DataTemplate>
+                            <StackPanel Orientation="Horizontal">
+                                <StackPanel.Style>
+                                    <Style TargetType="{x:Type StackPanel}">
+                                        <Style.Triggers>
+                                            <Trigger Property="IsMouseOver" Value="True">
+                                                <Setter Property="Background" Value="{StaticResource AccentColor}"/>
+                                            </Trigger>
+                                            <Trigger Property="IsMouseOver" Value="False">
+                                                <Setter Property="Background" Value="Transparent"/>
+                                            </Trigger>
+                                        </Style.Triggers>
+                                    </Style>
+                                </StackPanel.Style>
+                                <Image VerticalAlignment="Center" Margin="5 0" Source="{Binding IconPath}"/>
+                                <TextBlock VerticalAlignment="Center" Text="{Binding Name}"/>
+                            </StackPanel>
+                        </DataTemplate>
+                    </ComboBox.ItemTemplate>
+                    <ComboBox.ItemContainerStyle>
+                        <Style TargetType="{x:Type ComboBoxItem}">
+                            <Setter Property="Template">
+                                <Setter.Value>
+                                    <ControlTemplate TargetType="{x:Type ComboBoxItem}">
+                                        <Border Height="25" Margin="5 0" Background="Transparent" BorderBrush="Transparent" BorderThickness="1">
+                                            <ContentPresenter/>
+                                        </Border>
+                                    </ControlTemplate>
+                                </Setter.Value>
+                            </Setter>
+                        </Style>
+                    </ComboBox.ItemContainerStyle>
+                </ComboBox>
 
                 <Label Style="{StaticResource SettingsHeader}">Misc</Label>