mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Whole config is handled by Config class.
This also means : we have only one config file, now
This commit is contained in:
		
							parent
							
								
									426c4a2a5b
								
							
						
					
					
						commit
						e33b938505
					
				
					 8 changed files with 181 additions and 118 deletions
				
			
		|  | @ -7,12 +7,12 @@ | |||
| #include <QStringList> | ||||
| 
 | ||||
| #include "citra_qt/config.h" | ||||
| #include "citra_qt/ui_settings.h" | ||||
| 
 | ||||
| #include "common/file_util.h" | ||||
| #include "core/settings.h" | ||||
| 
 | ||||
| Config::Config() { | ||||
| 
 | ||||
|     // TODO: Don't hardcode the path; let the frontend decide where to put the config files.
 | ||||
|     qt_config_loc = FileUtil::GetUserPath(D_CONFIG_IDX) + "qt-config.ini"; | ||||
|     FileUtil::CreateFullPath(qt_config_loc); | ||||
|  | @ -67,6 +67,51 @@ void Config::ReadValues() { | |||
|     Settings::values.use_gdbstub = qt_config->value("use_gdbstub", false).toBool(); | ||||
|     Settings::values.gdbstub_port = qt_config->value("gdbstub_port", 24689).toInt(); | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->beginGroup("UI"); | ||||
| 
 | ||||
|     qt_config->beginGroup("UILayout"); | ||||
|     UISettings::values.geometry = qt_config->value("geometry").toByteArray(); | ||||
|     UISettings::values.state = qt_config->value("state").toByteArray(); | ||||
|     UISettings::values.renderwindow_geometry = qt_config->value("geometryRenderWindow").toByteArray(); | ||||
|     UISettings::values.gamelist_header_state = qt_config->value("gameListHeaderState").toByteArray(); | ||||
|     UISettings::values.microprofile_geometry = qt_config->value("microProfileDialogGeometry").toByteArray(); | ||||
|     UISettings::values.microprofile_visible = qt_config->value("microProfileDialogVisible", false).toBool(); | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->beginGroup("Paths"); | ||||
|     UISettings::values.roms_path = qt_config->value("romsPath").toString(); | ||||
|     UISettings::values.symbols_path = qt_config->value("symbolsPath").toString(); | ||||
|     UISettings::values.gamedir_path = qt_config->value("gameListRootDir", ".").toString(); | ||||
|     UISettings::values.gamedir_deepscan = qt_config->value("gameListDeepScan", false).toBool(); | ||||
|     UISettings::values.recent_files = qt_config->value("recentFiles").toStringList(); | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->beginGroup("Shortcuts"); | ||||
|     QStringList groups = qt_config->childGroups(); | ||||
|     for (auto group : groups) | ||||
|     { | ||||
|         qt_config->beginGroup(group); | ||||
| 
 | ||||
|         QStringList hotkeys = qt_config->childGroups(); | ||||
|         for (auto hotkey : hotkeys) | ||||
|         { | ||||
|             qt_config->beginGroup(hotkey); | ||||
|             UISettings::values.shortcuts.push_back(UISettings::Shortcut(group + "/" + hotkey, | ||||
|                                                                         UISettings::ContextedShortcut(qt_config->value("KeySeq").toString(), | ||||
|                                                                                                       qt_config->value("Context").toInt()))); | ||||
|             qt_config->endGroup(); | ||||
|         } | ||||
| 
 | ||||
|         qt_config->endGroup(); | ||||
|     } | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     UISettings::values.single_window_mode = qt_config->value("singleWindowMode", true).toBool(); | ||||
|     UISettings::values.display_titlebar = qt_config->value("displayTitleBars", true).toBool(); | ||||
|     UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::SaveValues() { | ||||
|  | @ -107,6 +152,39 @@ void Config::SaveValues() { | |||
|     qt_config->setValue("use_gdbstub", Settings::values.use_gdbstub); | ||||
|     qt_config->setValue("gdbstub_port", Settings::values.gdbstub_port); | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->beginGroup("UI"); | ||||
| 
 | ||||
|     qt_config->beginGroup("UILayout"); | ||||
|     qt_config->setValue("geometry", UISettings::values.geometry); | ||||
|     qt_config->setValue("state", UISettings::values.state); | ||||
|     qt_config->setValue("geometryRenderWindow", UISettings::values.renderwindow_geometry); | ||||
|     qt_config->setValue("gameListHeaderState", UISettings::values.gamelist_header_state); | ||||
|     qt_config->setValue("microProfileDialogGeometry", UISettings::values.microprofile_geometry); | ||||
|     qt_config->setValue("microProfileDialogVisible", UISettings::values.microprofile_visible); | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->beginGroup("Paths"); | ||||
|     qt_config->setValue("romsPath", UISettings::values.roms_path); | ||||
|     qt_config->setValue("symbolsPath", UISettings::values.symbols_path); | ||||
|     qt_config->setValue("gameListRootDir", UISettings::values.gamedir_path); | ||||
|     qt_config->setValue("gameListDeepScan", UISettings::values.gamedir_deepscan); | ||||
|     qt_config->setValue("recentFiles", UISettings::values.recent_files); | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->beginGroup("Shortcuts"); | ||||
|     for (auto shortcut : UISettings::values.shortcuts ) | ||||
|     { | ||||
|         qt_config->setValue(shortcut.first + "/KeySeq", shortcut.second.first); | ||||
|         qt_config->setValue(shortcut.first + "/Context", shortcut.second.second); | ||||
|     } | ||||
|     qt_config->endGroup(); | ||||
| 
 | ||||
|     qt_config->setValue("singleWindowMode", UISettings::values.single_window_mode); | ||||
|     qt_config->setValue("displayTitleBars", UISettings::values.display_titlebar); | ||||
|     qt_config->setValue("firstStart", UISettings::values.first_start); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::Reload() { | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ | |||
| 
 | ||||
| #include "game_list.h" | ||||
| #include "game_list_p.h" | ||||
| #include "ui_settings.h" | ||||
| 
 | ||||
| #include "core/loader/loader.h" | ||||
| 
 | ||||
|  | @ -100,19 +101,15 @@ void GameList::PopulateAsync(const QString& dir_path, bool deep_scan) | |||
|     current_worker = std::move(worker); | ||||
| } | ||||
| 
 | ||||
| void GameList::SaveInterfaceLayout(QSettings& settings) | ||||
| void GameList::SaveInterfaceLayout() | ||||
| { | ||||
|     settings.beginGroup("UILayout"); | ||||
|     settings.setValue("gameListHeaderState", tree_view->header()->saveState()); | ||||
|     settings.endGroup(); | ||||
|     UISettings::values.gamelist_header_state = tree_view->header()->saveState(); | ||||
| } | ||||
| 
 | ||||
| void GameList::LoadInterfaceLayout(QSettings& settings) | ||||
| void GameList::LoadInterfaceLayout() | ||||
| { | ||||
|     auto header = tree_view->header(); | ||||
|     settings.beginGroup("UILayout"); | ||||
|     header->restoreState(settings.value("gameListHeaderState").toByteArray()); | ||||
|     settings.endGroup(); | ||||
|     header->restoreState(UISettings::values.gamelist_header_state); | ||||
| 
 | ||||
|     item_model->sort(header->sortIndicatorSection(), header->sortIndicatorOrder()); | ||||
| } | ||||
|  |  | |||
|  | @ -31,8 +31,8 @@ public: | |||
| 
 | ||||
|     void PopulateAsync(const QString& dir_path, bool deep_scan); | ||||
| 
 | ||||
|     void SaveInterfaceLayout(QSettings& settings); | ||||
|     void LoadInterfaceLayout(QSettings& settings); | ||||
|     void SaveInterfaceLayout(); | ||||
|     void LoadInterfaceLayout(); | ||||
| 
 | ||||
| public slots: | ||||
|     void AddEntry(QList<QStandardItem*> entry_items); | ||||
|  |  | |||
|  | @ -4,11 +4,12 @@ | |||
| 
 | ||||
| #include <map> | ||||
| 
 | ||||
| #include <QtGlobal> | ||||
| #include <QKeySequence> | ||||
| #include <QSettings> | ||||
| #include <QShortcut> | ||||
| 
 | ||||
| #include "citra_qt/hotkeys.h" | ||||
| #include "citra_qt/ui_settings.h" | ||||
| 
 | ||||
| struct Hotkey | ||||
| { | ||||
|  | @ -24,54 +25,38 @@ typedef std::map<QString, HotkeyMap> HotkeyGroupMap; | |||
| 
 | ||||
| HotkeyGroupMap hotkey_groups; | ||||
| 
 | ||||
| void SaveHotkeys(QSettings& settings) | ||||
| void SaveHotkeys() | ||||
| { | ||||
|     settings.beginGroup("Shortcuts"); | ||||
| 
 | ||||
|     UISettings::values.shortcuts.clear(); | ||||
|     for (auto group : hotkey_groups) | ||||
|     { | ||||
|         settings.beginGroup(group.first); | ||||
|         for (auto hotkey : group.second) | ||||
|         { | ||||
|             settings.beginGroup(hotkey.first); | ||||
|             settings.setValue(QString("KeySeq"), hotkey.second.keyseq.toString()); | ||||
|             settings.setValue(QString("Context"), hotkey.second.context); | ||||
|             settings.endGroup(); | ||||
|             UISettings::values.shortcuts.push_back(UISettings::Shortcut(group.first + "/" + hotkey.first, | ||||
|                                                                         UISettings::ContextedShortcut(hotkey.second.keyseq.toString(), | ||||
|                                                                                                       hotkey.second.context))); | ||||
|         } | ||||
|         settings.endGroup(); | ||||
|     } | ||||
|     settings.endGroup(); | ||||
| } | ||||
| 
 | ||||
| void LoadHotkeys(QSettings& settings) | ||||
| void LoadHotkeys() | ||||
| { | ||||
|     settings.beginGroup("Shortcuts"); | ||||
| 
 | ||||
|     // Make sure NOT to use a reference here because it would become invalid once we call beginGroup()
 | ||||
|     QStringList groups = settings.childGroups(); | ||||
|     for (auto group : groups) | ||||
|     for (auto shortcut : UISettings::values.shortcuts) | ||||
|     { | ||||
|         settings.beginGroup(group); | ||||
|         QStringList cat = shortcut.first.split("/"); | ||||
|         Q_ASSERT(cat.size() >= 2); | ||||
| 
 | ||||
|         QStringList hotkeys = settings.childGroups(); | ||||
|         for (auto hotkey : hotkeys) | ||||
|         // RegisterHotkey assigns default keybindings, so use old values as default parameters
 | ||||
|         Hotkey& hk = hotkey_groups[cat[0]][cat[1]]; | ||||
|         if (!shortcut.second.first.isEmpty()) | ||||
|         { | ||||
|             settings.beginGroup(hotkey); | ||||
| 
 | ||||
|             // RegisterHotkey assigns default keybindings, so use old values as default parameters
 | ||||
|             Hotkey& hk = hotkey_groups[group][hotkey]; | ||||
|             hk.keyseq = QKeySequence::fromString(settings.value("KeySeq", hk.keyseq.toString()).toString()); | ||||
|             hk.context = (Qt::ShortcutContext)settings.value("Context", hk.context).toInt(); | ||||
|             if (hk.shortcut) | ||||
|                 hk.shortcut->setKey(hk.keyseq); | ||||
| 
 | ||||
|             settings.endGroup(); | ||||
|             hk.keyseq = QKeySequence::fromString(shortcut.second.first); | ||||
|             hk.context = (Qt::ShortcutContext)shortcut.second.second; | ||||
|         } | ||||
| 
 | ||||
|         settings.endGroup(); | ||||
|         if (hk.shortcut) | ||||
|             hk.shortcut->setKey(hk.keyseq); | ||||
|     } | ||||
| 
 | ||||
|     settings.endGroup(); | ||||
| } | ||||
| 
 | ||||
| void RegisterHotkey(const QString& group, const QString& action, const QKeySequence& default_keyseq, Qt::ShortcutContext default_context) | ||||
|  |  | |||
|  | @ -33,14 +33,14 @@ QShortcut* GetHotkey(const QString& group, const QString& action, QWidget* widge | |||
|  * | ||||
|  * @note Each hotkey group will be stored a settings group; For each hotkey inside that group, a settings group will be created to store the key sequence and the hotkey context. | ||||
|  */ | ||||
| void SaveHotkeys(QSettings& settings); | ||||
| void SaveHotkeys(); | ||||
| 
 | ||||
| /**
 | ||||
|  * Loads hotkeys from the settings file. | ||||
|  * | ||||
|  * @note Yet unregistered hotkeys which are present in the settings will automatically be registered. | ||||
|  */ | ||||
| void LoadHotkeys(QSettings& settings); | ||||
| void LoadHotkeys(); | ||||
| 
 | ||||
| class GHotkeysDialog : public QWidget | ||||
| { | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ | |||
| #include "citra_qt/game_list.h" | ||||
| #include "citra_qt/hotkeys.h" | ||||
| #include "citra_qt/main.h" | ||||
| #include "citra_qt/ui_settings.h" | ||||
| 
 | ||||
| // Debugger
 | ||||
| #include "citra_qt/debugger/callstack.h" | ||||
|  | @ -51,12 +52,10 @@ | |||
| 
 | ||||
| #include "video_core/video_core.h" | ||||
| 
 | ||||
| GMainWindow::GMainWindow() : emu_thread(nullptr) | ||||
| GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) | ||||
| { | ||||
|     Pica::g_debug_context = Pica::DebugContext::Construct(); | ||||
| 
 | ||||
|     Config config; | ||||
| 
 | ||||
|     ui.setupUi(this); | ||||
|     statusBar()->hide(); | ||||
| 
 | ||||
|  | @ -134,25 +133,21 @@ GMainWindow::GMainWindow() : emu_thread(nullptr) | |||
|     setGeometry(x, y, w, h); | ||||
| 
 | ||||
|     // Restore UI state
 | ||||
|     QSettings settings; | ||||
|     restoreGeometry(UISettings::values.geometry); | ||||
|     restoreState(UISettings::values.state); | ||||
|     render_window->restoreGeometry(UISettings::values.renderwindow_geometry); | ||||
|     microProfileDialog->restoreGeometry(UISettings::values.microprofile_geometry); | ||||
|     microProfileDialog->setVisible(UISettings::values.microprofile_visible); | ||||
| 
 | ||||
|     settings.beginGroup("UILayout"); | ||||
|     restoreGeometry(settings.value("geometry").toByteArray()); | ||||
|     restoreState(settings.value("state").toByteArray()); | ||||
|     render_window->restoreGeometry(settings.value("geometryRenderWindow").toByteArray()); | ||||
|     microProfileDialog->restoreGeometry(settings.value("microProfileDialogGeometry").toByteArray()); | ||||
|     microProfileDialog->setVisible(settings.value("microProfileDialogVisible").toBool()); | ||||
|     settings.endGroup(); | ||||
| 
 | ||||
|     game_list->LoadInterfaceLayout(settings); | ||||
|     game_list->LoadInterfaceLayout(); | ||||
| 
 | ||||
|     GDBStub::ToggleServer(Settings::values.use_gdbstub); | ||||
|     GDBStub::SetServerPort(static_cast<u32>(Settings::values.gdbstub_port)); | ||||
| 
 | ||||
|     ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool()); | ||||
|     ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode); | ||||
|     ToggleWindowMode(); | ||||
| 
 | ||||
|     ui.actionDisplay_widget_title_bars->setChecked(settings.value("displayTitleBars", true).toBool()); | ||||
|     ui.actionDisplay_widget_title_bars->setChecked(UISettings::values.display_titlebar); | ||||
|     OnDisplayTitleBars(ui.actionDisplay_widget_title_bars->isChecked()); | ||||
| 
 | ||||
|     // Prepare actions for recent files
 | ||||
|  | @ -165,12 +160,10 @@ GMainWindow::GMainWindow() : emu_thread(nullptr) | |||
|     } | ||||
|     UpdateRecentFiles(); | ||||
| 
 | ||||
|     confirm_before_closing = settings.value("confirmClose", true).toBool(); | ||||
| 
 | ||||
|     // Setup connections
 | ||||
|     connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString))); | ||||
|     connect(game_list, SIGNAL(GameChosen(QString)), this, SLOT(OnGameListLoadFile(QString)), Qt::DirectConnection); | ||||
|     connect(ui.action_Configure, SIGNAL(triggered()), this, SLOT(OnConfigure())); | ||||
|     connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile())); | ||||
|     connect(ui.action_Load_File, SIGNAL(triggered()), this, SLOT(OnMenuLoadFile()),Qt::DirectConnection); | ||||
|     connect(ui.action_Load_Symbol_Map, SIGNAL(triggered()), this, SLOT(OnMenuLoadSymbolMap())); | ||||
|     connect(ui.action_Select_Game_List_Root, SIGNAL(triggered()), this, SLOT(OnMenuSelectGameListRoot())); | ||||
|     connect(ui.action_Start, SIGNAL(triggered()), this, SLOT(OnStartGame())); | ||||
|  | @ -191,7 +184,7 @@ GMainWindow::GMainWindow() : emu_thread(nullptr) | |||
|     // Setup hotkeys
 | ||||
