// Copyright (c) 2020-2021 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include #include #include #include #include PeerTableSortProxy::PeerTableSortProxy(QObject* parent) : QSortFilterProxyModel(parent) { } bool PeerTableSortProxy::lessThan(const QModelIndex& left_index, const QModelIndex& right_index) const { const CNodeStats left_stats = Assert(sourceModel()->data(left_index, PeerTableModel::StatsRole).value())->nodeStats; const CNodeStats right_stats = Assert(sourceModel()->data(right_index, PeerTableModel::StatsRole).value())->nodeStats; switch (static_cast(left_index.column())) { case PeerTableModel::NetNodeId: return left_stats.nodeid < right_stats.nodeid; case PeerTableModel::Address: return left_stats.m_addr_name.compare(right_stats.m_addr_name) < 0; case PeerTableModel::Direction: return left_stats.fInbound > right_stats.fInbound; // default sort Inbound, then Outbound case PeerTableModel::ConnectionType: return left_stats.m_conn_type < right_stats.m_conn_type; case PeerTableModel::Network: return left_stats.m_network < right_stats.m_network; case PeerTableModel::Ping: return left_stats.m_min_ping_time < right_stats.m_min_ping_time; case PeerTableModel::Sent: return left_stats.nSendBytes < right_stats.nSendBytes; case PeerTableModel::Received: return left_stats.nRecvBytes < right_stats.nRecvBytes; case PeerTableModel::Subversion: return left_stats.cleanSubVer.compare(right_stats.cleanSubVer) < 0; } // no default case, so the compiler can warn about missing cases assert(false); }