From 66c1143a652a7a0ec94955c67c8b4ad08a28e274 Mon Sep 17 00:00:00 2001 From: Silent Date: Sun, 21 Jul 2019 10:07:20 +0200 Subject: [PATCH] Improvements to Virtual File System dialog: - Replace Add Directory and Reset buttons with + and - buttons - Add a confirmation message before Reset All - Rename "Okay" to "Save" (to be in line with the rest of the UI) and add a Close option to quit without savin --- rpcs3/rpcs3qt/vfs_dialog.cpp | 34 +++++++++++++------------------- rpcs3/rpcs3qt/vfs_dialog_tab.cpp | 24 ++++++++++++++++++++++ rpcs3/rpcs3qt/vfs_dialog_tab.h | 6 +++++- 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/rpcs3/rpcs3qt/vfs_dialog.cpp b/rpcs3/rpcs3qt/vfs_dialog.cpp index 79198df38f..c454968ed2 100644 --- a/rpcs3/rpcs3qt/vfs_dialog.cpp +++ b/rpcs3/rpcs3qt/vfs_dialog.cpp @@ -1,6 +1,7 @@ #include "vfs_dialog.h" #include +#include inline std::string sstr(const QString& _in) { return _in.toStdString(); } @@ -35,32 +36,23 @@ vfs_dialog::vfs_dialog(std::shared_ptr guiSettings, std::shared_pt tabs->addTab(dev_usb000_tab, "dev_usb000"); // Create buttons - QPushButton* addDir = new QPushButton(tr("Add New Directory")); - connect(addDir, &QAbstractButton::clicked, [=] - { - static_cast(tabs->currentWidget())->AddNewDirectory(); - }); - - QPushButton* reset = new QPushButton(tr("Reset")); - connect(reset, &QAbstractButton::clicked, [=] - { - static_cast(tabs->currentWidget())->Reset(); - }); - - QPushButton* resetAll = new QPushButton(tr("Reset All")); + QPushButton* resetAll = new QPushButton(tr("Reset Directories")); connect(resetAll, &QAbstractButton::clicked, [=] { + if (QMessageBox::question(this, tr("Confirm Reset"), tr("Reset all file system directories?")) != QMessageBox::Yes) + return; + for (int i = 0; i < tabs->count(); ++i) { static_cast(tabs->widget(i))->Reset(); } }); - QPushButton* okay = new QPushButton(tr("Okay")); - okay->setAutoDefault(true); - okay->setDefault(true); + QPushButton* save = new QPushButton(tr("Save")); + save->setAutoDefault(true); + save->setDefault(true); - connect(okay, &QAbstractButton::clicked, [=] + connect(save, &QAbstractButton::clicked, [=] { for (int i = 0; i < tabs->count(); ++i) { @@ -70,12 +62,14 @@ vfs_dialog::vfs_dialog(std::shared_ptr guiSettings, std::shared_pt accept(); }); + QPushButton* close = new QPushButton(tr("Close")); + connect(close, &QAbstractButton::clicked, this, &QDialog::reject); + QHBoxLayout* buttons = new QHBoxLayout; - buttons->addWidget(addDir); - buttons->addWidget(reset); buttons->addWidget(resetAll); buttons->addStretch(); - buttons->addWidget(okay); + buttons->addWidget(save); + buttons->addWidget(close); QVBoxLayout* vbox = new QVBoxLayout; vbox->addWidget(tabs); diff --git a/rpcs3/rpcs3qt/vfs_dialog_tab.cpp b/rpcs3/rpcs3qt/vfs_dialog_tab.cpp index d0cade1cf2..3828285488 100644 --- a/rpcs3/rpcs3qt/vfs_dialog_tab.cpp +++ b/rpcs3/rpcs3qt/vfs_dialog_tab.cpp @@ -2,6 +2,7 @@ #include #include +#include inline std::string sstr(const QString& _in) { return _in.toStdString(); } @@ -30,11 +31,22 @@ vfs_dialog_tab::vfs_dialog_tab(vfs_settings_info settingsInfo, std::shared_ptrsetMinimumWidth(m_dirList->sizeHintForColumn(0)); + QPushButton* addDir = new QPushButton(tr("+")); + addDir->setFixedWidth(addDir->sizeHint().height()); // Make button square + connect(addDir, &QAbstractButton::clicked, this, &vfs_dialog_tab::AddNewDirectory); + + QPushButton* removeDir = new QPushButton(tr("-")); + removeDir->setFixedWidth(removeDir->sizeHint().height()); // Make button square + removeDir->setEnabled(false); + connect(removeDir, &QAbstractButton::clicked, this, &vfs_dialog_tab::RemoveDirectory); + QHBoxLayout* selectedConfigLayout = new QHBoxLayout; m_selectedConfigLabel = new QLabel(current_dir.isEmpty() ? EmptyPath : current_dir); selectedConfigLayout->addWidget(new QLabel(m_info.name + tr(" directory:"))); selectedConfigLayout->addWidget(m_selectedConfigLabel); selectedConfigLayout->addStretch(); + selectedConfigLayout->addWidget(addDir); + selectedConfigLayout->addWidget(removeDir); QVBoxLayout* vbox = new QVBoxLayout; vbox->addWidget(m_dirList); @@ -49,6 +61,12 @@ vfs_dialog_tab::vfs_dialog_tab(vfs_settings_info settingsInfo, std::shared_ptrsetText(current->text().isEmpty() ? EmptyPath : current->text()); }); + + connect(m_dirList, &QListWidget::currentRowChanged, [this, removeDir](int row) + { + SetCurrentRow(row); + removeDir->setEnabled(row > 0); + }); } void vfs_dialog_tab::SetSettings() @@ -83,3 +101,9 @@ void vfs_dialog_tab::AddNewDirectory() m_dirList->setCurrentItem(new QListWidgetItem(dir, m_dirList)); } + +void vfs_dialog_tab::RemoveDirectory() +{ + QListWidgetItem* item = m_dirList->takeItem(m_currentRow); + delete item; +} diff --git a/rpcs3/rpcs3qt/vfs_dialog_tab.h b/rpcs3/rpcs3qt/vfs_dialog_tab.h index 850614b5b0..66e65dff60 100644 --- a/rpcs3/rpcs3qt/vfs_dialog_tab.h +++ b/rpcs3/rpcs3qt/vfs_dialog_tab.h @@ -26,17 +26,21 @@ public: explicit vfs_dialog_tab(vfs_settings_info info, std::shared_ptr guiSettings, std::shared_ptr emuSettings, QWidget* parent = nullptr); void SetSettings(); - void AddNewDirectory(); // Reset this tab without saving the settings yet void Reset(); private: + void AddNewDirectory(); + void RemoveDirectory(); + void SetCurrentRow(int row) { m_currentRow = row; } + const QString EmptyPath = tr("Empty Path"); vfs_settings_info m_info; std::shared_ptr m_gui_settings; std::shared_ptr m_emu_settings; + int m_currentRow = -1; // UI variables needed in higher scope QListWidget* m_dirList;