aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIlya Kitaev <mbg033@gmail.com>2016-10-02 21:40:40 +0300
committerIlya Kitaev <mbg033@gmail.com>2016-10-10 00:15:17 +0300
commit0ff3fd32122a22d7c56a289faa6402351f425873 (patch)
treee9eb7c5a38c5c67415217925079f5202ecbfaa95 /src
parentbd8646dd194771a9ff39bc75530d169a6d570ef6 (diff)
downloadmonzero-gui-0ff3fd32122a22d7c56a289faa6402351f425873.tar.gz
monzero-gui-0ff3fd32122a22d7c56a289faa6402351f425873.tar.xz
monzero-gui-0ff3fd32122a22d7c56a289faa6402351f425873.zip
added TransactionHistoryModel; renamings
Diffstat (limited to 'src')
-rw-r--r--src/libwalletqt/TransactionHistory.cpp14
-rw-r--r--src/libwalletqt/TransactionHistory.h5
-rw-r--r--src/libwalletqt/TransactionInfo.cpp12
-rw-r--r--src/libwalletqt/TransactionInfo.h14
-rw-r--r--src/libwalletqt/Wallet.cpp18
-rw-r--r--src/libwalletqt/Wallet.h13
-rw-r--r--src/model/TransactionHistoryModel.cpp102
-rw-r--r--src/model/TransactionHistoryModel.h48
8 files changed, 207 insertions, 19 deletions
diff --git a/src/libwalletqt/TransactionHistory.cpp b/src/libwalletqt/TransactionHistory.cpp
index 2c2c9f73..7466038f 100644
--- a/src/libwalletqt/TransactionHistory.cpp
+++ b/src/libwalletqt/TransactionHistory.cpp
@@ -3,11 +3,6 @@
#include <wallet/wallet2_api.h>
-int TransactionHistory::count() const
-{
- return m_pimpl->count();
-}
-
TransactionInfo *TransactionHistory::transaction(int index)
{
// box up Bitmonero::TransactionInfo
@@ -39,10 +34,17 @@ QList<TransactionInfo *> TransactionHistory::getAll() const
void TransactionHistory::refresh()
{
// XXX this invalidates previously saved history that might be used by clients
+ emit refreshStarted();
m_pimpl->refresh();
- emit invalidated();
+ emit refreshFinished();
}
+quint64 TransactionHistory::count() const
+{
+ return m_pimpl->count();
+}
+
+
TransactionHistory::TransactionHistory(Bitmonero::TransactionHistory *pimpl, QObject *parent)
: QObject(parent), m_pimpl(pimpl)
{
diff --git a/src/libwalletqt/TransactionHistory.h b/src/libwalletqt/TransactionHistory.h
index a6287506..560b8df8 100644
--- a/src/libwalletqt/TransactionHistory.h
+++ b/src/libwalletqt/TransactionHistory.h
@@ -16,14 +16,15 @@ class TransactionHistory : public QObject
Q_PROPERTY(int count READ count)
public:
- int count() const;
Q_INVOKABLE TransactionInfo *transaction(int index);
Q_INVOKABLE TransactionInfo * transaction(const QString &id);
Q_INVOKABLE QList<TransactionInfo*> getAll() const;
Q_INVOKABLE void refresh();
+ quint64 count() const;
signals:
- void invalidated();
+ void refreshStarted();
+ void refreshFinished();
public slots:
diff --git a/src/libwalletqt/TransactionInfo.cpp b/src/libwalletqt/TransactionInfo.cpp
index 192e85e5..40711765 100644
--- a/src/libwalletqt/TransactionInfo.cpp
+++ b/src/libwalletqt/TransactionInfo.cpp
@@ -1,4 +1,6 @@
#include "TransactionInfo.h"
+#include "WalletManager.h"
+
#include <QDateTime>
TransactionInfo::Direction TransactionInfo::direction() const
@@ -16,15 +18,15 @@ bool TransactionInfo::isFailed() const
return m_pimpl->isFailed();
}
-quint64 TransactionInfo::amount() const
+
+QString TransactionInfo::amount() const
{
- return m_pimpl->amount();
+ return WalletManager::instance()->displayAmount(m_pimpl->amount());
}
-quint64 TransactionInfo::fee() const
+QString TransactionInfo::fee() const
{
- return m_pimpl->fee();
-
+ return WalletManager::instance()->displayAmount(m_pimpl->fee());
}
quint64 TransactionInfo::blockHeight() const
diff --git a/src/libwalletqt/TransactionInfo.h b/src/libwalletqt/TransactionInfo.h
index 62c26e2f..4dabc5b4 100644
--- a/src/libwalletqt/TransactionInfo.h
+++ b/src/libwalletqt/TransactionInfo.h
@@ -10,8 +10,8 @@ class TransactionInfo : public QObject
Q_PROPERTY(Direction direction READ direction)
Q_PROPERTY(bool isPending READ isPending)
Q_PROPERTY(bool isFailed READ isFailed)
- Q_PROPERTY(quint64 amount READ amount)
- Q_PROPERTY(quint64 fee READ fee)
+ Q_PROPERTY(QString amount READ amount)
+ Q_PROPERTY(QString fee READ fee)
Q_PROPERTY(quint64 blockHeight READ blockHeight)
Q_PROPERTY(QString hash READ hash)
Q_PROPERTY(QString timestamp READ timestamp)
@@ -23,6 +23,8 @@ public:
Direction_Out = Bitmonero::TransactionInfo::Direction_Out
};
+ Q_ENUM(Direction)
+
// TODO: implement as separate class;
// struct Transfer {
@@ -30,11 +32,12 @@ public:
// const uint64_t amount;
// const std::string address;
// };
+
Direction direction() const;
bool isPending() const;
bool isFailed() const;
- quint64 amount() const;
- quint64 fee() const;
+ QString amount() const;
+ QString fee() const;
quint64 blockHeight() const;
//! transaction_id
QString hash() const;
@@ -51,4 +54,7 @@ private:
Bitmonero::TransactionInfo * m_pimpl;
};
+// in order to wrap it to QVariant
+Q_DECLARE_METATYPE(TransactionInfo*)
+
#endif // TRANSACTIONINFO_H
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index 987f4640..4dcf9add 100644
--- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp
@@ -1,6 +1,7 @@
#include "Wallet.h"
#include "PendingTransaction.h"
#include "TransactionHistory.h"
+#include "model/TransactionHistoryModel.h"
#include "wallet/wallet2_api.h"
#include <QFile>
@@ -59,7 +60,10 @@ private:
Wallet * m_wallet;
};
-
+Wallet::Wallet(QObject * parent)
+ : Wallet(nullptr, parent)
+{
+}
QString Wallet::getSeed() const
{
@@ -202,6 +206,16 @@ TransactionHistory *Wallet::history()
return m_history;
}
+TransactionHistoryModel *Wallet::historyModel()
+{
+ if (!m_historyModel) {
+ m_historyModel = new TransactionHistoryModel(this);
+ m_historyModel->setTransactionHistory(this->history());
+ }
+
+ return m_historyModel;
+}
+
QString Wallet::generatePaymentId() const
{
@@ -228,6 +242,7 @@ Wallet::Wallet(Bitmonero::Wallet *w, QObject *parent)
: QObject(parent)
, m_walletImpl(w)
, m_history(nullptr)
+ , m_historyModel(nullptr)
, m_daemonBlockChainHeight(0)
, m_daemonBlockChainHeightTtl(DAEMON_BLOCKCHAIN_HEIGHT_CACHE_TTL_SECONDS)
{
@@ -236,5 +251,6 @@ Wallet::Wallet(Bitmonero::Wallet *w, QObject *parent)
Wallet::~Wallet()
{
+
Bitmonero::WalletManagerFactory::getWalletManager()->closeWallet(m_walletImpl);
}
diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h
index 703bd186..1a6459d4 100644
--- a/src/libwalletqt/Wallet.h
+++ b/src/libwalletqt/Wallet.h
@@ -13,6 +13,7 @@ namespace Bitmonero {
class TransactionHistory;
+class TransactionHistoryModel;
class Wallet : public QObject
{
@@ -27,8 +28,11 @@ class Wallet : public QObject
Q_PROPERTY(quint64 unlockedBalance READ unlockedBalance)
Q_PROPERTY(TransactionHistory * history READ history)
Q_PROPERTY(QString paymentId READ paymentId WRITE setPaymentId)
+ Q_PROPERTY(TransactionHistoryModel * historyModel READ historyModel)
public:
+
+
enum Status {
Status_Ok = Bitmonero::Wallet::Status_Ok,
Status_Error = Bitmonero::Wallet::Status_Error
@@ -111,6 +115,9 @@ public:
//! returns transaction history
TransactionHistory * history();
+ //! returns transaction history model
+ TransactionHistoryModel * historyModel();
+
//! generate payment id
Q_INVOKABLE QString generatePaymentId() const;
@@ -139,9 +146,9 @@ signals:
private:
+ Wallet(QObject * parent = nullptr);
Wallet(Bitmonero::Wallet *w, QObject * parent = 0);
~Wallet();
-
private:
friend class WalletManager;
friend class WalletListenerImpl;
@@ -149,6 +156,8 @@ private:
Bitmonero::Wallet * m_walletImpl;
// history lifetime managed by wallet;
TransactionHistory * m_history;
+ // Used for UI history view
+ TransactionHistoryModel * m_historyModel;
QString m_paymentId;
mutable QTime m_daemonBlockChainHeightTime;
mutable quint64 m_daemonBlockChainHeight;
@@ -156,4 +165,6 @@ private:
};
+
+
#endif // WALLET_H
diff --git a/src/model/TransactionHistoryModel.cpp b/src/model/TransactionHistoryModel.cpp
new file mode 100644
index 00000000..1666981c
--- /dev/null
+++ b/src/model/TransactionHistoryModel.cpp
@@ -0,0 +1,102 @@
+#include "TransactionHistoryModel.h"
+#include "TransactionHistory.h"
+#include "TransactionInfo.h"
+
+
+TransactionHistoryModel::TransactionHistoryModel(QObject *parent)
+ : QAbstractListModel(parent), m_transactionHistory(nullptr)
+{
+
+}
+
+void TransactionHistoryModel::setTransactionHistory(TransactionHistory *th)
+{
+ beginResetModel();
+ m_transactionHistory = th;
+ endResetModel();
+ emit transactionHistoryChanged();
+}
+
+TransactionHistory *TransactionHistoryModel::transactionHistory() const
+{
+ return m_transactionHistory;
+}
+
+QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const
+{
+ if (!m_transactionHistory) {
+ return QVariant();
+ }
+
+ if (index.row() < 0 || (unsigned)index.row() >= m_transactionHistory->count()) {
+ return QVariant();
+ }
+
+ TransactionInfo * tInfo = m_transactionHistory->transaction(index.row());
+
+
+ Q_ASSERT(tInfo);
+ if (!tInfo) {
+ qCritical("%s: internal error: no transaction info for index %d", __FUNCTION__, index.row());
+ return QVariant();
+ }
+ QVariant result;
+ switch (role) {
+ case TransactionRole:
+ result = QVariant::fromValue(tInfo);
+ break;
+ case TransactionDirectionRole:
+ result = QVariant::fromValue(tInfo->direction());
+ break;
+ case TransactionPendingRole:
+ result = tInfo->isPending();
+ break;
+ case TransactionFailedRole:
+ result = tInfo->isFailed();
+ break;
+ case TransactionAmountRole:
+ result = tInfo->amount();
+ break;
+ case TransactionFeeRole:
+ result = tInfo->fee();
+ break;
+ case TransactionBlockHeightRole:
+ result = tInfo->blockHeight();
+ break;
+ case TransactionHashRole:
+ result = tInfo->hash();
+ break;
+ case TransactionTimeStampRole:
+ result = tInfo->timestamp();
+ break;
+ case TransactionPaymentIdRole:
+ result = tInfo->paymentId();
+ break;
+ }
+
+ return result;
+}
+
+int TransactionHistoryModel::rowCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent)
+ return m_transactionHistory ? m_transactionHistory->count() : 0;
+}
+
+QHash<int, QByteArray> TransactionHistoryModel::roleNames() const
+{
+ QHash<int, QByteArray> roleNames = QAbstractListModel::roleNames();
+ roleNames.insert(TransactionRole, "transaction");
+ roleNames.insert(TransactionDirectionRole, "direction");
+ roleNames.insert(TransactionPendingRole, "isPending");
+ roleNames.insert(TransactionFailedRole, "isFailed");
+ roleNames.insert(TransactionAmountRole, "amount");
+ roleNames.insert(TransactionFeeRole, "fee");
+ roleNames.insert(TransactionBlockHeightRole, "blockHeight");
+ roleNames.insert(TransactionHashRole, "hash");
+ roleNames.insert(TransactionTimeStampRole, "timeStamp");
+ roleNames.insert(TransactionPaymentIdRole, "paymentId");
+ return roleNames;
+}
+
+
diff --git a/src/model/TransactionHistoryModel.h b/src/model/TransactionHistoryModel.h
new file mode 100644
index 00000000..2813a89a
--- /dev/null
+++ b/src/model/TransactionHistoryModel.h
@@ -0,0 +1,48 @@
+#ifndef TRANSACTIONHISTORYMODEL_H
+#define TRANSACTIONHISTORYMODEL_H
+
+#include <QAbstractListModel>
+
+class TransactionHistory;
+class TransactionInfo;
+
+/**
+ * @brief The TransactionHistoryModel class - read-only list model for Transaction History
+ */
+class TransactionHistoryModel : public QAbstractListModel
+{
+ Q_OBJECT
+ Q_PROPERTY(TransactionHistory * transactionHistory READ transactionHistory WRITE setTransactionHistory NOTIFY transactionHistoryChanged)
+
+public:
+ enum TransactionInfoRole {
+ TransactionRole = Qt::UserRole + 1, // for the TransactionInfo object;
+ TransactionDirectionRole,
+ TransactionPendingRole,
+ TransactionFailedRole,
+ TransactionAmountRole,
+ TransactionFeeRole,
+ TransactionBlockHeightRole,
+ TransactionHashRole,
+ TransactionTimeStampRole,
+ TransactionPaymentIdRole
+ };
+
+ TransactionHistoryModel(QObject * parent = 0);
+ void setTransactionHistory(TransactionHistory * th);
+ TransactionHistory * transactionHistory() const;
+
+ /// QAbstractListModel
+ virtual QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const override;
+ virtual int rowCount(const QModelIndex & parent = QModelIndex()) const override;
+ virtual QHash<int, QByteArray> roleNames() const override;
+
+signals:
+ void transactionHistoryChanged();
+
+private:
+ TransactionHistory * m_transactionHistory;
+
+};
+
+#endif // TRANSACTIONHISTORYMODEL_H