diff --git a/client/MainWindow.cpp b/client/MainWindow.cpp
index 547a4c17b..c534da105 100644
--- a/client/MainWindow.cpp
+++ b/client/MainWindow.cpp
@@ -60,7 +60,6 @@ using namespace std::chrono;
MainWindow::MainWindow( QWidget *parent )
: QWidget( parent )
, ui( new Ui::MainWindow )
- , warnings(new WarningList(ui, this))
{
setAttribute(Qt::WA_DeleteOnClose, true);
setAcceptDrops( true );
@@ -80,7 +79,7 @@ MainWindow::MainWindow( QWidget *parent )
ui->help->setFont( condensed11 );
ui->settings->setFont( condensed11 );
- connect(warnings, &WarningList::warningClicked, this, &MainWindow::warningClicked);
+ connect(ui->warnings, &WarningList::warningClicked, this, &MainWindow::warningClicked);
ui->version->setText(QStringLiteral("%1%2").arg(tr("Ver. "), Application::applicationVersion()));
connect(ui->version, &QPushButton::clicked, this, [this] {showSettings(SettingsDialog::DiagnosticsSettings);});
@@ -145,7 +144,7 @@ MainWindow::MainWindow( QWidget *parent )
connect(ui->signContainerPage, &ContainerPage::fileRemoved, this, &MainWindow::removeSignatureFile);
connect(ui->signContainerPage, &ContainerPage::removed, this, &MainWindow::removeSignature);
connect(ui->signContainerPage, &ContainerPage::warning, this, [this](const WarningText &warningText) {
- warnings->showWarning(warningText);
+ ui->warnings->showWarning(warningText);
ui->signature->warningIcon(true);
});
@@ -416,7 +415,7 @@ void MainWindow::onSignAction(int action, const QString &info1, const QString &i
break;
case ClearSignatureWarning:
ui->signature->warningIcon(false);
- warnings->closeWarnings(SignDetails);
+ ui->warnings->closeWarnings(SignDetails);
break;
case ContainerCancel:
resetDigiDoc();
@@ -717,8 +716,8 @@ void MainWindow::resetDigiDoc(DigiDoc *doc, bool warnOnChange)
ui->signContainerPage->clear();
delete digiDoc;
- warnings->closeWarnings(SignDetails);
- warnings->closeWarning(EmptyFileWarning);
+ ui->warnings->closeWarnings(SignDetails);
+ ui->warnings->closeWarning(EmptyFileWarning);
digiDoc = doc;
}
@@ -784,7 +783,7 @@ void MainWindow::selectPage(Pages page)
auto *btn = page < CryptoIntro ? ui->signature : (page == MyEid ? ui->myEid : ui->crypto);
btn->setChecked(true);
ui->startScreen->setCurrentIndex(page);
- warnings->updateWarnings();
+ ui->warnings->updateWarnings(page);
adjustDrops();
updateSelector();
}
@@ -924,7 +923,7 @@ bool MainWindow::removeFile(DocumentModel *model, int index)
for(auto i = 0; i < model->rowCount(); ++i) {
if(model->fileSize(i) > 0)
continue;
- warnings->closeWarning(EmptyFileWarning);
+ ui->warnings->closeWarning(EmptyFileWarning);
if(digiDoc)
ui->signContainerPage->transition(digiDoc);
break;
@@ -990,9 +989,7 @@ void MainWindow::warningClicked(const QString &link)
if(link == QLatin1String("#unblock-PIN1"))
ui->accordion->changePin1Clicked(false, true);
else if(link == QLatin1String("#unblock-PIN2"))
- ui->accordion->changePin2Clicked (false, true);
- else if(link.startsWith(QLatin1String("http")))
- QDesktopServices::openUrl(QUrl(link));
+ ui->accordion->changePin2Clicked(false, true);
}
bool MainWindow::wrap(const QString& wrappedFile, bool enclose)
diff --git a/client/MainWindow.h b/client/MainWindow.h
index a18cbd25a..e00de6995 100644
--- a/client/MainWindow.h
+++ b/client/MainWindow.h
@@ -116,5 +116,4 @@ private Q_SLOTS:
CryptoDoc* cryptoDoc = nullptr;
DigiDoc* digiDoc = nullptr;
Ui::MainWindow *ui;
- WarningList *warnings;
};
diff --git a/client/MainWindow.ui b/client/MainWindow.ui
index f3ee64a64..71f9becb8 100644
--- a/client/MainWindow.ui
+++ b/client/MainWindow.ui
@@ -24,7 +24,12 @@
background-color: #003168;
border-right: 1px solid #E7EAEF;
}
-#topBar, #startScreen { background-color: #FFFFFF; }
+#topBar, #startScreen, #warnings {
+background-color: #FFFFFF;
+}
+#warnings {
+border-top: 1px solid #E7EAEF;
+}
#signPage, #cryptoPage, #noReaderInfo {
background-image: url(:/images/bg_lovid.svg);
background-repeat: repeat-x;
@@ -67,7 +72,7 @@ background-position: bottom;
- -
+
-
@@ -463,16 +468,22 @@ QToolButton:hover {
-
-
-
+
+
+
+ 0
+ 1
+
+
+
- 0
+ 2
0
- 0
+ 1
0
@@ -480,153 +491,284 @@ QToolButton:hover {
0
-
-
-
-
-
- 914
- 4
-
-
-
-
- 16777215
- 4
-
-
-
- background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #c8c8c8, stop: 1 #F4F5F6);
-
-
-
- -
-
-
-
- 914
- 0
-
-
-
- 0
-
-
-
-
- 14
-
-
-
-
-
- Qt::Vertical
-
-
-
- 20
- 60
-
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
-
- 20
- true
-
-
-
- color: #041E42;
-
-
- Drag file here for signing ...
-
-
- Qt::AlignCenter
-
-
-
- -
-
-
-
- 240
- 45
-
-
-
-
- 240
- 45
-
-
-
-
- 14
- false
- false
-
-
-
- PointingHandCursor
-
-
- Load file from disk for signing or verifying
-
-
- QPushButton {
- padding: 6px 10px;
- border-radius: 2px;
- background-color: #006eb5;
- color: #ffffff;
- text-decoration: none solid rgb(255, 255, 255);
- text-align: center;
+
+
+
+ -
+
+
+
+ 914
+ 0
+
+
+
+ 0
+
+
+
+
+ 14
+
+
-
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 60
+
+
+
+
+ -
+
+
+
+ 0
+ 45
+
+
+
+
+ 20
+ true
+
+
+
+ color: #041E42;
+
+
+ Drag file here for signing ...
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 240
+ 45
+
+
+
+
+ 240
+ 45
+
+
+
+
+ 14
+ false
+ false
+
+
+
+ PointingHandCursor
+
+
+ Load file from disk for signing or verifying
+
+
+ QPushButton {
+padding: 6px 10px;
+border-radius: 2px;
+background-color: #006eb5;
+color: #ffffff;
+text-decoration: none solid rgb(255, 255, 255);
+text-align: center;
}
QPushButton:pressed {
- background-color: #41B6E6;
+background-color: #41B6E6;
}
QPushButton:hover:!pressed {
- background-color: #008DCF;
+background-color: #008DCF;
}
QPushButton:disabled {
- background-color: #BEDBED;
+background-color: #BEDBED;
}
-
-
- Open file for signing or verifying
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 230
-
-
-
-
-
+
+
+ Open file for signing or verifying
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 230
+
+
+
+
+
+
+
+
+
+
+ 14
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 60
+
+
+
+
+ -
+
+
+
+ 0
+ 45
+
+
+
+
+ 20
+ true
+
+
+
+ color: #041E42;
+
+
+ Drag file here for encryption ...
+
+
+ Qt::AlignCenter
+
-
-
-
+
+ -
+
+
+
+ 240
+ 45
+
+
+
+
+ 240
+ 45
+
+
+
+
+ 14
+ false
+ false
+
+
+
+ PointingHandCursor
+
+
+ Load file from disk for encryption or decryption
+
+
+ QPushButton {
+padding: 6px 10px;
+border-radius: 2px;
+background-color: #006eb5;
+color: #ffffff;
+text-decoration: none solid rgb(255, 255, 255);
+text-align: center;
+}
+QPushButton:pressed {
+background-color: #41B6E6;
+}
+QPushButton:hover:!pressed {
+background-color: #008DCF;
+}
+QPushButton:disabled {
+background-color: #BEDBED;
+}
+
+
+ Open file for encryption or decryption
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 230
+
+
+
+
+
+
+
+
+
+
+ 3
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+
+ 0
+ 172
+
+
+
+
+ 16777215
+ 186
+
+
+
+
+ -
+
+
+ -
+
+
14
-
-
+
Qt::Vertical
@@ -639,7 +781,7 @@ QPushButton:disabled {
-
-
+
0
@@ -652,70 +794,38 @@ QPushButton:disabled {
true
+
+ Qt::TabFocus
+
color: #041E42;
- Drag file here for encryption ...
+ Connect the card reader to your computer and insert your ID card into the reader
Qt::AlignCenter
+
+ true
+
+
+ true
+
- -
-
+
-
+
- 240
- 45
-
-
-
-
- 240
+ 0
45
-
-
- 14
- false
- false
-
-
-
- PointingHandCursor
-
-
- Load file from disk for encryption or decryption
-
-
- QPushButton {
- padding: 6px 10px;
- border-radius: 2px;
- background-color: #006eb5;
- color: #ffffff;
- text-decoration: none solid rgb(255, 255, 255);
- text-align: center;
-}
-QPushButton:pressed {
- background-color: #41B6E6;
-}
-QPushButton:hover:!pressed {
- background-color: #008DCF;
-}
-QPushButton:disabled {
- background-color: #BEDBED;
-}
-
-
- Open file for encryption or decryption
-
-
-
+
Qt::Vertical
@@ -729,127 +839,9 @@ QPushButton:disabled {
-
-
-
-
- 3
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
- -
-
-
-
- 0
- 172
-
-
-
-
- 16777215
- 186
-
-
-
-
- -
-
-
- -
-
-
-
- 14
-
-
-
-
-
- Qt::Vertical
-
-
-
- 20
- 60
-
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
-
- 20
- true
-
-
-
- Qt::TabFocus
-
-
- color: #041E42;
-
-
- Connect the card reader to your computer and insert your ID card into the reader
-
-
- Qt::AlignCenter
-
-
- true
-
-
- true
-
-
-
- -
-
-
-
- 0
- 45
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 230
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -900,6 +892,12 @@ QPushButton:disabled {
QToolButton
+
+ WarningList
+ QWidget
+
+ 1
+
diff --git a/client/MainWindow_MyEID.cpp b/client/MainWindow_MyEID.cpp
index 7668feca8..2e9aa5b7d 100644
--- a/client/MainWindow_MyEID.cpp
+++ b/client/MainWindow_MyEID.cpp
@@ -69,13 +69,13 @@ void MainWindow::pinUnblock( QSmartCardData::PinType type, bool isForgotPin )
updateCardWarnings(data);
if (type == QSmartCardData::Pin1Type)
{
- warnings->closeWarning(WarningType::UnblockPin1Warning);
+ ui->warnings->closeWarning(WarningType::UnblockPin1Warning);
ui->cryptoContainerPage->cardChanged(data.authCert(),
data.retryCount(QSmartCardData::Pin1Type) == 0);
}
if (type == QSmartCardData::Pin2Type)
{
- warnings->closeWarning(WarningType::UnblockPin2Warning);
+ ui->warnings->closeWarning(WarningType::UnblockPin2Warning);
ui->signContainerPage->cardChanged(data.signCert(),
data.retryCount(QSmartCardData::Pin2Type) == 0);
}
@@ -132,9 +132,9 @@ void MainWindow::showPinBlockedWarning(const QSmartCardData& t)
{
bool isBlockedPuk = t.retryCount(QSmartCardData::PukType) == 0;
if(!isBlockedPuk && t.retryCount(QSmartCardData::Pin2Type) == 0)
- warnings->showWarning(WarningText(WarningType::UnblockPin2Warning));
+ ui->warnings->showWarning({WarningType::UnblockPin2Warning});
if(!isBlockedPuk && t.retryCount(QSmartCardData::Pin1Type) == 0)
- warnings->showWarning(WarningText(WarningType::UnblockPin1Warning));
+ ui->warnings->showWarning({WarningType::UnblockPin1Warning});
ui->signContainerPage->cardChanged(t.signCert(),
t.retryCount(QSmartCardData::Pin2Type) == 0);
ui->cryptoContainerPage->cardChanged(t.authCert(),
@@ -163,18 +163,18 @@ void MainWindow::updateCardWarnings(const QSmartCardData &data)
if(expiresIn <= 0)
{
ui->myEid->invalidIcon(true);
- warnings->showWarning(WarningText(WarningType::CertExpiredWarning));
+ ui->warnings->showWarning({WarningType::CertExpiredError});
}
else if(expiresIn <= 105 * DAY)
{
ui->myEid->warningIcon(true);
- warnings->showWarning(WarningText(WarningType::CertExpiryWarning));
+ ui->warnings->showWarning({WarningType::CertExpiryWarning});
}
}
void MainWindow::updateMyEID(const TokenData &t)
{
- warnings->clearMyEIDWarnings();
+ ui->warnings->clearMyEIDWarnings();
SslCertificate cert(t.cert());
auto type = cert.type();
ui->infoStack->setHidden(type == SslCertificate::UnknownType || type == SslCertificate::OldEstEidType);
diff --git a/client/common_enums.h b/client/common_enums.h
index fdc828dbc..69c1b1764 100644
--- a/client/common_enums.h
+++ b/client/common_enums.h
@@ -76,13 +76,13 @@ enum Pages {
enum WarningType {
NoWarning = 0,
- CertExpiredWarning,
+ CertExpiredError,
CertExpiryWarning,
UnblockPin1Warning,
UnblockPin2Warning,
- InvalidSignatureWarning,
- InvalidTimestampWarning,
+ InvalidSignatureError,
+ InvalidTimestampError,
UnknownSignatureWarning,
UnknownTimestampWarning,
UnsupportedAsicSWarning,
diff --git a/client/images/icon_link.svg b/client/images/icon_link.svg
new file mode 100644
index 000000000..6dd9b2d44
--- /dev/null
+++ b/client/images/icon_link.svg
@@ -0,0 +1,3 @@
+
diff --git a/client/images/icon_ribbon_down.svg b/client/images/icon_ribbon_down.svg
deleted file mode 100644
index 44498bf78..000000000
--- a/client/images/icon_ribbon_down.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/client/images/icon_ribbon_up.svg b/client/images/icon_ribbon_up.svg
deleted file mode 100644
index 473b4ac5e..000000000
--- a/client/images/icon_ribbon_up.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/client/images/images.qrc b/client/images/images.qrc
index 8e674a3ba..e8ce1056d 100644
--- a/client/images/images.qrc
+++ b/client/images/images.qrc
@@ -37,6 +37,7 @@
icon_Krypto_hover.svg
icon_Krypto_small.svg
icon_Krypto.svg
+ icon_link.svg
icon_Minu_eID_hover.svg
icon_Minu_eID.svg
icon_radio.png
@@ -44,8 +45,6 @@
icon_remove_hover.svg
icon_remove.svg
icon_remove_pressed.svg
- icon_ribbon_down.svg
- icon_ribbon_up.svg
icon_Seaded.svg
icon_Seaded_hover.svg
intro_crypto-select_en.png
diff --git a/client/translations/en.ts b/client/translations/en.ts
index 529ea2902..e5145be27 100644
--- a/client/translations/en.ts
+++ b/client/translations/en.ts
@@ -3228,24 +3228,16 @@ Additional licenses and components
An empty file is attached to the container. Remove the empty file from the container to sign.
- Certificates have expired!
- Certificates have expired!
-
-
- You can find instructions on how to get a new document from
- You can find instructions on how to get a new document from
-
-
- here
- here
+ Certificates have expired!
+ Certificates have expired!
https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/
https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/
- Certificates expire soon!
- Certificates expire soon!
+ Certificates expire soon!
+ Certificates expire soon!
This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.
@@ -3256,18 +3248,4 @@ Additional licenses and components
This container contains CAdES signature. You are not allowed to add or remove signatures to this container.
-
- WarningRibbon
-
- %n message
-
- %n message
- %n messages
-
-
-
- Less
- Less
-
-
diff --git a/client/translations/et.ts b/client/translations/et.ts
index 542c9dfef..6acb2bfda 100644
--- a/client/translations/et.ts
+++ b/client/translations/et.ts
@@ -3227,25 +3227,17 @@ Täiendavad litsentsid ja komponendid
An empty file is attached to the container. Remove the empty file from the container to sign.
Ümbrikule on lisatud tühi fail. Allkirjastamiseks eemalda ümbrikust tühi fail.
-
- You can find instructions on how to get a new document from
- Juhised uue dokumendi taotlemiseks leiad
-
-
- here
- siit
-
https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/
https://www.politsei.ee/et/juhend/id-kaardi-taotlemine-taeiskasvanule/
- Certificates expire soon!
- Sertifikaadid aeguvad varsti!
+ Certificates expire soon!
+ Sertifikaadid aeguvad varsti!
- Certificates have expired!
- Sertifikaadid on aegunud!
+ Certificates have expired!
+ Sertifikaadid on aegunud!
This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.
@@ -3256,18 +3248,4 @@ Täiendavad litsentsid ja komponendid
Tegemist on CAdES allkirja sisaldava ümbrikuga. Sellele ümbrikule ei saa allkirja lisada ega eemaldada.
-
- WarningRibbon
-
- %n message
-
- %n teade
- %n teadet
-
-
-
- Less
- Vähem
-
-
diff --git a/client/translations/ru.ts b/client/translations/ru.ts
index 93c9afc45..a356c3514 100644
--- a/client/translations/ru.ts
+++ b/client/translations/ru.ts
@@ -3233,24 +3233,16 @@ Additional licenses and components
В контейнер добавлен пустой файл. Для подписания удалите из контейнера пустой файл.
- Certificates have expired!
- Срок действия сертификатов истек!
-
-
- You can find instructions on how to get a new document from
- Вы можете найти инструкции о том, как получить новый документ
-
-
- here
- здесь
+ Certificates have expired!
+ Срок действия сертификатов истек!
https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/
https://www.politsei.ee/ru/instruktsii/hodataystvo-o-vydache-id-karty-vzroslomu/
- Certificates expire soon!
- Срок действия сертификатов скоро истекает!
+ Certificates expire soon!
+ Срок действия сертификатов скоро истекает!
This ASiC-S container contains XAdES signature. You are not allowed to add or remove signatures to this container.
@@ -3261,19 +3253,4 @@ Additional licenses and components
Этот контейнер содержит подпись CAdES. К данному контейнеру нельзя добавить или удалить из него подпись.
-
- WarningRibbon
-
- %n message
-
- %n сообщение
- %n сообщения
- %n сообщения
-
-
-
- Less
- Меньше
-
-
diff --git a/client/widgets/ContainerPage.cpp b/client/widgets/ContainerPage.cpp
index 8fa79bc2b..f20391814 100644
--- a/client/widgets/ContainerPage.cpp
+++ b/client/widgets/ContainerPage.cpp
@@ -333,20 +333,20 @@ void ContainerPage::transition(DigiDoc* container)
}
for(auto i = errors.constBegin(); i != errors.constEnd(); ++i)
- emit warning(WarningText(i.key(), i.value()));
+ emit warning({i.key(), i.value()});
if(container->fileName().endsWith(QStringLiteral("ddoc"), Qt::CaseInsensitive))
- emit warning(UnsupportedDDocWarning);
+ emit warning({UnsupportedDDocWarning});
if(container->isAsicS())
- emit warning(UnsupportedAsicSWarning);
+ emit warning({UnsupportedAsicSWarning});
if(container->isCades())
- emit warning(UnsupportedAsicCadesWarning);
+ emit warning({UnsupportedAsicCadesWarning});
hasEmptyFile = false;
for (auto i = 0; i < container->documentModel()->rowCount(); i++)
{
if(container->documentModel()->fileSize(i) == 0)
{
- emit warning(EmptyFileWarning);
+ emit warning({EmptyFileWarning});
hasEmptyFile = true;
}
}
diff --git a/client/widgets/SignatureItem.cpp b/client/widgets/SignatureItem.cpp
index 596aac8e8..d3142d2b7 100644
--- a/client/widgets/SignatureItem.cpp
+++ b/client/widgets/SignatureItem.cpp
@@ -124,7 +124,7 @@ void SignatureItem::init()
ui->status = color(QLatin1String("green"), isValid) + ' ' + color(QLatin1String("#996C0B"), QStringLiteral("(%1)").arg(tr("Restrictions")));
break;
case DigiDocSignature::Invalid:
- ui->error = isSignature ? ria::qdigidoc4::InvalidSignatureWarning : ria::qdigidoc4::InvalidTimestampWarning;
+ ui->error = isSignature ? ria::qdigidoc4::InvalidSignatureError : ria::qdigidoc4::InvalidTimestampError;
ui->status = color(QLatin1String("red"), isSignature ? tr("Signature is not valid") : tr("Timestamp is not valid"));
break;
case DigiDocSignature::Unknown:
diff --git a/client/widgets/WarningItem.cpp b/client/widgets/WarningItem.cpp
index 1af1d8b1c..a3dc23368 100644
--- a/client/widgets/WarningItem.cpp
+++ b/client/widgets/WarningItem.cpp
@@ -20,31 +20,24 @@
#include "WarningItem.h"
#include "ui_WarningItem.h"
-#include "Styles.h"
#include "VerifyCert.h"
-#include
+#include
-WarningText::WarningText(QString text)
- : text(std::move(text))
-{}
-
-WarningText::WarningText(ria::qdigidoc4::WarningType warningType, int counter)
- : counter(counter)
- , warningType(warningType)
-{}
+using namespace ria::qdigidoc4;
WarningItem::WarningItem(WarningText warningText, QWidget *parent)
: StyledWidget(parent)
, ui(new Ui::WarningItem)
- , warnText(std::move(warningText))
+ , warnText(warningText)
{
ui->setupUi(this);
- ui->warningText->setFont(Styles::font(Styles::Regular, 14));
- ui->warningAction->setFont(Styles::font(Styles::Regular, 14, QFont::Bold));
lookupWarning();
- connect(ui->warningAction, &QPushButton::clicked, this, [this] {
- Q_EMIT WarningItem::linkActivated(ui->warningAction->property("link").toString());
+ connect(ui->warningAction, &QToolButton::clicked, this, [this] {
+ if(url.startsWith(QLatin1String("http")))
+ QDesktopServices::openUrl(QUrl(url));
+ else
+ Q_EMIT linkActivated(url);
});
}
@@ -55,7 +48,7 @@ WarningItem::~WarningItem()
int WarningItem::page() const
{
- return warnText.page;
+ return _page;
}
void WarningItem::changeEvent(QEvent* event)
@@ -65,114 +58,96 @@ void WarningItem::changeEvent(QEvent* event)
ui->retranslateUi(this);
lookupWarning();
}
- QWidget::changeEvent(event);
}
-void WarningItem::lookupWarning()
+void WarningItem::mousePressEvent(QMouseEvent */*event*/)
{
- auto link = [](const QString &url)
- {
- return QStringLiteral("%2.")
- .arg(url, tr("here"));
- };
+ // this warning should not be closed if there are zero-byte(empty) files in the container
+ if (warnText.type != EmptyFileWarning)
+ deleteLater();
+}
- switch(warnText.warningType)
+void WarningItem::lookupWarning()
+{
+ switch(warnText.type)
{
- case ria::qdigidoc4::CertExpiredWarning:
- warnText.text = QStringLiteral("%1 %2 %3")
- .arg(tr("Certificates have expired! "),
- tr("You can find instructions on how to get a new document from "),
- link(tr("https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/")));
- ui->warningText->setTextInteractionFlags(Qt::TextBrowserInteraction);
- ui->warningText->setOpenExternalLinks(true);
+ case CertExpiredError:
+ setObjectName("WarningItemError");
+ ui->warningText->setText(tr("Certificates have expired!"));
+ url = tr("https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/");
break;
- case ria::qdigidoc4::CertExpiryWarning:
- warnText.text = QStringLiteral("%1 %2 %3")
- .arg(tr("Certificates expire soon! "),
- tr("You can find instructions on how to get a new document from "),
- link(tr("https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/")));
- ui->warningText->setTextInteractionFlags(Qt::TextBrowserInteraction);
- ui->warningText->setOpenExternalLinks(true);
+ case CertExpiryWarning:
+ ui->warningText->setText(tr("Certificates expire soon!"));
+ url = tr("https://www.politsei.ee/en/instructions/applying-for-an-id-card-for-an-adult/");
break;
- case ria::qdigidoc4::UnblockPin1Warning:
- warnText.text = QStringLiteral("%1 %2").arg(VerifyCert::tr("PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.").arg(1), VerifyCert::tr("Unblock to reuse PIN%1.").arg(1));
- warnText.url = QStringLiteral("#unblock-PIN1");
- warnText.details = VerifyCert::tr("UNBLOCK");
+ case UnblockPin1Warning:
+ ui->warningText->setText(QStringLiteral("%1 %2").arg(
+ VerifyCert::tr("PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.").arg(1),
+ VerifyCert::tr("Unblock to reuse PIN%1.").arg(1)));
+ url = QStringLiteral("#unblock-PIN1");
+ ui->warningAction->setText(VerifyCert::tr("UNBLOCK"));
+ ui->warningAction->setAccessibleName(ui->warningAction->text().toLower());
break;
- case ria::qdigidoc4::UnblockPin2Warning:
- warnText.text = QStringLiteral("%1 %2").arg(VerifyCert::tr("PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.").arg(2), VerifyCert::tr("Unblock to reuse PIN%1.").arg(2));
- warnText.url = QStringLiteral("#unblock-PIN2");
- warnText.details = VerifyCert::tr("UNBLOCK");
+ case UnblockPin2Warning:
+ ui->warningText->setText(QStringLiteral("%1 %2").arg(
+ VerifyCert::tr("PIN%1 has been blocked because PIN%1 code has been entered incorrectly 3 times.").arg(2),
+ VerifyCert::tr("Unblock to reuse PIN%1.").arg(2)));
+ url = QStringLiteral("#unblock-PIN2");
+ ui->warningAction->setText(VerifyCert::tr("UNBLOCK"));
+ ui->warningAction->setAccessibleName(ui->warningAction->text().toLower());
break;
// SignDetails
- case ria::qdigidoc4::InvalidSignatureWarning:
- warnText.text = tr("%n signatures are not valid!", nullptr, warnText.counter);
- warnText.url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case InvalidSignatureError:
+ setObjectName("WarningItemError");
+ ui->warningText->setText(tr("%n signatures are not valid!", nullptr, warnText.counter));
+ url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::InvalidTimestampWarning:
- warnText.text = tr("%n timestamps are not valid!", nullptr, warnText.counter);
- warnText.url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case InvalidTimestampError:
+ setObjectName("WarningItemError");
+ ui->warningText->setText(tr("%n timestamps are not valid!", nullptr, warnText.counter));
+ url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::UnknownSignatureWarning:
- warnText.text = tr("%n signatures are unknown!", nullptr, warnText.counter);
- warnText.url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case UnknownSignatureWarning:
+ ui->warningText->setText(tr("%n signatures are unknown!", nullptr, warnText.counter));
+ url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::UnknownTimestampWarning:
- warnText.text = tr("%n timestamps are unknown!", nullptr, warnText.counter);
- warnText.url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case UnknownTimestampWarning:
+ ui->warningText->setText(tr("%n timestamps are unknown!", nullptr, warnText.counter));
+ url = tr("https://www.id.ee/en/article/digital-signing-and-electronic-signatures/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::UnsupportedAsicSWarning:
- warnText.text = tr("This ASiC-S container contains XAdES signature. "
- "You are not allowed to add or remove signatures to this container.");
- warnText.url = tr("https://www.id.ee/en/article/digidoc-container-format-life-cycle-2/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case UnsupportedAsicSWarning:
+ ui->warningText->setText(tr("This ASiC-S container contains XAdES signature. "
+ "You are not allowed to add or remove signatures to this container."));
+ url = tr("https://www.id.ee/en/article/digidoc-container-format-life-cycle-2/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::UnsupportedAsicCadesWarning:
- warnText.text = tr("This container contains CAdES signature. "
- "You are not allowed to add or remove signatures to this container.");
- warnText.url = tr("https://www.id.ee/en/article/digidoc-container-format-life-cycle-2/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case UnsupportedAsicCadesWarning:
+ ui->warningText->setText(tr("This container contains CAdES signature. "
+ "You are not allowed to add or remove signatures to this container."));
+ url = tr("https://www.id.ee/en/article/digidoc-container-format-life-cycle-2/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::UnsupportedDDocWarning:
- warnText.text = tr("The current file is a DigiDoc container that is not supported officially any longer. "
- "You are not allowed to add or remove signatures to this container.");
- warnText.url = tr("https://www.id.ee/en/article/digidoc-container-format-life-cycle-2/");
- warnText.details = tr("More information");
- warnText.page = ria::qdigidoc4::SignDetails;
+ case UnsupportedDDocWarning:
+ ui->warningText->setText(tr("The current file is a DigiDoc container that is not supported officially any longer. "
+ "You are not allowed to add or remove signatures to this container."));
+ url = tr("https://www.id.ee/en/article/digidoc-container-format-life-cycle-2/");
+ _page = SignDetails;
break;
- case ria::qdigidoc4::EmptyFileWarning:
- warnText.text = tr("An empty file is attached to the container. Remove the empty file from the container to sign.");
- warnText.page = ria::qdigidoc4::SignDetails;
- break;
- default:
+ case EmptyFileWarning:
+ ui->warningText->setText(tr("An empty file is attached to the container. "
+ "Remove the empty file from the container to sign."));
+ ui->warningAction->hide();
+ _page = SignDetails;
break;
+ default: break;
}
-
- auto setAccessibleName = [](QLabel *label) {
- QTextDocument doc;
- doc.setHtml(label->text().toLower());
- label->setAccessibleName(doc.toPlainText());
- };
-
- ui->warningText->setText(warnText.text);
- ui->warningAction->setText(warnText.details);
- ui->warningAction->setProperty("link", warnText.url);
- ui->warningAction->setAccessibleName(warnText.details.toLower());
- ui->warningAction->setHidden(warnText.details.isEmpty());
- setAccessibleName(ui->warningText);
}
-ria::qdigidoc4::WarningType WarningItem::warningType() const
+WarningType WarningItem::warningType() const
{
- return warnText.warningType;
+ return warnText.type;
}
diff --git a/client/widgets/WarningItem.h b/client/widgets/WarningItem.h
index cf9d39b1f..b6babc214 100644
--- a/client/widgets/WarningItem.h
+++ b/client/widgets/WarningItem.h
@@ -23,15 +23,9 @@
namespace Ui { class WarningItem; }
-
struct WarningText {
-
- QString text, details, url;
- int counter = 0, page = -1;
- ria::qdigidoc4::WarningType warningType = ria::qdigidoc4::NoWarning;
-
- WarningText(QString text);
- WarningText(ria::qdigidoc4::WarningType warningType, int counter = 0);
+ ria::qdigidoc4::WarningType type = ria::qdigidoc4::NoWarning;
+ int counter = 0;
};
@@ -50,9 +44,13 @@ class WarningItem final: public StyledWidget
void linkActivated(const QString& link);
private:
- void changeEvent(QEvent* event) final;
+ Q_DISABLE_COPY(WarningItem)
+ void changeEvent(QEvent *event) final;
+ void mousePressEvent(QMouseEvent *event) final;
void lookupWarning();
Ui::WarningItem *ui;
WarningText warnText;
+ QString url;
+ int _page = -1;
};
diff --git a/client/widgets/WarningItem.ui b/client/widgets/WarningItem.ui
index dbfb004cd..835242995 100644
--- a/client/widgets/WarningItem.ui
+++ b/client/widgets/WarningItem.ui
@@ -7,56 +7,49 @@
0
0
914
- 26
+ 40
914
- 26
-
-
-
-
- 16777215
- 45
+ 40
- border-bottom: 1px solid #B5AA92;
-background-color: #F8DDA7;
-color: #353739;
+ #WarningItem {
+background-color: #FAE7C9;
+}
+#WarningItemError {
+background-color: #FAC9C9;
+}
+QLabel, QToolButton {
+color: #003168;
+font-family: Roboto, Helvetica;
+font-size: 14px;
+}
0
- 6
+ 12
0
- 10
+ 12
- 1
+ 0
-
-
-
- Roboto
- 14
-
-
Qt::TabFocus
-
- border: none;
-
One signature is invalid
@@ -66,29 +59,39 @@ color: #353739;
-
-
-
-
- Roboto
- 14
- true
- true
-
-
+
PointingHandCursor
+
+ Qt::RightToLeft
+
- text-decoration: underline solid rgb(53, 55, 57);
+ text-decoration: underline solid #003168;
border: none;
- PushButton
+ More information
+
+
+
+ :/images/icon_link.svg:/images/icon_link.svg
+
+
+
+ 20
+ 20
+
+
+
+ Qt::ToolButtonTextBesideIcon
-
+
+
+
diff --git a/client/widgets/WarningList.cpp b/client/widgets/WarningList.cpp
index 37bd98808..e8a9e53a8 100644
--- a/client/widgets/WarningList.cpp
+++ b/client/widgets/WarningList.cpp
@@ -1,173 +1,58 @@
#include "WarningList.h"
-#include "MainWindow.h"
#include "WarningItem.h"
-#include "WarningRibbon.h"
-#include "../ui_MainWindow.h"
-
-#include
+#include
using namespace ria::qdigidoc4;
-WarningList::WarningList(Ui::MainWindow *main, QWidget *parent)
- : QObject(parent)
- , ui(main)
-{
- parent->installEventFilter(this);
-}
-
-bool WarningList::appearsOnPage(WarningItem *warning, int page)
-{
- return warning->page() == page || warning->page() == -1;
-}
+WarningList::WarningList(QWidget *parent)
+ : StyledWidget(parent)
+{}
void WarningList::clearMyEIDWarnings()
{
- static const QList warningTypes {CertExpiredWarning, CertExpiryWarning, UnblockPin1Warning, UnblockPin2Warning};
- for(auto *warning: warnings)
+ static const QList warningTypes {CertExpiredError, CertExpiryWarning, UnblockPin1Warning, UnblockPin2Warning};
+ for(auto *warning: findChildren())
{
- if(warningTypes.contains(warning->warningType()) || warning->page() == MyEid)
- closeWarning(warning);
+ if(warningTypes.contains(warning->warningType()))
+ warning->deleteLater();
}
- updateWarnings();
}
void WarningList::closeWarning(int warningType)
{
- for(auto *warning: warnings)
+ for(auto *warning: findChildren())
{
- if(warningType == warning->warningType())
- closeWarning(warning);
+ if(warning->warningType() == warningType)
+ warning->deleteLater();
}
- updateWarnings();
-}
-
-void WarningList::closeWarning(WarningItem *warning)
-{
- warnings.removeOne(warning);
- warning->deleteLater();
}
void WarningList::closeWarnings(int page)
{
- for(auto *warning: warnings)
+ for(auto *warning: findChildren())
{
if(warning->page() == page)
- closeWarning(warning);
+ warning->deleteLater();
}
- updateWarnings();
}
-bool WarningList::eventFilter(QObject *object, QEvent *event)
+void WarningList::showWarning(WarningText warningText)
{
- if(object != parent() || event->type() != QEvent::MouseButtonPress)
- return QObject::eventFilter(object, event);
-
- for(auto *warning: warnings)
- {
- if(warning->underMouse())
- {
- // this warning should be closed iff there are no zero-byte(empty) files in the container
- if (warning->warningType() == ria::qdigidoc4::EmptyFileWarning)
- {
- continue;
- }
-
- closeWarning(warning);
- break;
- }
- }
-
- if(ribbon && ribbon->underMouse())
- {
- ribbon->flip();
- updateRibbon(ui->startScreen->currentIndex(), ribbon->isExpanded());
- }
-
- updateWarnings();
- return QObject::eventFilter(object, event);
-}
-
-void WarningList::showWarning(const WarningText &warningText)
-{
- if(warningText.warningType)
- {
- for(auto *warning: warnings)
- {
- if(warning->warningType() == warningText.warningType)
- return;
- }
- }
- auto *warning = new WarningItem(warningText, ui->page);
- auto *layout = qobject_cast(ui->page->layout());
- warnings << warning;
+ if(!warningText.type)
+ return;
+ for(auto *warning: findChildren())
+ if(warning->warningType() == warningText.type)
+ return;
+ auto *warning = new WarningItem(warningText, this);
connect(warning, &WarningItem::linkActivated, this, &WarningList::warningClicked);
- layout->insertWidget(warnings.size(), warning);
- updateWarnings();
+ layout()->addWidget(warning);
}
-void WarningList::updateRibbon(int page, bool expanded)
-{
- short count = 0;
- for(auto *warning: warnings)
- {
- if(appearsOnPage(warning, page))
- {
- warning->setVisible(expanded || count < 3);
- count++;
- }
- }
- if (count > 1)
- {
- QWidget *parentWidget = qobject_cast(parent());
- QSize sizeBeforeAdjust = parentWidget->size();
- parentWidget->adjustSize();
- QSize sizeAfterAdjust = parentWidget->size();
- // keep the size set-up by user, if possible
- parentWidget->resize(sizeBeforeAdjust.width(), sizeBeforeAdjust.height() > sizeAfterAdjust.height() ? sizeBeforeAdjust.height() : sizeAfterAdjust.height());
- }
-}
-void WarningList::updateWarnings()
+void WarningList::updateWarnings(int page)
{
- int page = ui->startScreen->currentIndex();
- int count = 0;
- for(auto *warning: warnings)
- {
- if(appearsOnPage(warning, page))
- count++;
- else
- warning->hide();
- }
-
- if(!count)
- ui->topBarShadow->setStyleSheet(QStringLiteral("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #c8c8c8, stop: 1 #F4F5F6); \nborder: none;"));
- else
- ui->topBarShadow->setStyleSheet(QStringLiteral("background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #b5aa92, stop: 1 #F8DDA7); \nborder: none;"));
-
- if(count < 4)
- {
- if(ribbon)
- {
- delete ribbon;
- ribbon = nullptr;
- for(auto *warning: warnings)
- {
- if(appearsOnPage(warning, page))
- warning->show();
- }
- }
- }
- else if(!ribbon)
- {
- ribbon = new WarningRibbon(count - 3, ui->page);
- auto *layout = qobject_cast(ui->page->layout());
- layout->insertWidget(warnings.size() + 1, ribbon);
- ribbon->show();
- }
- else
- ribbon->setCount(count - 3);
-
- updateRibbon(page, !ribbon || ribbon->isExpanded());
+ for(auto *warning: findChildren())
+ warning->setVisible(warning->page() == page || warning->page() == -1);
}
diff --git a/client/widgets/WarningList.h b/client/widgets/WarningList.h
index a718f67e8..48e952de2 100644
--- a/client/widgets/WarningList.h
+++ b/client/widgets/WarningList.h
@@ -19,35 +19,22 @@
#pragma once
-#include
+#include "StyledWidget.h"
-namespace Ui { class MainWindow; }
-class WarningItem;
struct WarningText;
-class WarningRibbon;
-class WarningList: public QObject
+class WarningList: public StyledWidget
{
Q_OBJECT
public:
- explicit WarningList(Ui::MainWindow *main, QWidget *parent = nullptr);
+ explicit WarningList(QWidget *parent = nullptr);
void clearMyEIDWarnings();
void closeWarning(int warningType);
void closeWarnings(int page);
- void showWarning(const WarningText &warningText);
- void updateWarnings();
+ void showWarning(WarningText warningText);
+ void updateWarnings(int page);
signals:
void warningClicked(const QString &link);
-
-private:
- static bool appearsOnPage(WarningItem *warning, int page);
- void closeWarning(WarningItem *warning);
- bool eventFilter(QObject *object, QEvent *event) final;
- void updateRibbon(int page, bool expanded);
-
- WarningRibbon *ribbon = nullptr;
- QList warnings;
- Ui::MainWindow *ui;
};
diff --git a/client/widgets/WarningRibbon.cpp b/client/widgets/WarningRibbon.cpp
deleted file mode 100644
index effff1529..000000000
--- a/client/widgets/WarningRibbon.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * QDigiDoc4
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#include "WarningRibbon.h"
-#include "ui_WarningRibbon.h"
-
-#include "Styles.h"
-
-class WarningRibbon::Private: public Ui::WarningRibbon
-{
-public:
- int count = 0;
- bool expanded = false;
-};
-
-WarningRibbon::WarningRibbon(int count, QWidget *parent)
- : StyledWidget(parent)
- , ui(new Private)
-{
- ui->setupUi(this);
- ui->details->setFont(Styles::font(Styles::Regular, 12, QFont::DemiBold));
- setCount(count);
-}
-
-WarningRibbon::~WarningRibbon()
-{
- delete ui;
-}
-
-void WarningRibbon::flip()
-{
- ui->expanded = !ui->expanded;
- if(ui->expanded)
- {
- ui->leftImage->setStyleSheet(QStringLiteral("border: none; background-image: url(:/images/icon_ribbon_up.svg);"));
- ui->rightImage->setStyleSheet(QStringLiteral("border: none; background-image: url(:/images/icon_ribbon_up.svg);"));
- }
- else
- {
- ui->leftImage->setStyleSheet(QStringLiteral("border: none; background-image: url(:/images/icon_ribbon_down.svg);"));
- ui->rightImage->setStyleSheet(QStringLiteral("border: none; background-image: url(:/images/icon_ribbon_down.svg);"));
- }
- setCount(ui->count);
-}
-
-bool WarningRibbon::isExpanded() const
-{
- return ui->expanded;
-}
-
-void WarningRibbon::setCount(int count)
-{
- ui->count = count;
- if(ui->expanded)
- ui->details->setText(tr("Less"));
- else
- ui->details->setText(tr("%n message", nullptr, count));
-}
-
-void WarningRibbon::changeEvent(QEvent* event)
-{
- if (event->type() == QEvent::LanguageChange)
- {
- ui->retranslateUi(this);
- setCount(ui->count);
- }
- QWidget::changeEvent(event);
-}
diff --git a/client/widgets/WarningRibbon.h b/client/widgets/WarningRibbon.h
deleted file mode 100644
index 6685dbf54..000000000
--- a/client/widgets/WarningRibbon.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * QDigiDoc4
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#pragma once
-
-#include "StyledWidget.h"
-
-class WarningRibbon : public StyledWidget
-{
- Q_OBJECT
-
-public:
- WarningRibbon(int count, QWidget *parent = nullptr);
- ~WarningRibbon() final;
-
- void flip();
- bool isExpanded() const;
- void setCount(int count);
-
-protected:
- void changeEvent(QEvent* event) final;
-
-private:
- class Private;
- Private *ui;
-};
diff --git a/client/widgets/WarningRibbon.ui b/client/widgets/WarningRibbon.ui
deleted file mode 100644
index eb90a0c18..000000000
--- a/client/widgets/WarningRibbon.ui
+++ /dev/null
@@ -1,146 +0,0 @@
-
-
- WarningRibbon
-
-
-
- 0
- 0
- 914
- 21
-
-
-
-
- 914
- 21
-
-
-
-
- 16777215
- 21
-
-
-
- padding: 0px 0px 0px 6px;
-border: solid #B5AA92;
-border-width: 0px 0px 1px 0px;
-background-color: #F0BF72;
-color: #353739;
-
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 1
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 20
- 20
-
-
-
- border: none; background-image: url(:/images/icon_ribbon_down.svg);
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 50
- 0
-
-
-
-
- 100
- 16777215
-
-
-
-
- Roboto
- 12
- false
- false
-
-
-
- color:#353739; border: none; background-color: #F0BF72;
-
-
- %n message
-
-
- Qt::AlignCenter
-
-
- true
-
-
-
- -
-
-
-
- 20
- 20
-
-
-
- border: none; background-image: url(:/images/icon_ribbon_down.svg);
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
-
-
-
-
-