6 changed files with 627 additions and 1 deletions
-
2src/yuzu/CMakeLists.txt
-
11src/yuzu/configuration/configure.ui
-
4src/yuzu/configuration/configure_dialog.cpp
-
173src/yuzu/configuration/configure_filesystem.cpp
-
43src/yuzu/configuration/configure_filesystem.h
-
395src/yuzu/configuration/configure_filesystem.ui
@ -0,0 +1,173 @@ |
|||
// Copyright 2019 yuzu Emulator Project
|
|||
// Licensed under GPLv2 or any later version
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include <QFileDialog>
|
|||
#include <QMessageBox>
|
|||
#include "common/common_paths.h"
|
|||
#include "common/file_util.h"
|
|||
#include "core/settings.h"
|
|||
#include "ui_configure_filesystem.h"
|
|||
#include "yuzu/configuration/configure_filesystem.h"
|
|||
#include "yuzu/ui_settings.h"
|
|||
|
|||
namespace { |
|||
|
|||
template <typename T> |
|||
void SetComboBoxFromData(QComboBox* combo_box, T data) { |
|||
const auto index = combo_box->findData(QVariant::fromValue(static_cast<u64>(data))); |
|||
if (index >= combo_box->count() || index < 0) |
|||
return; |
|||
|
|||
combo_box->setCurrentIndex(index); |
|||
} |
|||
|
|||
} // Anonymous namespace
|
|||
|
|||
ConfigureFilesystem::ConfigureFilesystem(QWidget* parent) |
|||
: QWidget(parent), ui(std::make_unique<Ui::ConfigureFilesystem>()) { |
|||
ui->setupUi(this); |
|||
this->setConfiguration(); |
|||
|
|||
connect(ui->nand_directory_button, &QToolButton::pressed, this, |
|||
[this] { SetDirectory(DirectoryTarget::NAND, ui->nand_directory_edit); }); |
|||
connect(ui->sdmc_directory_button, &QToolButton::pressed, this, |
|||
[this] { SetDirectory(DirectoryTarget::SD, ui->sdmc_directory_edit); }); |
|||
connect(ui->gamecard_path_button, &QToolButton::pressed, this, |
|||
[this] { SetDirectory(DirectoryTarget::Gamecard, ui->gamecard_path_edit); }); |
|||
connect(ui->dump_path_button, &QToolButton::pressed, this, |
|||
[this] { SetDirectory(DirectoryTarget::Dump, ui->dump_path_edit); }); |
|||
connect(ui->load_path_button, &QToolButton::pressed, this, |
|||
[this] { SetDirectory(DirectoryTarget::Load, ui->load_path_edit); }); |
|||
connect(ui->cache_directory_button, &QToolButton::pressed, this, |
|||
[this] { SetDirectory(DirectoryTarget::Cache, ui->cache_directory_edit); }); |
|||
|
|||
connect(ui->reset_game_list_cache, &QPushButton::pressed, this, |
|||
&ConfigureFilesystem::ResetMetadata); |
|||
|
|||
connect(ui->gamecard_inserted, &QCheckBox::stateChanged, this, |
|||
&ConfigureFilesystem::UpdateEnabledControls); |
|||
connect(ui->gamecard_current_game, &QCheckBox::stateChanged, this, |
|||
&ConfigureFilesystem::UpdateEnabledControls); |
|||
} |
|||
|
|||
ConfigureFilesystem::~ConfigureFilesystem() = default; |
|||
|
|||
void ConfigureFilesystem::setConfiguration() { |
|||
ui->nand_directory_edit->setText( |
|||
QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))); |
|||
ui->sdmc_directory_edit->setText( |
|||
QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))); |
|||
ui->gamecard_path_edit->setText(QString::fromStdString(Settings::values.gamecard_path)); |
|||
ui->dump_path_edit->setText( |
|||
QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::DumpDir))); |
|||
ui->load_path_edit->setText( |
|||
QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::LoadDir))); |
|||
ui->cache_directory_edit->setText( |
|||
QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::CacheDir))); |
|||
|
|||
ui->gamecard_inserted->setChecked(Settings::values.gamecard_inserted); |
|||
ui->gamecard_current_game->setChecked(Settings::values.gamecard_current_game); |
|||
ui->dump_exefs->setChecked(Settings::values.dump_exefs); |
|||
ui->dump_nso->setChecked(Settings::values.dump_nso); |
|||
|
|||
ui->cache_game_list->setChecked(UISettings::values.cache_game_list); |
|||
|
|||
SetComboBoxFromData(ui->nand_size, Settings::values.nand_total_size); |
|||
SetComboBoxFromData(ui->usrnand_size, Settings::values.nand_user_size); |
|||
SetComboBoxFromData(ui->sysnand_size, Settings::values.nand_system_size); |
|||
SetComboBoxFromData(ui->sdmc_size, Settings::values.sdmc_size); |
|||
|
|||
UpdateEnabledControls(); |
|||
} |
|||
|
|||
void ConfigureFilesystem::applyConfiguration() { |
|||
FileUtil::GetUserPath(FileUtil::UserPath::NANDDir, |
|||
ui->nand_directory_edit->text().toStdString()); |
|||
FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir, |
|||
ui->sdmc_directory_edit->text().toStdString()); |
|||
FileUtil::GetUserPath(FileUtil::UserPath::DumpDir, ui->dump_path_edit->text().toStdString()); |
|||
FileUtil::GetUserPath(FileUtil::UserPath::LoadDir, ui->load_path_edit->text().toStdString()); |
|||
FileUtil::GetUserPath(FileUtil::UserPath::CacheDir, |
|||
ui->cache_directory_edit->text().toStdString()); |
|||
Settings::values.gamecard_path = ui->gamecard_path_edit->text().toStdString(); |
|||
|
|||
Settings::values.gamecard_inserted = ui->gamecard_inserted->isChecked(); |
|||
Settings::values.gamecard_current_game = ui->gamecard_current_game->isChecked(); |
|||
Settings::values.dump_exefs = ui->dump_exefs->isChecked(); |
|||
Settings::values.dump_nso = ui->dump_nso->isChecked(); |
|||
|
|||
UISettings::values.cache_game_list = ui->cache_game_list->isChecked(); |
|||
|
|||
Settings::values.nand_total_size = static_cast<Settings::NANDTotalSize>( |
|||
ui->nand_size->itemData(ui->nand_size->currentIndex()).toULongLong()); |
|||
Settings::values.nand_system_size = static_cast<Settings::NANDSystemSize>( |
|||
ui->nand_size->itemData(ui->sysnand_size->currentIndex()).toULongLong()); |
|||
Settings::values.nand_user_size = static_cast<Settings::NANDUserSize>( |
|||
ui->nand_size->itemData(ui->usrnand_size->currentIndex()).toULongLong()); |
|||
Settings::values.sdmc_size = static_cast<Settings::SDMCSize>( |
|||
ui->nand_size->itemData(ui->sdmc_size->currentIndex()).toULongLong()); |
|||
} |
|||
|
|||
void ConfigureFilesystem::SetDirectory(DirectoryTarget target, QLineEdit* edit) { |
|||
QString caption; |
|||
|
|||
switch (target) { |
|||
case DirectoryTarget::NAND: |
|||
caption = tr("Select Emulated NAND Directory..."); |
|||
break; |
|||
case DirectoryTarget::SD: |
|||
caption = tr("Select Emulated SD Directory..."); |
|||
break; |
|||
case DirectoryTarget::Gamecard: |
|||
caption = tr("Select Gamecard Path..."); |
|||
break; |
|||
case DirectoryTarget::Dump: |
|||
caption = tr("Select Dump Directory..."); |
|||
break; |
|||
case DirectoryTarget::Load: |
|||
caption = tr("Select Mod Load Directory..."); |
|||
break; |
|||
case DirectoryTarget::Cache: |
|||
caption = tr("Select Cache Directory..."); |
|||
break; |
|||
} |
|||
|
|||
QString str; |
|||
if (target == DirectoryTarget::Gamecard) { |
|||
str = QFileDialog::getOpenFileName(this, caption, QFileInfo(edit->text()).dir().path(), |
|||
"NX Gamecard;*.xci"); |
|||
} else { |
|||
str = QFileDialog::getExistingDirectory(this, caption, edit->text()); |
|||
} |
|||
|
|||
if (str.isEmpty()) |
|||
return; |
|||
|
|||
edit->setText(str); |
|||
} |
|||
|
|||
void ConfigureFilesystem::ResetMetadata() { |
|||
if (FileUtil::DeleteDirRecursively(FileUtil::GetUserPath(FileUtil::UserPath::CacheDir) + |
|||
DIR_SEP + "game_list")) { |
|||
QMessageBox::information(this, tr("Reset Metadata Cache"), |
|||
tr("The operation completed successfully.")); |
|||
UISettings::values.is_game_list_reload_pending.exchange(true); |
|||
} else { |
|||
QMessageBox::warning( |
|||
this, tr("Reset Metadata Cache"), |
|||
tr("The metadata cache couldn't be deleted. It might be in use or non-existent.")); |
|||
} |
|||
} |
|||
|
|||
void ConfigureFilesystem::UpdateEnabledControls() { |
|||
ui->gamecard_current_game->setEnabled(ui->gamecard_inserted->isChecked()); |
|||
ui->gamecard_path_edit->setEnabled(ui->gamecard_inserted->isChecked() && |
|||
!ui->gamecard_current_game->isChecked()); |
|||
ui->gamecard_path_button->setEnabled(ui->gamecard_inserted->isChecked() && |
|||
!ui->gamecard_current_game->isChecked()); |
|||
} |
|||
|
|||
void ConfigureFilesystem::retranslateUi() { |
|||
ui->retranslateUi(this); |
|||
} |
|||
@ -0,0 +1,43 @@ |
|||
// Copyright 2019 yuzu Emulator Project |
|||
// Licensed under GPLv2 or any later version |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
#include <memory> |
|||
#include <QWidget> |
|||
|
|||
class QLineEdit; |
|||
|
|||
namespace Ui { |
|||
class ConfigureFilesystem; |
|||
} |
|||
|
|||
class ConfigureFilesystem : public QWidget { |
|||
Q_OBJECT |
|||
|
|||
public: |
|||
explicit ConfigureFilesystem(QWidget* parent = nullptr); |
|||
~ConfigureFilesystem() override; |
|||
|
|||
void applyConfiguration(); |
|||
void retranslateUi(); |
|||
|
|||
private: |
|||
void setConfiguration(); |
|||
|
|||
enum class DirectoryTarget { |
|||
NAND, |
|||
SD, |
|||
Gamecard, |
|||
Dump, |
|||
Load, |
|||
Cache, |
|||
}; |
|||
|
|||
void SetDirectory(DirectoryTarget target, QLineEdit* edit); |
|||
void ResetMetadata(); |
|||
void UpdateEnabledControls(); |
|||
|
|||
std::unique_ptr<Ui::ConfigureFilesystem> ui; |
|||
}; |
|||
@ -0,0 +1,395 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<ui version="4.0"> |
|||
<class>ConfigureFilesystem</class> |
|||
<widget class="QWidget" name="ConfigureFilesystem"> |
|||
<property name="geometry"> |
|||
<rect> |
|||
<x>0</x> |
|||
<y>0</y> |
|||
<width>453</width> |
|||
<height>561</height> |
|||
</rect> |
|||
</property> |
|||
<property name="windowTitle"> |
|||
<string>Form</string> |
|||
</property> |
|||
<layout class="QVBoxLayout" name="verticalLayout"> |
|||
<item> |
|||
<layout class="QVBoxLayout" name="verticalLayout_3"> |
|||
<item> |
|||
<widget class="QGroupBox" name="groupBox"> |
|||
<property name="title"> |
|||
<string>Storage Directories</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout"> |
|||
<item row="0" column="0"> |
|||
<widget class="QLabel" name="label"> |
|||
<property name="text"> |
|||
<string>NAND</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="3"> |
|||
<widget class="QToolButton" name="nand_directory_button"> |
|||
<property name="text"> |
|||
<string>...</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="2"> |
|||
<widget class="QLineEdit" name="nand_directory_edit"/> |
|||
</item> |
|||
<item row="1" column="2"> |
|||
<widget class="QLineEdit" name="sdmc_directory_edit"/> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QLabel" name="label_2"> |
|||
<property name="text"> |
|||
<string>SD Card</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="3"> |
|||
<widget class="QToolButton" name="sdmc_directory_button"> |
|||
<property name="text"> |
|||
<string>...</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="1"> |
|||
<spacer name="horizontalSpacer"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Horizontal</enum> |
|||
</property> |
|||
<property name="sizeType"> |
|||
<enum>QSizePolicy::Maximum</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>60</width> |
|||
<height>20</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<widget class="QGroupBox" name="groupBox_2"> |
|||
<property name="title"> |
|||
<string>Gamecard</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout_2"> |
|||
<item row="2" column="1"> |
|||
<widget class="QLabel" name="label_3"> |
|||
<property name="text"> |
|||
<string>Path</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="2" column="2"> |
|||
<widget class="QLineEdit" name="gamecard_path_edit"/> |
|||
</item> |
|||
<item row="0" column="1"> |
|||
<widget class="QCheckBox" name="gamecard_inserted"> |
|||
<property name="text"> |
|||
<string>Inserted</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="1"> |
|||
<widget class="QCheckBox" name="gamecard_current_game"> |
|||
<property name="text"> |
|||
<string>Current Game</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="2" column="3"> |
|||
<widget class="QToolButton" name="gamecard_path_button"> |
|||
<property name="text"> |
|||
<string>...</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<widget class="QGroupBox" name="groupBox_3"> |
|||
<property name="title"> |
|||
<string>Storage Sizes</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout_3"> |
|||
<item row="3" column="0"> |
|||
<widget class="QLabel" name="label_5"> |
|||
<property name="text"> |
|||
<string>SD Card</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QLabel" name="label_4"> |
|||
<property name="text"> |
|||
<string>System NAND</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="1"> |
|||
<widget class="QComboBox" name="sysnand_size"> |
|||
<item> |
|||
<property name="text"> |
|||
<string>2.5 GB</string> |
|||
</property> |
|||
</item> |
|||
</widget> |
|||
</item> |
|||
<item row="3" column="1"> |
|||
<widget class="QComboBox" name="sdmc_size"> |
|||
<property name="currentText"> |
|||
<string>32 GB</string> |
|||
</property> |
|||
<item> |
|||
<property name="text"> |
|||
<string>1 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>2 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>4 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>8 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>16 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>32 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>64 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>128 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>256 GB</string> |
|||
</property> |
|||
</item> |
|||
<item> |
|||
<property name="text"> |
|||
<string>1 TB</string> |
|||
</property> |
|||
</item> |
|||
</widget> |
|||
</item> |
|||
<item row="2" column="1"> |
|||
<widget class="QComboBox" name="usrnand_size"> |
|||
<item> |
|||
<property name="text"> |
|||
<string>26 GB</string> |
|||
</property> |
|||
</item> |
|||
</widget> |
|||
</item> |
|||
<item row="2" column="0"> |
|||
<widget class="QLabel" name="label_6"> |
|||
<property name="text"> |
|||
<string>User NAND</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0"> |
|||
<widget class="QLabel" name="label_7"> |
|||
<property name="text"> |
|||
<string>NAND</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="1"> |
|||
<widget class="QComboBox" name="nand_size"> |
|||
<item> |
|||
<property name="text"> |
|||
<string>29.1 GB</string> |
|||
</property> |
|||
</item> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<widget class="QGroupBox" name="groupBox_4"> |
|||
<property name="title"> |
|||
<string>Patch Manager</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout_4"> |
|||
<item row="1" column="2"> |
|||
<widget class="QLineEdit" name="load_path_edit"/> |
|||
</item> |
|||
<item row="0" column="2"> |
|||
<widget class="QLineEdit" name="dump_path_edit"/> |
|||
</item> |
|||
<item row="0" column="3"> |
|||
<widget class="QToolButton" name="dump_path_button"> |
|||
<property name="text"> |
|||
<string>...</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="3"> |
|||
<widget class="QToolButton" name="load_path_button"> |
|||
<property name="text"> |
|||
<string>...</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="2" column="0" colspan="4"> |
|||
<layout class="QHBoxLayout" name="horizontalLayout"> |
|||
<item> |
|||
<widget class="QCheckBox" name="dump_nso"> |
|||
<property name="text"> |
|||
<string>Dump Decompressed NSOs</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<widget class="QCheckBox" name="dump_exefs"> |
|||
<property name="text"> |
|||
<string>Dump ExeFS</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QLabel" name="label_9"> |
|||
<property name="text"> |
|||
<string>Mod Load Root</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0"> |
|||
<widget class="QLabel" name="label_8"> |
|||
<property name="text"> |
|||
<string>Dump Root</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="1"> |
|||
<spacer name="horizontalSpacer_2"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Horizontal</enum> |
|||
</property> |
|||
<property name="sizeType"> |
|||
<enum>QSizePolicy::Fixed</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>40</width> |
|||
<height>20</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<widget class="QGroupBox" name="groupBox_5"> |
|||
<property name="title"> |
|||
<string>Caching</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout_5"> |
|||
<item row="0" column="0"> |
|||
<widget class="QLabel" name="label_10"> |
|||
<property name="text"> |
|||
<string>Cache Directory</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="1"> |
|||
<spacer name="horizontalSpacer_3"> |
|||
<property name="orientation"> |
|||
<enum>Qt::Horizontal</enum> |
|||
</property> |
|||
<property name="sizeType"> |
|||
<enum>QSizePolicy::Fixed</enum> |
|||
</property> |
|||
<property name="sizeHint" stdset="0"> |
|||
<size> |
|||
<width>40</width> |
|||
<height>20</height> |
|||
</size> |
|||
</property> |
|||
</spacer> |
|||
</item> |
|||
<item row="0" column="2"> |
|||
<widget class="QLineEdit" name="cache_directory_edit"/> |
|||
</item> |
|||
<item row="0" column="3"> |
|||
<widget class="QToolButton" name="cache_directory_button"> |
|||
<property name="text"> |
|||
<string>...</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0" colspan="4"> |
|||
<layout class="QHBoxLayout" name="horizontalLayout_2"> |
|||
<item> |
|||
<widget class="QCheckBox" name="cache_game_list"> |
|||
<property name="text"> |
|||
<string>Cache Game List Metadata</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item> |
|||
<widget class="QPushButton" name="reset_game_list_cache"> |
|||
<property name="text"> |
|||
<string>Reset Metadata Cache</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</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> |
|||
<resources/> |
|||
<connections/> |
|||
</ui> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue