Skip to content

Commit 9a3d936

Browse files
laanwjgavinandresen
authored andcommitted
qt: GUI for conflicted transactions
- Exclamation mark icon for conflicted transactions - Show mouseover status for conflicted transactions as "conflicted" - Don't show inactive transactions on overview page overview
1 parent 2b72d46 commit 9a3d936

10 files changed

+37
-6
lines changed

src/qt/Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ RES_ICONS = \
243243
res/icons/toolbar_testnet.png \
244244
res/icons/transaction0.png \
245245
res/icons/transaction2.png \
246+
res/icons/transaction_conflicted.png \
246247
res/icons/tx_inout.png \
247248
res/icons/tx_input.png \
248249
res/icons/tx_output.png \

src/qt/bitcoin.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<file alias="connect_4">res/icons/connect4_16.png</file>
1313
<file alias="transaction_0">res/icons/transaction0.png</file>
1414
<file alias="transaction_confirmed">res/icons/transaction2.png</file>
15+
<file alias="transaction_conflicted">res/icons/transaction_conflicted.png</file>
1516
<file alias="transaction_1">res/icons/clock1.png</file>
1617
<file alias="transaction_2">res/icons/clock2.png</file>
1718
<file alias="transaction_3">res/icons/clock3.png</file>

src/qt/overviewpage.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ void OverviewPage::setWalletModel(WalletModel *model)
175175
filter->setLimit(NUM_ITEMS);
176176
filter->setDynamicSortFilter(true);
177177
filter->setSortRole(Qt::EditRole);
178+
filter->setShowInactive(false);
178179
filter->sort(TransactionTableModel::Status, Qt::DescendingOrder);
179180

180181
ui->listTransactions->setModel(filter);
474 Bytes
Loading

src/qt/transactionfilterproxy.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "transactionfilterproxy.h"
66

77
#include "transactiontablemodel.h"
8+
#include "transactionrecord.h"
89

910
#include <cstdlib>
1011

@@ -22,7 +23,8 @@ TransactionFilterProxy::TransactionFilterProxy(QObject *parent) :
2223
addrPrefix(),
2324
typeFilter(ALL_TYPES),
2425
minAmount(0),
25-
limitRows(-1)
26+
limitRows(-1),
27+
showInactive(true)
2628
{
2729
}
2830

@@ -35,7 +37,10 @@ bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &
3537
QString address = index.data(TransactionTableModel::AddressRole).toString();
3638
QString label = index.data(TransactionTableModel::LabelRole).toString();
3739
qint64 amount = llabs(index.data(TransactionTableModel::AmountRole).toLongLong());
40+
int status = index.data(TransactionTableModel::StatusRole).toInt();
3841

42+
if(!showInactive && status == TransactionStatus::Conflicted)
43+
return false;
3944
if(!(TYPE(type) & typeFilter))
4045
return false;
4146
if(datetime < dateFrom || datetime > dateTo)
@@ -78,6 +83,12 @@ void TransactionFilterProxy::setLimit(int limit)
7883
this->limitRows = limit;
7984
}
8085

86+
void TransactionFilterProxy::setShowInactive(bool showInactive)
87+
{
88+
this->showInactive = showInactive;
89+
invalidateFilter();
90+
}
91+
8192
int TransactionFilterProxy::rowCount(const QModelIndex &parent) const
8293
{
8394
if(limitRows != -1)

src/qt/transactionfilterproxy.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ class TransactionFilterProxy : public QSortFilterProxyModel
3636
/** Set maximum number of rows returned, -1 if unlimited. */
3737
void setLimit(int limit);
3838

39+
/** Set whether to show conflicted transactions. */
40+
void setShowInactive(bool showInactive);
41+
3942
int rowCount(const QModelIndex &parent = QModelIndex()) const;
4043

4144
protected:
@@ -48,6 +51,7 @@ class TransactionFilterProxy : public QSortFilterProxyModel
4851
quint32 typeFilter;
4952
qint64 minAmount;
5053
int limitRows;
54+
bool showInactive;
5155
};
5256

5357
#endif // TRANSACTIONFILTERPROXY_H

src/qt/transactionrecord.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,11 @@ void TransactionRecord::updateStatus(const CWalletTx &wtx)
183183
}
184184
else
185185
{
186-
if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
186+
if (status.depth < 0)
187+
{
188+
status.status = TransactionStatus::Conflicted;
189+
}
190+
else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0)
187191
{
188192
status.status = TransactionStatus::Offline;
189193
}

src/qt/transactionrecord.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ class TransactionStatus
3636
OpenUntilBlock,
3737
Offline,
3838
Unconfirmed,
39-
HaveConfirmations
39+
HaveConfirmations,
40+
Conflicted
4041
};
4142

4243
bool confirmed;

src/qt/transactiontablemodel.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,14 +312,17 @@ QString TransactionTableModel::formatTxStatus(const TransactionRecord *wtx) cons
312312
status = tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx->status.open_for));
313313
break;
314314
case TransactionStatus::Offline:
315-
status = tr("Offline (%1 confirmations)").arg(wtx->status.depth);
315+
status = tr("Offline");
316316
break;
317317
case TransactionStatus::Unconfirmed:
318318
status = tr("Unconfirmed (%1 of %2 confirmations)").arg(wtx->status.depth).arg(TransactionRecord::NumConfirmations);
319319
break;
320320
case TransactionStatus::HaveConfirmations:
321321
status = tr("Confirmed (%1 confirmations)").arg(wtx->status.depth);
322322
break;
323+
case TransactionStatus::Conflicted:
324+
status = tr("Conflicted");
325+
break;
323326
}
324327
}
325328

@@ -471,7 +474,6 @@ QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx)
471474
case TransactionStatus::OpenUntilBlock:
472475
case TransactionStatus::OpenUntilDate:
473476
return QColor(64,64,255);
474-
break;
475477
case TransactionStatus::Offline:
476478
return QColor(192,192,192);
477479
case TransactionStatus::Unconfirmed:
@@ -486,6 +488,8 @@ QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx)
486488
};
487489
case TransactionStatus::HaveConfirmations:
488490
return QIcon(":/icons/transaction_confirmed");
491+
case TransactionStatus::Conflicted:
492+
return QIcon(":/icons/transaction_conflicted");
489493
}
490494
}
491495
return QColor(0,0,0);
@@ -587,6 +591,8 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
587591
rec->status.maturity != TransactionStatus::Mature);
588592
case FormattedAmountRole:
589593
return formatTxAmount(rec, false);
594+
case StatusRole:
595+
return rec->status.status;
590596
}
591597
return QVariant();
592598
}

src/qt/transactiontablemodel.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@ class TransactionTableModel : public QAbstractTableModel
5353
/** Is transaction confirmed? */
5454
ConfirmedRole,
5555
/** Formatted amount, without brackets when unconfirmed */
56-
FormattedAmountRole
56+
FormattedAmountRole,
57+
/** Transaction status (TransactionRecord::Status) */
58+
StatusRole
5759
};
5860

5961
int rowCount(const QModelIndex &parent) const;

0 commit comments

Comments
 (0)