Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1251}1253void RPCConsole::hideEvent(QHideEvent *event)1254{1255// It is too late to call QHeaderView::saveState() in ~RPCConsole(), as all of1256// the columns of QTableView child widgets will have zero width at that moment.1257m_peer_widget_header_state = ui->peerWidget->horizontalHeader()->saveState();1258m_banlist_widget_header_state = ui->banlistWidget->horizontalHeader()->saveState();1260QWidget::hideEvent(event);1262if (!clientModel || !clientModel->getPeerTableModel())1263return;1265// stop PeerTableModel auto refresh1266clientModel->getPeerTableModel()->stopAutoRefresh();1267}1269void RPCConsole::showPeersTableContextMenu(const QPoint& point)1270{1271QModelIndex index = ui->peerWidget->indexAt(point);1272if (index.isValid())1273peersTableContextMenu->exec(QCursor::pos());1274}1276void RPCConsole::showBanTableContextMenu(const QPoint& point)1277{1278QModelIndex index = ui->banlistWidget->indexAt(point);1279if (index.isValid())1280banTableContextMenu->exec(QCursor::pos());1281}1283void RPCConsole::disconnectSelectedNode()1284{1285// Get selected peer addresses1286QList<QModelIndex> nodes = GUIUtil::getEntryData(ui->peerWidget, PeerTableModel::NetNodeId);1287for(int i = 0; i < nodes.count(); i++)1288{1289// Get currently selected peer address1290NodeId id = nodes.at(i).data().toLongLong();1291// Find the node, disconnect it and clear the selected node1292if(m_node.disconnectById(id))1293clearSelectedNode();1294}1295}1297void RPCConsole::banSelectedNode(int bantime)1298{1299if (!clientModel)1300return;1302for (const QModelIndex& peer : GUIUtil::getEntryData(ui->peerWidget, PeerTableModel::NetNodeId)) {1303// Find possible nodes, ban it and clear the selected node1304const auto stats = peer.data(PeerTableModel::StatsRole).value<CNodeCombinedStats*>();1305if (stats) {1306m_node.ban(stats->nodeStats.addr, bantime);1307m_node.disconnectByAddress(stats->nodeStats.addr);1308}1309}1310clearSelectedNode();1311clientModel->getBanTableModel()->refresh();1312}1314void RPCConsole::unbanSelectedNode()1315{1316if (!clientModel)1317return;1319// Get selected ban addresses1320QList<QModelIndex> nodes = GUIUtil::getEntryData(ui->banlistWidget, BanTableModel::Address);1321BanTableModel* ban_table_model{clientModel->getBanTableModel()};1322bool unbanned{false};1323for (const auto& node_index : nodes) {1324unbanned |= ban_table_model->unban(node_index);1325}1326if (unbanned) {1327ban_table_model->refresh();1328}1329}1331void RPCConsole::clearSelectedNode()1332{1333ui->peerWidget->selectionModel()->clearSelection();1334cachedNodeids.clear();1335updateDetailWidget();1336}1338void RPCConsole::showOrHideBanTableIfRequired()1339{1340if (!clientModel)1341return;1343bool visible = clientModel->getBanTableModel()->shouldShow();1344ui->banlistWidget->setVisible(visible);1345ui->banHeading->setVisible(visible);1346}1348void RPCConsole::setTabFocus(enum TabTypes tabType)1349{1350ui->tabWidget->setCurrentIndex(int(tabType));1351}1353QString RPCConsole::tabTitle(TabTypes tab_type) const1354{1355return ui->tabWidget->tabText(int(tab_type));1356}1358QKeySequence RPCConsole::tabShortcut(TabTypes tab_type) const1359{1360switch (tab_type) {1361case TabTypes::INFO: return QKeySequence(tr("Ctrl+I"));1362case TabTypes::CONSOLE: return QKeySequence(tr("Ctrl+T"));1363case TabTypes::GRAPH: return QKeySequence(tr("Ctrl+N"));1364case TabTypes::PEERS: return QKeySequence(tr("Ctrl+P"));1365} // no default case, so the compiler can warn about missing cases1367assert(false);1368}1370void RPCConsole::updateAlerts(const QString& warnings)1371{1372this->ui->label_alerts->setVisible(!warnings.isEmpty());1373this->ui->label_alerts->setText(warnings);1374}1376void RPCConsole::updateWindowTitle()1377{1378const ChainType chain = Params().GetChainType();1379if (chain == ChainType::MAIN) return;1381const QString chainType = QString::fromStdString(Params().GetChainTypeString());1382const QString title = tr("Node window - [%1]").arg(chainType);1383this->setWindowTitle(title);1384}
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.