aboutsummaryrefslogtreecommitdiffstats
path: root/src/ui/main_window/MainWindowSlotUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/main_window/MainWindowSlotUI.cpp')
-rw-r--r--src/ui/main_window/MainWindowSlotUI.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/src/ui/main_window/MainWindowSlotUI.cpp b/src/ui/main_window/MainWindowSlotUI.cpp
index 248e6488..51de7d23 100644
--- a/src/ui/main_window/MainWindowSlotUI.cpp
+++ b/src/ui/main_window/MainWindowSlotUI.cpp
@@ -29,7 +29,6 @@
#include "MainWindow.h"
#include "core/GpgConstants.h"
#include "core/function/CacheManager.h"
-#include "core/function/GlobalSettingStation.h"
#include "core/function/gpg/GpgAdvancedOperator.h"
#include "core/model/SettingsObject.h"
#include "ui/UserInterfaceUtils.h"
@@ -37,6 +36,7 @@
#include "ui/dialog/settings/SettingsDialog.h"
#include "ui/main_window/KeyMgmt.h"
#include "ui/struct/settings_object/AppearanceSO.h"
+#include "ui/widgets/KeyList.h"
#include "ui/widgets/TextEdit.h"
namespace GpgFrontend::UI {
@@ -168,7 +168,7 @@ void MainWindow::slot_cut_pgp_header() {
void MainWindow::SlotSetRestartNeeded(int mode) { this->restart_mode_ = mode; }
void MainWindow::SlotUpdateCryptoMenuStatus(unsigned int type) {
- MainWindow::OperationMenu::OperationType opera_type = type;
+ OperationMenu::OperationType opera_type = type;
// refresh status to disable all
verify_act_->setDisabled(true);
@@ -179,22 +179,22 @@ void MainWindow::SlotUpdateCryptoMenuStatus(unsigned int type) {
decrypt_verify_act_->setDisabled(true);
// gnupg operations
- if ((opera_type & MainWindow::OperationMenu::kVerify) != 0U) {
+ if ((opera_type & OperationMenu::kVerify) != 0U) {
verify_act_->setDisabled(false);
}
- if ((opera_type & MainWindow::OperationMenu::kSign) != 0U) {
+ if ((opera_type & OperationMenu::kSign) != 0U) {
sign_act_->setDisabled(false);
}
- if ((opera_type & MainWindow::OperationMenu::kEncrypt) != 0U) {
+ if ((opera_type & OperationMenu::kEncrypt) != 0U) {
encrypt_act_->setDisabled(false);
}
- if ((opera_type & MainWindow::OperationMenu::kEncryptAndSign) != 0U) {
+ if ((opera_type & OperationMenu::kEncryptAndSign) != 0U) {
encrypt_sign_act_->setDisabled(false);
}
- if ((opera_type & MainWindow::OperationMenu::kDecrypt) != 0U) {
+ if ((opera_type & OperationMenu::kDecrypt) != 0U) {
decrypt_act_->setDisabled(false);
}
- if ((opera_type & MainWindow::OperationMenu::kDecryptAndVerify) != 0U) {
+ if ((opera_type & OperationMenu::kDecryptAndVerify) != 0U) {
decrypt_verify_act_->setDisabled(false);
}
}
@@ -346,4 +346,29 @@ void MainWindow::slot_restart_gpg_components(bool) {
});
}
+void MainWindow::slot_update_operations_menu_by_checked_keys() {
+ auto keys = m_key_list_->GetCheckedKeys();
+
+ OperationMenu::OperationType type = ~0;
+
+ if (keys.isEmpty()) {
+ type &= ~(OperationMenu::kEncrypt | OperationMenu::kEncryptAndSign |
+ OperationMenu::kSign);
+
+ } else {
+ for (const auto& key : keys) {
+ if (key == nullptr || key->IsDisabled()) continue;
+
+ if (!key->IsHasEncrCap()) {
+ type &= ~(OperationMenu::kEncrypt | OperationMenu::kEncryptAndSign);
+ }
+ if (!key->IsHasSignCap()) {
+ type &= ~(OperationMenu::kSign);
+ }
+ }
+ }
+
+ SlotUpdateCryptoMenuStatus(type);
+}
+
} // namespace GpgFrontend::UI