diff --git a/src/XIVLauncher/Windows/SettingsControl.xaml b/src/XIVLauncher/Windows/SettingsControl.xaml index 1ff7e033f..eb6b7e480 100644 --- a/src/XIVLauncher/Windows/SettingsControl.xaml +++ b/src/XIVLauncher/Windows/SettingsControl.xaml @@ -89,27 +89,22 @@ - - 日本語 - English - Deutsch - Français - Italiano - Español - Português - 한국어 - Norsk - русский - 简体中文 - 繁體中文 - svenska - + - + diff --git a/src/XIVLauncher/Windows/SettingsControl.xaml.cs b/src/XIVLauncher/Windows/SettingsControl.xaml.cs index d9250a969..001111d29 100644 --- a/src/XIVLauncher/Windows/SettingsControl.xaml.cs +++ b/src/XIVLauncher/Windows/SettingsControl.xaml.cs @@ -55,8 +55,8 @@ public void ReloadSettings() ViewModel.PatchPath = App.Settings.PatchPath.FullName; LanguageComboBox.SelectedIndex = (int) App.Settings.Language.GetValueOrDefault(ClientLanguage.English); - LauncherLanguageComboBox.SelectedIndex = (int) App.Settings.LauncherLanguage.GetValueOrDefault(LauncherLanguage.English); - LauncherLanguageNoticeTextBlock.Visibility = Visibility.Hidden; + ViewModel.LauncherLanguage = App.Settings.LauncherLanguage.GetValueOrDefault(LauncherLanguage.English); + ViewModel.LauncherLanguageNoticeVisiable = Visibility.Hidden; AddonListView.ItemsSource = App.Settings.AddonList ??= new List(); AskBeforePatchingCheckBox.IsChecked = App.Settings.AskBeforePatchInstall; KeepPatchesCheckBox.IsChecked = App.Settings.KeepPatches; @@ -104,9 +104,7 @@ private void AcceptButton_Click(object sender, RoutedEventArgs e) App.Settings.Language = (ClientLanguage)LanguageComboBox.SelectedIndex; // Keep the notice visible if LauncherLanguage has changed - if (App.Settings.LauncherLanguage == (LauncherLanguage)LauncherLanguageComboBox.SelectedIndex) - LauncherLanguageNoticeTextBlock.Visibility = Visibility.Hidden; - App.Settings.LauncherLanguage = (LauncherLanguage)LauncherLanguageComboBox.SelectedIndex; + App.Settings.LauncherLanguage = ViewModel.LauncherLanguage; App.Settings.AddonList = (List)AddonListView.ItemsSource; App.Settings.AskBeforePatchInstall = AskBeforePatchingCheckBox.IsChecked == true; @@ -289,14 +287,6 @@ private void RunIntegrityCheck_OnClick(object s, RoutedEventArgs e) window.ShowDialog(); } - private void LauncherLanguageCombo_SelectionChanged(object sender, RoutedEventArgs e) - { - if (LauncherLanguageNoticeTextBlock != null) - { - LauncherLanguageNoticeTextBlock.Visibility = Visibility.Visible; - } - } - private void EnableHooksCheckBox_OnChecked(object sender, RoutedEventArgs e) { try diff --git a/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs b/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs index b89f33983..a6563a095 100644 --- a/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs +++ b/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs @@ -55,6 +55,53 @@ public string PatchPath } } + private static List LauncherLanguageStrings { get; } = + [ + "日本語", + "English", + "Deutsch", + "Français", + "Italiano", + "Español", + "Português", + "한국어", + "Norsk", + "русский", + "简体中文", + "繁體中文", + "svenska" + ]; + + public List> LauncherLanguageList { get; } = LauncherLanguageStrings + .Zip(Enum.GetValues(typeof(LauncherLanguage)).Cast()) + .Select(pair => new GenericCombinedData() { Display = pair.First, Value = pair.Second }) + .ToList(); + + private LauncherLanguage _launcherLanguage = LauncherLanguage.Japanese; + + public LauncherLanguage LauncherLanguage + { + get => _launcherLanguage; + set + { + LauncherLanguageNoticeVisiable = App.Settings.LauncherLanguage == value ? Visibility.Hidden : Visibility.Visible; + _launcherLanguage = value; + OnPropertyChanged(nameof(LauncherLanguage)); + } + } + + public Visibility _launcherLanguageNoticeVisiable = Visibility.Hidden; + + public Visibility LauncherLanguageNoticeVisiable + { + get => _launcherLanguageNoticeVisiable; + set + { + _launcherLanguageNoticeVisiable = value; + OnPropertyChanged(nameof(LauncherLanguageNoticeVisiable)); + } + } + private void SetupLoc() { OpenPluginsFolderLoc = Loc.Localize("OpenPluginsFolder", "Open Plugins Folder"); @@ -248,4 +295,21 @@ private void SetupLoc() public string PluginDisabledTagLoc { get; private set; } } + + /// + /// Generic combined data class. + /// + /// The type of value. + public class GenericCombinedData + { + /// + /// Gets or sets the name displayed. + /// + public string Display { get; set; } + + /// + /// Gets or sets the value. + /// + public TValueType Value { get; set; } + } }