1212
1313#include < evo/deterministicmns.h>
1414
15- #include < qt/bantablemodel.h>
16- #include < qt/clientmodel.h>
17- #include < qt/walletmodel.h>
1815#include < chainparams.h>
1916#include < interfaces/node.h>
2017#include < netbase.h>
18+ #include < qt/bantablemodel.h>
19+ #include < qt/clientmodel.h>
20+ #include < qt/peertablesortproxy.h>
21+ #include < qt/walletmodel.h>
2122#include < rpc/client.h>
2223#include < rpc/server.h>
2324#include < util/strencodings.h>
@@ -694,7 +695,7 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
694695
695696
696697 // set up peer table
697- ui->peerWidget ->setModel (model->getPeerTableModel ());
698+ ui->peerWidget ->setModel (model->peerTableSortProxy ());
698699 ui->peerWidget ->verticalHeader ()->hide ();
699700 ui->peerWidget ->setSelectionBehavior (QAbstractItemView::SelectRows);
700701 ui->peerWidget ->setSelectionMode (QAbstractItemView::ExtendedSelection);
@@ -716,10 +717,7 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
716717
717718 // peer table signal handling - update peer details when selecting new node
718719 connect (ui->peerWidget ->selectionModel (), &QItemSelectionModel::selectionChanged, this , &RPCConsole::updateDetailWidget);
719- // peer table signal handling - update peer details when new nodes are added to the model
720- connect (model->getPeerTableModel (), &PeerTableModel::layoutChanged, this , &RPCConsole::peerLayoutChanged);
721- // peer table signal handling - cache selected node ids
722- connect (model->getPeerTableModel (), &PeerTableModel::layoutAboutToBeChanged, this , &RPCConsole::peerLayoutAboutToChange);
720+ connect (model->getPeerTableModel (), &PeerTableModel::layoutChanged, this , &RPCConsole::updateDetailWidget);
723721
724722 // set up ban table
725723 ui->banlistWidget ->setModel (model->getBanTableModel ());
@@ -1198,67 +1196,6 @@ void RPCConsole::setTrafficGraphRange(TrafficGraphData::GraphRange range)
11981196 ui->lblGraphRange ->setText (GUIUtil::formatDurationStr (std::chrono::minutes{TrafficGraphData::RangeMinutes[range]}));
11991197}
12001198
1201- void RPCConsole::peerLayoutAboutToChange ()
1202- {
1203- cachedNodeids.clear ();
1204- for (const QModelIndex& peer : GUIUtil::getEntryData (ui->peerWidget , PeerTableModel::NetNodeId)) {
1205- const auto stats = peer.data (PeerTableModel::StatsRole).value <CNodeCombinedStats*>();
1206- cachedNodeids.append (stats->nodeStats .nodeid );
1207- }
1208- }
1209-
1210- void RPCConsole::peerLayoutChanged ()
1211- {
1212- if (!clientModel || !clientModel->getPeerTableModel ())
1213- return ;
1214-
1215- bool fUnselect = false ;
1216- bool fReselect = false ;
1217-
1218- if (cachedNodeids.empty ()) // no node selected yet
1219- return ;
1220-
1221- // find the currently selected row
1222- int selectedRow = -1 ;
1223- QModelIndexList selectedModelIndex = ui->peerWidget ->selectionModel ()->selectedIndexes ();
1224- if (!selectedModelIndex.isEmpty ()) {
1225- selectedRow = selectedModelIndex.first ().row ();
1226- }
1227-
1228- // check if our detail node has a row in the table (it may not necessarily
1229- // be at selectedRow since its position can change after a layout change)
1230- int detailNodeRow = clientModel->getPeerTableModel ()->getRowByNodeId (cachedNodeids.first ());
1231-
1232- if (detailNodeRow < 0 )
1233- {
1234- // detail node disappeared from table (node disconnected)
1235- fUnselect = true ;
1236- }
1237- else
1238- {
1239- if (detailNodeRow != selectedRow)
1240- {
1241- // detail node moved position
1242- fUnselect = true ;
1243- fReselect = true ;
1244- }
1245- }
1246-
1247- if (fUnselect && selectedRow >= 0 ) {
1248- clearSelectedNode ();
1249- }
1250-
1251- if (fReselect )
1252- {
1253- for (int i = 0 ; i < cachedNodeids.size (); i++)
1254- {
1255- ui->peerWidget ->selectRow (clientModel->getPeerTableModel ()->getRowByNodeId (cachedNodeids.at (i)));
1256- }
1257- }
1258-
1259- updateDetailWidget ();
1260- }
1261-
12621199void RPCConsole::updateDetailWidget ()
12631200{
12641201 const QList<QModelIndex> selected_peers = GUIUtil::getEntryData (ui->peerWidget , PeerTableModel::NetNodeId);
0 commit comments