From b9b3a96eced52621ce08c451c951a2759dad5028 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Mon, 21 Sep 2020 16:48:22 +0300 Subject: [PATCH] Disable signing button on some cases (#824) IB-6637 Signed-off-by: Raul Metsma <38207162766@eesti.ee> Co-authored-by: Raul Metsma <38207162766@eesti.ee> --- client/widgets/ContainerPage.cpp | 23 +++++++++++------------ client/widgets/ContainerPage.h | 2 +- client/widgets/SignatureItem.cpp | 4 ++-- client/widgets/SignatureItem.h | 2 +- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/client/widgets/ContainerPage.cpp b/client/widgets/ContainerPage.cpp index 55d34cc04..a0aefb4a7 100644 --- a/client/widgets/ContainerPage.cpp +++ b/client/widgets/ContainerPage.cpp @@ -152,7 +152,7 @@ void ContainerPage::clear() { ui->leftPane->clear(); ui->rightPane->clear(); - canDecrypt = false; + isSupported = false; } void ContainerPage::clearPopups() @@ -305,7 +305,9 @@ void ContainerPage::showMainAction(const QList &actions) void ContainerPage::showSigningButton() { - if(cardInReader.isEmpty()) + if(!isSupported) + hideMainAction(); + else if(cardInReader.isEmpty()) showMainAction({ SignatureMobile, SignatureSmartID }); else if(isSeal) showMainAction({ SignatureToken, SignatureMobile, SignatureSmartID }); @@ -316,7 +318,7 @@ void ContainerPage::showSigningButton() void ContainerPage::transition(CryptoDoc* container, bool canDecrypt) { clear(); - this->canDecrypt = canDecrypt; + isSupported = canDecrypt; ContainerState state = container->state(); ui->leftPane->stateChange(state); ui->rightPane->stateChange(state); @@ -348,17 +350,16 @@ void ContainerPage::transition(DigiDoc* container) for(const DigiDocSignature &c: container->timestamps()) { - SignatureItem *item = new SignatureItem(c, state, false, ui->rightPane); + SignatureItem *item = new SignatureItem(c, state, ui->rightPane); if(item->isInvalid()) addError(item, errors); ui->rightPane->addHeaderWidget(item); } } - bool enableSigning = container->isSupported(); for(const DigiDocSignature &c: container->signatures()) { - SignatureItem *item = new SignatureItem(c, state, enableSigning, ui->rightPane); + SignatureItem *item = new SignatureItem(c, state, ui->rightPane); if(item->isInvalid()) addError(item, errors); ui->rightPane->addWidget(item); @@ -373,10 +374,8 @@ void ContainerPage::transition(DigiDoc* container) if(container->fileName().endsWith(QStringLiteral("ddoc"), Qt::CaseInsensitive)) emit warning(UnsupportedDDocWarning); - if(enableSigning || container->isService()) - showSigningButton(); - else - hideMainAction(); + isSupported = container->isSupported() || container->isService(); + showSigningButton(); ui->leftPane->setModel(container->documentModel()); updatePanes(state); @@ -384,7 +383,7 @@ void ContainerPage::transition(DigiDoc* container) void ContainerPage::update(bool canDecrypt, CryptoDoc* container) { - this->canDecrypt = canDecrypt; + isSupported = canDecrypt; if(ui->leftPane->getState() & EncryptedContainer) updateDecryptionButton(); @@ -400,7 +399,7 @@ void ContainerPage::update(bool canDecrypt, CryptoDoc* container) void ContainerPage::updateDecryptionButton() { - if(!canDecrypt || cardInReader.isEmpty()) + if(!isSupported || cardInReader.isEmpty()) hideMainAction(); else if(isSeal) showMainAction({ DecryptToken }); diff --git a/client/widgets/ContainerPage.h b/client/widgets/ContainerPage.h index 1d5733ae9..44bc98364 100644 --- a/client/widgets/ContainerPage.h +++ b/client/widgets/ContainerPage.h @@ -95,7 +95,7 @@ public slots: const char *cancelText = "CANCEL"; const char *convertText = "ENCRYPT"; - bool canDecrypt = false; + bool isSupported = false; bool isSeal = false; bool isExpired = false; bool isBlocked = false; diff --git a/client/widgets/SignatureItem.cpp b/client/widgets/SignatureItem.cpp index 96541c3ad..c578cfb51 100644 --- a/client/widgets/SignatureItem.cpp +++ b/client/widgets/SignatureItem.cpp @@ -52,7 +52,7 @@ class SignatureItem::Private: public Ui::SignatureItem QString status; }; -SignatureItem::SignatureItem(DigiDocSignature s, ContainerState /*state*/, bool isSupported, QWidget *parent) +SignatureItem::SignatureItem(DigiDocSignature s, ContainerState /*state*/, QWidget *parent) : Item(parent) , ui(new Private(std::move(s))) { @@ -67,7 +67,7 @@ SignatureItem::SignatureItem(DigiDocSignature s, ContainerState /*state*/, bool ui->remove->setIcons(QStringLiteral("/images/icon_remove.svg"), QStringLiteral("/images/icon_remove_hover.svg"), QStringLiteral("/images/icon_remove_pressed.svg"), 17, 17); ui->remove->init(LabelButton::White, QString(), 0); - ui->remove->setVisible(isSupported); + ui->remove->setVisible(s.parent()->isSupported()); connect(ui->remove, &LabelButton::clicked, this, &SignatureItem::removeSignature); init(); } diff --git a/client/widgets/SignatureItem.h b/client/widgets/SignatureItem.h index 9a1708330..4c11ae0ac 100644 --- a/client/widgets/SignatureItem.h +++ b/client/widgets/SignatureItem.h @@ -29,7 +29,7 @@ class SignatureItem : public Item Q_OBJECT public: - explicit SignatureItem(DigiDocSignature s, ria::qdigidoc4::ContainerState state, bool isSupported, QWidget *parent = nullptr); + explicit SignatureItem(DigiDocSignature s, ria::qdigidoc4::ContainerState state, QWidget *parent = nullptr); ~SignatureItem() override; ria::qdigidoc4::WarningType getError() const;