|     RegisterHotkey("Main Window", "Load File", QKeySequence::Open); | ||||
|     RegisterHotkey("Main Window", "Start Emulation"); | ||||
|     LoadHotkeys(settings); | ||||
|     LoadHotkeys(); | ||||
| 
 | ||||
|     connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, SLOT(OnMenuLoadFile())); | ||||
|     connect(GetHotkey("Main Window", "Start Emulation", this), SIGNAL(activated()), this, SLOT(OnStartGame())); | ||||
|  | @ -201,7 +194,7 @@ GMainWindow::GMainWindow() : emu_thread(nullptr) | |||
| 
 | ||||
|     show(); | ||||
| 
 | ||||
|     game_list->PopulateAsync(settings.value("gameListRootDir", ".").toString(), settings.value("gameListDeepScan", false).toBool()); | ||||
|     game_list->PopulateAsync(UISettings::values.gamedir_path, UISettings::values.gamedir_deepscan); | ||||
| 
 | ||||
|     QStringList args = QApplication::arguments(); | ||||
|     if (args.length() >= 2) { | ||||
|  | @ -365,32 +358,24 @@ void GMainWindow::ShutdownGame() { | |||
|     emulation_running = false; | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::StoreRecentFile(const std::string& filename) | ||||
| { | ||||
|     QSettings settings; | ||||
|     QStringList recent_files = settings.value("recentFiles").toStringList(); | ||||
|     recent_files.prepend(QString::fromStdString(filename)); | ||||
|     recent_files.removeDuplicates(); | ||||
|     while (recent_files.size() > max_recent_files_item) { | ||||
|         recent_files.removeLast(); | ||||
| void GMainWindow::StoreRecentFile(const std::string& filename) { | ||||
|     UISettings::values.recent_files.prepend(QString::fromStdString(filename)); | ||||
|     UISettings::values.recent_files.removeDuplicates(); | ||||
|     while (UISettings::values.recent_files.size() > max_recent_files_item) { | ||||
|         UISettings::values.recent_files.removeLast(); | ||||
|     } | ||||
| 
 | ||||
|     settings.setValue("recentFiles", recent_files); | ||||
| 
 | ||||
|     UpdateRecentFiles(); | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::UpdateRecentFiles() { | ||||
|     QSettings settings; | ||||
|     QStringList recent_files = settings.value("recentFiles").toStringList(); | ||||
| 
 | ||||
|     unsigned int num_recent_files = std::min(recent_files.size(), static_cast<int>(max_recent_files_item)); | ||||
|     unsigned int num_recent_files = std::min(UISettings::values.recent_files.size(), static_cast<int>(max_recent_files_item)); | ||||
| 
 | ||||
|     for (unsigned int i = 0; i < num_recent_files; i++) { | ||||
|         QString text = QString("&%1. %2").arg(i + 1).arg(QFileInfo(recent_files[i]).fileName()); | ||||
|         QString text = QString("&%1. %2").arg(i + 1).arg(QFileInfo(UISettings::values.recent_files[i]).fileName()); | ||||
|         actions_recent_files[i]->setText(text); | ||||
|         actions_recent_files[i]->setData(recent_files[i]); | ||||
|         actions_recent_files[i]->setToolTip(recent_files[i]); | ||||
|         actions_recent_files[i]->setData(UISettings::values.recent_files[i]); | ||||
|         actions_recent_files[i]->setToolTip(UISettings::values.recent_files[i]); | ||||
|         actions_recent_files[i]->setVisible(true); | ||||
|     } | ||||
| 
 | ||||
|  | @ -411,36 +396,28 @@ void GMainWindow::OnGameListLoadFile(QString game_path) { | |||
| } | ||||
| 
 | ||||
| void GMainWindow::OnMenuLoadFile() { | ||||
|     QSettings settings; | ||||
|     QString rom_path = settings.value("romsPath", QString()).toString(); | ||||
| 
 | ||||
|     QString filename = QFileDialog::getOpenFileName(this, tr("Load File"), rom_path, tr("3DS executable (*.3ds *.3dsx *.elf *.axf *.cci *.cxi)")); | ||||
|     QString filename = QFileDialog::getOpenFileName(this, tr("Load File"), UISettings::values.roms_path, tr("3DS executable (*.3ds *.3dsx *.elf *.axf *.cci *.cxi)")); | ||||
|     if (!filename.isEmpty()) { | ||||
|         settings.setValue("romsPath", QFileInfo(filename).path()); | ||||
|         UISettings::values.roms_path = QFileInfo(filename).path(); | ||||
| 
 | ||||
|         BootGame(filename.toLocal8Bit().data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::OnMenuLoadSymbolMap() { | ||||
|     QSettings settings; | ||||
|     QString symbol_path = settings.value("symbolsPath", QString()).toString(); | ||||
| 
 | ||||
|     QString filename = QFileDialog::getOpenFileName(this, tr("Load Symbol Map"), symbol_path, tr("Symbol map (*)")); | ||||
|     QString filename = QFileDialog::getOpenFileName(this, tr("Load Symbol Map"), UISettings::values.symbols_path, tr("Symbol map (*)")); | ||||
|     if (!filename.isEmpty()) { | ||||
|         settings.setValue("symbolsPath", QFileInfo(filename).path()); | ||||
|         UISettings::values.symbols_path = QFileInfo(filename).path(); | ||||
| 
 | ||||
|         LoadSymbolMap(filename.toLocal8Bit().data()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::OnMenuSelectGameListRoot() { | ||||
|     QSettings settings; | ||||
| 
 | ||||
|     QString dir_path = QFileDialog::getExistingDirectory(this, tr("Select Directory")); | ||||
|     if (!dir_path.isEmpty()) { | ||||
|         settings.setValue("gameListRootDir", dir_path); | ||||
|         game_list->PopulateAsync(dir_path, settings.value("gameListDeepScan").toBool()); | ||||
|         UISettings::values.gamedir_path = dir_path; | ||||
|         game_list->PopulateAsync(dir_path, UISettings::values.gamedir_deepscan); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -456,10 +433,7 @@ void GMainWindow::OnMenuRecentFile() { | |||
|         // Display an error message and remove the file from the list.
 | ||||
|         QMessageBox::information(this, tr("File not found"), tr("File \"%1\" not found").arg(filename)); | ||||
| 
 | ||||
|         QSettings settings; | ||||
|         QStringList recent_files = settings.value("recentFiles").toStringList(); | ||||
|         recent_files.removeOne(filename); | ||||
|         settings.setValue("recentFiles", recent_files); | ||||
|         UISettings::values.recent_files.removeOne(filename); | ||||
|         UpdateRecentFiles(); | ||||
|     } | ||||
| } | ||||
|  | @ -536,23 +510,18 @@ void GMainWindow::closeEvent(QCloseEvent* event) { | |||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // Save window layout
 | ||||
|     QSettings settings(QSettings::IniFormat, QSettings::UserScope, "Citra team", "Citra"); | ||||
|     UISettings::values.geometry = saveGeometry(); | ||||
|     UISettings::values.state = saveState(); | ||||
|     UISettings::values.renderwindow_geometry = render_window->saveGeometry(); | ||||
|     UISettings::values.microprofile_geometry = microProfileDialog->saveGeometry(); | ||||
|     UISettings::values.microprofile_visible = microProfileDialog->isVisible(); | ||||
| 
 | ||||
|     settings.beginGroup("UILayout"); | ||||
|     settings.setValue("geometry", saveGeometry()); | ||||
|     settings.setValue("state", saveState()); | ||||
|     settings.setValue("geometryRenderWindow", render_window->saveGeometry()); | ||||
|     settings.setValue("microProfileDialogGeometry", microProfileDialog->saveGeometry()); | ||||
|     settings.setValue("microProfileDialogVisible", microProfileDialog->isVisible()); | ||||
|     settings.endGroup(); | ||||
|     UISettings::values.single_window_mode = ui.action_Single_Window_Mode->isChecked(); | ||||
|     UISettings::values.display_titlebar = ui.actionDisplay_widget_title_bars->isChecked(); | ||||
|     UISettings::values.first_start = false; | ||||
| 
 | ||||
|     settings.setValue("singleWindowMode", ui.action_Single_Window_Mode->isChecked()); | ||||
|     settings.setValue("displayTitleBars", ui.actionDisplay_widget_title_bars->isChecked()); | ||||
|     settings.setValue("firstStart", false); | ||||
|     settings.setValue("confirmClose", confirm_before_closing); | ||||
|     game_list->SaveInterfaceLayout(settings); | ||||
|     SaveHotkeys(settings); | ||||
|     game_list->SaveInterfaceLayout(); | ||||
|     SaveHotkeys(); | ||||
| 
 | ||||
|     // Shutdown session if the emu thread is active...
 | ||||
|     if (emu_thread != nullptr) | ||||
|  | @ -577,7 +546,6 @@ int main(int argc, char* argv[]) { | |||
|     }); | ||||
| 
 | ||||
|     // Init settings params
 | ||||
|     QSettings::setDefaultFormat(QSettings::IniFormat); | ||||
|     QCoreApplication::setOrganizationName("Citra team"); | ||||
|     QCoreApplication::setApplicationName("Citra"); | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ | |||
| 
 | ||||
| #include "ui_main.h" | ||||
| 
 | ||||
| class Config; | ||||
| class GameList; | ||||
| class GImageInfo; | ||||
| class GRenderWindow; | ||||
|  | @ -114,6 +115,8 @@ private: | |||
|     GRenderWindow* render_window; | ||||
|     GameList* game_list; | ||||
| 
 | ||||
|     std::unique_ptr<Config> config; | ||||
| 
 | ||||
|     // Whether emulation is currently running in Citra.
 | ||||
|     bool emulation_running = false; | ||||
|     std::unique_ptr<EmuThread> emu_thread; | ||||
|  |  | |||
|  | @ -5,10 +5,42 @@ | |||
| #ifndef UISETTINGS_H | ||||
| #define UISETTINGS_H | ||||
| 
 | ||||
| #include <QByteArray> | ||||
| #include <QStringList> | ||||
| #include <QString> | ||||
| 
 | ||||
| #include <vector> | ||||
| 
 | ||||
| namespace UISettings { | ||||
| 
 | ||||
|     typedef std::pair<QString, int> ContextedShortcut; | ||||
|     typedef std::pair<QString, ContextedShortcut> Shortcut; | ||||
| 
 | ||||
| struct Values { | ||||
|     QByteArray geometry; | ||||
|     QByteArray state; | ||||
| 
 | ||||
|     QByteArray renderwindow_geometry; | ||||
| 
 | ||||
|     QByteArray gamelist_header_state; | ||||
| 
 | ||||
|     QByteArray microprofile_geometry; | ||||
|     bool microprofile_visible; | ||||
| 
 | ||||
|     bool single_window_mode; | ||||
|     bool display_titlebar; | ||||
| 
 | ||||
|     bool check_closure; | ||||
|     bool first_start; | ||||
| 
 | ||||
|     QString roms_path; | ||||
|     QString symbols_path; | ||||
|     QString gamedir_path; | ||||
|     bool gamedir_deepscan; | ||||
|     QStringList recent_files; | ||||
| 
 | ||||
|     // Shortcut name <Shortcut, context>
 | ||||
|     std::vector<Shortcut> shortcuts; | ||||
| } extern values; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue