Skip to content

Commit 778a64a

Browse files
committed
qt: Use PeerTableSortProxy for sorting peer table
1 parent df2d165 commit 778a64a

File tree

5 files changed

+20
-77
lines changed

5 files changed

+20
-77
lines changed

src/qt/clientmodel.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <qt/guiconstants.h>
99
#include <qt/guiutil.h>
1010
#include <qt/peertablemodel.h>
11+
#include <qt/peertablesortproxy.h>
1112

1213
#include <clientversion.h>
1314
#include <interfaces/handler.h>
@@ -38,7 +39,11 @@ ClientModel::ClientModel(interfaces::Node& node, OptionsModel *_optionsModel, QO
3839
{
3940
cachedBestHeaderHeight = -1;
4041
cachedBestHeaderTime = -1;
42+
4143
peerTableModel = new PeerTableModel(m_node, this);
44+
m_peer_table_sort_proxy = new PeerTableSortProxy(this);
45+
m_peer_table_sort_proxy->setSourceModel(peerTableModel);
46+
4247
banTableModel = new BanTableModel(m_node, this);
4348

4449
QTimer* timer = new QTimer;
@@ -184,6 +189,11 @@ PeerTableModel *ClientModel::getPeerTableModel()
184189
return peerTableModel;
185190
}
186191

192+
PeerTableSortProxy* ClientModel::peerTableSortProxy()
193+
{
194+
return m_peer_table_sort_proxy;
195+
}
196+
187197
BanTableModel *ClientModel::getBanTableModel()
188198
{
189199
return banTableModel;

src/qt/clientmodel.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class BanTableModel;
1717
class CBlockIndex;
1818
class OptionsModel;
1919
class PeerTableModel;
20+
class PeerTableSortProxy;
2021
enum class SynchronizationState;
2122

2223
namespace interfaces {
@@ -54,6 +55,7 @@ class ClientModel : public QObject
5455
interfaces::Node& node() const { return m_node; }
5556
OptionsModel *getOptionsModel();
5657
PeerTableModel *getPeerTableModel();
58+
PeerTableSortProxy* peerTableSortProxy();
5759
BanTableModel *getBanTableModel();
5860

5961
//! Return number of connections, default is in- and outbound (total)
@@ -96,6 +98,7 @@ class ClientModel : public QObject
9698
std::unique_ptr<interfaces::Handler> m_handler_notify_header_tip;
9799
OptionsModel *optionsModel;
98100
PeerTableModel *peerTableModel;
101+
PeerTableSortProxy* m_peer_table_sort_proxy{nullptr};
99102
BanTableModel *banTableModel;
100103

101104
//! A thread to interact with m_node asynchronously

src/qt/peertablemodel.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,10 +194,7 @@ QVariant PeerTableModel::data(const QModelIndex &index, int role) const
194194
} // no default case, so the compiler can warn about missing cases
195195
assert(false);
196196
} else if (role == StatsRole) {
197-
switch (index.column()) {
198-
case NetNodeId: return QVariant::fromValue(rec);
199-
default: return QVariant();
200-
}
197+
return QVariant::fromValue(rec);
201198
}
202199

203200
return QVariant();

src/qt/rpcconsole.cpp

Lines changed: 6 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@
99
#include <qt/rpcconsole.h>
1010
#include <qt/forms/ui_debugwindow.h>
1111

12+
#include <chainparams.h>
13+
#include <interfaces/node.h>
14+
#include <netbase.h>
1215
#include <qt/bantablemodel.h>
1316
#include <qt/clientmodel.h>
17+
#include <qt/peertablesortproxy.h>
1418
#include <qt/platformstyle.h>
1519
#include <qt/walletmodel.h>
16-
#include <chainparams.h>
17-
#include <interfaces/node.h>
18-
#include <netbase.h>
1920
#include <rpc/client.h>
2021
#include <rpc/server.h>
2122
#include <util/strencodings.h>
@@ -606,7 +607,7 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
606607
connect(model, &ClientModel::mempoolSizeChanged, this, &RPCConsole::setMempoolSize);
607608

608609
// set up peer table
609-
ui->peerWidget->setModel(model->getPeerTableModel());
610+
ui->peerWidget->setModel(model->peerTableSortProxy());
610611
ui->peerWidget->verticalHeader()->hide();
611612
ui->peerWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
612613
ui->peerWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
@@ -643,10 +644,7 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
643644

644645
// peer table signal handling - update peer details when selecting new node
645646
connect(ui->peerWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RPCConsole::updateDetailWidget);
646-
// peer table signal handling - update peer details when new nodes are added to the model
647-
connect(model->getPeerTableModel(), &PeerTableModel::layoutChanged, this, &RPCConsole::peerLayoutChanged);
648-
// peer table signal handling - cache selected node ids
649-
connect(model->getPeerTableModel(), &PeerTableModel::layoutAboutToBeChanged, this, &RPCConsole::peerLayoutAboutToChange);
647+
connect(model->getPeerTableModel(), &PeerTableModel::layoutChanged, this, &RPCConsole::updateDetailWidget);
650648

651649
// set up ban table
652650
ui->banlistWidget->setModel(model->getBanTableModel());
@@ -1037,67 +1035,6 @@ void RPCConsole::updateTrafficStats(quint64 totalBytesIn, quint64 totalBytesOut)
10371035
ui->lblBytesOut->setText(GUIUtil::formatBytes(totalBytesOut));
10381036
}
10391037

1040-
void RPCConsole::peerLayoutAboutToChange()
1041-
{
1042-
cachedNodeids.clear();
1043-
for (const QModelIndex& peer : GUIUtil::getEntryData(ui->peerWidget, PeerTableModel::NetNodeId)) {
1044-
const auto stats = peer.data(PeerTableModel::StatsRole).value<CNodeCombinedStats*>();
1045-
cachedNodeids.append(stats->nodeStats.nodeid);
1046-
}
1047-
}
1048-
1049-
void RPCConsole::peerLayoutChanged()
1050-
{
1051-
if (!clientModel || !clientModel->getPeerTableModel())
1052-
return;
1053-
1054-
bool fUnselect = false;
1055-
bool fReselect = false;
1056-
1057-
if (cachedNodeids.empty()) // no node selected yet
1058-
return;
1059-
1060-
// find the currently selected row
1061-
int selectedRow = -1;
1062-
QModelIndexList selectedModelIndex = ui->peerWidget->selectionModel()->selectedIndexes();
1063-
if (!selectedModelIndex.isEmpty()) {
1064-
selectedRow = selectedModelIndex.first().row();
1065-
}
1066-
1067-
// check if our detail node has a row in the table (it may not necessarily
1068-
// be at selectedRow since its position can change after a layout change)
1069-
int detailNodeRow = clientModel->getPeerTableModel()->getRowByNodeId(cachedNodeids.first());
1070-
1071-
if (detailNodeRow < 0)
1072-
{
1073-
// detail node disappeared from table (node disconnected)
1074-
fUnselect = true;
1075-
}
1076-
else
1077-
{
1078-
if (detailNodeRow != selectedRow)
1079-
{
1080-
// detail node moved position
1081-
fUnselect = true;
1082-
fReselect = true;
1083-
}
1084-
}
1085-
1086-
if (fUnselect && selectedRow >= 0) {
1087-
clearSelectedNode();
1088-
}
1089-
1090-
if (fReselect)
1091-
{
1092-
for(int i = 0; i < cachedNodeids.size(); i++)
1093-
{
1094-
ui->peerWidget->selectRow(clientModel->getPeerTableModel()->getRowByNodeId(cachedNodeids.at(i)));
1095-
}
1096-
}
1097-
1098-
updateDetailWidget();
1099-
}
1100-
11011038
void RPCConsole::updateDetailWidget()
11021039
{
11031040
const QList<QModelIndex> selected_peers = GUIUtil::getEntryData(ui->peerWidget, PeerTableModel::NetNodeId);

src/qt/rpcconsole.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,6 @@ public Q_SLOTS:
118118
void browseHistory(int offset);
119119
/** Scroll console view to end */
120120
void scrollToEnd();
121-
/** Handle selection caching before update */
122-
void peerLayoutAboutToChange();
123-
/** Handle updated peer information */
124-
void peerLayoutChanged();
125121
/** Disconnect a selected node on the Peers tab */
126122
void disconnectSelectedNode();
127123
/** Ban a selected node on the Peers tab */

0 commit comments

Comments
 (0)