mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Qt: add system settings config tab
This commit is contained in:
		
							parent
							
								
									ab2eef396a
								
							
						
					
					
						commit
						ec3e99eec7
					
				
					 8 changed files with 450 additions and 4 deletions
				
			
		|  | @ -22,6 +22,7 @@ set(SRCS | |||
|             configure_debug.cpp | ||||
|             configure_dialog.cpp | ||||
|             configure_general.cpp | ||||
|             configure_system.cpp | ||||
|             game_list.cpp | ||||
|             hotkeys.cpp | ||||
|             main.cpp | ||||
|  | @ -52,6 +53,7 @@ set(HEADERS | |||
|             configure_debug.h | ||||
|             configure_dialog.h | ||||
|             configure_general.h | ||||
|             configure_system.h | ||||
|             game_list.h | ||||
|             game_list_p.h | ||||
|             hotkeys.h | ||||
|  | @ -69,6 +71,7 @@ set(UIS | |||
|             configure_audio.ui | ||||
|             configure_debug.ui | ||||
|             configure_general.ui | ||||
|             configure_system.ui | ||||
|             hotkeys.ui | ||||
|             main.ui | ||||
|             ) | ||||
|  |  | |||
|  | @ -24,6 +24,11 @@ | |||
|        <string>General</string> | ||||
|       </attribute> | ||||
|      </widget> | ||||
|      <widget class="ConfigureSystem" name="systemTab"> | ||||
|       <attribute name="title"> | ||||
|        <string>System</string> | ||||
|       </attribute> | ||||
|      </widget> | ||||
|      <widget class="QWidget" name="inputTab"> | ||||
|       <attribute name="title"> | ||||
|        <string>Input</string> | ||||
|  | @ -57,6 +62,12 @@ | |||
|    <header>configure_general.h</header> | ||||
|    <container>1</container> | ||||
|   </customwidget> | ||||
|   <customwidget> | ||||
|    <class>ConfigureSystem</class> | ||||
|    <extends>QWidget</extends> | ||||
|    <header>configure_system.h</header> | ||||
|    <container>1</container> | ||||
|   </customwidget> | ||||
|   <customwidget> | ||||
|    <class>ConfigureAudio</class> | ||||
|    <extends>QWidget</extends> | ||||
|  |  | |||
|  | @ -9,9 +9,10 @@ | |||
| 
 | ||||
| #include "core/settings.h" | ||||
| 
 | ||||
| ConfigureDialog::ConfigureDialog(QWidget *parent) : | ||||
| ConfigureDialog::ConfigureDialog(QWidget *parent, bool running) : | ||||
|     QDialog(parent), | ||||
|     ui(new Ui::ConfigureDialog) | ||||
|     ui(new Ui::ConfigureDialog), | ||||
|     emulation_running(running) | ||||
| { | ||||
|     ui->setupUi(this); | ||||
|     this->setConfiguration(); | ||||
|  | @ -21,10 +22,14 @@ ConfigureDialog::~ConfigureDialog() { | |||
| } | ||||
| 
 | ||||
| void ConfigureDialog::setConfiguration() { | ||||
|     // System tab needs set manually
 | ||||
|     // depending on whether emulation is running
 | ||||
|     ui->systemTab->setConfiguration(emulation_running); | ||||
| } | ||||
| 
 | ||||
| void ConfigureDialog::applyConfiguration() { | ||||
|     ui->generalTab->applyConfiguration(); | ||||
|     ui->systemTab->applyConfiguration(); | ||||
|     ui->audioTab->applyConfiguration(); | ||||
|     ui->debugTab->applyConfiguration(); | ||||
| } | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ class ConfigureDialog : public QDialog | |||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|     explicit ConfigureDialog(QWidget *parent = nullptr); | ||||
|     explicit ConfigureDialog(QWidget *parent, bool emulation_running); | ||||
|     ~ConfigureDialog(); | ||||
| 
 | ||||
|     void applyConfiguration(); | ||||
|  | @ -26,4 +26,5 @@ private: | |||
| 
 | ||||
| private: | ||||
|     std::unique_ptr<Ui::ConfigureDialog> ui; | ||||
|     bool emulation_running; | ||||
| }; | ||||
|  |  | |||
							
								
								
									
										136
									
								
								src/citra_qt/configure_system.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								src/citra_qt/configure_system.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,136 @@ | |||
| // Copyright 2016 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "citra_qt/configure_system.h" | ||||
| #include "citra_qt/ui_settings.h" | ||||
| #include "ui_configure_system.h" | ||||
| 
 | ||||
| #include "core/hle/service/fs/archive.h" | ||||
| #include "core/hle/service/cfg/cfg.h" | ||||
| 
 | ||||
| static const std::array<int, 12> days_in_month = {{ | ||||
|     31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 | ||||
| }}; | ||||
| 
 | ||||
| ConfigureSystem::ConfigureSystem(QWidget *parent) : | ||||
|     QWidget(parent), | ||||
|     ui(new Ui::ConfigureSystem) { | ||||
|     ui->setupUi(this); | ||||
| 
 | ||||
|     connect(ui->combo_birthmonth, SIGNAL(currentIndexChanged(int)), SLOT(updateBirthdayComboBox(int))); | ||||
| } | ||||
| 
 | ||||
| ConfigureSystem::~ConfigureSystem() { | ||||
| } | ||||
| 
 | ||||
| void ConfigureSystem::setConfiguration(bool emulation_running) { | ||||
|     enabled = !emulation_running; | ||||
| 
 | ||||
|     if (!enabled) { | ||||
|         ReadSystemSettings(); | ||||
|         ui->group_system_settings->setEnabled(false); | ||||
|     } else { | ||||
|         // This tab is enabled only when game is not running (i.e. all service are not initialized).
 | ||||
|         // Temporarily register archive types and load the config savegame file to memory.
 | ||||
|         Service::FS::RegisterArchiveTypes(); | ||||
|         ResultCode result = Service::CFG::LoadConfigNANDSaveFile(); | ||||
|         Service::FS::UnregisterArchiveTypes(); | ||||
| 
 | ||||
|         if (result.IsError()) { | ||||
|             ui->label_disable_info->setText(tr("Failed to load system settings data.")); | ||||
|             ui->group_system_settings->setEnabled(false); | ||||
|             enabled = false; | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         ReadSystemSettings(); | ||||
|         ui->label_disable_info->hide(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void ConfigureSystem::ReadSystemSettings() { | ||||
|     // set username
 | ||||
|     username = Service::CFG::GetUsername(); | ||||
|     // ui->edit_username->setText(QString::fromStdU16String(username)); // TODO(wwylele): Use this when we move to Qt 5.5
 | ||||
|     ui->edit_username->setText(QString::fromUtf16(reinterpret_cast<const ushort*>(username.data()))); | ||||
| 
 | ||||
|     // set birthday
 | ||||
|     std::tie(birthmonth, birthday) = Service::CFG::GetBirthday(); | ||||
|     ui->combo_birthmonth->setCurrentIndex(birthmonth - 1); | ||||
|     ui->combo_birthday->setCurrentIndex(birthday - 1); | ||||
| 
 | ||||
|     // set system language
 | ||||
|     language_index = Service::CFG::GetSystemLanguage(); | ||||
|     ui->combo_language->setCurrentIndex(language_index); | ||||
| 
 | ||||
|     // set sound output mode
 | ||||
|     sound_index = Service::CFG::GetSoundOutputMode(); | ||||
|     ui->combo_sound->setCurrentIndex(sound_index); | ||||
| } | ||||
| 
 | ||||
| void ConfigureSystem::applyConfiguration() { | ||||
|     if (!enabled) | ||||
|         return; | ||||
| 
 | ||||
|     bool modified = false; | ||||
| 
 | ||||
|     // apply username
 | ||||
|     // std::u16string new_username = ui->edit_username->text().toStdU16String(); // TODO(wwylele): Use this when we move to Qt 5.5
 | ||||
|     std::u16string new_username(reinterpret_cast<const char16_t*>(ui->edit_username->text().utf16())); | ||||
|     if (new_username != username) { | ||||
|         Service::CFG::SetUsername(new_username); | ||||
|         modified = true; | ||||
|     } | ||||
| 
 | ||||
|     // apply birthday
 | ||||
|     int new_birthmonth = ui->combo_birthmonth->currentIndex() + 1; | ||||
|     int new_birthday = ui->combo_birthday->currentIndex() + 1; | ||||
|     if (birthmonth != new_birthmonth || birthday != new_birthday) { | ||||
|         Service::CFG::SetBirthday(new_birthmonth, new_birthday); | ||||
|         modified = true; | ||||
|     } | ||||
| 
 | ||||
|     // apply language
 | ||||
|     int new_language = ui->combo_language->currentIndex(); | ||||
|     if (language_index != new_language) { | ||||
|         Service::CFG::SetSystemLanguage(static_cast<Service::CFG::SystemLanguage>(new_language)); | ||||
|         modified = true; | ||||
|     } | ||||
| 
 | ||||
|     // apply sound
 | ||||
|     int new_sound = ui->combo_sound->currentIndex(); | ||||
|     if (sound_index != new_sound) { | ||||
|         Service::CFG::SetSoundOutputMode(static_cast<Service::CFG::SoundOutputMode>(new_sound)); | ||||
|         modified = true; | ||||
|     } | ||||
| 
 | ||||
|     // update the config savegame if any item is modified.
 | ||||
|     if (modified) | ||||
|         Service::CFG::UpdateConfigNANDSavegame(); | ||||
| } | ||||
| 
 | ||||
| void ConfigureSystem::updateBirthdayComboBox(int birthmonth_index) { | ||||
|     if (birthmonth_index < 0 || birthmonth_index >= 12) | ||||
|         return; | ||||
| 
 | ||||
|     // store current day selection
 | ||||
|     int birthday_index = ui->combo_birthday->currentIndex(); | ||||
| 
 | ||||
|     // get number of days in the new selected month
 | ||||
|     int days = days_in_month[birthmonth_index]; | ||||
| 
 | ||||
|     // if the selected day is out of range,
 | ||||
|     // reset it to 1st
 | ||||
|     if (birthday_index < 0 || birthday_index >= days) | ||||
|         birthday_index = 0; | ||||
| 
 | ||||
|     // update the day combo box
 | ||||
|     ui->combo_birthday->clear(); | ||||
|     for (int i = 1; i <= days; ++i) { | ||||
|         ui->combo_birthday->addItem(QString::number(i)); | ||||
|     } | ||||
| 
 | ||||
|     // restore the day selection
 | ||||
|     ui->combo_birthday->setCurrentIndex(birthday_index); | ||||
| } | ||||
							
								
								
									
										38
									
								
								src/citra_qt/configure_system.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/citra_qt/configure_system.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| // Copyright 2016 Citra Emulator Project
 | ||||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <QWidget> | ||||
| 
 | ||||
| namespace Ui { | ||||
| class ConfigureSystem; | ||||
| } | ||||
| 
 | ||||
| class ConfigureSystem : public QWidget | ||||
| { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|     explicit ConfigureSystem(QWidget *parent = nullptr); | ||||
|     ~ConfigureSystem(); | ||||
| 
 | ||||
|     void applyConfiguration(); | ||||
|     void setConfiguration(bool emulation_running); | ||||
| 
 | ||||
| public slots: | ||||
|     void updateBirthdayComboBox(int birthmonth_index); | ||||
| 
 | ||||
| private: | ||||
|     void ReadSystemSettings(); | ||||
| 
 | ||||
|     std::unique_ptr<Ui::ConfigureSystem> ui; | ||||
|     bool enabled; | ||||
| 
 | ||||
|     std::u16string username; | ||||
|     int birthmonth, birthday; | ||||
|     int language_index; | ||||
|     int sound_index; | ||||
| }; | ||||
							
								
								
									
										252
									
								
								src/citra_qt/configure_system.ui
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								src/citra_qt/configure_system.ui
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,252 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>ConfigureSystem</class> | ||||
|  <widget class="QWidget" name="ConfigureSystem"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>360</width> | ||||
|     <height>377</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Form</string> | ||||
|   </property> | ||||
|   <layout class="QHBoxLayout" name="horizontalLayout"> | ||||
|    <item> | ||||
|     <layout class="QVBoxLayout" name="verticalLayout"> | ||||
|      <item> | ||||
|       <widget class="QGroupBox" name="group_system_settings"> | ||||
|        <property name="title"> | ||||
|         <string>System Settings</string> | ||||
|        </property> | ||||
|        <layout class="QGridLayout" name="gridLayout"> | ||||
|         <item row="0" column="0"> | ||||
|          <widget class="QLabel" name="label_username"> | ||||
|           <property name="text"> | ||||
|            <string>Username</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item row="0" column="1"> | ||||
|          <widget class="QLineEdit" name="edit_username"> | ||||
|           <property name="sizePolicy"> | ||||
|            <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> | ||||
|             <horstretch>0</horstretch> | ||||
|             <verstretch>0</verstretch> | ||||
|            </sizepolicy> | ||||
|           </property> | ||||
|           <property name="maxLength"> | ||||
|            <number>10</number> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item row="1" column="0"> | ||||
|          <widget class="QLabel" name="label_birthday"> | ||||
|           <property name="text"> | ||||
|            <string>Birthday</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item row="1" column="1"> | ||||
|          <layout class="QHBoxLayout" name="horizontalLayout_birthday2"> | ||||
|           <item> | ||||
|            <widget class="QComboBox" name="combo_birthmonth"> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>January</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>February</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>March</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>April</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>May</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>June</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>July</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>August</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>September</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>October</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>November</string> | ||||
|              </property> | ||||
|             </item> | ||||
|             <item> | ||||
|              <property name="text"> | ||||
|               <string>December</string> | ||||
|              </property> | ||||
|             </item> | ||||
|            </widget> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QComboBox" name="combo_birthday"/> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|         <item row="2" column="0"> | ||||
|          <widget class="QLabel" name="label_language"> | ||||
|           <property name="text"> | ||||
|            <string>Language</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item row="2" column="1"> | ||||
|          <widget class="QComboBox" name="combo_language"> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Japanese (日本語)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>English</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>French (français)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>German (Deutsch)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Italian (italiano)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Spanish (español)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Simplified Chinese (简体中文)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Korean (한국어)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Dutch (Nederlands)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Portuguese (português)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Russian (Русский)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Traditional Chinese (正體中文)</string> | ||||
|            </property> | ||||
|           </item> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item row="3" column="0"> | ||||
|          <widget class="QLabel" name="label_sound"> | ||||
|           <property name="text"> | ||||
|            <string>Sound output mode</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item row="3" column="1"> | ||||
|          <widget class="QComboBox" name="combo_sound"> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Mono</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Stereo</string> | ||||
|            </property> | ||||
|           </item> | ||||
|           <item> | ||||
|            <property name="text"> | ||||
|             <string>Surround</string> | ||||
|            </property> | ||||
|           </item> | ||||
|          </widget> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </widget> | ||||
|      </item> | ||||
|      <item> | ||||
|       <widget class="QLabel" name="label_disable_info"> | ||||
|        <property name="text"> | ||||
|         <string>System settings are available only when game is not running.</string> | ||||
|        </property> | ||||
|        <property name="wordWrap"> | ||||
|         <bool>true</bool> | ||||
|        </property> | ||||
|       </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> | ||||
|  <resources/> | ||||
|  <connections/> | ||||
| </ui> | ||||
|  | @ -508,7 +508,7 @@ void GMainWindow::ToggleWindowMode() { | |||
| } | ||||
| 
 | ||||
| void GMainWindow::OnConfigure() { | ||||
|     ConfigureDialog configureDialog(this); | ||||
|     ConfigureDialog configureDialog(this, emulation_running); | ||||
|     auto result = configureDialog.exec(); | ||||
|     if (result == QDialog::Accepted) | ||||
|     { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue