diff options
-rw-r--r-- | src/core/settings.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/config.cpp | 18 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 27 | ||||
-rw-r--r-- | src/yuzu/main.h | 7 | ||||
-rw-r--r-- | src/yuzu/main.ui | 19 | ||||
-rw-r--r-- | src/yuzu_cmd/config.cpp | 6 |
6 files changed, 79 insertions, 0 deletions
diff --git a/src/core/settings.h b/src/core/settings.h index ed6f42471..5bf1863e6 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -127,6 +127,8 @@ struct Values { // Data Storage bool use_virtual_sd; + std::string nand_dir; + std::string sdmc_dir; // Renderer float resolution_factor; diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 60b6d6d44..c43e79e78 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -102,6 +102,20 @@ void Config::ReadValues() { qt_config->beginGroup("Data Storage"); Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool(); + FileUtil::GetUserPath( + FileUtil::UserPath::NANDDir, + qt_config + ->value("nand_directory", + QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))) + .toString() + .toStdString()); + FileUtil::GetUserPath( + FileUtil::UserPath::SDMCDir, + qt_config + ->value("sdmc_directory", + QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))) + .toString() + .toStdString()); qt_config->endGroup(); qt_config->beginGroup("System"); @@ -222,6 +236,10 @@ void Config::SaveValues() { qt_config->beginGroup("Data Storage"); qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd); + qt_config->setValue("nand_directory", + QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))); + qt_config->setValue("sdmc_directory", + QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))); qt_config->endGroup(); qt_config->beginGroup("System"); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index c6f170cd7..262e33487 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -12,6 +12,7 @@ #define QT_NO_OPENGL #include <QDesktopWidget> +#include <QDialogButtonBox> #include <QFileDialog> #include <QMessageBox> #include <QtGui> @@ -374,6 +375,10 @@ void GMainWindow::ConnectMenuEvents() { &GMainWindow::OnMenuInstallToNAND); connect(ui.action_Select_Game_List_Root, &QAction::triggered, this, &GMainWindow::OnMenuSelectGameListRoot); + connect(ui.action_Select_NAND_Directory, &QAction::triggered, this, + [this] { OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget::NAND); }); + connect(ui.action_Select_SDMC_Directory, &QAction::triggered, this, + [this] { OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget::SDMC); }); connect(ui.action_Exit, &QAction::triggered, this, &QMainWindow::close); // Emulation @@ -889,6 +894,28 @@ void GMainWindow::OnMenuSelectGameListRoot() { } } +void GMainWindow::OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget target) { + const auto res = QMessageBox::information( + this, tr("Changing Emulated Directory"), + tr("You are about to change the emulated %1 directory of the system. Please note " + "that this does not also move the contents of the previous directory to the " + "new one and you will have to do that yourself.") + .arg(target == EmulatedDirectoryTarget::SDMC ? tr("SD card") : tr("NAND")), + QMessageBox::StandardButtons{QMessageBox::Ok, QMessageBox::Cancel}); + + if (res == QMessageBox::Cancel) + return; + + QString dir_path = QFileDialog::getExistingDirectory(this, tr("Select Directory")); + if (!dir_path.isEmpty()) { + FileUtil::GetUserPath(target == EmulatedDirectoryTarget::SDMC ? FileUtil::UserPath::SDMCDir + : FileUtil::UserPath::NANDDir, + dir_path.toStdString()); + Service::FileSystem::CreateFactories(vfs); + game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan); + } +} + void GMainWindow::OnMenuRecentFile() { QAction* action = qobject_cast<QAction*>(sender()); assert(action); diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 29bc6e004..089ea2445 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -35,6 +35,11 @@ namespace Tegra { class DebugContext; } +enum class EmulatedDirectoryTarget { + NAND, + SDMC, +}; + class GMainWindow : public QMainWindow { Q_OBJECT @@ -140,6 +145,8 @@ private slots: void OnMenuInstallToNAND(); /// Called whenever a user selects the "File->Select Game List Root" menu item void OnMenuSelectGameListRoot(); + /// Called whenever a user select the "File->Select -- Directory" where -- is NAND or SD Card + void OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget target); void OnMenuRecentFile(); void OnConfigure(); void OnAbout(); diff --git a/src/yuzu/main.ui b/src/yuzu/main.ui index faa0c626a..3879d4813 100644 --- a/src/yuzu/main.ui +++ b/src/yuzu/main.ui @@ -65,6 +65,9 @@ <addaction name="action_Select_Game_List_Root"/> <addaction name="menu_recent_files"/> <addaction name="separator"/> + <addaction name="action_Select_NAND_Directory"/> + <addaction name="action_Select_SDMC_Directory"/> + <addaction name="separator"/> <addaction name="action_Exit"/> </widget> <widget class="QMenu" name="menu_Emulation"> @@ -204,6 +207,22 @@ <string>Selects a folder to display in the game list</string> </property> </action> + <action name="action_Select_NAND_Directory"> + <property name="text"> + <string>Select NAND Directory...</string> + </property> + <property name="toolTip"> + <string>Selects a folder to use as the root of the emulated NAND</string> + </property> + </action> + <action name="action_Select_SDMC_Directory"> + <property name="text"> + <string>Select SD Card Directory...</string> + </property> + <property name="toolTip"> + <string>Selects a folder to use as the root of the emulated SD card</string> + </property> + </action> <action name="action_Fullscreen"> <property name="checkable"> <bool>true</bool> diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index a95580152..f00b5a66b 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp @@ -114,6 +114,12 @@ void Config::ReadValues() { // Data Storage Settings::values.use_virtual_sd = sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true); + FileUtil::GetUserPath(FileUtil::UserPath::NANDDir, + sdl2_config->Get("Data Storage", "nand_directory", + FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))); + FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir, + sdl2_config->Get("Data Storage", "nand_directory", + FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))); // System Settings::values.use_docked_mode = sdl2_config->GetBoolean("System", "use_docked_mode", false); |