diff options
| author | Ilya Kitaev <mbg033@gmail.com> | 2016-10-08 01:24:18 +0300 |
|---|---|---|
| committer | Ilya Kitaev <mbg033@gmail.com> | 2016-10-10 00:19:39 +0300 |
| commit | 9b09e83ba0056364f99fa7a9e02a4181ac7d343d (patch) | |
| tree | df2148efd71fa6af49f86a95ef0e4a95117a4694 /src/model | |
| parent | e3cea8582f1f860ba2a25bbfb174fbcbcd306c9a (diff) | |
| download | monzero-gui-9b09e83ba0056364f99fa7a9e02a4181ac7d343d.tar.gz monzero-gui-9b09e83ba0056364f99fa7a9e02a4181ac7d343d.tar.xz monzero-gui-9b09e83ba0056364f99fa7a9e02a4181ac7d343d.zip | |
History: filtering by paymentId and date
Diffstat (limited to 'src/model')
| -rw-r--r-- | src/model/TransactionHistorySortFilterModel.cpp | 85 | ||||
| -rw-r--r-- | src/model/TransactionHistorySortFilterModel.h | 27 |
2 files changed, 107 insertions, 5 deletions
diff --git a/src/model/TransactionHistorySortFilterModel.cpp b/src/model/TransactionHistorySortFilterModel.cpp index 946137c6..8cdcff6c 100644 --- a/src/model/TransactionHistorySortFilterModel.cpp +++ b/src/model/TransactionHistorySortFilterModel.cpp @@ -6,17 +6,49 @@ TransactionHistorySortFilterModel::TransactionHistorySortFilterModel(QObject *parent) : QSortFilterProxyModel(parent) { - + setDynamicSortFilter(true); } QString TransactionHistorySortFilterModel::paymentIdFilter() const { - + return m_filterValues.value(TransactionHistoryModel::TransactionPaymentIdRole).toString(); } void TransactionHistorySortFilterModel::setPaymentIdFilter(const QString &arg) { + if (paymentIdFilter() != arg) { + m_filterValues[TransactionHistoryModel::TransactionPaymentIdRole] = arg; + emit paymentIdFilterChanged(); + invalidateFilter(); + } +} + +QDate TransactionHistorySortFilterModel::dateFromFilter() const +{ + return dateFromToFilter(From); +} +void TransactionHistorySortFilterModel::setDateFromFilter(const QDate &date) +{ + if (date != dateFromFilter()) { + setDateFromToFilter(From, date); + emit dateFromFilterChanged(); + invalidateFilter(); + } +} + +QDate TransactionHistorySortFilterModel::dateToFilter() const +{ + return dateFromToFilter(To); +} + +void TransactionHistorySortFilterModel::setDateToFilter(const QDate &date) +{ + if (date != dateToFilter()) { + setDateFromToFilter(To, date); + emit dateFromFilterChanged(); + invalidateFilter(); + } } void TransactionHistorySortFilterModel::sort(int column, Qt::SortOrder order) @@ -24,6 +56,12 @@ void TransactionHistorySortFilterModel::sort(int column, Qt::SortOrder order) QSortFilterProxyModel::sort(column, order); } +TransactionHistory *TransactionHistorySortFilterModel::transactionHistory() const +{ + const TransactionHistoryModel * model = static_cast<const TransactionHistoryModel*> (sourceModel()); + return model->transactionHistory(); +} + bool TransactionHistorySortFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { @@ -38,11 +76,27 @@ bool TransactionHistorySortFilterModel::filterAcceptsRow(int source_row, const Q bool result = true; + // iterating through filters for (int role : m_filterValues.keys()) { if (m_filterValues.contains(role)) { QVariant data = sourceModel()->data(index, role); - result = data.toString().contains(m_filterValues.value(role).toString()); - if (result) + switch (role) { + case TransactionHistoryModel::TransactionPaymentIdRole: + result = data.toString().contains(paymentIdFilter()); + break; + case TransactionHistoryModel::TransactionTimeStampRole: + { + QDateTime from = QDateTime(dateFromFilter()); + QDateTime to = QDateTime(dateToFilter()); + QDateTime timestamp = data.toDateTime(); + bool matchFrom = from.isNull() || timestamp.isNull() || timestamp >= from; + bool matchTo = to.isNull() || timestamp.isNull() || timestamp <= to; + result = matchFrom && matchTo; + } + default: + break; + } + if (!result) // stop the loop once filter doesn't match break; } } @@ -64,3 +118,26 @@ void TransactionHistorySortFilterModel::setFilterValue(int role, const QVariant { m_filterValues[role] = filterValue; } + +QDate TransactionHistorySortFilterModel::dateFromToFilter(TransactionHistorySortFilterModel::DateScopeIndex index) const +{ + int role = TransactionHistoryModel::TransactionTimeStampRole; + if (!m_filterValues.contains(role)) { + return QDate(); + } + return m_filterValues.value(role).toList().at(index).toDate(); +} + +void TransactionHistorySortFilterModel::setDateFromToFilter(TransactionHistorySortFilterModel::DateScopeIndex index, const QDate &value) +{ + QVariantList scopeFilter; + int role = TransactionHistoryModel::TransactionTimeStampRole; + if (m_filterValues.contains(role)) { + scopeFilter = m_filterValues.value(role).toList(); + } + while (scopeFilter.size() < 2) { + scopeFilter.append(QDate()); + } + scopeFilter[index] = QVariant::fromValue(value); + m_filterValues[role] = scopeFilter; +} diff --git a/src/model/TransactionHistorySortFilterModel.h b/src/model/TransactionHistorySortFilterModel.h index c1d3d2c2..541714b8 100644 --- a/src/model/TransactionHistorySortFilterModel.h +++ b/src/model/TransactionHistorySortFilterModel.h @@ -5,18 +5,36 @@ #include <QSortFilterProxyModel> #include <QMap> #include <QVariant> +#include <QDate> +class TransactionHistory; class TransactionHistorySortFilterModel: public QSortFilterProxyModel { -Q_OBJECT + Q_OBJECT + Q_PROPERTY(QString paymentIdFilter READ paymentIdFilter WRITE setPaymentIdFilter NOTIFY paymentIdFilterChanged) + Q_PROPERTY(QDate dateFromFilter READ dateFromFilter WRITE setDateFromFilter NOTIFY dateFromFilterChanged) + Q_PROPERTY(QDate dateToFilter READ dateToFilter WRITE setDateToFilter NOTIFY dateToFilterChanged) + Q_PROPERTY(TransactionHistory * transactionHistory READ transactionHistory) + public: TransactionHistorySortFilterModel(QObject * parent = nullptr); QString paymentIdFilter() const; void setPaymentIdFilter(const QString &arg); + QDate dateFromFilter() const; + void setDateFromFilter(const QDate &date); + QDate dateToFilter() const; + void setDateToFilter(const QDate &date); Q_INVOKABLE void sort(int column, Qt::SortOrder order); + TransactionHistory * transactionHistory() const; + +signals: + void paymentIdFilterChanged(); + void dateFromFilterChanged(); + void dateToFilterChanged(); + protected: // QSortFilterProxyModel overrides virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; @@ -24,8 +42,15 @@ protected: private: + enum DateScopeIndex { + From = 0, + To = 1 + }; + QVariant filterValue(int role); void setFilterValue(int role, const QVariant &filterValue); + QDate dateFromToFilter(DateScopeIndex index) const; + void setDateFromToFilter(DateScopeIndex index, const QDate &value); private: QMap<int, QVariant> m_filterValues; |
