aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-06-26 22:47:02 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2011-06-26 22:47:02 +0200
commit34fa178243d462fa8ed8978227626bcd0c622d82 (patch)
treef72a1ed263051c19ba0c375cc015ced1f421a1ed
parente8ef3da7133dd9fc411fa8b3cc8b8fc2f9c58a98 (diff)
downloadbitcoin-34fa178243d462fa8ed8978227626bcd0c622d82.tar.xz
Change transaction table:
- Split "Description" column into "Type" and "Address", to make sorting easier (and facilitate filtering in the future) - Merged "credit" and "debit" columns into one "amount" column that can be black (positive) or red (negative)
-rw-r--r--src/qt/bitcoingui.cpp26
-rw-r--r--src/qt/forms/addressbookdialog.ui8
-rw-r--r--src/qt/transactiontablemodel.cpp143
-rw-r--r--src/qt/transactiontablemodel.h12
4 files changed, 102 insertions, 87 deletions
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 76ae3ddb3f..24311bfd29 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -265,6 +265,7 @@ void BitcoinGUI::setTabsModel(QAbstractItemModel *transaction_model)
QTableView *transaction_table = transactionViews.at(i);
transaction_table->setModel(proxy_model);
+ transaction_table->setAlternatingRowColors(true);
transaction_table->setSelectionBehavior(QAbstractItemView::SelectRows);
transaction_table->setSelectionMode(QAbstractItemView::ExtendedSelection);
transaction_table->setSortingEnabled(true);
@@ -275,12 +276,12 @@ void BitcoinGUI::setTabsModel(QAbstractItemModel *transaction_model)
TransactionTableModel::Status, 23);
transaction_table->horizontalHeader()->resizeSection(
TransactionTableModel::Date, 120);
- transaction_table->horizontalHeader()->setResizeMode(
- TransactionTableModel::Description, QHeaderView::Stretch);
transaction_table->horizontalHeader()->resizeSection(
- TransactionTableModel::Debit, 79);
+ TransactionTableModel::Type, 120);
+ transaction_table->horizontalHeader()->setResizeMode(
+ TransactionTableModel::ToAddress, QHeaderView::Stretch);
transaction_table->horizontalHeader()->resizeSection(
- TransactionTableModel::Credit, 79);
+ TransactionTableModel::Amount, 79);
}
connect(transaction_model, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
@@ -457,23 +458,24 @@ void BitcoinGUI::transactionDetails(const QModelIndex& idx)
void BitcoinGUI::incomingTransaction(const QModelIndex & parent, int start, int end)
{
TransactionTableModel *ttm = model->getTransactionTableModel();
- qint64 credit = ttm->index(start, TransactionTableModel::Credit, parent)
+ qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent)
.data(Qt::EditRole).toULongLong();
- qint64 debit = ttm->index(start, TransactionTableModel::Debit, parent)
- .data(Qt::EditRole).toULongLong();
- if((credit+debit)>0 && !model->inInitialBlockDownload())
+ if(amount>0 && !model->inInitialBlockDownload())
{
// On incoming transaction, make an info balloon
// Unless the initial block download is in progress, to prevent balloon-spam
QString date = ttm->index(start, TransactionTableModel::Date, parent)
.data().toString();
- QString description = ttm->index(start, TransactionTableModel::Description, parent)
+ QString type = ttm->index(start, TransactionTableModel::Type, parent)
+ .data().toString();
+ QString address = ttm->index(start, TransactionTableModel::ToAddress, parent)
.data().toString();
trayIcon->showMessage(tr("Incoming transaction"),
- "Date: " + date + "\n" +
- "Amount: " + QString::fromStdString(FormatMoney(credit+debit, true)) + "\n" +
- description,
+ tr("Date: ") + date + "\n" +
+ tr("Amount: ") + QString::fromStdString(FormatMoney(amount, true)) + "\n" +
+ tr("Type: ") + type + "\n" +
+ tr("Address: ") + address + "\n",
QSystemTrayIcon::Information);
}
}
diff --git a/src/qt/forms/addressbookdialog.ui b/src/qt/forms/addressbookdialog.ui
index f9b95c40c5..0427789687 100644
--- a/src/qt/forms/addressbookdialog.ui
+++ b/src/qt/forms/addressbookdialog.ui
@@ -17,7 +17,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
- <number>1</number>
+ <number>0</number>
</property>
<widget class="QWidget" name="sendTab">
<property name="toolTip">
@@ -29,6 +29,9 @@
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTableView" name="sendTableView">
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
@@ -68,6 +71,9 @@
</item>
<item>
<widget class="QTableView" name="receiveTableView">
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp
index 18ab421e3c..e49629c9a3 100644
--- a/src/qt/transactiontablemodel.cpp
+++ b/src/qt/transactiontablemodel.cpp
@@ -18,6 +18,15 @@ const QString TransactionTableModel::Sent = "s";
const QString TransactionTableModel::Received = "r";
const QString TransactionTableModel::Other = "o";
+// Credit and Debit columns are right-aligned as they contain numbers
+static int column_alignments[] = {
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignLeft|Qt::AlignVCenter,
+ Qt::AlignRight|Qt::AlignVCenter
+ };
+
// Comparison operator for sort/binary search of model tx list
struct TxLessThan
{
@@ -195,22 +204,12 @@ struct TransactionTablePriv
};
-// Credit and Debit columns are right-aligned as they contain numbers
-static int column_alignments[] = {
- Qt::AlignLeft|Qt::AlignVCenter,
- Qt::AlignLeft|Qt::AlignVCenter,
- Qt::AlignLeft|Qt::AlignVCenter,
- Qt::AlignRight|Qt::AlignVCenter,
- Qt::AlignRight|Qt::AlignVCenter,
- Qt::AlignLeft|Qt::AlignVCenter
- };
-
TransactionTableModel::TransactionTableModel(CWallet* wallet, QObject *parent):
QAbstractTableModel(parent),
wallet(wallet),
priv(new TransactionTablePriv(wallet, this))
{
- columns << tr("Status") << tr("Date") << tr("Description") << tr("Debit") << tr("Credit");
+ columns << tr("Status") << tr("Date") << tr("Type") << tr("Address") << tr("Amount");
priv->refreshWallet();
@@ -248,7 +247,7 @@ void TransactionTableModel::update()
// Status (number of confirmations) and (possibly) description
// columns changed for all rows.
emit dataChanged(index(0, Status), index(priv->size()-1, Status));
- emit dataChanged(index(0, Description), index(priv->size()-1, Description));
+ emit dataChanged(index(0, ToAddress), index(priv->size()-1, ToAddress));
}
}
@@ -326,42 +325,70 @@ std::string TransactionTableModel::lookupAddress(const std::string &address) con
return description;
}
-QVariant TransactionTableModel::formatTxDescription(const TransactionRecord *wtx) const
+QVariant TransactionTableModel::formatTxType(const TransactionRecord *wtx) const
{
QString description;
switch(wtx->type)
{
case TransactionRecord::RecvWithAddress:
- description = tr("Received with: ") + QString::fromStdString(lookupAddress(wtx->address));
+ description = tr("Received with");
break;
case TransactionRecord::RecvFromIP:
- description = tr("Received from IP: ") + QString::fromStdString(wtx->address);
+ description = tr("Received from IP");
break;
case TransactionRecord::SendToAddress:
- description = tr("Sent to: ") + QString::fromStdString(lookupAddress(wtx->address));
+ description = tr("Sent to");
break;
case TransactionRecord::SendToIP:
- description = tr("Sent to IP: ") + QString::fromStdString(wtx->address);
+ description = tr("Sent to IP");
break;
case TransactionRecord::SendToSelf:
description = tr("Payment to yourself");
break;
case TransactionRecord::Generated:
+ description = tr("Generated");
+ break;
+ }
+ return QVariant(description);
+}
+
+QVariant TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx) const
+{
+ QString description;
+
+ switch(wtx->type)
+ {
+ case TransactionRecord::RecvWithAddress:
+ description = QString::fromStdString(lookupAddress(wtx->address));
+ break;
+ case TransactionRecord::RecvFromIP:
+ description = QString::fromStdString(wtx->address);
+ break;
+ case TransactionRecord::SendToAddress:
+ description = QString::fromStdString(lookupAddress(wtx->address));
+ break;
+ case TransactionRecord::SendToIP:
+ description = QString::fromStdString(wtx->address);
+ break;
+ case TransactionRecord::SendToSelf:
+ description = QString();
+ break;
+ case TransactionRecord::Generated:
switch(wtx->status.maturity)
{
case TransactionStatus::Immature:
- description = tr("Generated (matures in %n more blocks)", "",
+ description = tr("(matures in %n more blocks)", "",
wtx->status.matures_in);
break;
case TransactionStatus::Mature:
- description = tr("Generated");
+ description = QString();
break;
case TransactionStatus::MaturesWarning:
- description = tr("Generated - Warning: This block was not received by any other nodes and will probably not be accepted!");
+ description = tr("(Warning: This block was not received by any other nodes and will probably not be accepted!)");
break;
case TransactionStatus::NotAccepted:
- description = tr("Generated (not accepted)");
+ description = tr("(not accepted)");
break;
}
break;
@@ -369,38 +396,14 @@ QVariant TransactionTableModel::formatTxDescription(const TransactionRecord *wtx
return QVariant(description);
}
-QVariant TransactionTableModel::formatTxDebit(const TransactionRecord *wtx) const
+QVariant TransactionTableModel::formatTxAmount(const TransactionRecord *wtx) const
{
- if(wtx->debit)
+ QString str = QString::fromStdString(FormatMoney(wtx->credit + wtx->debit));
+ if(!wtx->status.confirmed || wtx->status.maturity != TransactionStatus::Mature)
{
- QString str = QString::fromStdString(FormatMoney(wtx->debit));
- if(!wtx->status.confirmed || wtx->status.maturity != TransactionStatus::Mature)
- {
- str = QString("[") + str + QString("]");
- }
- return QVariant(str);
- }
- else
- {
- return QVariant();
- }
-}
-
-QVariant TransactionTableModel::formatTxCredit(const TransactionRecord *wtx) const
-{
- if(wtx->credit)
- {
- QString str = QString::fromStdString(FormatMoney(wtx->credit));
- if(!wtx->status.confirmed || wtx->status.maturity != TransactionStatus::Mature)
- {
- str = QString("[") + str + QString("]");
- }
- return QVariant(str);
- }
- else
- {
- return QVariant();
+ str = QString("[") + str + QString("]");
}
+ return QVariant(str);
}
QVariant TransactionTableModel::formatTxDecoration(const TransactionRecord *wtx) const
@@ -449,12 +452,12 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
{
case Date:
return formatTxDate(rec);
- case Description:
- return formatTxDescription(rec);
- case Debit:
- return formatTxDebit(rec);
- case Credit:
- return formatTxCredit(rec);
+ case Type:
+ return formatTxType(rec);
+ case ToAddress:
+ return formatTxToAddress(rec);
+ case Amount:
+ return formatTxAmount(rec);
}
}
else if(role == Qt::EditRole)
@@ -466,12 +469,12 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
return QString::fromStdString(rec->status.sortKey);
case Date:
return rec->time;
- case Description:
- return formatTxDescription(rec);
- case Debit:
- return rec->debit;
- case Credit:
- return rec->credit;
+ case Type:
+ return formatTxType(rec);
+ case ToAddress:
+ return formatTxToAddress(rec);
+ case Amount:
+ return rec->credit + rec->debit;
}
}
else if (role == Qt::ToolTipRole)
@@ -492,6 +495,10 @@ QVariant TransactionTableModel::data(const QModelIndex &index, int role) const
{
return QColor(128, 128, 128);
}
+ if(index.column() == Amount && (rec->credit+rec->debit) < 0)
+ {
+ return QColor(255, 0, 0);
+ }
}
else if (role == TypeRole)
{
@@ -535,12 +542,12 @@ QVariant TransactionTableModel::headerData(int section, Qt::Orientation orientat
return tr("Transaction status. Hover over this field to show number of confirmations.");
case Date:
return tr("Date and time that the transaction was received.");
- case Description:
- return tr("Short description of the transaction.");
- case Debit:
- return tr("Amount removed from balance.");
- case Credit:
- return tr("Amount added to balance.");
+ case Type:
+ return tr("Type of transaction.");
+ case ToAddress:
+ return tr("Destination address of transaction.");
+ case Amount:
+ return tr("Amount removed from or added to balance.");
}
}
}
diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h
index 72a645b3db..d19e1a3af6 100644
--- a/src/qt/transactiontablemodel.h
+++ b/src/qt/transactiontablemodel.h
@@ -18,9 +18,9 @@ public:
enum {
Status = 0,
Date = 1,
- Description = 2,
- Debit = 3,
- Credit = 4
+ Type = 2,
+ ToAddress = 3,
+ Amount = 4
} ColumnIndex;
enum {
@@ -47,9 +47,9 @@ private:
std::string lookupAddress(const std::string &address) const;
QVariant formatTxStatus(const TransactionRecord *wtx) const;
QVariant formatTxDate(const TransactionRecord *wtx) const;
- QVariant formatTxDescription(const TransactionRecord *wtx) const;
- QVariant formatTxDebit(const TransactionRecord *wtx) const;
- QVariant formatTxCredit(const TransactionRecord *wtx) const;
+ QVariant formatTxType(const TransactionRecord *wtx) const;
+ QVariant formatTxToAddress(const TransactionRecord *wtx) const;
+ QVariant formatTxAmount(const TransactionRecord *wtx) const;
QVariant formatTxDecoration(const TransactionRecord *wtx) const;
private slots: