Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 71 additions & 4 deletions client/dialogs/AddRecipients.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,25 @@

#include <QtCore/QDateTime>
#include <QtCore/QJsonArray>
#include <QtGui/QKeyEvent>
#include <QtNetwork/QSslConfiguration>
#include <QtNetwork/QSslError>
#include <QtNetwork/QSslKey>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMessageBox>
#include <QtWidgets/QPushButton>

struct AddRecipients::Private: public Ui::AddRecipients
{
QLineEdit *txtFind;
QPushButton *btnFind;
};

AddRecipients::AddRecipients(ItemList* itemList, QWidget *parent)
: QDialog(parent)
, ui(new Ui::AddRecipients)
, ui(new Private)
{
#ifndef Q_OS_WIN
if(const auto list = Application::confValue(QLatin1String("LDAP-CERTS")).toArray();
Expand All @@ -62,6 +73,43 @@ AddRecipients::AddRecipients(ItemList* itemList, QWidget *parent)
}

ui->setupUi(this);

auto *findGroup = new QWidget(ui->leftPane);
auto *findLayout = new QGridLayout(findGroup);
findLayout->setContentsMargins(0, 8, 0, 16);
findLayout->setHorizontalSpacing(24);
findLayout->setVerticalSpacing(6);
auto *lblFind = new QLabel(tr("Enter the personal code, institution or registry code"), findGroup);
ui->txtFind = new QLineEdit(findGroup);
ui->txtFind->setAttribute(Qt::WA_MacShowFocusRect, false);
ui->txtFind->setStyleSheet(QStringLiteral("QLineEdit {"
"padding: 10px 14px;"
"border: 1px solid #C4CBD8;"
"border-radius: 4px;"
"background-color: white;"
"placeholder-text-color: #607496;"
"font-size: 16px;}"
));
ui->btnFind = new QPushButton(tr("Search"), findGroup);
ui->btnFind->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
ui->btnFind->setCursor(Qt::PointingHandCursor);
ui->btnFind->setAutoDefault(false);
ui->btnFind->setStyleSheet(QStringLiteral("QPushButton {"
"padding: 12px 12px;"
"border-radius: 4px;"
"color: #ffffff;"
"font-weight: 700;"
"background-color: #2F70B6;}"
"QPushButton:hover, QPushButton:focus {background-color: #2B66A6;}"
"QPushButton:pressed {background-color: #215081;}"
"QPushButton:disabled {background-color: #82A9D3;}"
));
lblFind->setBuddy(ui->txtFind);
findLayout->addWidget(lblFind, 0, 0, 1, 2);
findLayout->addWidget(ui->txtFind, 1, 0);
findLayout->addWidget(ui->btnFind, 1, 1);
ui->leftPane->addTopWidget(findGroup, ui->txtFind, ui->btnFind);
setTabOrder(ui->txtFind, ui->btnFind);
#ifdef Q_OS_WIN
ui->actionLayout->setDirection(QBoxLayout::RightToLeft);
#endif
Expand All @@ -73,11 +121,17 @@ AddRecipients::AddRecipients(ItemList* itemList, QWidget *parent)

connect(ui->confirm, &QPushButton::clicked, this, &AddRecipients::accept);
connect(ui->cancel, &QPushButton::clicked, this, &AddRecipients::reject);
connect(ui->leftPane, &ItemList::search, this, [&](const QString &term) {
ui->btnFind->setDisabled(true);
ui->txtFind->installEventFilter(this);
ui->btnFind->installEventFilter(this);
connect(ui->btnFind, &QPushButton::clicked, this, [this] {
ui->leftPane->clear();
search(term);
search(ui->txtFind->text());
});
for(auto ldap: ldap_person) {
connect(ui->txtFind, &QLineEdit::textChanged, this, [this](const QString &text) {
ui->btnFind->setDisabled(text.trimmed().isEmpty());
});
for(auto *ldap: ldap_person) {
connect(ldap, &LdapSearch::searchResult, this, &AddRecipients::showResult);
connect(ldap, &LdapSearch::error, this, &AddRecipients::showError);
}
Expand Down Expand Up @@ -113,6 +167,18 @@ AddRecipients::~AddRecipients()
delete ui;
}

bool AddRecipients::eventFilter(QObject *o, QEvent *e)
{
if ((o == ui->txtFind || o == ui->btnFind) && e->type() == QEvent::KeyPress) {
const auto *key = static_cast<QKeyEvent *>(e);
if (key->key() == Qt::Key_Return || key->key() == Qt::Key_Enter) {
ui->btnFind->click();
return true;
}
}
return QDialog::eventFilter(o, e);
}

void AddRecipients::addRecipientFromFile()
{
QString file = FileDialog::getOpenFileName(this, windowTitle(), {},
Expand Down Expand Up @@ -235,6 +301,7 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
});
ui->rightPane->addWidget(rightItem);
ui->confirm->setEnabled(true);
ui->confirm->setDefault(true);
historyCertData.addAndSave(key.rcpt_cert);
if(auto *leftItem = itemListValue(ui->leftPane, key))
leftItem->setDisabled(true);
Expand Down
6 changes: 4 additions & 2 deletions client/dialogs/AddRecipients.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,19 @@ class AddRecipients final : public QDialog
bool isUpdated() const;

private:
bool eventFilter(QObject *o, QEvent *e) override;
void addRecipientFromFile();
void addRecipientFromHistory();
void addRecipient(const QSslCertificate& cert, bool select = true);
void addRecipientToRightPane(Item *item, bool update = true);

AddressItem* itemListValue(ItemList *list, const CKey &key);
static AddressItem* itemListValue(ItemList *list, const CKey &key);
void search(const QString &term, bool select = false, const QString &type = {});
void showError(const QString &title, const QString &details);
void showResult(const QList<QSslCertificate> &result, int resultCount, const QVariantMap &userData);

Ui::AddRecipients *ui;
struct Private;
Private *ui;
QList<CKey> rightList;
QList<LdapSearch*> ldap_person;
LdapSearch *ldap_corp;
Expand Down
9 changes: 5 additions & 4 deletions client/dialogs/AddRecipients.ui
Original file line number Diff line number Diff line change
Expand Up @@ -90,20 +90,21 @@ background-color: #BFD3E8;
QPushButton:disabled {
color: #82A9D3;
}
QPushButton:default {
#confirm {
color: #ffffff;
border-color: #2F70B6;
background-color: #2F70B6;
}
QPushButton:default:hover, QPushButton:default:focus {
#confirm:hover, #confirm:focus {
border-color: #2B66A6;
background-color: #2B66A6;
}
QPushButton:default:pressed {
#confirm:pressed {
border-color: #215081;
background-color: #215081;
}
QPushButton:default:disabled {
#confirm:disabled {
color: #ffffff;
border-color: #82A9D3;
background-color: #82A9D3;
}
Expand Down
16 changes: 8 additions & 8 deletions client/translations/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@
<source>Certificates (*.cer *.crt *.pem)</source>
<translation>Certificates (*.cer *.crt *.pem)</translation>
</message>
<message>
<source>Enter the personal code, institution or registry code</source>
<translation>Enter the personal code, institution or registry code</translation>
</message>
<message>
<source>Search</source>
<translation>Search</translation>
</message>
<message>
<source>Are you sure that you want use certificate for encrypting, which expired on %1?&lt;br /&gt;When decrypter has updated certificates then decrypting is impossible.</source>
<translation>Are you sure that you want use certificate for encrypting, which expired on %1?&lt;br /&gt;&lt;br /&gt;When decrypter has updated certificates then decrypting is impossible.</translation>
Expand Down Expand Up @@ -1177,10 +1185,6 @@
</context>
<context>
<name>ItemList</name>
<message>
<source>Enter the personal code, institution or registry code</source>
<translation>Enter the personal code, institution or registry code</translation>
</message>
<message>
<source>Container is not signed</source>
<translation>Container&apos;s signatures are missing</translation>
Expand Down Expand Up @@ -1218,10 +1222,6 @@
<source>Added recipients</source>
<translation>Added recipients</translation>
</message>
<message>
<source>Search</source>
<translation>Search</translation>
</message>
<message>
<source>Download all files</source>
<translation>Download all files</translation>
Expand Down
16 changes: 8 additions & 8 deletions client/translations/et.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@
<source>Certificates (*.cer *.crt *.pem)</source>
<translation>Sertifikaadid (*.cer *.crt *.pem)</translation>
</message>
<message>
<source>Enter the personal code, institution or registry code</source>
<translation>Sisesta isikukood, asutus või registrikood</translation>
</message>
<message>
<source>Search</source>
<translation>Otsi</translation>
</message>
<message>
<source>Are you sure that you want use certificate for encrypting, which expired on %1?&lt;br /&gt;When decrypter has updated certificates then decrypting is impossible.</source>
<translation>Kas oled kindel, et soovid kasutada krüpteerimiseks sertifikaati, mis aegus %1?&lt;br /&gt;&lt;br /&gt;Juhul, kui dekrüpteerija on oma sertifikaate uuendanud, ei ole dekrüpteerimine võimalik.</translation>
Expand Down Expand Up @@ -1177,10 +1185,6 @@
</context>
<context>
<name>ItemList</name>
<message>
<source>Enter the personal code, institution or registry code</source>
<translation>Sisesta isikukood, asutus või registrikood</translation>
</message>
<message>
<source>Container is not signed</source>
<translation>Ümbrikul puuduvad allkirjad</translation>
Expand Down Expand Up @@ -1218,10 +1222,6 @@
<source>Added recipients</source>
<translation>Lisatud adressaadid</translation>
</message>
<message>
<source>Search</source>
<translation>Otsi</translation>
</message>
<message>
<source>Download all files</source>
<translation>Laadi kõik failid alla</translation>
Expand Down
43 changes: 8 additions & 35 deletions client/widgets/ItemList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,19 @@

#include "Item.h"

#include <QKeyEvent>

using namespace ria::qdigidoc4;


ItemList::ItemList(QWidget *parent)
: QScrollArea(parent)
, ui(new Ui::ItemList)
{
ui->setupUi(this);
ui->findGroup->hide();
ui->download->hide();
ui->count->hide();
ui->infoIcon->hide();
ui->add->hide();
ui->txtFind->setAttribute(Qt::WA_MacShowFocusRect, false);
connect(ui->add, &QToolButton::clicked, this, &ItemList::add);
connect(this, &ItemList::idChanged, this, [this](const SslCertificate &cert){ this->cert = cert; });
ui->txtFind->installEventFilter(this);
}

ItemList::~ItemList()
Expand All @@ -59,6 +53,13 @@ void ItemList::addHeader(const char *label)
setTabOrder(header, ui->header);
}

void ItemList::addTopWidget(QWidget *widget, QWidget *firstTab, QWidget *lastTab)
{
topWidget = lastTab ? lastTab : widget;
ui->itemLayout->insertWidget(1, widget);
setTabOrder(ui->listHeader, firstTab ? firstTab : widget);
}

void ItemList::addHeaderWidget(Item *widget)
{
addWidget(widget, ui->itemLayout->indexOf(ui->header), header);
Expand All @@ -72,7 +73,7 @@ void ItemList::addWidget(Item *widget, int index, QWidget *tabIndex)
if(Item *prev = qobject_cast<Item*>(ui->itemLayout->itemAt(index - 1)->widget()))
tabIndex = prev->lastTabWidget();
else
tabIndex = ui->btnFind;
tabIndex = topWidget ? topWidget : ui->listHeader;
}
ui->itemLayout->insertWidget(index, widget);
connect(widget, &Item::remove, this, &ItemList::remove);
Expand Down Expand Up @@ -118,21 +119,6 @@ void ItemList::clear()
(*it)->deleteLater();
}

bool ItemList::eventFilter(QObject *o, QEvent *e)
{
if (o == ui->txtFind && e->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
// To avoid dialog default button trigger
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter)
{
ui->btnFind->click();
return true;
}
}
return QScrollArea::eventFilter(o, e);
}

