diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.cpp | 9 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.h | 6 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_ui.cpp | 31 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_ui.h | 7 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_ui.ui | 188 | 
6 files changed, 159 insertions, 84 deletions
| diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 805bb954b..59a193edd 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -611,6 +611,7 @@ void Config::ReadPathValues() {          }      }      UISettings::values.recent_files = ReadSetting(QStringLiteral("recentFiles")).toStringList(); +    UISettings::values.language = ReadSetting(QStringLiteral("language"), QString{}).toString();      qt_config->endGroup();  } @@ -1095,6 +1096,7 @@ void Config::SavePathValues() {      }      qt_config->endArray();      WriteSetting(QStringLiteral("recentFiles"), UISettings::values.recent_files); +    WriteSetting(QStringLiteral("language"), UISettings::values.language, QString{});      qt_config->endGroup();  } diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp index a5afb354f..4e30dc51e 100644 --- a/src/yuzu/configuration/configure_dialog.cpp +++ b/src/yuzu/configuration/configure_dialog.cpp @@ -23,6 +23,7 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry)      SetConfiguration();      PopulateSelectionList(); +    connect(ui->uiTab, &ConfigureUi::LanguageChanged, this, &ConfigureDialog::OnLanguageChanged);      connect(ui->selectorList, &QListWidget::itemSelectionChanged, this,              &ConfigureDialog::UpdateVisibleTabs); @@ -98,6 +99,14 @@ void ConfigureDialog::PopulateSelectionList() {      }  } +void ConfigureDialog::OnLanguageChanged(const QString& locale) { +    emit LanguageChanged(locale); +    // first apply the configuration, and then restore the display +    ApplyConfiguration(); +    RetranslateUI(); +    SetConfiguration(); +} +  void ConfigureDialog::UpdateVisibleTabs() {      const auto items = ui->selectorList->selectedItems();      if (items.isEmpty()) { diff --git a/src/yuzu/configuration/configure_dialog.h b/src/yuzu/configuration/configure_dialog.h index 2d3bfc2da..4289bc225 100644 --- a/src/yuzu/configuration/configure_dialog.h +++ b/src/yuzu/configuration/configure_dialog.h @@ -22,6 +22,12 @@ public:      void ApplyConfiguration(); +private slots: +    void OnLanguageChanged(const QString& locale); + +signals: +    void LanguageChanged(const QString& locale); +  private:      void changeEvent(QEvent* event) override; diff --git a/src/yuzu/configuration/configure_ui.cpp b/src/yuzu/configuration/configure_ui.cpp index 94424ee44..24b6c5b72 100644 --- a/src/yuzu/configuration/configure_ui.cpp +++ b/src/yuzu/configuration/configure_ui.cpp @@ -5,6 +5,7 @@  #include <array>  #include <utility> +#include <QDirIterator>  #include "common/common_types.h"  #include "core/settings.h"  #include "ui_configure_ui.h" @@ -29,6 +30,8 @@ constexpr std::array row_text_names{  ConfigureUi::ConfigureUi(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureUi) {      ui->setupUi(this); +    InitializeLanguageComboBox(); +      for (const auto& theme : UISettings::themes) {          ui->theme_combobox->addItem(QString::fromUtf8(theme.first),                                      QString::fromUtf8(theme.second)); @@ -72,6 +75,8 @@ void ConfigureUi::RequestGameListUpdate() {  void ConfigureUi::SetConfiguration() {      ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); +    ui->language_combobox->setCurrentIndex( +        ui->language_combobox->findData(UISettings::values.language));      ui->show_add_ons->setChecked(UISettings::values.show_add_ons);      ui->icon_size_combobox->setCurrentIndex(          ui->icon_size_combobox->findData(UISettings::values.icon_size)); @@ -100,6 +105,25 @@ void ConfigureUi::RetranslateUI() {      }  } +void ConfigureUi::InitializeLanguageComboBox() { +    ui->language_combobox->addItem(tr("<System>"), QString{}); +    ui->language_combobox->addItem(tr("English"), QStringLiteral("en")); +    QDirIterator it(QStringLiteral(":/languages"), QDirIterator::NoIteratorFlags); +    while (it.hasNext()) { +        QString locale = it.next(); +        locale.truncate(locale.lastIndexOf(QLatin1Char{'.'})); +        locale.remove(0, locale.lastIndexOf(QLatin1Char{'/'}) + 1); +        const QString lang = QLocale::languageToString(QLocale(locale).language()); +        ui->language_combobox->addItem(lang, locale); +    } + +    // Unlike other configuration changes, interface language changes need to be reflected on the +    // interface immediately. This is done by passing a signal to the main window, and then +    // retranslating when passing back. +    connect(ui->language_combobox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, +            &ConfigureUi::OnLanguageChanged); +} +  void ConfigureUi::InitializeIconSizeComboBox() {      for (const auto& size : default_icon_sizes) {          ui->icon_size_combobox->addItem(QString::fromUtf8(size.second), size.first); @@ -147,3 +171,10 @@ void ConfigureUi::UpdateSecondRowComboBox(bool init) {      ui->row_2_text_combobox->removeItem(          ui->row_2_text_combobox->findData(ui->row_1_text_combobox->currentData()));  } + +void ConfigureUi::OnLanguageChanged(int index) { +    if (index == -1) +        return; + +    emit LanguageChanged(ui->language_combobox->itemData(index).toString()); +} diff --git a/src/yuzu/configuration/configure_ui.h b/src/yuzu/configuration/configure_ui.h index d471afe99..c30bcf6ff 100644 --- a/src/yuzu/configuration/configure_ui.h +++ b/src/yuzu/configuration/configure_ui.h @@ -20,6 +20,12 @@ public:      void ApplyConfiguration(); +private slots: +    void OnLanguageChanged(int index); + +signals: +    void LanguageChanged(const QString& locale); +  private:      void RequestGameListUpdate(); @@ -28,6 +34,7 @@ private:      void changeEvent(QEvent*) override;      void RetranslateUI(); +    void InitializeLanguageComboBox();      void InitializeIconSizeComboBox();      void InitializeRowComboBoxes(); diff --git a/src/yuzu/configuration/configure_ui.ui b/src/yuzu/configuration/configure_ui.ui index bd5c5d3c2..0b81747d7 100644 --- a/src/yuzu/configuration/configure_ui.ui +++ b/src/yuzu/configuration/configure_ui.ui @@ -13,112 +13,132 @@    <property name="windowTitle">     <string>Form</string>    </property> -  <layout class="QHBoxLayout" name="HorizontalLayout"> +  <layout class="QVBoxLayout" name="verticalLayout">     <item> -    <layout class="QVBoxLayout" name="VerticalLayout"> -     <item> -      <widget class="QGroupBox" name="GeneralGroupBox"> -       <property name="title"> -        <string>General</string> -       </property> -       <layout class="QHBoxLayout" name="horizontalLayout"> +    <widget class="QGroupBox" name="general_groupBox"> +     <property name="title"> +      <string>General</string> +     </property> +     <layout class="QHBoxLayout" name="horizontalLayout"> +      <item> +       <layout class="QVBoxLayout" name="verticalLayout_2">          <item> -         <layout class="QVBoxLayout" name="verticalLayout"> +         <widget class="QLabel" name="label_change_language_info"> +          <property name="text"> +           <string>Note: Changing language will apply your configuration.</string> +          </property> +          <property name="wordWrap"> +           <bool>true</bool> +          </property> +         </widget> +        </item> +        <item> +         <layout class="QHBoxLayout" name="horizontalLayout_2"> +          <item> +           <widget class="QLabel" name="language_label"> +            <property name="text"> +             <string>Interface language:</string> +            </property> +           </widget> +          </item> +          <item> +           <widget class="QComboBox" name="language_combobox"/> +          </item> +         </layout> +        </item> +        <item> +         <layout class="QHBoxLayout" name="horizontalLayout_3"> +          <item> +           <widget class="QLabel" name="theme_label"> +            <property name="text"> +             <string>Theme:</string> +            </property> +           </widget> +          </item>            <item> -           <layout class="QHBoxLayout" name="horizontalLayout_3"> -            <item> -             <widget class="QLabel" name="theme_label"> -              <property name="text"> -               <string>Theme:</string> -              </property> -             </widget> -            </item> -            <item> -             <widget class="QComboBox" name="theme_combobox"/> -            </item> -           </layout> +           <widget class="QComboBox" name="theme_combobox"/>            </item>           </layout>          </item>         </layout> -      </widget> -     </item> -     <item> -      <widget class="QGroupBox" name="GameListGroupBox"> -       <property name="title"> -        <string>Game List</string> -       </property> -       <layout class="QHBoxLayout" name="GameListHorizontalLayout"> +      </item> +     </layout> +    </widget> +   </item> +   <item> +    <widget class="QGroupBox" name="GameListGroupBox"> +     <property name="title"> +      <string>Game List</string> +     </property> +     <layout class="QHBoxLayout" name="GameListHorizontalLayout"> +      <item> +       <layout class="QVBoxLayout" name="GeneralVerticalLayout">          <item> -         <layout class="QVBoxLayout" name="GeneralVerticalLayout"> +         <widget class="QCheckBox" name="show_add_ons"> +          <property name="text"> +           <string>Show Add-Ons Column</string> +          </property> +         </widget> +        </item> +        <item> +         <layout class="QHBoxLayout" name="icon_size_qhbox_layout_2">            <item> -           <widget class="QCheckBox" name="show_add_ons"> +           <widget class="QLabel" name="icon_size_label">              <property name="text"> -             <string>Show Add-Ons Column</string> +             <string>Icon Size:</string>              </property>             </widget>            </item>            <item> -           <layout class="QHBoxLayout" name="icon_size_qhbox_layout_2"> -            <item> -             <widget class="QLabel" name="icon_size_label"> -              <property name="text"> -               <string>Icon Size:</string> -              </property> -             </widget> -            </item> -            <item> -             <widget class="QComboBox" name="icon_size_combobox"/> -            </item> -           </layout> +           <widget class="QComboBox" name="icon_size_combobox"/>            </item> +         </layout> +        </item> +        <item> +         <layout class="QHBoxLayout" name="row_1_qhbox_layout">            <item> -           <layout class="QHBoxLayout" name="row_1_qhbox_layout"> -            <item> -             <widget class="QLabel" name="row_1_label"> -              <property name="text"> -               <string>Row 1 Text:</string> -              </property> -             </widget> -            </item> -            <item> -             <widget class="QComboBox" name="row_1_text_combobox"/> -            </item> -           </layout> +           <widget class="QLabel" name="row_1_label"> +            <property name="text"> +             <string>Row 1 Text:</string> +            </property> +           </widget>            </item>            <item> -           <layout class="QHBoxLayout" name="row_2_qhbox_layout"> -            <item> -             <widget class="QLabel" name="row_2_label"> -              <property name="text"> -               <string>Row 2 Text:</string> -              </property> -             </widget> -            </item> -            <item> -             <widget class="QComboBox" name="row_2_text_combobox"/> -            </item> -           </layout> +           <widget class="QComboBox" name="row_1_text_combobox"/> +          </item> +         </layout> +        </item> +        <item> +         <layout class="QHBoxLayout" name="row_2_qhbox_layout"> +          <item> +           <widget class="QLabel" name="row_2_label"> +            <property name="text"> +             <string>Row 2 Text:</string> +            </property> +           </widget> +          </item> +          <item> +           <widget class="QComboBox" name="row_2_text_combobox"/>            </item>           </layout>          </item>         </layout> -      </widget> -     </item> -     <item> -      <spacer name="verticalSpacer"> -       <property name="orientation"> -        <enum>Qt::Vertical</enum> -       </property> -       <property name="sizeHint" stdset="0"> -        <size> -         <width>20</width> -         <height>40</height> -        </size> -       </property> -      </spacer> -     </item> -    </layout> +      </item> +     </layout> +    </widget> +   </item> +   <item> +    <spacer name="verticalSpacer"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>20</width> +       <height>40</height> +      </size> +     </property> +    </spacer>     </item>    </layout>   </widget> | 
