Merge pull request #1223 from DarkLordZach/custom-nand-sd-dirs
file_sys: Allow for custom NAND/SD directories
This commit is contained in:
commit
ed37b68fb5
|
@ -127,6 +127,8 @@ struct Values {
|
||||||
|
|
||||||
// Data Storage
|
// Data Storage
|
||||||
bool use_virtual_sd;
|
bool use_virtual_sd;
|
||||||
|
std::string nand_dir;
|
||||||
|
std::string sdmc_dir;
|
||||||
|
|
||||||
// Renderer
|
// Renderer
|
||||||
float resolution_factor;
|
float resolution_factor;
|
||||||
|
|
|
@ -102,6 +102,20 @@ void Config::ReadValues() {
|
||||||
|
|
||||||
qt_config->beginGroup("Data Storage");
|
qt_config->beginGroup("Data Storage");
|
||||||
Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool();
|
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->endGroup();
|
||||||
|
|
||||||
qt_config->beginGroup("System");
|
qt_config->beginGroup("System");
|
||||||
|
@ -222,6 +236,10 @@ void Config::SaveValues() {
|
||||||
|
|
||||||
qt_config->beginGroup("Data Storage");
|
qt_config->beginGroup("Data Storage");
|
||||||
qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd);
|
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->endGroup();
|
||||||
|
|
||||||
qt_config->beginGroup("System");
|
qt_config->beginGroup("System");
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#define QT_NO_OPENGL
|
#define QT_NO_OPENGL
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QtGui>
|
#include <QtGui>
|
||||||
|
@ -374,6 +375,10 @@ void GMainWindow::ConnectMenuEvents() {
|
||||||
&GMainWindow::OnMenuInstallToNAND);
|
&GMainWindow::OnMenuInstallToNAND);
|
||||||
connect(ui.action_Select_Game_List_Root, &QAction::triggered, this,
|
connect(ui.action_Select_Game_List_Root, &QAction::triggered, this,
|
||||||
&GMainWindow::OnMenuSelectGameListRoot);
|
&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);
|
connect(ui.action_Exit, &QAction::triggered, this, &QMainWindow::close);
|
||||||
|
|
||||||
// Emulation
|
// 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() {
|
void GMainWindow::OnMenuRecentFile() {
|
||||||
QAction* action = qobject_cast<QAction*>(sender());
|
QAction* action = qobject_cast<QAction*>(sender());
|
||||||
assert(action);
|
assert(action);
|
||||||
|
|
|
@ -35,6 +35,11 @@ namespace Tegra {
|
||||||
class DebugContext;
|
class DebugContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class EmulatedDirectoryTarget {
|
||||||
|
NAND,
|
||||||
|
SDMC,
|
||||||
|
};
|
||||||
|
|
||||||
class GMainWindow : public QMainWindow {
|
class GMainWindow : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -140,6 +145,8 @@ private slots:
|
||||||
void OnMenuInstallToNAND();
|
void OnMenuInstallToNAND();
|
||||||
/// Called whenever a user selects the "File->Select Game List Root" menu item
|
/// Called whenever a user selects the "File->Select Game List Root" menu item
|
||||||
void OnMenuSelectGameListRoot();
|
void OnMenuSelectGameListRoot();
|
||||||
|
/// Called whenever a user select the "File->Select -- Directory" where -- is NAND or SD Card
|
||||||
|
void OnMenuSelectEmulatedDirectory(EmulatedDirectoryTarget target);
|
||||||
void OnMenuRecentFile();
|
void OnMenuRecentFile();
|
||||||
void OnConfigure();
|
void OnConfigure();
|
||||||
void OnAbout();
|
void OnAbout();
|
||||||
|
|
|
@ -65,6 +65,9 @@
|
||||||
<addaction name="action_Select_Game_List_Root"/>
|
<addaction name="action_Select_Game_List_Root"/>
|
||||||
<addaction name="menu_recent_files"/>
|
<addaction name="menu_recent_files"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
<addaction name="action_Select_NAND_Directory"/>
|
||||||
|
<addaction name="action_Select_SDMC_Directory"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
<addaction name="action_Exit"/>
|
<addaction name="action_Exit"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_Emulation">
|
<widget class="QMenu" name="menu_Emulation">
|
||||||
|
@ -204,6 +207,22 @@
|
||||||
<string>Selects a folder to display in the game list</string>
|
<string>Selects a folder to display in the game list</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</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">
|
<action name="action_Fullscreen">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
|
|
@ -114,6 +114,12 @@ void Config::ReadValues() {
|
||||||
// Data Storage
|
// Data Storage
|
||||||
Settings::values.use_virtual_sd =
|
Settings::values.use_virtual_sd =
|
||||||
sdl2_config->GetBoolean("Data Storage", "use_virtual_sd", true);
|
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
|
// System
|
||||||
Settings::values.use_docked_mode = sdl2_config->GetBoolean("System", "use_docked_mode", false);
|
Settings::values.use_docked_mode = sdl2_config->GetBoolean("System", "use_docked_mode", false);
|
||||||
|
|
Loading…
Reference in New Issue