[Qt] Add delay before filtering transactions

Fixes 3141
This commit is contained in:
Lucas Betschart 2017-08-06 22:55:14 +02:00
parent b9bceaf1c0
commit 7b137acedd
2 changed files with 22 additions and 9 deletions

View file

@ -33,6 +33,7 @@
#include <QScrollBar> #include <QScrollBar>
#include <QSignalMapper> #include <QSignalMapper>
#include <QTableView> #include <QTableView>
#include <QTimer>
#include <QUrl> #include <QUrl>
#include <QVBoxLayout> #include <QVBoxLayout>
@ -112,6 +113,17 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this)); amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this));
hlayout->addWidget(amountWidget); hlayout->addWidget(amountWidget);
// Delay before filtering transactions in ms
static const int input_filter_delay = 200;
QTimer* amount_typing_delay = new QTimer(this);
amount_typing_delay->setSingleShot(true);
amount_typing_delay->setInterval(input_filter_delay);
QTimer* prefix_typing_delay = new QTimer(this);
prefix_typing_delay->setSingleShot(true);
prefix_typing_delay->setInterval(input_filter_delay);
QVBoxLayout *vlayout = new QVBoxLayout(this); QVBoxLayout *vlayout = new QVBoxLayout(this);
vlayout->setContentsMargins(0,0,0,0); vlayout->setContentsMargins(0,0,0,0);
vlayout->setSpacing(0); vlayout->setSpacing(0);
@ -173,8 +185,10 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int))); connect(dateWidget, SIGNAL(activated(int)), this, SLOT(chooseDate(int)));
connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int))); connect(typeWidget, SIGNAL(activated(int)), this, SLOT(chooseType(int)));
connect(watchOnlyWidget, SIGNAL(activated(int)), this, SLOT(chooseWatchonly(int))); connect(watchOnlyWidget, SIGNAL(activated(int)), this, SLOT(chooseWatchonly(int)));
connect(addressWidget, SIGNAL(textChanged(QString)), this, SLOT(changedPrefix(QString))); connect(amountWidget, SIGNAL(textChanged(QString)), amount_typing_delay, SLOT(start()));
connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString))); connect(amount_typing_delay, SIGNAL(timeout()), this, SLOT(changedAmount()));
connect(addressWidget, SIGNAL(textChanged(QString)), prefix_typing_delay, SLOT(start()));
connect(prefix_typing_delay, SIGNAL(timeout()), this, SLOT(changedPrefix()));
connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex))); connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex)));
connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint)));
@ -312,20 +326,19 @@ void TransactionView::chooseWatchonly(int idx)
(TransactionFilterProxy::WatchOnlyFilter)watchOnlyWidget->itemData(idx).toInt()); (TransactionFilterProxy::WatchOnlyFilter)watchOnlyWidget->itemData(idx).toInt());
} }
void TransactionView::changedPrefix(const QString &prefix) void TransactionView::changedPrefix()
{ {
if(!transactionProxyModel) if(!transactionProxyModel)
return; return;
transactionProxyModel->setAddressPrefix(prefix); transactionProxyModel->setAddressPrefix(addressWidget->text());
} }
void TransactionView::changedAmount(const QString &amount) void TransactionView::changedAmount()
{ {
if(!transactionProxyModel) if(!transactionProxyModel)
return; return;
CAmount amount_parsed = 0; CAmount amount_parsed = 0;
if(BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amount, &amount_parsed)) if (BitcoinUnits::parse(model->getOptionsModel()->getDisplayUnit(), amountWidget->text(), &amount_parsed)) {
{
transactionProxyModel->setMinAmount(amount_parsed); transactionProxyModel->setMinAmount(amount_parsed);
} }
else else

View file

@ -112,8 +112,8 @@ public Q_SLOTS:
void chooseDate(int idx); void chooseDate(int idx);
void chooseType(int idx); void chooseType(int idx);
void chooseWatchonly(int idx); void chooseWatchonly(int idx);
void changedPrefix(const QString &prefix); void changedAmount();
void changedAmount(const QString &amount); void changedPrefix();
void exportClicked(); void exportClicked();
void focusTransaction(const QModelIndex&); void focusTransaction(const QModelIndex&);