mirror of
				https://git.h3cjp.net/H3cJP/citra.git
				synced 2025-10-30 22:44:58 +00:00 
			
		
		
		
	configure_profile_manager: Use a custom dialog for deletion
A hopefully more informative dialog that most importantly notifies the user that their saves will be deleted with the user profile. cpm: Only keep track of UI elements that we need cpm: Remove unused forward declarations cpm: Add missing include
This commit is contained in:
		
							parent
							
								
									9e27624a19
								
							
						
					
					
						commit
						ef5184cf1c
					
				|  | @ -2,6 +2,9 @@ | |||
| // SPDX-License-Identifier: GPL-2.0-or-later
 | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <functional> | ||||
| #include <QDialog> | ||||
| #include <QDialogButtonBox> | ||||
| #include <QFileDialog> | ||||
| #include <QGraphicsItem> | ||||
| #include <QHeaderView> | ||||
|  | @ -108,9 +111,12 @@ ConfigureProfileManager::ConfigureProfileManager(const Core::System& system_, QW | |||
| 
 | ||||
|     connect(ui->pm_add, &QPushButton::clicked, this, &ConfigureProfileManager::AddUser); | ||||
|     connect(ui->pm_rename, &QPushButton::clicked, this, &ConfigureProfileManager::RenameUser); | ||||
|     connect(ui->pm_remove, &QPushButton::clicked, this, &ConfigureProfileManager::DeleteUser); | ||||
|     connect(ui->pm_remove, &QPushButton::clicked, this, | ||||
|             &ConfigureProfileManager::ConfirmDeleteUser); | ||||
|     connect(ui->pm_set_image, &QPushButton::clicked, this, &ConfigureProfileManager::SetUserImage); | ||||
| 
 | ||||
|     confirm_dialog = std::make_unique<ConfigureProfileManagerDeleteDialog>(this); | ||||
| 
 | ||||
|     scene = new QGraphicsScene; | ||||
|     ui->current_user_icon->setScene(scene); | ||||
| 
 | ||||
|  | @ -230,26 +236,23 @@ void ConfigureProfileManager::RenameUser() { | |||
|     UpdateCurrentUser(); | ||||
| } | ||||
| 
 | ||||
| void ConfigureProfileManager::DeleteUser() { | ||||
| void ConfigureProfileManager::ConfirmDeleteUser() { | ||||
|     const auto index = tree_view->currentIndex().row(); | ||||
|     const auto uuid = profile_manager->GetUser(index); | ||||
|     ASSERT(uuid); | ||||
|     const auto username = GetAccountUsername(*profile_manager, *uuid); | ||||
| 
 | ||||
|     const auto confirm = QMessageBox::question( | ||||
|         this, tr("Confirm Delete"), | ||||
|         tr("You are about to delete user with name \"%1\". Are you sure?").arg(username)); | ||||
| 
 | ||||
|     if (confirm == QMessageBox::No) { | ||||
|         return; | ||||
|     } | ||||
|     confirm_dialog->SetInfo(username, *uuid, [this, uuid]() { DeleteUser(*uuid); }); | ||||
|     confirm_dialog->show(); | ||||
| } | ||||
| 
 | ||||
| void ConfigureProfileManager::DeleteUser(const Common::UUID uuid) { | ||||
|     if (Settings::values.current_user.GetValue() == tree_view->currentIndex().row()) { | ||||
|         Settings::values.current_user = 0; | ||||
|     } | ||||
|     UpdateCurrentUser(); | ||||
| 
 | ||||
|     if (!profile_manager->RemoveUser(*uuid)) { | ||||
|     if (!profile_manager->RemoveUser(uuid)) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|  | @ -319,3 +322,47 @@ void ConfigureProfileManager::SetUserImage() { | |||
|                         new QStandardItem{GetIcon(*uuid), FormatUserEntryText(username, *uuid)}); | ||||
|     UpdateCurrentUser(); | ||||
| } | ||||
| 
 | ||||
| ConfigureProfileManagerDeleteDialog::ConfigureProfileManagerDeleteDialog(QWidget* parent) | ||||
|     : QDialog(parent) { | ||||
|     auto dialog_vbox_layout = new QVBoxLayout(this); | ||||
|     dialog_button_box = | ||||
|         new QDialogButtonBox(QDialogButtonBox::Yes | QDialogButtonBox::No, Qt::Horizontal, parent); | ||||
|     auto label_message = | ||||
|         new QLabel(tr("Delete this user? All of the user's save data will be deleted."), this); | ||||
|     label_info = new QLabel(this); | ||||
|     auto dialog_hbox_layout_widget = new QWidget(this); | ||||
|     auto dialog_hbox_layout = new QHBoxLayout(dialog_hbox_layout_widget); | ||||
|     icon_scene = new QGraphicsScene(0, 0, 64, 64, this); | ||||
|     auto icon_view = new QGraphicsView(icon_scene, this); | ||||
| 
 | ||||
|     dialog_hbox_layout_widget->setLayout(dialog_hbox_layout); | ||||
|     icon_view->setMaximumSize(64, 64); | ||||
|     icon_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | ||||
|     icon_view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); | ||||
|     this->setLayout(dialog_vbox_layout); | ||||
|     this->setWindowTitle(tr("Confirm Delete")); | ||||
|     this->setSizeGripEnabled(false); | ||||
|     dialog_vbox_layout->addWidget(label_message); | ||||
|     dialog_vbox_layout->addWidget(dialog_hbox_layout_widget); | ||||
|     dialog_vbox_layout->addWidget(dialog_button_box); | ||||
|     dialog_hbox_layout->addWidget(icon_view); | ||||
|     dialog_hbox_layout->addWidget(label_info); | ||||
| 
 | ||||
|     connect(dialog_button_box, &QDialogButtonBox::rejected, this, [this]() { close(); }); | ||||
| } | ||||
| 
 | ||||
| ConfigureProfileManagerDeleteDialog::~ConfigureProfileManagerDeleteDialog() = default; | ||||
| 
 | ||||
| void ConfigureProfileManagerDeleteDialog::SetInfo(const QString username, const Common::UUID uuid, | ||||
|                                                   std::function<void()> accept_callback) { | ||||
|     label_info->setText( | ||||
|         tr("Name: %1\nUUID: %2").arg(username, QString::fromStdString(uuid.FormattedString()))); | ||||
|     icon_scene->clear(); | ||||
|     icon_scene->addPixmap(GetIcon(uuid)); | ||||
| 
 | ||||
|     connect(dialog_button_box, &QDialogButtonBox::accepted, this, [this, accept_callback]() { | ||||
|         close(); | ||||
|         accept_callback(); | ||||
|     }); | ||||
| } | ||||
|  |  | |||
|  | @ -3,16 +3,22 @@ | |||
| 
 | ||||
| #pragma once | ||||
| 
 | ||||
| #include <functional> | ||||
| #include <memory> | ||||
| 
 | ||||
| #include <QDialog> | ||||
| #include <QList> | ||||
| #include <QWidget> | ||||
| 
 | ||||
| #include "common/uuid.h" | ||||
| 
 | ||||
| namespace Core { | ||||
| class System; | ||||
| } | ||||
| 
 | ||||
| class QGraphicsScene; | ||||
| class QDialogButtonBox; | ||||
| class QLabel; | ||||
| class QStandardItem; | ||||
| class QStandardItemModel; | ||||
| class QTreeView; | ||||
|  | @ -26,6 +32,20 @@ namespace Ui { | |||
| class ConfigureProfileManager; | ||||
| } | ||||
| 
 | ||||
| class ConfigureProfileManagerDeleteDialog : public QDialog { | ||||
| public: | ||||
|     explicit ConfigureProfileManagerDeleteDialog(QWidget* parent); | ||||
|     ~ConfigureProfileManagerDeleteDialog(); | ||||
| 
 | ||||
|     void SetInfo(const QString username, const Common::UUID uuid, | ||||
|                  std::function<void()> accept_callback); | ||||
| 
 | ||||
| private: | ||||
|     QDialogButtonBox* dialog_button_box; | ||||
|     QGraphicsScene* icon_scene; | ||||
|     QLabel* label_info; | ||||
| }; | ||||
| 
 | ||||
| class ConfigureProfileManager : public QWidget { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
|  | @ -47,7 +67,8 @@ private: | |||
|     void SelectUser(const QModelIndex& index); | ||||
|     void AddUser(); | ||||
|     void RenameUser(); | ||||
|     void DeleteUser(); | ||||
|     void ConfirmDeleteUser(); | ||||
|     void DeleteUser(const Common::UUID uuid); | ||||
|     void SetUserImage(); | ||||
| 
 | ||||
|     QVBoxLayout* layout; | ||||
|  | @ -55,6 +76,8 @@ private: | |||
|     QStandardItemModel* item_model; | ||||
|     QGraphicsScene* scene; | ||||
| 
 | ||||
|     std::unique_ptr<ConfigureProfileManagerDeleteDialog> confirm_dialog; | ||||
| 
 | ||||
|     std::vector<QList<QStandardItem*>> list_items; | ||||
| 
 | ||||
|     std::unique_ptr<Ui::ConfigureProfileManager> ui; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue