From 2572aba1def45730f79d1646db8e07993bccb7a7 Mon Sep 17 00:00:00 2001 From: saturneric Date: Sun, 26 Jan 2025 20:39:51 +0100 Subject: [PATCH] feat: users can choose which crypto tool bar buttons are displayed --- gpgfrontend.qrc | 4 +- resource/lfs/icons/decr-verify.png | Bin 0 -> 7058 bytes resource/lfs/icons/encr-sign.png | Bin 0 -> 8084 bytes resource/lfs/icons/file-operator.png | Bin 6401 -> 4887 bytes src/core/typedef/GpgTypedef.h | 13 ++-- src/ui/dialog/settings/SettingsAppearance.cpp | 27 +++++++ src/ui/main_window/MainWindow.cpp | 38 +++++++++- src/ui/main_window/MainWindowSlotUI.cpp | 10 +-- src/ui/main_window/MainWindowUI.cpp | 13 ++-- src/ui/struct/settings_object/AppearanceSO.h | 9 +++ ui/AppearanceSettings.ui | 71 +++++++++++++++++- 11 files changed, 158 insertions(+), 27 deletions(-) create mode 100644 resource/lfs/icons/decr-verify.png create mode 100644 resource/lfs/icons/encr-sign.png diff --git a/gpgfrontend.qrc b/gpgfrontend.qrc index d82a47fa..49a26dec 100644 --- a/gpgfrontend.qrc +++ b/gpgfrontend.qrc @@ -108,7 +108,9 @@ resource/lfs/icons/export-email.png resource/lfs/icons/warning-filling.png resource/lfs/icons/upgrade.png - resource/lfs/icons/batch.png + resource/lfs/icons/batch.png + resource/lfs/icons/encr-sign.png + resource/lfs/icons/decr-verify.png resource/lfs/test/data/pv1.key diff --git a/resource/lfs/icons/decr-verify.png b/resource/lfs/icons/decr-verify.png new file mode 100644 index 0000000000000000000000000000000000000000..0385cabfcf4cf6acf7b4c65092062dae047d1524 GIT binary patch literal 7058 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 C*F(tw literal 0 HcmV?d00001 diff --git a/resource/lfs/icons/encr-sign.png b/resource/lfs/icons/encr-sign.png new file mode 100644 index 0000000000000000000000000000000000000000..252754818a348631b93a3326a1e94dea6a2ed44b GIT binary patch literal 8084 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 OB`>Wa^;5za_WuCu2SK+0 literal 0 HcmV?d00001 diff --git a/resource/lfs/icons/file-operator.png b/resource/lfs/icons/file-operator.png index cab57a986bf70aed71877193e3b320658dd6a74a..e547d8867ce975abd04064a6f0d5440e8ffce698 100644 GIT binary patch literal 4887 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 literal 6401 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

2aQC6HBQ1#!h5LU>+=5T^eX55P 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 diff --git a/src/core/typedef/GpgTypedef.h b/src/core/typedef/GpgTypedef.h index c052b6a2..fffc5cf4 100644 --- a/src/core/typedef/GpgTypedef.h +++ b/src/core/typedef/GpgTypedef.h @@ -62,11 +62,12 @@ using GpgOperationCallback = std::function; using GpgOperationFuture = std::future>; enum GpgOperation { - kENCRYPT, - kDECRYPT, - kSIGN, - kVERIFY, - kENCRYPT_SIGN, - kDECRYPT_VERIFY + kNONE = 0, + kENCRYPT = 1 << 0, + kDECRYPT = 1 << 1, + kSIGN = 1 << 2, + kVERIFY = 1 << 3, + kENCRYPT_SIGN = 1 << 4, + kDECRYPT_VERIFY = 1 << 5, }; } // namespace GpgFrontend \ No newline at end of file diff --git a/src/ui/dialog/settings/SettingsAppearance.cpp b/src/ui/dialog/settings/SettingsAppearance.cpp index d2648498..6c0d18c7 100644 --- a/src/ui/dialog/settings/SettingsAppearance.cpp +++ b/src/ui/dialog/settings/SettingsAppearance.cpp @@ -150,6 +150,19 @@ void AppearanceTab::SetSettings() { } else { ui_->themeComboBox->setCurrentIndex(target_theme_index); } + + ui_->encrCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kENCRYPT) != 0); + ui_->decrCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kDECRYPT) != 0); + ui_->signCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kSIGN) != 0); + ui_->verifyCheckBox->setChecked( + (appearance.tool_bar_crypto_operas_type & GpgOperation::kVERIFY) != 0); + ui_->encrSignCheckBox->setChecked((appearance.tool_bar_crypto_operas_type & + GpgOperation::kENCRYPT_SIGN) != 0); + ui_->decrVerifyCheckBox->setChecked((appearance.tool_bar_crypto_operas_type & + GpgOperation::kDECRYPT_VERIFY) != 0); } void AppearanceTab::ApplySettings() { @@ -195,6 +208,20 @@ void AppearanceTab::ApplySettings() { appearance.text_editor_font_size = ui_->fontSizeTextEditorLabelSpinBox->value(); + appearance.tool_bar_crypto_operas_type = 0; + appearance.tool_bar_crypto_operas_type |= + ui_->encrCheckBox->isChecked() ? kENCRYPT : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->decrCheckBox->isChecked() ? kDECRYPT : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->signCheckBox->isChecked() ? kSIGN : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->verifyCheckBox->isChecked() ? kVERIFY : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->encrSignCheckBox->isChecked() ? kENCRYPT_SIGN : kNONE; + appearance.tool_bar_crypto_operas_type |= + ui_->decrVerifyCheckBox->isChecked() ? kDECRYPT_VERIFY : kNONE; + general_settings_state.Store(appearance.ToJson()); auto settings = GlobalSettingStation::GetInstance().GetSettings(); diff --git a/src/ui/main_window/MainWindow.cpp b/src/ui/main_window/MainWindow.cpp index f9d5d8be..4817cbcd 100644 --- a/src/ui/main_window/MainWindow.cpp +++ b/src/ui/main_window/MainWindow.cpp @@ -32,6 +32,7 @@ #include "core/function/GlobalSettingStation.h" #include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" +#include "struct/settings_object/AppearanceSO.h" #include "ui/UISignalStation.h" #include "ui/main_window/GeneralMainWindow.h" #include "ui/struct/settings_object/KeyServerSO.h" @@ -178,11 +179,44 @@ void MainWindow::restore_settings() { settings.setValue("gnupg/non_ascii_at_file_operation", true); } + prohibit_update_checking_ = + settings.value("network/prohibit_update_check").toBool(); + // set appearance + AppearanceSO const appearance(SettingsObject("general_settings_state")); + + crypt_tool_bar_->clear(); + + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kENCRYPT) != 0) { + crypt_tool_bar_->addAction(encrypt_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kDECRYPT) != 0) { + crypt_tool_bar_->addAction(decrypt_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kSIGN) != 0) { + crypt_tool_bar_->addAction(sign_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kVERIFY) != 0) { + crypt_tool_bar_->addAction(verify_act_); + } + if ((appearance.tool_bar_crypto_operas_type & GpgOperation::kENCRYPT_SIGN) != + 0) { + crypt_tool_bar_->addAction(encrypt_sign_act_); + } + if ((appearance.tool_bar_crypto_operas_type & + GpgOperation::kDECRYPT_VERIFY) != 0) { + crypt_tool_bar_->addAction(decrypt_verify_act_); + } + + icon_style_ = appearance.tool_bar_button_style; import_button_->setToolButtonStyle(icon_style_); + this->setToolButtonStyle(icon_style_); - prohibit_update_checking_ = - settings.value("network/prohibit_update_check").toBool(); + // icons ize + this->setIconSize( + QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); + import_button_->setIconSize( + QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); } void MainWindow::recover_editor_unsaved_pages_from_cache() { diff --git a/src/ui/main_window/MainWindowSlotUI.cpp b/src/ui/main_window/MainWindowSlotUI.cpp index 40df7dbc..dc282c64 100644 --- a/src/ui/main_window/MainWindowSlotUI.cpp +++ b/src/ui/main_window/MainWindowSlotUI.cpp @@ -103,15 +103,7 @@ void MainWindow::slot_open_settings_dialog() { connect(dialog, &SettingsDialog::finished, this, [&]() -> void { AppearanceSO appearance(SettingsObject("general_settings_state")); - this->setToolButtonStyle(appearance.tool_bar_button_style); - import_button_->setToolButtonStyle(appearance.tool_bar_button_style); - - // icons ize - this->setIconSize( - QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); - import_button_->setIconSize( - QSize(appearance.tool_bar_icon_width, appearance.tool_bar_icon_height)); - + restore_settings(); // restart main window if necessary if (restart_mode_ != kNonRestartCode) { if (edit_->MaybeSaveAnyTab()) { diff --git a/src/ui/main_window/MainWindowUI.cpp b/src/ui/main_window/MainWindowUI.cpp index 59ad8401..16b4eed6 100644 --- a/src/ui/main_window/MainWindowUI.cpp +++ b/src/ui/main_window/MainWindowUI.cpp @@ -28,8 +28,10 @@ #include "MainWindow.h" #include "core/function/GlobalSettingStation.h" +#include "core/model/SettingsObject.h" #include "core/module/ModuleManager.h" #include "dialog/controller/ModuleControllerDialog.h" +#include "struct/settings_object/AppearanceSO.h" #include "ui/UserInterfaceUtils.h" #include "ui/dialog/controller/GnuPGControllerDialog.h" #include "ui/dialog/help/AboutDialog.h" @@ -148,7 +150,7 @@ void MainWindow::create_actions() { &MainWindow::SlotGeneralEncrypt); encrypt_sign_act_ = - create_action("encrypt_sign", tr("Encrypt Sign"), ":/icons/compress.png", + create_action("encrypt_sign", tr("Encrypt Sign"), ":/icons/encr-sign.png", tr("Encrypt and Sign Message"), {QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_E)}); connect(encrypt_sign_act_, &QAction::triggered, this, @@ -162,7 +164,7 @@ void MainWindow::create_actions() { decrypt_verify_act_ = create_action("decrypt_verify", tr("Decrypt Verify"), - ":/icons/expand.png", tr("Decrypt and Verify Message"), + ":/icons/decr-verify.png", tr("Decrypt and Verify Message"), {QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D)}); connect(decrypt_verify_act_, &QAction::triggered, this, &MainWindow::SlotGeneralDecryptVerify); @@ -498,12 +500,7 @@ void MainWindow::create_tool_bars() { crypt_tool_bar_ = addToolBar(tr("Operations")); crypt_tool_bar_->setObjectName("cryptToolBar"); - crypt_tool_bar_->addAction(encrypt_act_); - // crypt_tool_bar_->addAction(encrypt_sign_act_); - crypt_tool_bar_->addAction(decrypt_act_); - // crypt_tool_bar_->addAction(decrypt_verify_act_); - crypt_tool_bar_->addAction(sign_act_); - crypt_tool_bar_->addAction(verify_act_); + view_menu_->addAction(crypt_tool_bar_->toggleViewAction()); key_tool_bar_ = addToolBar(tr("Key")); diff --git a/src/ui/struct/settings_object/AppearanceSO.h b/src/ui/struct/settings_object/AppearanceSO.h index 4722ebd3..5f20d1fe 100644 --- a/src/ui/struct/settings_object/AppearanceSO.h +++ b/src/ui/struct/settings_object/AppearanceSO.h @@ -28,6 +28,8 @@ #pragma once +#include "core/typedef/GpgTypedef.h" + namespace GpgFrontend::UI { struct AppearanceSO { @@ -36,6 +38,9 @@ struct AppearanceSO { int tool_bar_icon_width = 24; int tool_bar_icon_height = 24; Qt::ToolButtonStyle tool_bar_button_style = Qt::ToolButtonTextUnderIcon; + int tool_bar_crypto_operas_type = GpgOperation::kENCRYPT | + GpgOperation::kDECRYPT | + GpgOperation::kSIGN | GpgOperation::kVERIFY; bool save_window_state; @@ -55,6 +60,9 @@ struct AppearanceSO { if (const auto v = j["tool_bar_button_style"]; v.isDouble()) { tool_bar_button_style = static_cast(v.toInt()); } + if (const auto v = j["tool_bar_crypto_operas_type"]; v.isDouble()) { + tool_bar_crypto_operas_type = static_cast(v.toInt()); + } if (const auto v = j["save_window_state"]; v.isBool()) { save_window_state = v.toBool(); @@ -68,6 +76,7 @@ struct AppearanceSO { j["tool_bar_icon_width"] = tool_bar_icon_width; j["tool_bar_icon_height"] = tool_bar_icon_height; j["tool_bar_button_style"] = tool_bar_button_style; + j["tool_bar_crypto_operas_type"] = tool_bar_crypto_operas_type; j["save_window_state"] = save_window_state; return j; diff --git a/ui/AppearanceSettings.ui b/ui/AppearanceSettings.ui index aed30461..ed6acea6 100644 --- a/ui/AppearanceSettings.ui +++ b/ui/AppearanceSettings.ui @@ -173,13 +173,82 @@ + + + + + + + 0 + 0 + + + + Crypto Operations + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop + + + + + + + QLayout::SizeConstraint::SetDefaultConstraint + + + + + Verify + + + + + + + Decrypt Verify + + + + + + + Encrypt Sign + + + + + + + Encrypt + + + + + + + Sign + + + + + + + Decrypt + + + + + + + - Qt::Vertical + Qt::Orientation::Vertical