peertablesortproxy.cpp raw
1 // Copyright (c) 2020-2022 The Limenka developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #include <qt/peertablesortproxy.h>
6
7 #include <qt/peertablemodel.h>
8 #include <util/check.h>
9
10 #include <QModelIndex>
11 #include <QString>
12 #include <QVariant>
13
14 PeerTableSortProxy::PeerTableSortProxy(QObject* parent)
15 : QSortFilterProxyModel(parent)
16 {
17 }
18
19 bool PeerTableSortProxy::lessThan(const QModelIndex& left_index, const QModelIndex& right_index) const
20 {
21 const CNodeStats left_stats = Assert(sourceModel()->data(left_index, PeerTableModel::StatsRole).value<CNodeCombinedStats*>())->nodeStats;
22 const CNodeStats right_stats = Assert(sourceModel()->data(right_index, PeerTableModel::StatsRole).value<CNodeCombinedStats*>())->nodeStats;
23
24 switch (static_cast<PeerTableModel::ColumnIndex>(left_index.column())) {
25 case PeerTableModel::NetNodeId:
26 return left_stats.nodeid < right_stats.nodeid;
27 case PeerTableModel::Age:
28 return left_stats.m_connected > right_stats.m_connected;
29 case PeerTableModel::Address:
30 if (left_stats.m_network != right_stats.m_network) {
31 return left_stats.m_network < right_stats.m_network;
32 }
33 return left_stats.m_addr_name.compare(right_stats.m_addr_name) < 0;
34 case PeerTableModel::Direction:
35 return left_stats.fInbound > right_stats.fInbound; // default sort Inbound, then Outbound
36 case PeerTableModel::ConnectionType:
37 return left_stats.m_conn_type < right_stats.m_conn_type;
38 case PeerTableModel::Network:
39 return left_stats.m_network < right_stats.m_network;
40 case PeerTableModel::Ping:
41 return left_stats.m_min_ping_time < right_stats.m_min_ping_time;
42 case PeerTableModel::Sent:
43 return left_stats.nSendBytes < right_stats.nSendBytes;
44 case PeerTableModel::Received:
45 return left_stats.nRecvBytes < right_stats.nRecvBytes;
46 case PeerTableModel::Subversion:
47 return left_stats.cleanSubVer.compare(right_stats.cleanSubVer) < 0;
48 } // no default case, so the compiler can warn about missing cases
49 assert(false);
50 }
51