diff options
| -rw-r--r-- | src/yuzu/configuration/configure_profile_manager.cpp | 67 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_profile_manager.h | 25 |
2 files changed, 81 insertions, 11 deletions
diff --git a/src/yuzu/configuration/configure_profile_manager.cpp b/src/yuzu/configuration/configure_profile_manager.cpp index 5c0217ba8..9493cb82e 100644 --- a/src/yuzu/configuration/configure_profile_manager.cpp +++ b/src/yuzu/configuration/configure_profile_manager.cpp | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #include <algorithm> | 4 | #include <algorithm> |
| 5 | #include <functional> | ||
| 6 | #include <QDialog> | ||
| 7 | #include <QDialogButtonBox> | ||
| 5 | #include <QFileDialog> | 8 | #include <QFileDialog> |
| 6 | #include <QGraphicsItem> | 9 | #include <QGraphicsItem> |
| 7 | #include <QHeaderView> | 10 | #include <QHeaderView> |
| @@ -108,9 +111,12 @@ ConfigureProfileManager::ConfigureProfileManager(const Core::System& system_, QW | |||
| 108 | 111 | ||
| 109 | connect(ui->pm_add, &QPushButton::clicked, this, &ConfigureProfileManager::AddUser); | 112 | connect(ui->pm_add, &QPushButton::clicked, this, &ConfigureProfileManager::AddUser); |
| 110 | connect(ui->pm_rename, &QPushButton::clicked, this, &ConfigureProfileManager::RenameUser); | 113 | connect(ui->pm_rename, &QPushButton::clicked, this, &ConfigureProfileManager::RenameUser); |
| 111 | connect(ui->pm_remove, &QPushButton::clicked, this, &ConfigureProfileManager::DeleteUser); | 114 | connect(ui->pm_remove, &QPushButton::clicked, this, |
| 115 | &ConfigureProfileManager::ConfirmDeleteUser); | ||
| 112 | connect(ui->pm_set_image, &QPushButton::clicked, this, &ConfigureProfileManager::SetUserImage); | 116 | connect(ui->pm_set_image, &QPushButton::clicked, this, &ConfigureProfileManager::SetUserImage); |
| 113 | 117 | ||
| 118 | confirm_dialog = std::make_unique<ConfigureProfileManagerDeleteDialog>(this); | ||
| 119 | |||
| 114 | scene = new QGraphicsScene; | 120 | scene = new QGraphicsScene; |
| 115 | ui->current_user_icon->setScene(scene); | 121 | ui->current_user_icon->setScene(scene); |
| 116 | 122 | ||
| @@ -230,26 +236,23 @@ void ConfigureProfileManager::RenameUser() { | |||
| 230 | UpdateCurrentUser(); | 236 | UpdateCurrentUser(); |
| 231 | } | 237 | } |
| 232 | 238 | ||
| 233 | void ConfigureProfileManager::DeleteUser() { | 239 | void ConfigureProfileManager::ConfirmDeleteUser() { |
| 234 | const auto index = tree_view->currentIndex().row(); | 240 | const auto index = tree_view->currentIndex().row(); |
| 235 | const auto uuid = profile_manager->GetUser(index); | 241 | const auto uuid = profile_manager->GetUser(index); |
| 236 | ASSERT(uuid); | 242 | ASSERT(uuid); |
| 237 | const auto username = GetAccountUsername(*profile_manager, *uuid); | 243 | const auto username = GetAccountUsername(*profile_manager, *uuid); |
| 238 | 244 | ||
| 239 | const auto confirm = QMessageBox::question( | 245 | confirm_dialog->SetInfo(username, *uuid, [this, uuid]() { DeleteUser(*uuid); }); |
| 240 | this, tr("Confirm Delete"), | 246 | confirm_dialog->show(); |
| 241 | tr("You are about to delete user with name \"%1\". Are you sure?").arg(username)); | 247 | } |
| 242 | |||
| 243 | if (confirm == QMessageBox::No) { | ||
| 244 | return; | ||
| 245 | } | ||
| 246 | 248 | ||
| 249 | void ConfigureProfileManager::DeleteUser(const Common::UUID uuid) { | ||
| 247 | if (Settings::values.current_user.GetValue() == tree_view->currentIndex().row()) { | 250 | if (Settings::values.current_user.GetValue() == tree_view->currentIndex().row()) { |
| 248 | Settings::values.current_user = 0; | 251 | Settings::values.current_user = 0; |
| 249 | } | 252 | } |
| 250 | UpdateCurrentUser(); | 253 | UpdateCurrentUser(); |
| 251 | 254 | ||
| 252 | if (!profile_manager->RemoveUser(*uuid)) { | 255 | if (!profile_manager->RemoveUser(uuid)) { |
| 253 | return; | 256 | return; |
| 254 | } | 257 | } |
| 255 | 258 | ||
| @@ -319,3 +322,47 @@ void ConfigureProfileManager::SetUserImage() { | |||
| 319 | new QStandardItem{GetIcon(*uuid), FormatUserEntryText(username, *uuid)}); | 322 | new QStandardItem{GetIcon(*uuid), FormatUserEntryText(username, *uuid)}); |
| 320 | UpdateCurrentUser(); | 323 | UpdateCurrentUser(); |
| 321 | } | 324 | } |
| 325 | |||
| 326 | ConfigureProfileManagerDeleteDialog::ConfigureProfileManagerDeleteDialog(QWidget* parent) | ||
| 327 | : QDialog(parent) { | ||
| 328 | auto dialog_vbox_layout = new QVBoxLayout(this); | ||
| 329 | dialog_button_box = | ||
| 330 | new QDialogButtonBox(QDialogButtonBox::Yes | QDialogButtonBox::No, Qt::Horizontal, parent); | ||
| 331 | auto label_message = | ||
| 332 | new QLabel(tr("Delete this user? All of the user's save data will be deleted."), this); | ||
| 333 | label_info = new QLabel(this); | ||
| 334 | auto dialog_hbox_layout_widget = new QWidget(this); | ||
| 335 | auto dialog_hbox_layout = new QHBoxLayout(dialog_hbox_layout_widget); | ||
| 336 | icon_scene = new QGraphicsScene(0, 0, 64, 64, this); | ||
| 337 | auto icon_view = new QGraphicsView(icon_scene, this); | ||
| 338 | |||
| 339 | dialog_hbox_layout_widget->setLayout(dialog_hbox_layout); | ||
| 340 | icon_view->setMaximumSize(64, 64); | ||
| 341 | icon_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | ||
| 342 | icon_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | ||
| 343 | this->setLayout(dialog_vbox_layout); | ||
| 344 | this->setWindowTitle(tr("Confirm Delete")); | ||
| 345 | this->setSizeGripEnabled(false); | ||
| 346 | dialog_vbox_layout->addWidget(label_message); | ||
| 347 | dialog_vbox_layout->addWidget(dialog_hbox_layout_widget); | ||
| 348 | dialog_vbox_layout->addWidget(dialog_button_box); | ||
| 349 | dialog_hbox_layout->addWidget(icon_view); | ||
| 350 | dialog_hbox_layout->addWidget(label_info); | ||
| 351 | |||
| 352 | connect(dialog_button_box, &QDialogButtonBox::rejected, this, [this]() { close(); }); | ||
| 353 | } | ||
| 354 | |||
| 355 | ConfigureProfileManagerDeleteDialog::~ConfigureProfileManagerDeleteDialog() = default; | ||
| 356 | |||
| 357 | void ConfigureProfileManagerDeleteDialog::SetInfo(const QString username, const Common::UUID uuid, | ||
| 358 | std::function<void()> accept_callback) { | ||
| 359 | label_info->setText( | ||
| 360 | tr("Name: %1\nUUID: %2").arg(username, QString::fromStdString(uuid.FormattedString()))); | ||
| 361 | icon_scene->clear(); | ||
| 362 | icon_scene->addPixmap(GetIcon(uuid)); | ||
| 363 | |||
| 364 | connect(dialog_button_box, &QDialogButtonBox::accepted, this, [this, accept_callback]() { | ||
| 365 | close(); | ||
| 366 | accept_callback(); | ||
| 367 | }); | ||
| 368 | } | ||
diff --git a/src/yuzu/configuration/configure_profile_manager.h b/src/yuzu/configuration/configure_profile_manager.h index fe9033779..6e5cb748d 100644 --- a/src/yuzu/configuration/configure_profile_manager.h +++ b/src/yuzu/configuration/configure_profile_manager.h | |||
| @@ -3,16 +3,22 @@ | |||
| 3 | 3 | ||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <functional> | ||
| 6 | #include <memory> | 7 | #include <memory> |
| 7 | 8 | ||
| 9 | #include <QDialog> | ||
| 8 | #include <QList> | 10 | #include <QList> |
| 9 | #include <QWidget> | 11 | #include <QWidget> |
| 10 | 12 | ||
| 13 | #include "common/uuid.h" | ||
| 14 | |||
| 11 | namespace Core { | 15 | namespace Core { |
| 12 | class System; | 16 | class System; |
| 13 | } | 17 | } |
| 14 | 18 | ||
| 15 | class QGraphicsScene; | 19 | class QGraphicsScene; |
| 20 | class QDialogButtonBox; | ||
| 21 | class QLabel; | ||
| 16 | class QStandardItem; | 22 | class QStandardItem; |
| 17 | class QStandardItemModel; | 23 | class QStandardItemModel; |
| 18 | class QTreeView; | 24 | class QTreeView; |
| @@ -26,6 +32,20 @@ namespace Ui { | |||
| 26 | class ConfigureProfileManager; | 32 | class ConfigureProfileManager; |
| 27 | } | 33 | } |
| 28 | 34 | ||
| 35 | class ConfigureProfileManagerDeleteDialog : public QDialog { | ||
| 36 | public: | ||
| 37 | explicit ConfigureProfileManagerDeleteDialog(QWidget* parent); | ||
| 38 | ~ConfigureProfileManagerDeleteDialog(); | ||
| 39 | |||
| 40 | void SetInfo(const QString username, const Common::UUID uuid, | ||
| 41 | std::function<void()> accept_callback); | ||
| 42 | |||
| 43 | private: | ||
| 44 | QDialogButtonBox* dialog_button_box; | ||
| 45 | QGraphicsScene* icon_scene; | ||
| 46 | QLabel* label_info; | ||
| 47 | }; | ||
| 48 | |||
| 29 | class ConfigureProfileManager : public QWidget { | 49 | class ConfigureProfileManager : public QWidget { |
| 30 | Q_OBJECT | 50 | Q_OBJECT |
| 31 | 51 | ||
| @@ -47,7 +67,8 @@ private: | |||
| 47 | void SelectUser(const QModelIndex& index); | 67 | void SelectUser(const QModelIndex& index); |
| 48 | void AddUser(); | 68 | void AddUser(); |
| 49 | void RenameUser(); | 69 | void RenameUser(); |
| 50 | void DeleteUser(); | 70 | void ConfirmDeleteUser(); |
| 71 | void DeleteUser(const Common::UUID uuid); | ||
| 51 | void SetUserImage(); | 72 | void SetUserImage(); |
| 52 | 73 | ||
| 53 | QVBoxLayout* layout; | 74 | QVBoxLayout* layout; |
| @@ -55,6 +76,8 @@ private: | |||
| 55 | QStandardItemModel* item_model; | 76 | QStandardItemModel* item_model; |
| 56 | QGraphicsScene* scene; | 77 | QGraphicsScene* scene; |
| 57 | 78 | ||
| 79 | std::unique_ptr<ConfigureProfileManagerDeleteDialog> confirm_dialog; | ||
| 80 | |||
| 58 | std::vector<QList<QStandardItem*>> list_items; | 81 | std::vector<QList<QStandardItem*>> list_items; |
| 59 | 82 | ||
| 60 | std::unique_ptr<Ui::ConfigureProfileManager> ui; | 83 | std::unique_ptr<Ui::ConfigureProfileManager> ui; |