aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qt/bantablemodel.cpp22
-rw-r--r--src/qt/bantablemodel.h14
2 files changed, 35 insertions, 1 deletions
diff --git a/src/qt/bantablemodel.cpp b/src/qt/bantablemodel.cpp
index 6074cd2f07..04840b0526 100644
--- a/src/qt/bantablemodel.cpp
+++ b/src/qt/bantablemodel.cpp
@@ -14,6 +14,24 @@
#include <QDebug>
#include <QList>
+bool BannedNodeLessThan::operator()(const CCombinedBan& left, const CCombinedBan& right) const
+{
+ const CCombinedBan* pLeft = &left;
+ const CCombinedBan* pRight = &right;
+
+ if (order == Qt::DescendingOrder)
+ std::swap(pLeft, pRight);
+
+ switch(column)
+ {
+ case BanTableModel::Address:
+ return pLeft->subnet.ToString().compare(pRight->subnet.ToString()) < 0;
+ case BanTableModel::Bantime:
+ return pLeft->bantil < pRight->bantil;
+ }
+
+ return false;
+}
// private implementation
class BanTablePriv
@@ -43,6 +61,10 @@ public:
banEntry.bantil = banentry.second;
cachedBanlist.append(banEntry);
}
+
+ if (sortColumn >= 0)
+ // sort cachedBanlist (use stable sort to prevent rows jumping around unneceesarily)
+ qStableSort(cachedBanlist.begin(), cachedBanlist.end(), BannedNodeLessThan(sortColumn, sortOrder));
}
int size() const
diff --git a/src/qt/bantablemodel.h b/src/qt/bantablemodel.h
index c0f0813f28..ec93ed1014 100644
--- a/src/qt/bantablemodel.h
+++ b/src/qt/bantablemodel.h
@@ -18,6 +18,18 @@ struct CCombinedBan {
int64_t bantil;
};
+class BannedNodeLessThan
+{
+public:
+ BannedNodeLessThan(int nColumn, Qt::SortOrder fOrder) :
+ column(nColumn), order(fOrder) {}
+ bool operator()(const CCombinedBan& left, const CCombinedBan& right) const;
+
+private:
+ int column;
+ Qt::SortOrder order;
+};
+
/**
Qt model providing information about connected peers, similar to the
"getpeerinfo" RPC call. Used by the rpc console UI.
@@ -33,7 +45,7 @@ public:
enum ColumnIndex {
Address = 0,
- Bantime = 1,
+ Bantime = 1
};
/** @name Methods overridden from QAbstractTableModel