Skip to content

Commit

Permalink
Merge bitcoin-core/gui#13: Hide peer detail view if multiple are sele…
Browse files Browse the repository at this point in the history
…cted

76277cc qt: Hide peer detail view if multiple are selected (João Barbosa)

Pull request description:

  Currently if multiple peers are selected the peer detail view shows the first new selected peer.

  With this PR the peer detail view is hidden when multiple peers are selected. It is also a slight refactor to simplify and remove duplicate code.

ACKs for top commit:
  jonasschnelli:
    Tested ACK 76277cc.
  hebasto:
    ACK 76277cc, tested on Linux Mint 20 (Qt 5.12.8).

Tree-SHA512: 16c9cfd6ccb7077a9f31917a6cb3532e32d17d21f735e43bf4720fb0c8bb1bd539d42569c105df4b551f5dccb4acaeedb6bb2362620a9cb9267a602d9d065b9f
  • Loading branch information
jonasschnelli authored and knst committed Apr 9, 2024
1 parent ce992f7 commit 648d6f0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 28 deletions.
38 changes: 14 additions & 24 deletions src/qt/rpcconsole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -510,8 +510,7 @@ RPCConsole::RPCConsole(interfaces::Node& node, QWidget* parent, Qt::WindowFlags
m_node.rpcSetTimerInterfaceIfUnset(rpcTimerInterface);

setTrafficGraphRange(INITIAL_TRAFFIC_GRAPH_SETTING);

ui->peerHeading->setText(tr("Select a peer to view detailed information."));
updateDetailWidget();

setFontSize(settings.value(fontSizeSettingsKey, QFontInfo(QFontDatabase::systemFont(QFontDatabase::FixedFont)).pointSize()).toInt());

Expand Down Expand Up @@ -660,7 +659,7 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
connect(disconnectAction, &QAction::triggered, this, &RPCConsole::disconnectSelectedNode);

// peer table signal handling - update peer details when selecting new node
connect(ui->peerWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RPCConsole::peerSelected);
connect(ui->peerWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RPCConsole::updateDetailWidget);
// peer table signal handling - update peer details when new nodes are added to the model
connect(model->getPeerTableModel(), &PeerTableModel::layoutChanged, this, &RPCConsole::peerLayoutChanged);
// peer table signal handling - cache selected node ids
Expand Down Expand Up @@ -1154,18 +1153,6 @@ void RPCConsole::setTrafficGraphRange(TrafficGraphData::GraphRange range)
ui->lblGraphRange->setText(GUIUtil::formatDurationStr(TrafficGraphData::RangeMinutes[range] * 60));
}

void RPCConsole::peerSelected(const QItemSelection &selected, const QItemSelection &deselected)
{
Q_UNUSED(deselected);

if (!clientModel || !clientModel->getPeerTableModel() || selected.indexes().isEmpty())
return;

const CNodeCombinedStats *stats = clientModel->getPeerTableModel()->getNodeStats(selected.indexes().first().row());
if (stats)
updateNodeDetail(stats);
}

void RPCConsole::peerLayoutAboutToChange()
{
QModelIndexList selected = ui->peerWidget->selectionModel()->selectedIndexes();
Expand All @@ -1182,7 +1169,6 @@ void RPCConsole::peerLayoutChanged()
if (!clientModel || !clientModel->getPeerTableModel())
return;

const CNodeCombinedStats *stats = nullptr;
bool fUnselect = false;
bool fReselect = false;

Expand Down Expand Up @@ -1213,9 +1199,6 @@ void RPCConsole::peerLayoutChanged()
fUnselect = true;
fReselect = true;
}

// get fresh stats on the detail node.
stats = clientModel->getPeerTableModel()->getNodeStats(detailNodeRow);
}

if (fUnselect && selectedRow >= 0) {
Expand All @@ -1230,12 +1213,20 @@ void RPCConsole::peerLayoutChanged()
}
}

if (stats)
updateNodeDetail(stats);
updateDetailWidget();
}

void RPCConsole::updateNodeDetail(const CNodeCombinedStats *stats)
void RPCConsole::updateDetailWidget()
{
QModelIndexList selected_rows;
auto selection_model = ui->peerWidget->selectionModel();
if (selection_model) selected_rows = selection_model->selectedRows();
if (!clientModel || !clientModel->getPeerTableModel() || selected_rows.size() != 1) {
ui->detailWidget->hide();
ui->peerHeading->setText(tr("Select a peer to view detailed information."));
return;
}
const CNodeCombinedStats *stats = clientModel->getPeerTableModel()->getNodeStats(selected_rows.first().row());
// update the detail ui with latest node information
QString peerAddrDetails(QString::fromStdString(stats->nodeStats.addrName) + " ");
peerAddrDetails += tr("(peer id: %1)").arg(QString::number(stats->nodeStats.nodeid));
Expand Down Expand Up @@ -1442,8 +1433,7 @@ void RPCConsole::clearSelectedNode()
{
ui->peerWidget->selectionModel()->clearSelection();
cachedNodeids.clear();
ui->detailWidget->hide();
ui->peerHeading->setText(tr("Select a peer to view detailed information."));
updateDetailWidget();
}

void RPCConsole::showOrHideBanTableIfRequired()
Expand Down
6 changes: 2 additions & 4 deletions src/qt/rpcconsole.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ private Q_SLOTS:
void showOrHideBanTableIfRequired();
/** clear the selected node */
void clearSelectedNode();
/** show detailed information on ui about selected node */
void updateDetailWidget();

public Q_SLOTS:
void clear(bool clearHistory = true);
Expand Down Expand Up @@ -132,8 +134,6 @@ public Q_SLOTS:
void browseHistory(int offset);
/** Scroll console view to end */
void scrollToEnd();
/** Handle selection of peer in peers list */
void peerSelected(const QItemSelection &selected, const QItemSelection &deselected);
/** Handle selection caching before update */
void peerLayoutAboutToChange();
/** Handle updated peer information */
Expand All @@ -158,8 +158,6 @@ public Q_SLOTS:
void setTrafficGraphRange(TrafficGraphData::GraphRange range);
/** Build parameter list for restart */
void buildParameterlist(QString arg);
/** show detailed information on ui about selected node */
void updateNodeDetail(const CNodeCombinedStats *stats);
/** Set required icons for buttons inside the dialog */
void setButtonIcons();
/** Reload some themes related widgets */
Expand Down

0 comments on commit 648d6f0

Please sign in to comment.