From ce13feab13f7cb3cbe05ab22682a8817765fbe66 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Fri, 23 May 2025 12:57:48 +0300 Subject: [PATCH 1/3] Implement new Language selection menu WE2-990 Signed-off-by: Raul Metsma --- src/ui/CMakeLists.txt | 4 + src/ui/dark.qss | 7 - src/ui/dialog.ui | 17 -- src/ui/languageselect.cpp | 64 +++++++ src/ui/languageselect.hpp | 43 +++++ src/ui/languageselect.qss | 21 +++ src/ui/languageselect.ui | 372 ++++++++++++++++++++++++++++++++++++++ src/ui/translations/cs.ts | 24 +++ src/ui/translations/de.ts | 24 +++ src/ui/translations/en.ts | 24 +++ src/ui/translations/et.ts | 24 +++ src/ui/translations/fi.ts | 26 ++- src/ui/translations/fr.ts | 24 +++ src/ui/translations/hr.ts | 26 ++- src/ui/translations/nl.ts | 24 +++ src/ui/translations/ru.ts | 24 +++ src/ui/translations/sk.ts | 24 +++ src/ui/webeiddialog.cpp | 76 +------- 18 files changed, 755 insertions(+), 93 deletions(-) create mode 100644 src/ui/languageselect.cpp create mode 100644 src/ui/languageselect.hpp create mode 100644 src/ui/languageselect.qss create mode 100644 src/ui/languageselect.ui diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index 1870a02d..30f0e63d 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -1,6 +1,9 @@ add_library(ui STATIC certificatewidget.cpp certificatewidget.hpp + languageselect.cpp + languageselect.hpp + languageselect.ui punycode.hpp ui.cpp webeiddialog.cpp @@ -12,6 +15,7 @@ file(GLOB FONTS fonts/*.ttf) qt_add_resources(ui resources BASE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX / FILES ../../install/appicon_128.png dark.qss + languageselect.qss ${IMAGES} ${FONTS} ) diff --git a/src/ui/dark.qss b/src/ui/dark.qss index eb12ec47..c40ee360 100644 --- a/src/ui/dark.qss +++ b/src/ui/dark.qss @@ -41,13 +41,6 @@ background-image: url(:images/down_dark.svg); #langButton::hover { background-color: #4E4E53; } -#langMenu { -border-color: #4E4E53; -background-color: #4E4E53; -} -#langMenu > QPushButton { -color: #FFFFFF; -} CertificateButton, CertificateWidget { border-color: #4E4E53; } diff --git a/src/ui/dialog.ui b/src/ui/dialog.ui index 6d222049..4f97d404 100644 --- a/src/ui/dialog.ui +++ b/src/ui/dialog.ui @@ -83,23 +83,6 @@ background-image: url(:images/down.svg); #langButton::hover { background-color: #EFEFEF; } -#langMenu { -border: 3px solid #EFEFEF; -border-radius: 3px; -background-color: #EFEFEF; -} -#langMenu > QPushButton { -color: #003168; -border: 0px; -max-height: 22px; -padding-left: 7px; -padding-right: 6px; -font-size: 14px; -text-align: left; -} -#langMenu > QPushButton:checked { -font-weight: bold; -} CertificateButton, CertificateWidget { border: 1px solid rgba(0,49,104,0.1); border-radius: 4px; diff --git a/src/ui/languageselect.cpp b/src/ui/languageselect.cpp new file mode 100644 index 00000000..17d867b5 --- /dev/null +++ b/src/ui/languageselect.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2020-2024 Estonian Information System Authority + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "languageselect.hpp" +#include "ui_languageselect.h" + +#include "application.hpp" + +#include +#include +#include + +LanguageSelect::LanguageSelect(QWidget* parent) : + QDialog(parent), ui(std::make_unique()) +{ + ui->setupUi(this); + if (Application::isDarkTheme()) { + if (QFile f(QStringLiteral(":languageselect.qss")); f.open(QFile::ReadOnly | QFile::Text)) { + style()->unpolish(this); + setStyleSheet(styleSheet() + QTextStream(&f).readAll()); + style()->polish(this); + } + } + auto current = QSettings().value(QStringLiteral("lang")).toString(); + if (auto* btn = findChild(current)) + btn->setChecked(true); + connect(ui->langGroup, qOverload(&QButtonGroup::buttonClicked), this, + [this](QAbstractButton* action) { + QSettings().setValue(QStringLiteral("lang"), action->objectName()); + qApp->loadTranslations(); + ui->retranslateUi(this); + }); + connect(ui->select, &QPushButton::clicked, this, &LanguageSelect::accept); + connect(ui->cancel, &QPushButton::clicked, this, [this, current] { + if (current.isEmpty()) { + QSettings().remove(QStringLiteral("lang")); + } else { + QSettings().setValue(QStringLiteral("lang"), current); + } + qApp->loadTranslations(); + reject(); + }); +} + +LanguageSelect::~LanguageSelect() noexcept = default; diff --git a/src/ui/languageselect.hpp b/src/ui/languageselect.hpp new file mode 100644 index 00000000..40c631aa --- /dev/null +++ b/src/ui/languageselect.hpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2020-2024 Estonian Information System Authority + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#pragma once + +#include + +#include + +namespace Ui +{ +class LanguageSelect; +} + +class LanguageSelect : public QDialog +{ + Q_OBJECT +public: + explicit LanguageSelect(QWidget* parent = nullptr); + ~LanguageSelect() noexcept; + +private: + std::unique_ptr ui; +}; diff --git a/src/ui/languageselect.qss b/src/ui/languageselect.qss new file mode 100644 index 00000000..844970bf --- /dev/null +++ b/src/ui/languageselect.qss @@ -0,0 +1,21 @@ + +#LanguageSelect { +background-color: #232325; +} +#label { +color: white; +} +QPushButton { +color: #FF5C79; +border-color: #FF5C79; +} +QPushButton:hover, QPushButton:pressed { +background-color: #232325; +} +QToolButton { +color: white; +border-color: #92A0B7; +} +QToolButton:checked { +background-color: #415982; +} diff --git a/src/ui/languageselect.ui b/src/ui/languageselect.ui new file mode 100644 index 00000000..a657ed75 --- /dev/null +++ b/src/ui/languageselect.ui @@ -0,0 +1,372 @@ + + + LanguageSelect + + + + 0 + 0 + 540 + 438 + + + + Select language + + + #LanguageSelect { +background-color: white; +} +#label { +font-family: Roboto, Helvetica; +font-size: 20px; +font-weight: 700; +color: #003168; +} +QAbstractButton { +font-family: Roboto, Helvetica; +font-size: 14px; +font-weight: 700; +} +QToolButton { +color: #07142A; +border: 1px solid #AEB9CA; +border-radius: 5px; +padding: 16px; +} +QToolButton:checked { +border-color: #003168; +background-color: #EAF1F8 +} +QPushButton { +color: #AD2A45; +border: 1px solid #AD2A45; +border-radius: 4px; +padding: 11px 12px; +} +QPushButton:hover { +background-color: #F5EBED; +} +QPushButton:pressed { +background-color: #E1C1C6; +} +QPushButton::default { +color: white; +border-color: #2F70B6; +background-color: #2F70B6; +} +QPushButton::default:hover { +border-color: #2B66A6; +background-color: #2B66A6; +} +QPushButton::default:pressed { +border-color: #215081; +background-color: #215081; +} + + + + QLayout::SetFixedSize + + + 40 + + + 32 + + + 40 + + + 32 + + + 0 + + + 40 + + + + + Select language + + + Qt::AlignCenter + + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Eesti keel + + + true + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + English + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Русский + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Suomi + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Hrvatska + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Deutsch + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Française + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Nederlands + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Čeština + + + true + + + langGroup + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + Slovenština + + + true + + + langGroup + + + + + + + + + PointingHandCursor + + + Cancel + + + false + + + + + + + Qt::Horizontal + + + + 317 + 20 + + + + + + + + PointingHandCursor + + + Select + + + true + + + + + + + + + + + diff --git a/src/ui/translations/cs.ts b/src/ui/translations/cs.ts index a792748e..93fe5a70 100644 --- a/src/ui/translations/cs.ts +++ b/src/ui/translations/cs.ts @@ -38,6 +38,21 @@ PIN zablokován + + LanguageSelect + + Cancel + Zrušit + + + Select language + Vyberte jazyk + + + Select + Vybrat + + WebEidDialog @@ -293,5 +308,14 @@ Active language CS + + PIN entry disabled + Zadávání PINu je zakázáno. + + + English + Active language accessible + Čeština + diff --git a/src/ui/translations/de.ts b/src/ui/translations/de.ts index 34f50dd2..c676935c 100644 --- a/src/ui/translations/de.ts +++ b/src/ui/translations/de.ts @@ -38,6 +38,21 @@ PIN gesperrt + + LanguageSelect + + Cancel + Abbrechen + + + Select language + Sprache auswählen + + + Select + Auswählen + + WebEidDialog @@ -291,5 +306,14 @@ Active language DE + + PIN entry disabled + PIN-Eingabe deaktiviert. + + + English + Active language accessible + Deutsch + diff --git a/src/ui/translations/en.ts b/src/ui/translations/en.ts index 899f3838..00be86c5 100644 --- a/src/ui/translations/en.ts +++ b/src/ui/translations/en.ts @@ -38,6 +38,21 @@ Pin locked + + LanguageSelect + + Cancel + Cancel + + + Select language + Select language + + + Select + Select + + WebEidDialog @@ -291,5 +306,14 @@ Active language EN + + PIN entry disabled + PIN entry disabled + + + English + Active language accessible + English + diff --git a/src/ui/translations/et.ts b/src/ui/translations/et.ts index 9f816f59..2b18d689 100644 --- a/src/ui/translations/et.ts +++ b/src/ui/translations/et.ts @@ -38,6 +38,21 @@ PIN-kood on lukus + + LanguageSelect + + Cancel + Katkesta + + + Select language + Vali keel + + + Select + Vali + + WebEidDialog @@ -291,5 +306,14 @@ Active language ET + + PIN entry disabled + PIN'i sisestamine on keelatud. + + + English + Active language accessible + Eesti + diff --git a/src/ui/translations/fi.ts b/src/ui/translations/fi.ts index 8e76e203..6a240b4e 100644 --- a/src/ui/translations/fi.ts +++ b/src/ui/translations/fi.ts @@ -38,6 +38,21 @@ Pin lukittu + + LanguageSelect + + Cancel + Peruuta + + + Select language + Valitse kieli + + + Select + Valitse + + WebEidDialog @@ -284,12 +299,21 @@ Please enter PIN for signing in the PIN dialog window that opens. - Syötä PIN kirjautumista varten avautuvaan PIN-valintaikkunaan. + Syötä PIN allekirjoittamista varten avautuvaan PIN-valintaikkunaan. EN Active language FI + + PIN entry disabled + PIN-koodin syöttö ei ole käytössä. + + + English + Active language accessible + Suomi + diff --git a/src/ui/translations/fr.ts b/src/ui/translations/fr.ts index fd326d96..0995deb3 100644 --- a/src/ui/translations/fr.ts +++ b/src/ui/translations/fr.ts @@ -38,6 +38,21 @@ Pin bloquée + + LanguageSelect + + Cancel + Annuler + + + Select language + Sélectionner la langue + + + Select + Sélectionner + + WebEidDialog @@ -291,5 +306,14 @@ Active language FR + + PIN entry disabled + Saisie du code PIN désactivée. + + + English + Active language accessible + Française + diff --git a/src/ui/translations/hr.ts b/src/ui/translations/hr.ts index d21d019c..de2e6397 100644 --- a/src/ui/translations/hr.ts +++ b/src/ui/translations/hr.ts @@ -38,6 +38,21 @@ <b>%1</b><br />Izdavatelj: %2<br />Vrijedi: %3 do %4%5 + + LanguageSelect + + Cancel + Prekid + + + Select language + Odabir jezika + + + Select + Odabir + + WebEidDialog @@ -286,12 +301,21 @@ Please enter PIN for signing in the PIN dialog window that opens. - Unesite PIN za prijavu u dijaloški prozor PIN-a koji se otvara. + Unesite PIN za potpisivanje u dijaloški prozor PIN-a koji se otvara. EN Active language HR + + PIN entry disabled + Unos PIN-a onemogućen. + + + English + Active language accessible + Hrvatska + diff --git a/src/ui/translations/nl.ts b/src/ui/translations/nl.ts index 18a89a3c..66320b14 100644 --- a/src/ui/translations/nl.ts +++ b/src/ui/translations/nl.ts @@ -38,6 +38,21 @@ PIN geblokkeerd + + LanguageSelect + + Cancel + Annuleer + + + Select language + Selecteer taal + + + Select + Selecteer + + WebEidDialog @@ -291,5 +306,14 @@ Active language NL + + PIN entry disabled + PIN-invoer uitgeschakeld. + + + English + Active language accessible + Nederlands + diff --git a/src/ui/translations/ru.ts b/src/ui/translations/ru.ts index 87e52566..f5b60f8c 100644 --- a/src/ui/translations/ru.ts +++ b/src/ui/translations/ru.ts @@ -38,6 +38,21 @@ PIN-код заблокирован + + LanguageSelect + + Cancel + Прервать + + + Select language + Выберите язык + + + Select + Выбрать + + WebEidDialog @@ -293,5 +308,14 @@ Active language RU + + PIN entry disabled + Ввод PIN запрещён. + + + English + Active language accessible + Русский + diff --git a/src/ui/translations/sk.ts b/src/ui/translations/sk.ts index 759935fd..bbf6bce2 100644 --- a/src/ui/translations/sk.ts +++ b/src/ui/translations/sk.ts @@ -38,6 +38,21 @@ PIN zablokovaný + + LanguageSelect + + Cancel + Zrušiť + + + Select language + Vyberte jazyk + + + Select + Vybrať + + WebEidDialog @@ -293,5 +308,14 @@ Active language SK + + PIN entry disabled + Zadávanie PIN je zakázané. + + + English + Active language accessible + Slovenština + diff --git a/src/ui/webeiddialog.cpp b/src/ui/webeiddialog.cpp index 4f381ed8..3b9c6e8a 100644 --- a/src/ui/webeiddialog.cpp +++ b/src/ui/webeiddialog.cpp @@ -22,6 +22,7 @@ #include "webeiddialog.hpp" #include "application.hpp" +#include "languageselect.hpp" #include "punycode.hpp" #include "ui_dialog.h" @@ -43,8 +44,6 @@ #include #endif -#include - #if QT_VERSION < QT_VERSION_CHECK(6, 4, 0) constexpr inline QLatin1String operator"" _L1(const char* str, size_t size) noexcept { @@ -92,65 +91,9 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) ui->langButton = new QToolButton(this); ui->langButton->setObjectName("langButton"); - static const std::vector> LANG_LIST { - {QStringLiteral("et"), QStringLiteral("Eesti")}, - {QStringLiteral("en"), QStringLiteral("English")}, - {QStringLiteral("ru"), QStringLiteral("Русский")}, - {QStringLiteral("fi"), QStringLiteral("Suomi")}, - {QStringLiteral("hr"), QStringLiteral("Hrvatska")}, - {QStringLiteral("de"), QStringLiteral("Deutsch")}, - {QStringLiteral("fr"), QStringLiteral("Française")}, - {QStringLiteral("nl"), QStringLiteral("Nederlands")}, - {QStringLiteral("cs"), QStringLiteral("Čeština")}, - {QStringLiteral("sk"), QStringLiteral("Slovenština")}}; ui->langButton->setText(tr("EN", "Active language")); - if (auto i = std::find_if(LANG_LIST.cbegin(), LANG_LIST.cend(), - [lang = ui->langButton->text().toLower()](const auto& elem) { - return elem.first == lang; - }); - i != LANG_LIST.cend()) { - ui->langButton->setAccessibleName(i->second); - } - connect(ui->langButton, &QToolButton::clicked, this, [this] { - if (auto* menu = findChild(QStringLiteral("langMenu"))) { - menu->deleteLater(); - return; - } - auto* menu = new QWidget(this); - menu->setObjectName("langMenu"); - auto* layout = new QGridLayout(menu); - layout->setContentsMargins(1, 1, 1, 1); - layout->setHorizontalSpacing(1); -#ifndef Q_OS_DARWIN - layout->setVerticalSpacing(1); -#endif - layout->setSizeConstraint(QLayout::SetFixedSize); - auto* langGroup = new QButtonGroup(menu); - langGroup->setExclusive(true); - int i {}; - for (const auto& [lang, title] : LANG_LIST) { - auto* action = new QPushButton(menu); - action->setText(title); - action->setProperty("lang", lang); - action->setAutoDefault(false); - layout->addWidget(action, i / 2, i % 2); - langGroup->addButton(action); - action->setCheckable(true); - action->setChecked(lang == ui->langButton->text().toLower()); - action->setMinimumSize(action->sizeHint() + QSize(1, 0)); - ++i; - } - menu->show(); - menu->move(ui->langButton->geometry().bottomRight() - menu->geometry().topRight() - + QPoint(0, 2)); - connect(langGroup, qOverload(&QButtonGroup::buttonClicked), menu, - [this, menu](QAbstractButton* action) { - QSettings().setValue(QStringLiteral("lang"), action->property("lang")); - ui->langButton->setText(action->property("lang").toString().toUpper()); - qApp->loadTranslations(); - menu->deleteLater(); - }); - }); + ui->langButton->setAccessibleName(tr("English", "Active language accessible")); + connect(ui->langButton, &QToolButton::clicked, this, [] { LanguageSelect().exec(); }); ui->pinInput->setAttribute(Qt::WA_MacShowFocusRect, false); auto pinInputFont = ui->pinInput->font(); @@ -171,7 +114,8 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) if (auto* button = qobject_cast(ui->selectionGroup->checkedButton())) { ui->lockedWarning->setHidden(button->certificateInfo().cardActive); - ui->okButton->setEnabled(currentCommand == CommandType::AUTHENTICATE || button->certificateInfo().cardActive); + ui->okButton->setEnabled(currentCommand == CommandType::AUTHENTICATE + || button->certificateInfo().cardActive); } ui->okButton->setFocus(); }); @@ -525,14 +469,11 @@ bool WebEidDialog::event(QEvent* event) switch (event->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); + ui->langButton->setText(tr("EN", "Active language")); + ui->langButton->setAccessibleName(tr("English", "Active language accessible")); emit languageChange(); resizeHeight(); break; - case QEvent::MouseButtonRelease: - if (auto* w = findChild(QStringLiteral("langMenu"))) { - w->deleteLater(); - } - break; case QEvent::Resize: ui->langButton->move(width() - ui->langButton->width() - 20, ui->pageStack->pos().y() - 20); break; @@ -666,7 +607,8 @@ void WebEidDialog::setupPinPadProgressBarAndEmitWait(const EidCertificateAndPinI void WebEidDialog::setupPinInput(const EidCertificateAndPinInfo& certAndPinInfo) { ui->lockedWarning->setHidden(certAndPinInfo.cardActive); - setupPinPrompt(certAndPinInfo.pinInfo, currentCommand == CommandType::AUTHENTICATE || certAndPinInfo.cardActive); + setupPinPrompt(certAndPinInfo.pinInfo, + currentCommand == CommandType::AUTHENTICATE || certAndPinInfo.cardActive); // The allowed character ranges are from the SafeNet eToken guide: // 1. English uppercase letters (ASCII 0x41...0x5A). // 2. English lowercase letters (ASCII 0x61...0x7A). From c7ae6803d47629d34f0a6c99525aacd9f0272603 Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Fri, 23 May 2025 14:36:40 +0300 Subject: [PATCH 2/3] Update main button UI WE2-991 Signed-off-by: Raul Metsma --- src/ui/dark.qss | 33 ++-------------- src/ui/dialog.ui | 77 ++++++++++++++----------------------- src/ui/images/arrow.svg | 4 -- src/ui/images/help.svg | 8 ---- src/ui/images/help_dark.svg | 8 ---- src/ui/images/link.svg | 3 ++ src/ui/webeiddialog.cpp | 1 - 7 files changed, 35 insertions(+), 99 deletions(-) delete mode 100644 src/ui/images/arrow.svg delete mode 100644 src/ui/images/help.svg delete mode 100644 src/ui/images/help_dark.svg create mode 100644 src/ui/images/link.svg diff --git a/src/ui/dark.qss b/src/ui/dark.qss index c40ee360..fda55a34 100644 --- a/src/ui/dark.qss +++ b/src/ui/dark.qss @@ -3,36 +3,11 @@ background-color: #232325; color: white; } QPushButton { -border-color: #4E4E53; -background-color: #4E4E53; -} -QPushButton::disabled { -border-color: #27272A; -background-color: #27272A; -} -QPushButton::hover { -background-color: #76767B; -border-color: #76767B; -} -QPushButton::focus { -background-color: #76767B; -border-color: #DEDEDE; -} -QPushButton:default { -background-color: #113F8E; -border-color: #113F8E; +color: #FF5C79; +border-color: #FF5C79; } -QPushButton:default::disabled { -background-color: #15213E; -border-color: #15213E; -} -QPushButton:default::hover { -background-color: #008EEA; -border-color: #008EEA; -} -QPushButton:default::focus { -background-color: #008EEA; -border-color: #DEDEDE; +QPushButton:hover, QPushButton:pressed { +background-color: #232325; } #langButton { color: #FFFFFF; diff --git a/src/ui/dialog.ui b/src/ui/dialog.ui index 4f97d404..7d021372 100644 --- a/src/ui/dialog.ui +++ b/src/ui/dialog.ui @@ -27,43 +27,32 @@ font-family: "Roboto"; color: black; } QPushButton { -font-size: 17px; -border: 3px solid #EFEFEF; -border-radius: 3px; -height: 39px; -padding-left: 17px; -padding-right: 17px; -min-width: 30px; -background-color: #EFEFEF; -} -QPushButton::disabled { -background-color: #FAFAFA; -border-color: #FAFAFA; +color: #AD2A45; +border: 1px solid #AD2A45; +border-radius: 4px; +padding: 11px 12px; +font-family: Roboto, Helvetica; +font-size: 14px; +font-weight: 700; } -QPushButton::hover { -background-color: #DEDEDE; -border-color: #DEDEDE; +QPushButton:hover { +background-color: #F5EBED; } -QPushButton::focus { -background-color: #DEDEDE; -border-color: #76767B; +QPushButton:pressed { +background-color: #E1C1C6; } -QPushButton:default { +QPushButton::default, #helpButton { color: white; -background-color: #113F8E; -border-color: #113F8E; -} -QPushButton:default::disabled { -background-color: #B7C5DD; -border-color: #B7C5DD; +border-color: #2F70B6; +background-color: #2F70B6; } -QPushButton:default::hover { -background-color: #003168; -border-color: #003168 +QPushButton::default:hover, #helpButton:hover { +border-color: #2B66A6; +background-color: #2B66A6; } -QPushButton:default::focus { -background-color: #003168; -border-color: #008EEA; +QPushButton::default:pressed, #helpButton:pressed { +border-color: #215081; +background-color: #215081; } #langButton { color: #003168; @@ -166,9 +155,6 @@ border-radius: 3px; #fatalErrorLabel, #aboutAlert { color: #CD2541; } -#helpButton { -color: #003168; -} #aboutVersion { color: #76767B; } @@ -896,21 +882,24 @@ border-radius: 4px; PointingHandCursor + + Qt::RightToLeft + Help - :/images/help.svg:/images/help.svg + :/images/link.svg:/images/link.svg - 30 - 26 + 16 + 16 - - false + + true @@ -922,16 +911,6 @@ border-radius: 4px; Confirm - - - :/images/arrow.svg:/images/arrow.svg - - - - 20 - 16 - - true diff --git a/src/ui/images/arrow.svg b/src/ui/images/arrow.svg deleted file mode 100644 index 1a6a0997..00000000 --- a/src/ui/images/arrow.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/ui/images/help.svg b/src/ui/images/help.svg deleted file mode 100644 index c9fe386e..00000000 --- a/src/ui/images/help.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/ui/images/help_dark.svg b/src/ui/images/help_dark.svg deleted file mode 100644 index 0388ea38..00000000 --- a/src/ui/images/help_dark.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/ui/images/link.svg b/src/ui/images/link.svg new file mode 100644 index 00000000..b576d24b --- /dev/null +++ b/src/ui/images/link.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/ui/webeiddialog.cpp b/src/ui/webeiddialog.cpp index 3b9c6e8a..74afb7a3 100644 --- a/src/ui/webeiddialog.cpp +++ b/src/ui/webeiddialog.cpp @@ -79,7 +79,6 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) ui->cardChipIcon->setPixmap(pixmap("no-id-card"_L1)); ui->fatalErrorIcon->setPixmap(pixmap("fatal"_L1)); ui->aboutIcon->setPixmap(pixmap("fatal"_L1)); - ui->helpButton->setIcon(QIcon(QStringLiteral(":/images/help_dark.svg"))); } } setWindowFlag(Qt::CustomizeWindowHint); From 6b5b80f46f3d753c9767239fc8e0e6b84d3c694f Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Mon, 26 May 2025 21:37:30 +0300 Subject: [PATCH 3/3] Update icons WE2-993 Signed-off-by: Raul Metsma --- src/ui/certificatewidget.cpp | 35 +--------- src/ui/certificatewidget.hpp | 4 -- src/ui/dark.qss | 1 - src/ui/dialog.ui | 110 ++++++------------------------ src/ui/images/cardreader.svg | 4 -- src/ui/images/cardreader_dark.svg | 5 -- src/ui/images/down.svg | 3 - src/ui/images/down_dark.svg | 3 - src/ui/images/fatal.svg | 3 - src/ui/images/fatal_dark.svg | 3 - src/ui/images/id-card.svg | 13 +--- src/ui/images/id-card_dark.svg | 13 +--- src/ui/images/lang.svg | 3 + src/ui/images/lang_dark.svg | 3 + src/ui/images/left.svg | 3 - src/ui/images/no-id-card.svg | 8 +-- src/ui/images/no-id-card_dark.svg | 8 +-- src/ui/images/origin.svg | 7 -- src/ui/images/origin_dark.svg | 7 -- src/ui/images/wait.svg | 10 +-- src/ui/images/wait_dark.svg | 5 ++ src/ui/webeiddialog.cpp | 39 ++++++----- 22 files changed, 70 insertions(+), 220 deletions(-) delete mode 100644 src/ui/images/cardreader.svg delete mode 100644 src/ui/images/cardreader_dark.svg delete mode 100644 src/ui/images/down.svg delete mode 100644 src/ui/images/down_dark.svg delete mode 100644 src/ui/images/fatal.svg delete mode 100644 src/ui/images/fatal_dark.svg create mode 100644 src/ui/images/lang.svg create mode 100644 src/ui/images/lang_dark.svg delete mode 100644 src/ui/images/left.svg delete mode 100644 src/ui/images/origin.svg delete mode 100644 src/ui/images/origin_dark.svg create mode 100644 src/ui/images/wait_dark.svg diff --git a/src/ui/certificatewidget.cpp b/src/ui/certificatewidget.cpp index 9699ef16..b199521f 100644 --- a/src/ui/certificatewidget.cpp +++ b/src/ui/certificatewidget.cpp @@ -44,18 +44,14 @@ inline QString displayInRed(const QString& text) // support screen readers. CertificateWidgetInfo::CertificateWidgetInfo(QWidget* self) : - icon(new QLabel(self)), info(new QLabel(self)), warnIcon(new QLabel(self)), + icon(new QLabel(self)), info(new QLabel(self)), warn(new QLabel(CertificateWidget::tr("Pin locked"), self)) { if (Application::isDarkTheme()) { icon->setPixmap(QStringLiteral(":/images/id-card_dark.svg")); - warnIcon->setPixmap(QStringLiteral(":/images/fatal_dark.svg")); } else { icon->setPixmap(QStringLiteral(":/images/id-card.svg")); - warnIcon->setPixmap(QStringLiteral(":/images/fatal.svg")); } - warnIcon->hide(); - warnIcon->installEventFilter(self); warn->setObjectName(QStringLiteral("warn")); warn->hide(); auto* layout = new QHBoxLayout(self); @@ -63,10 +59,8 @@ CertificateWidgetInfo::CertificateWidgetInfo(QWidget* self) : layout->setSpacing(10); layout->addWidget(icon); layout->addWidget(info, 1); - layout->addWidget(warnIcon); auto* warnLayout = new QHBoxLayout; warnLayout->setSpacing(6); - warnLayout->addWidget(warnIcon); warnLayout->addWidget(warn); layout->addItem(warnLayout); } @@ -86,14 +80,6 @@ std::tuple CertificateWidgetInfo::certData() certAndPinInfo.certificate.expiryDate().date().toString(Qt::ISODate)}; } -void CertificateWidgetInfo::drawWarnIcon() -{ - QPainter p(warnIcon); - QRect cr = warnIcon->contentsRect(); - cr.adjust(warnIcon->margin(), warnIcon->margin(), -warnIcon->margin(), -warnIcon->margin()); - warnIcon->style()->drawItemPixmap(&p, cr, Qt::AlignCenter, warnIcon->pixmap()); -} - void CertificateWidgetInfo::setCertificateInfo(const EidCertificateAndPinInfo& cardCertPinInfo) { warn->setText(CertificateWidget::tr("Pin locked")); @@ -113,7 +99,6 @@ void CertificateWidgetInfo::setCertificateInfo(const EidCertificateAndPinInfo& c .arg(subject, issuer, effectiveDate, expiryDate, warning)); info->parentWidget()->setDisabled(certInfo.notEffective || certInfo.isExpired || cardCertPinInfo.pinInfo.pinIsBlocked()); - warnIcon->setVisible(warning.isEmpty() && cardCertPinInfo.pinInfo.pinIsBlocked()); warn->setVisible(warning.isEmpty() && cardCertPinInfo.pinInfo.pinIsBlocked()); } @@ -127,15 +112,6 @@ CertificateWidget::CertificateWidget(QWidget* parent) : QWidget(parent), Certifi info->setFocusPolicy(Qt::TabFocus); } -bool CertificateWidget::eventFilter(QObject* object, QEvent* event) -{ - if (qobject_cast(object) && event->type() == QEvent::Paint) { - drawWarnIcon(); - return true; - } - return QWidget::eventFilter(object, event); -} - void CertificateWidget::paintEvent(QPaintEvent* /*event*/) { QPainter p(this); @@ -156,15 +132,6 @@ CertificateButton::CertificateButton(const EidCertificateAndPinInfo& cardCertPin setCertificateInfo(cardCertPinInfo); } -bool CertificateButton::eventFilter(QObject* object, QEvent* event) -{ - if (qobject_cast(object) && event->type() == QEvent::Paint) { - drawWarnIcon(); - return true; - } - return QAbstractButton::eventFilter(object, event); -} - void CertificateButton::setCertificateInfo(const EidCertificateAndPinInfo& cardCertPinInfo) { CertificateWidgetInfo::setCertificateInfo(cardCertPinInfo); diff --git a/src/ui/certificatewidget.hpp b/src/ui/certificatewidget.hpp index 906f81d6..f7b0257c 100644 --- a/src/ui/certificatewidget.hpp +++ b/src/ui/certificatewidget.hpp @@ -41,12 +41,10 @@ class CertificateWidgetInfo explicit CertificateWidgetInfo(QWidget* self); Q_DISABLE_COPY_MOVE(CertificateWidgetInfo) - void drawWarnIcon(); std::tuple certData() const; QLabel* icon; QLabel* info; - QLabel* warnIcon; QLabel* warn; EidCertificateAndPinInfo certAndPinInfo; }; @@ -59,7 +57,6 @@ class CertificateWidget final : public QWidget, public CertificateWidgetInfo explicit CertificateWidget(QWidget* parent); private: - bool eventFilter(QObject* object, QEvent* event) final; void paintEvent(QPaintEvent* event) final; }; @@ -71,7 +68,6 @@ class CertificateButton final : public QAbstractButton, public CertificateWidget CertificateButton(const EidCertificateAndPinInfo& certAndPinInfo, QWidget* parent); private: - bool eventFilter(QObject* object, QEvent* event) final; void setCertificateInfo(const EidCertificateAndPinInfo& certAndPinInfo) final; void paintEvent(QPaintEvent* event) final; }; diff --git a/src/ui/dark.qss b/src/ui/dark.qss index fda55a34..5eb1a4a3 100644 --- a/src/ui/dark.qss +++ b/src/ui/dark.qss @@ -11,7 +11,6 @@ background-color: #232325; } #langButton { color: #FFFFFF; -background-image: url(:images/down_dark.svg); } #langButton::hover { background-color: #4E4E53; diff --git a/src/ui/dialog.ui b/src/ui/dialog.ui index 7d021372..4957fd56 100644 --- a/src/ui/dialog.ui +++ b/src/ui/dialog.ui @@ -58,19 +58,9 @@ background-color: #215081; color: #003168; border: 0px; border-radius: 3px; -max-height: 22px; max-width: 55px; -padding-left: 0px; -padding-right: 0px; font-size: 14px; -text-align: left; -background-position: right; -background-repeat: no-repeat; -background-origin: content; -background-image: url(:images/down.svg); -} -#langButton::hover { -background-color: #EFEFEF; +padding: 8px; } CertificateButton, CertificateWidget { border: 1px solid rgba(0,49,104,0.1); @@ -311,20 +301,20 @@ border-radius: 4px; - 20 + 10 - 50 - 32 + 24 + 24 - 50 - 32 + 24 + 24 @@ -349,7 +339,7 @@ border-radius: 4px; - + 8 @@ -365,13 +355,6 @@ border-radius: 4px; 10 - - - - :/images/fatal.svg - - - @@ -441,14 +424,11 @@ border-radius: 4px; - - - 9 - - + + 10 - + @@ -470,14 +450,7 @@ border-radius: 4px; - - - - :/images/origin.svg - - - - + Qt::TabFocus @@ -523,14 +496,11 @@ border-radius: 4px; - - + + 10 - - 9 - - + Qt::TabFocus @@ -543,14 +513,7 @@ border-radius: 4px; - - - - :/images/origin.svg - - - - + Qt::TabFocus @@ -575,19 +538,6 @@ border-radius: 4px; Select another certificate - - - :/images/left.svg:/images/left.svg - - - - 24 - 24 - - - - Qt::ToolButtonTextBesideIcon - @@ -764,14 +714,11 @@ border-radius: 4px; - - - 10 - - + + 20 - + Qt::TabFocus @@ -784,7 +731,7 @@ border-radius: 4px; - + Qt::TabFocus @@ -797,25 +744,6 @@ border-radius: 4px; - - - - - 24 - 24 - - - - - 24 - 24 - - - - :/images/fatal.svg - - - diff --git a/src/ui/images/cardreader.svg b/src/ui/images/cardreader.svg deleted file mode 100644 index 98152825..00000000 --- a/src/ui/images/cardreader.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/ui/images/cardreader_dark.svg b/src/ui/images/cardreader_dark.svg deleted file mode 100644 index 8ae67c2b..00000000 --- a/src/ui/images/cardreader_dark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/ui/images/down.svg b/src/ui/images/down.svg deleted file mode 100644 index b7d64ba7..00000000 --- a/src/ui/images/down.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/ui/images/down_dark.svg b/src/ui/images/down_dark.svg deleted file mode 100644 index a7b51e7e..00000000 --- a/src/ui/images/down_dark.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/ui/images/fatal.svg b/src/ui/images/fatal.svg deleted file mode 100644 index be1109f7..00000000 --- a/src/ui/images/fatal.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/ui/images/fatal_dark.svg b/src/ui/images/fatal_dark.svg deleted file mode 100644 index 16d8f1df..00000000 --- a/src/ui/images/fatal_dark.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/ui/images/id-card.svg b/src/ui/images/id-card.svg index 56a43e00..8724fb35 100644 --- a/src/ui/images/id-card.svg +++ b/src/ui/images/id-card.svg @@ -1,10 +1,3 @@ - - - - - - - - - - + + + \ No newline at end of file diff --git a/src/ui/images/id-card_dark.svg b/src/ui/images/id-card_dark.svg index 6693a86c..04cb4416 100644 --- a/src/ui/images/id-card_dark.svg +++ b/src/ui/images/id-card_dark.svg @@ -1,10 +1,3 @@ - - - - - - - - - - + + + \ No newline at end of file diff --git a/src/ui/images/lang.svg b/src/ui/images/lang.svg new file mode 100644 index 00000000..2bbe4f86 --- /dev/null +++ b/src/ui/images/lang.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/ui/images/lang_dark.svg b/src/ui/images/lang_dark.svg new file mode 100644 index 00000000..6d8b5f3e --- /dev/null +++ b/src/ui/images/lang_dark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/ui/images/left.svg b/src/ui/images/left.svg deleted file mode 100644 index 7cef74e2..00000000 --- a/src/ui/images/left.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/ui/images/no-id-card.svg b/src/ui/images/no-id-card.svg index e1237f6e..1c197f52 100644 --- a/src/ui/images/no-id-card.svg +++ b/src/ui/images/no-id-card.svg @@ -1,5 +1,3 @@ - - - - - + + + \ No newline at end of file diff --git a/src/ui/images/no-id-card_dark.svg b/src/ui/images/no-id-card_dark.svg index 25f69f22..341e601c 100644 --- a/src/ui/images/no-id-card_dark.svg +++ b/src/ui/images/no-id-card_dark.svg @@ -1,5 +1,3 @@ - - - - - + + + \ No newline at end of file diff --git a/src/ui/images/origin.svg b/src/ui/images/origin.svg deleted file mode 100644 index 8ddab408..00000000 --- a/src/ui/images/origin.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/ui/images/origin_dark.svg b/src/ui/images/origin_dark.svg deleted file mode 100644 index 661085f9..00000000 --- a/src/ui/images/origin_dark.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/ui/images/wait.svg b/src/ui/images/wait.svg index 216d4dd9..11a3f4a2 100644 --- a/src/ui/images/wait.svg +++ b/src/ui/images/wait.svg @@ -1,5 +1,5 @@ - - - - - + + + + + \ No newline at end of file diff --git a/src/ui/images/wait_dark.svg b/src/ui/images/wait_dark.svg new file mode 100644 index 00000000..5fffdcbc --- /dev/null +++ b/src/ui/images/wait_dark.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/ui/webeiddialog.cpp b/src/ui/webeiddialog.cpp index 74afb7a3..5ccfa3a3 100644 --- a/src/ui/webeiddialog.cpp +++ b/src/ui/webeiddialog.cpp @@ -49,6 +49,11 @@ constexpr inline QLatin1String operator"" _L1(const char* str, size_t size) noex { return QLatin1String(str, int(size)); } + +inline QString operator""_s(const char16_t* str, size_t size) noexcept +{ + return QString(QStringPrivate(nullptr, const_cast(str), qsizetype(size))); +} #else using namespace Qt::Literals::StringLiterals; #endif @@ -71,14 +76,9 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) ui->setupUi(this); ui->lockedWarning->hide(); if (Application::isDarkTheme()) { - QFile f(QStringLiteral(":dark.qss")); - if (f.open(QFile::ReadOnly | QFile::Text)) { + if (QFile f(u":dark.qss"_s); f.open(QFile::ReadOnly | QFile::Text)) { setStyleSheet(styleSheet() + QTextStream(&f).readAll()); - ui->selectCertificateOriginLabelIcon->setPixmap(pixmap("origin"_L1)); - ui->pinInputOriginLabelIcon->setPixmap(pixmap("origin"_L1)); ui->cardChipIcon->setPixmap(pixmap("no-id-card"_L1)); - ui->fatalErrorIcon->setPixmap(pixmap("fatal"_L1)); - ui->aboutIcon->setPixmap(pixmap("fatal"_L1)); } } setWindowFlag(Qt::CustomizeWindowHint); @@ -92,6 +92,11 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) ui->langButton->setObjectName("langButton"); ui->langButton->setText(tr("EN", "Active language")); ui->langButton->setAccessibleName(tr("English", "Active language accessible")); + ui->langButton->setIcon(pixmap("lang"_L1)); + ui->langButton->setIconSize(QSize(20, 20)); + ui->langButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + ui->langButton->setCursor(QCursor(Qt::PointingHandCursor)); + ui->langButton->setLayoutDirection(Qt::RightToLeft); connect(ui->langButton, &QToolButton::clicked, this, [] { LanguageSelect().exec(); }); ui->pinInput->setAttribute(Qt::WA_MacShowFocusRect, false); @@ -99,7 +104,8 @@ WebEidDialog::WebEidDialog(QWidget* parent) : WebEidUI(parent), ui(new Private) pinInputFont.setLetterSpacing(QFont::AbsoluteSpacing, 2); ui->pinInput->setFont(pinInputFont); - ui->waitingSpinner->load(QStringLiteral(":/images/wait.svg")); + ui->waitingSpinner->load(Application::isDarkTheme() ? u":/images/wait_dark.svg"_s + : u":/images/wait.svg"_s); ui->selectionGroup = new QButtonGroup(this); ui->fatalError->hide(); @@ -290,7 +296,7 @@ void WebEidDialog::onMultipleCertificatesReady( qobject_cast(ui->selectionGroup->checkedButton())) { emit accepted(button->certificateInfo()); } else { - emit failure(QStringLiteral("CertificateButton not found")); + emit failure(u"CertificateButton not found"_s); } }); ui->pageStack->setCurrentIndex(int(Page::SELECT_CERTIFICATE)); @@ -311,14 +317,13 @@ void WebEidDialog::onMultipleCertificatesReady( qobject_cast(ui->selectionGroup->checkedButton())) { onSingleCertificateReady(origin, button->certificateInfo()); } else { - emit failure(QStringLiteral("CertificateButton not found")); + emit failure(u"CertificateButton not found"_s); } }); ui->pageStack->setCurrentIndex(int(Page::SELECT_CERTIFICATE)); break; default: - emit failure(QStringLiteral("Command %1 not allowed here") - .arg(QString::fromStdString(currentCommand))); + emit failure("Command %1 not allowed here"_L1.arg(QString::fromStdString(currentCommand))); } } @@ -374,7 +379,7 @@ void WebEidDialog::onSingleCertificateReady(const QUrl& origin, : QT_TR_NOOP("Enter PIN2 for signing")); break; default: - emit failure(QStringLiteral("Only SELECT_CERTIFICATE, AUTHENTICATE or SIGN allowed")); + emit failure(u"Only SELECT_CERTIFICATE, AUTHENTICATE or SIGN allowed"_s); return; } @@ -678,8 +683,8 @@ void WebEidDialog::resizeHeight() QPixmap WebEidDialog::pixmap(QLatin1String name) { - return {QStringLiteral(":/images/%1%2.svg") - .arg(name, Application::isDarkTheme() ? "_dark"_L1 : QLatin1String())}; + return {":/images/%1%2.svg"_L1.arg(name, + Application::isDarkTheme() ? "_dark"_L1 : QLatin1String())}; } constexpr std::tuple @@ -690,12 +695,12 @@ WebEidDialog::retriableErrorToTextTitleAndIcon(const RetriableError error) noexc return { QT_TR_NOOP("The smart card service required to use the ID-card is not running. Please " "start the smart card service and try again."), - QT_TR_NOOP("Launch the Smart Card service"), "cardreader"_L1}; + QT_TR_NOOP("Launch the Smart Card service"), "no-id-card"_L1}; case RetriableError::NO_SMART_CARD_READERS_FOUND: return {QT_TR_NOOP("Card reader not connected. Please connect the card reader to " "the computer."), - QT_TR_NOOP("Connect the card reader"), "cardreader"_L1}; + QT_TR_NOOP("Connect the card reader"), "no-id-card"_L1}; case RetriableError::NO_SMART_CARDS_FOUND: case RetriableError::PKCS11_TOKEN_NOT_PRESENT: @@ -765,7 +770,7 @@ WebEidDialog::retriableErrorToTextTitleAndIcon(const RetriableError error) noexc "used. Read more here."), - QT_TR_NOOP("Card driver error"), "cardreader"_L1}; + QT_TR_NOOP("Card driver error"), "no-id-card"_L1}; case RetriableError::UNKNOWN_ERROR: return {QT_TR_NOOP("Unknown error"), QT_TR_NOOP("Unknown error"), "no-id-card"_L1};