int ItemList::index(Item *item) const
{
return items.indexOf(item);
Expand All @@ -148,19 +134,6 @@ void ItemList::init(ListType item, const char *header)
break;
case ToAddAdresses:
addTitle = QT_TR_NOOP("Add all");
ui->findGroup->show();
connect(ui->txtFind, &QLineEdit::returnPressed, this, [this]{
if(!ui->txtFind->text().trimmed().isEmpty())
emit search(ui->txtFind->text());
});
connect(ui->btnFind, &QPushButton::clicked, this, [this]{ emit search(ui->txtFind->text()); });
ui->btnFind->setDisabled(ui->txtFind->text().trimmed().isEmpty());
connect(ui->txtFind, &QLineEdit::textChanged, this, [this](const QString &text){
const auto isEmpty = text.trimmed().isEmpty();
ui->btnFind->setDisabled(isEmpty);
ui->btnFind->setDefault(isEmpty);
ui->btnFind->setAutoDefault(isEmpty);
});
break;
case ItemAddress:
addTitle = QT_TR_NOOP("+ Add recipient");
Expand Down
4 changes: 2 additions & 2 deletions client/widgets/ItemList.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class ItemList : public QScrollArea
void init(ListType itemType, const char *header);
void addHeader(const char *label);
void addHeaderWidget(Item *widget);
void addTopWidget(QWidget *widget, QWidget *firstTab = {}, QWidget *lastTab = {});
void addWidget(Item *widget);
virtual void clear();
virtual void removeItem(int row);
Expand All @@ -62,11 +63,9 @@ class ItemList : public QScrollArea
void idChanged(const SslCertificate &cert);
void keysSelected(QList<Item *> keys);
void removed(int row);
void search(const QString &term);

protected:
void changeEvent(QEvent* event) override;
bool eventFilter(QObject *o, QEvent *e) override;
int index(Item *item) const;
virtual void remove(Item *item);

Expand All @@ -79,6 +78,7 @@ class ItemList : public QScrollArea

QList<Item*> items;
QLabel *header = nullptr;
QWidget *topWidget = nullptr;
const char *title = "";
const char *addTitle = "";
const char *headerText = "";
Expand Down
Loading
Loading