aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/controller/GnuPGControllerDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/dialog/controller/GnuPGControllerDialog.cpp')
-rw-r--r--src/ui/dialog/controller/GnuPGControllerDialog.cpp165
1 files changed, 165 insertions, 0 deletions
diff --git a/src/ui/dialog/controller/GnuPGControllerDialog.cpp b/src/ui/dialog/controller/GnuPGControllerDialog.cpp
index f0a162a2..12fda8a3 100644
--- a/src/ui/dialog/controller/GnuPGControllerDialog.cpp
+++ b/src/ui/dialog/controller/GnuPGControllerDialog.cpp
@@ -70,7 +70,11 @@ GnuPGControllerDialog::GnuPGControllerDialog(QWidget* parent)
"Application restart."));
popup_menu_ = new QMenu(this);
+ popup_menu_->addAction(ui_->actionMove_Key_Database_Up);
+ popup_menu_->addAction(ui_->actionMove_Key_Database_Down);
+ popup_menu_->addAction(ui_->actionMove_Key_Database_To_Top);
popup_menu_->addAction(ui_->actionOpen_Key_Database);
+ popup_menu_->addAction(ui_->actionEdit_Key_Database);
popup_menu_->addAction(ui_->actionRemove_Selected_Key_Database);
// announce main window
@@ -142,6 +146,18 @@ GnuPGControllerDialog::GnuPGControllerDialog(QWidget* parent)
connect(ui_->actionOpen_Key_Database, &QAction::triggered, this,
&GnuPGControllerDialog::slot_open_key_database);
+ connect(ui_->actionMove_Key_Database_Up, &QAction::triggered, this,
+ &GnuPGControllerDialog::slot_move_up_key_database);
+
+ connect(ui_->actionMove_Key_Database_To_Top, &QAction::triggered, this,
+ &GnuPGControllerDialog::slot_move_to_top_key_database);
+
+ connect(ui_->actionMove_Key_Database_Down, &QAction::triggered, this,
+ &GnuPGControllerDialog::slot_move_down_key_database);
+
+ connect(ui_->actionEdit_Key_Database, &QAction::triggered, this,
+ &GnuPGControllerDialog::slot_edit_key_database);
+
#if defined(__APPLE__) && defined(__MACH__)
// macOS style settings
ui_->buttonBox->setDisabled(true);
@@ -424,4 +440,153 @@ void GnuPGControllerDialog::slot_open_key_database() {
break;
}
}
+
+void GnuPGControllerDialog::slot_move_up_key_database() {
+ const auto row_size = ui_->keyDatabaseTable->rowCount();
+
+ if (row_size <= 0) return;
+
+ auto& key_databases = buffered_key_db_so_;
+
+ for (int i = 0; i < row_size; i++) {
+ auto* const item = ui_->keyDatabaseTable->item(i, 1);
+ if (!item->isSelected()) continue;
+
+ if (i == 0) {
+ return;
+ }
+
+ key_databases.swapItemsAt(i, i - 1);
+
+ for (int k = 0; k < ui_->keyDatabaseTable->columnCount(); k++) {
+ ui_->keyDatabaseTable->item(i, k)->setSelected(false);
+ ui_->keyDatabaseTable->item(i - 1, k)->setSelected(true);
+ }
+
+ break;
+ }
+
+ this->slot_refresh_key_database_table();
+
+ this->slot_set_restart_needed(kDeepRestartCode);
+}
+
+void GnuPGControllerDialog::slot_move_to_top_key_database() {
+ const auto row_size = ui_->keyDatabaseTable->rowCount();
+
+ if (row_size <= 0) return;
+
+ auto& key_databases = buffered_key_db_so_;
+
+ for (int i = 0; i < row_size; i++) {
+ auto* const item = ui_->keyDatabaseTable->item(i, 1);
+ if (!item->isSelected()) continue;
+
+ if (i == 0) {
+ return;
+ }
+
+ auto selected_item = key_databases.takeAt(i);
+ key_databases.insert(0, selected_item);
+
+ for (int k = 0; k < ui_->keyDatabaseTable->columnCount(); k++) {
+ ui_->keyDatabaseTable->item(i, k)->setSelected(false);
+ }
+ for (int k = 0; k < ui_->keyDatabaseTable->columnCount(); k++) {
+ ui_->keyDatabaseTable->item(0, k)->setSelected(true);
+ }
+
+ break;
+ }
+
+ this->slot_refresh_key_database_table();
+
+ this->slot_set_restart_needed(kDeepRestartCode);
+}
+
+void GnuPGControllerDialog::slot_move_down_key_database() {
+ const auto row_size = ui_->keyDatabaseTable->rowCount();
+
+ if (row_size <= 0) return;
+
+ auto& key_databases = buffered_key_db_so_;
+
+ for (int i = row_size - 1; i >= 0; i--) {
+ auto* const item = ui_->keyDatabaseTable->item(i, 1);
+ if (!item->isSelected()) continue;
+
+ if (i == row_size - 1) {
+ return;
+ }
+
+ key_databases.swapItemsAt(i, i + 1);
+
+ for (int k = 0; k < ui_->keyDatabaseTable->columnCount(); k++) {
+ ui_->keyDatabaseTable->item(i, k)->setSelected(false);
+ ui_->keyDatabaseTable->item(i + 1, k)->setSelected(true);
+ }
+
+ break;
+ }
+
+ this->slot_refresh_key_database_table();
+
+ this->slot_set_restart_needed(kDeepRestartCode);
+}
+
+void GnuPGControllerDialog::slot_edit_key_database() {
+ const auto row_size = ui_->keyDatabaseTable->rowCount();
+ if (row_size <= 0) {
+ return;
+ }
+
+ int selected_row = -1;
+ for (int i = 0; i < row_size; i++) {
+ if (ui_->keyDatabaseTable->item(i, 0)->isSelected()) {
+ selected_row = i;
+ break;
+ }
+ }
+
+ if (selected_row == -1) {
+ QMessageBox::warning(this, tr("No Key Database Selected"),
+ tr("Please select a key database to edit."));
+ return;
+ }
+
+ auto& key_databases = buffered_key_db_so_;
+ KeyDatabaseItemSO& selected_key_database = key_databases[selected_row];
+ auto* dialog = new KeyDatabaseEditDialog(this);
+ dialog->SetDefaultName(selected_key_database.name);
+ dialog->SetDefaultPath(selected_key_database.path);
+
+ connect(dialog, &KeyDatabaseEditDialog::SignalKeyDatabaseInfoAccepted, this,
+ [this, selected_row](const QString& name, const QString& path) {
+ auto& key_databases = buffered_key_db_so_;
+
+ for (int i = 0; i < key_databases.size(); i++) {
+ if (i != selected_row &&
+ QFileInfo(key_databases[i].path) == QFileInfo(path)) {
+ QMessageBox::warning(
+ this, tr("Duplicate Key Database Paths"),
+ tr("The edited key database path duplicates a previously "
+ "existing one."));
+ return;
+ }
+ }
+
+ LOG_D() << "edit key database path, name: " << name
+ << "path: " << path;
+
+ KeyDatabaseItemSO& key_database = key_databases[selected_row];
+ key_database.name = name;
+ key_database.path = path;
+
+ slot_refresh_key_database_table();
+
+ this->slot_set_restart_needed(kDeepRestartCode);
+ });
+
+ dialog->show();
+}
} // namespace GpgFrontend::UI