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: 70 additions & 5 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)
, ldap_corp(new LdapSearch(Application::confValue(QLatin1String("LDAP-CORP-URL")).toString(QStringLiteral("ldaps://k3.ldap.sk.ee")), this))
{
for(const auto list = Application::confValue(QLatin1String("LDAP-PERSON-URLS")).toArray(); auto url: list) {
Expand All @@ -54,7 +65,43 @@ AddRecipients::AddRecipients(ItemList* itemList, QWidget *parent)
}

ui->setupUi(this);
#if defined (Q_OS_WIN)

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->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
setWindowFlags( Qt::Dialog | Qt::CustomizeWindowHint );
Expand All @@ -65,11 +112,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());
});
connect(ui->txtFind, &QLineEdit::textChanged, this, [this](const QString &text) {
ui->btnFind->setDisabled(text.trimmed().isEmpty());
});
for(auto ldap: ldap_person) {
for(auto *ldap: ldap_person) {
connect(ldap, &LdapSearch::searchResult, this, &AddRecipients::showResult);
connect(ldap, &LdapSearch::error, this, &AddRecipients::showError);
}
Expand Down Expand Up @@ -105,6 +158,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
6 changes: 4 additions & 2 deletions client/dialogs/AddRecipients.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,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
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
81 changes: 1 addition & 80 deletions client/widgets/ItemList.ui
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,6 @@ color: #07142A;
font-family: Roboto, Helvetica;
font-size: 14px;
}
QLineEdit {
padding: 10px 14px;
border: 1px solid #C4CBD8;
border-radius: 4px;
background-color: white;
placeholder-text-color: #607496;
font-size: 16px;
}
QScrollBar {
width: 10px;
padding: 5px 5px 5px 0px;
Expand Down Expand Up @@ -149,7 +141,7 @@ icon: url(:/images/icon_download_clicked.svg);
<enum>Qt::TabFocus</enum>
</property>
<property name="text">
<string notr="true">+ Add recipient</string>
<string>Add recipients</string>
</property>
</widget>
</item>
Expand Down Expand Up @@ -243,77 +235,6 @@ padding: 5px;
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="findGroup" native="true">
<layout class="QGridLayout" name="findGroupLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>8</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>16</number>
</property>
<property name="horizontalSpacing">
<number>24</number>
</property>
<property name="verticalSpacing">
<number>6</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="lblFind">
<property name="text">
<string>Enter the personal code, institution or registry code</string>
</property>
<property name="buddy">
<cstring>txtFind</cstring>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLineEdit" name="txtFind"/>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="btnFind">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="styleSheet">
<string notr="true">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;
}</string>
</property>
<property name="text">
<string>Search</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignHCenter">
<widget class="QToolButton" name="add">
<property name="cursor">
Expand Down
Loading