summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/configuration/configure_profile_manager.cpp67
-rw-r--r--src/yuzu/configuration/configure_profile_manager.h25
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
233void ConfigureProfileManager::DeleteUser() { 239void 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
249void 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
326ConfigureProfileManagerDeleteDialog::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
355ConfigureProfileManagerDeleteDialog::~ConfigureProfileManagerDeleteDialog() = default;
356
357void 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
11namespace Core { 15namespace Core {
12class System; 16class System;
13} 17}
14 18
15class QGraphicsScene; 19class QGraphicsScene;
20class QDialogButtonBox;
21class QLabel;
16class QStandardItem; 22class QStandardItem;
17class QStandardItemModel; 23class QStandardItemModel;
18class QTreeView; 24class QTreeView;
@@ -26,6 +32,20 @@ namespace Ui {
26class ConfigureProfileManager; 32class ConfigureProfileManager;
27} 33}
28 34
35class ConfigureProfileManagerDeleteDialog : public QDialog {
36public:
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
43private:
44 QDialogButtonBox* dialog_button_box;
45 QGraphicsScene* icon_scene;
46 QLabel* label_info;
47};
48
29class ConfigureProfileManager : public QWidget { 49class 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;