Merge #12421: [qt] navigate to transaction history page after send
e7d9fc5
[qt] navigate to transaction history page after send (Sjors Provoost)
Pull request description:
Before this change QT just remained on the Send tab, which I found confusing. Now it switches to the Transactions tab. This makes it more clear to the user that the send actually succeeded, and here they can monitor progress.
Ideally I would like to highlight the transaction, e.g. by refactoring `TransactionView::focusTransaction(const QModelIndex &idx)` to accept a transaction hash, but I'm not sure how to do that.
Tree-SHA512: 8aa93e03874de8434e18951f8aec47377814c0bcaf7eda4766fc41d5a4e32806346e12e4139e4d45468dfdf0b786f5a7faa393a31b8cd6c65ccac21fb3782c33
This commit is contained in:
commit
be263faf87
6 changed files with 42 additions and 3 deletions
|
@ -29,6 +29,7 @@
|
|||
#include <init.h>
|
||||
#include <rpc/server.h>
|
||||
#include <ui_interface.h>
|
||||
#include <uint256.h>
|
||||
#include <util.h>
|
||||
#include <warnings.h>
|
||||
|
||||
|
@ -80,6 +81,7 @@ Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin);
|
|||
// Declare meta types used for QMetaObject::invokeMethod
|
||||
Q_DECLARE_METATYPE(bool*)
|
||||
Q_DECLARE_METATYPE(CAmount)
|
||||
Q_DECLARE_METATYPE(uint256)
|
||||
|
||||
static void InitMessage(const std::string &message)
|
||||
{
|
||||
|
|
|
@ -369,6 +369,7 @@ void SendCoinsDialog::on_sendButton_clicked()
|
|||
accept();
|
||||
CoinControlDialog::coinControl()->UnSelectAll();
|
||||
coinControlUpdateLabels();
|
||||
Q_EMIT coinsSent(currentTransaction.getTransaction()->GetHash());
|
||||
}
|
||||
fNewRecipientAllowed = true;
|
||||
}
|
||||
|
|
|
@ -54,6 +54,9 @@ public Q_SLOTS:
|
|||
void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance,
|
||||
const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance);
|
||||
|
||||
Q_SIGNALS:
|
||||
void coinsSent(const uint256& txid);
|
||||
|
||||
private:
|
||||
Ui::SendCoinsDialog *ui;
|
||||
ClientModel *clientModel;
|
||||
|
|
|
@ -263,8 +263,7 @@ void TransactionView::setModel(WalletModel *_model)
|
|||
|
||||
void TransactionView::chooseDate(int idx)
|
||||
{
|
||||
if(!transactionProxyModel)
|
||||
return;
|
||||
if (!transactionProxyModel) return;
|
||||
QDate current = QDate::currentDate();
|
||||
dateRangeWidget->setVisible(false);
|
||||
switch(dateWidget->itemData(idx).toInt())
|
||||
|
@ -592,6 +591,32 @@ void TransactionView::focusTransaction(const QModelIndex &idx)
|
|||
transactionView->setFocus();
|
||||
}
|
||||
|
||||
void TransactionView::focusTransaction(const uint256& txid)
|
||||
{
|
||||
if (!transactionProxyModel)
|
||||
return;
|
||||
|
||||
const QModelIndexList results = this->model->getTransactionTableModel()->match(
|
||||
this->model->getTransactionTableModel()->index(0,0),
|
||||
TransactionTableModel::TxHashRole,
|
||||
QString::fromStdString(txid.ToString()), -1);
|
||||
|
||||
transactionView->setFocus();
|
||||
transactionView->selectionModel()->clearSelection();
|
||||
for (const QModelIndex& index : results) {
|
||||
const QModelIndex targetIndex = transactionProxyModel->mapFromSource(index);
|
||||
transactionView->selectionModel()->select(
|
||||
targetIndex,
|
||||
QItemSelectionModel::Rows | QItemSelectionModel::Select);
|
||||
// Called once per destination to ensure all results are in view, unless
|
||||
// transactions are not ordered by (ascending or descending) date.
|
||||
transactionView->scrollTo(targetIndex);
|
||||
// scrollTo() does not scroll far enough the first time when transactions
|
||||
// are ordered by ascending date.
|
||||
if (index == results[0]) transactionView->scrollTo(targetIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// We override the virtual resizeEvent of the QWidget to adjust tables column
|
||||
// sizes as the tables width is proportional to the dialogs width.
|
||||
void TransactionView::resizeEvent(QResizeEvent* event)
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
|
||||
#include <qt/guiutil.h>
|
||||
|
||||
#include <uint256.h>
|
||||
|
||||
#include <QWidget>
|
||||
#include <QKeyEvent>
|
||||
|
||||
|
@ -116,7 +118,7 @@ public Q_SLOTS:
|
|||
void changedSearch();
|
||||
void exportClicked();
|
||||
void focusTransaction(const QModelIndex&);
|
||||
|
||||
void focusTransaction(const uint256& txid);
|
||||
};
|
||||
|
||||
#endif // BITCOIN_QT_TRANSACTIONVIEW_H
|
||||
|
|
|
@ -68,6 +68,9 @@ WalletView::WalletView(const PlatformStyle *_platformStyle, QWidget *parent):
|
|||
connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), transactionView, SLOT(focusTransaction(QModelIndex)));
|
||||
connect(overviewPage, SIGNAL(outOfSyncWarningClicked()), this, SLOT(requestedSyncWarningInfo()));
|
||||
|
||||
// Highlight transaction after send
|
||||
connect(sendCoinsPage, SIGNAL(coinsSent(uint256)), transactionView, SLOT(focusTransaction(uint256)));
|
||||
|
||||
// Double-clicking on a transaction on the transaction history page shows details
|
||||
connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails()));
|
||||
|
||||
|
@ -91,6 +94,9 @@ void WalletView::setBitcoinGUI(BitcoinGUI *gui)
|
|||
// Clicking on a transaction on the overview page simply sends you to transaction history page
|
||||
connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), gui, SLOT(gotoHistoryPage()));
|
||||
|
||||
// Navigate to transaction history page after send
|
||||
connect(sendCoinsPage, SIGNAL(coinsSent(uint256)), gui, SLOT(gotoHistoryPage()));
|
||||
|
||||
// Receive and report messages
|
||||
connect(this, SIGNAL(message(QString,QString,unsigned int)), gui, SLOT(message(QString,QString,unsigned int)));
|
||||
|
||||
|
|
Loading…
Reference in a new issue