aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libwalletqt/TransactionInfo.h3
-rw-r--r--src/model/TransactionHistorySortFilterModel.cpp66
-rw-r--r--src/model/TransactionHistorySortFilterModel.h17
3 files changed, 37 insertions, 49 deletions
diff --git a/src/libwalletqt/TransactionInfo.h b/src/libwalletqt/TransactionInfo.h
index b614dfc8..f30f42fa 100644
--- a/src/libwalletqt/TransactionInfo.h
+++ b/src/libwalletqt/TransactionInfo.h
@@ -24,7 +24,8 @@ class TransactionInfo : public QObject
public:
enum Direction {
Direction_In = Bitmonero::TransactionInfo::Direction_In,
- Direction_Out = Bitmonero::TransactionInfo::Direction_Out
+ Direction_Out = Bitmonero::TransactionInfo::Direction_Out,
+ Direction_Both // invalid direction value, used for filtering
};
Q_ENUM(Direction)
diff --git a/src/model/TransactionHistorySortFilterModel.cpp b/src/model/TransactionHistorySortFilterModel.cpp
index d06d44bf..6d6a2b44 100644
--- a/src/model/TransactionHistorySortFilterModel.cpp
+++ b/src/model/TransactionHistorySortFilterModel.cpp
@@ -112,6 +112,20 @@ void TransactionHistorySortFilterModel::setAmountToFilter(double value)
}
}
+int TransactionHistorySortFilterModel::directionFilter() const
+{
+ return m_filterValues.value(TransactionHistoryModel::TransactionDirectionRole).value<TransactionInfo::Direction>();
+}
+
+void TransactionHistorySortFilterModel::setDirectionFilter(int value)
+{
+ if (value != directionFilter()) {
+ m_filterValues[TransactionHistoryModel::TransactionDirectionRole] = QVariant::fromValue(value);
+ emit directionFilterChanged();
+ invalidateFilter();
+ }
+}
+
void TransactionHistorySortFilterModel::sort(int column, Qt::SortOrder order)
{
@@ -150,6 +164,7 @@ bool TransactionHistorySortFilterModel::filterAcceptsRow(int source_row, const Q
{
QDateTime from = QDateTime(dateFromFilter());
QDateTime to = QDateTime(dateToFilter());
+ to = to.addDays(1); // including upperbound
QDateTime timestamp = data.toDateTime();
bool matchFrom = from.isNull() || timestamp.isNull() || timestamp >= from;
bool matchTo = to.isNull() || timestamp.isNull() || timestamp <= to;
@@ -162,17 +177,26 @@ bool TransactionHistorySortFilterModel::filterAcceptsRow(int source_row, const Q
double to = amountToFilter();
double amount = data.toDouble();
- bool matchFrom = from < 0 || amount >= from;
- bool matchTo = to < 0 || amount <= to;
+ bool matchFrom = from <= 0 || amount >= from;
+ bool matchTo = to <= 0 || amount <= to;
result = matchFrom && matchTo;
}
break;
+ case TransactionHistoryModel::TransactionDirectionRole:
+ result = directionFilter() == TransactionInfo::Direction_Both ? true
+ : data.toInt() == directionFilter();
+
+
+ break;
+
default:
break;
}
- if (!result) // stop the loop once filter doesn't match
+
+ if (!result) { // stop the loop once filter doesn't match
break;
+ }
}
}
@@ -183,39 +207,3 @@ bool TransactionHistorySortFilterModel::lessThan(const QModelIndex &source_left,
{
return QSortFilterProxyModel::lessThan(source_left, source_right);
}
-
-QVariant TransactionHistorySortFilterModel::filterValue(int role)
-{
- return m_filterValues.value(role);
-}
-
-void TransactionHistorySortFilterModel::setFilterValue(int role, const QVariant &filterValue)
-{
- m_filterValues[role] = filterValue;
-}
-
-QDate TransactionHistorySortFilterModel::dateFromToFilter(TransactionHistorySortFilterModel::ScopeIndex 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::ScopeIndex 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 43c46a7b..1b5c2fce 100644
--- a/src/model/TransactionHistorySortFilterModel.h
+++ b/src/model/TransactionHistorySortFilterModel.h
@@ -1,12 +1,14 @@
#ifndef TRANSACTIONHISTORYSORTFILTERMODEL_H
#define TRANSACTIONHISTORYSORTFILTERMODEL_H
+#include "TransactionInfo.h"
#include <QSortFilterProxyModel>
#include <QMap>
#include <QVariant>
#include <QDate>
+
class TransactionHistory;
class TransactionHistorySortFilterModel: public QSortFilterProxyModel
@@ -17,6 +19,8 @@ class TransactionHistorySortFilterModel: public QSortFilterProxyModel
Q_PROPERTY(QDate dateToFilter READ dateToFilter WRITE setDateToFilter NOTIFY dateToFilterChanged)
Q_PROPERTY(double amountFromFilter READ amountFromFilter WRITE setAmountFromFilter NOTIFY amountFromFilterChanged)
Q_PROPERTY(double amountToFilter READ amountToFilter WRITE setAmountToFilter NOTIFY amountToFilterChanged)
+ Q_PROPERTY(int directionFilter READ directionFilter WRITE setDirectionFilter NOTIFY directionFilterChanged)
+
Q_PROPERTY(TransactionHistory * transactionHistory READ transactionHistory)
public:
@@ -41,6 +45,9 @@ public:
double amountToFilter() const;
void setAmountToFilter(double value);
+ //! filtering by direction
+ int directionFilter() const;
+ void setDirectionFilter(int value);
Q_INVOKABLE void sort(int column, Qt::SortOrder order);
TransactionHistory * transactionHistory() const;
@@ -51,6 +58,7 @@ signals:
void dateToFilterChanged();
void amountFromFilterChanged();
void amountToFilterChanged();
+ void directionFilterChanged();
protected:
// QSortFilterProxyModel overrides
@@ -64,15 +72,6 @@ private:
To = 1
};
- QVariant filterValue(int role);
- void setFilterValue(int role, const QVariant &filterValue);
- QDate dateFromToFilter(ScopeIndex index) const;
- void setDateFromToFilter(ScopeIndex index, const QDate &value);
-// double amountFromToFilter(ScopeIndex index) const;
-// void setAmountFromToFilter(ScopeIndex index, double value);
-
-
-
private:
QMap<int, QVariant> m_filterValues;
};