|
|
@ -37,7 +37,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *parent) : |
|
|
|
TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *parent) : |
|
|
|
QWidget(parent), model(0), transactionProxyModel(0), |
|
|
|
QWidget(parent), model(0), transactionProxyModel(0), |
|
|
|
transactionView(0) |
|
|
|
transactionView(0), abandonAction(0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Build filter row
|
|
|
|
// Build filter row
|
|
|
|
setContentsMargins(0,0,0,0); |
|
|
|
setContentsMargins(0,0,0,0); |
|
|
@ -137,6 +137,7 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa |
|
|
|
transactionView = view; |
|
|
|
transactionView = view; |
|
|
|
|
|
|
|
|
|
|
|
// Actions
|
|
|
|
// Actions
|
|
|
|
|
|
|
|
abandonAction = new QAction(tr("Abandon transaction"), this); |
|
|
|
QAction *copyAddressAction = new QAction(tr("Copy address"), this); |
|
|
|
QAction *copyAddressAction = new QAction(tr("Copy address"), this); |
|
|
|
QAction *copyLabelAction = new QAction(tr("Copy label"), this); |
|
|
|
QAction *copyLabelAction = new QAction(tr("Copy label"), this); |
|
|
|
QAction *copyAmountAction = new QAction(tr("Copy amount"), this); |
|
|
|
QAction *copyAmountAction = new QAction(tr("Copy amount"), this); |
|
|
@ -153,8 +154,10 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa |
|
|
|
contextMenu->addAction(copyTxIDAction); |
|
|
|
contextMenu->addAction(copyTxIDAction); |
|
|
|
contextMenu->addAction(copyTxHexAction); |
|
|
|
contextMenu->addAction(copyTxHexAction); |
|
|
|
contextMenu->addAction(copyTxPlainText); |
|
|
|
contextMenu->addAction(copyTxPlainText); |
|
|
|
contextMenu->addAction(editLabelAction); |
|
|
|
|
|
|
|
contextMenu->addAction(showDetailsAction); |
|
|
|
contextMenu->addAction(showDetailsAction); |
|
|
|
|
|
|
|
contextMenu->addSeparator(); |
|
|
|
|
|
|
|
contextMenu->addAction(abandonAction); |
|
|
|
|
|
|
|
contextMenu->addAction(editLabelAction); |
|
|
|
|
|
|
|
|
|
|
|
mapperThirdPartyTxUrls = new QSignalMapper(this); |
|
|
|
mapperThirdPartyTxUrls = new QSignalMapper(this); |
|
|
|
|
|
|
|
|
|
|
@ -170,6 +173,7 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa |
|
|
|
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))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
connect(abandonAction, SIGNAL(triggered()), this, SLOT(abandonTx())); |
|
|
|
connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress())); |
|
|
|
connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress())); |
|
|
|
connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); |
|
|
|
connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); |
|
|
|
connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); |
|
|
|
connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); |
|
|
@ -360,12 +364,37 @@ void TransactionView::exportClicked() |
|
|
|
void TransactionView::contextualMenu(const QPoint &point) |
|
|
|
void TransactionView::contextualMenu(const QPoint &point) |
|
|
|
{ |
|
|
|
{ |
|
|
|
QModelIndex index = transactionView->indexAt(point); |
|
|
|
QModelIndex index = transactionView->indexAt(point); |
|
|
|
|
|
|
|
QModelIndexList selection = transactionView->selectionModel()->selectedRows(0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// check if transaction can be abandoned, disable context menu action in case it doesn't
|
|
|
|
|
|
|
|
uint256 hash; |
|
|
|
|
|
|
|
hash.SetHex(selection.at(0).data(TransactionTableModel::TxHashRole).toString().toStdString()); |
|
|
|
|
|
|
|
abandonAction->setEnabled(model->transactionCanBeAbandoned(hash)); |
|
|
|
|
|
|
|
|
|
|
|
if(index.isValid()) |
|
|
|
if(index.isValid()) |
|
|
|
{ |
|
|
|
{ |
|
|
|
contextMenu->exec(QCursor::pos()); |
|
|
|
contextMenu->exec(QCursor::pos()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void TransactionView::abandonTx() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if(!transactionView || !transactionView->selectionModel()) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
QModelIndexList selection = transactionView->selectionModel()->selectedRows(0); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// get the hash from the TxHashRole (QVariant / QString)
|
|
|
|
|
|
|
|
uint256 hash; |
|
|
|
|
|
|
|
QString hashQStr = selection.at(0).data(TransactionTableModel::TxHashRole).toString(); |
|
|
|
|
|
|
|
hash.SetHex(hashQStr.toStdString()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Abandon the wallet transaction over the walletModel
|
|
|
|
|
|
|
|
model->abandonTransaction(hash); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Update the table
|
|
|
|
|
|
|
|
model->getTransactionTableModel()->updateTransaction(hashQStr, CT_UPDATED, false); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void TransactionView::copyAddress() |
|
|
|
void TransactionView::copyAddress() |
|
|
|
{ |
|
|
|
{ |
|
|
|
GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::AddressRole); |
|
|
|
GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::AddressRole); |
|
|
|