From cdd72cd5fbc2b287559f7230d1616339e9ff2d6d Mon Sep 17 00:00:00 2001 From: Philip Kaufmann Date: Fri, 26 Jun 2015 10:23:51 +0200 Subject: [PATCH] [Qt] simplify ban list signal handling - remove banListChanged signal from client model - directly call clientModel->getBanTableModel()->refresh() without the way over clientModel->updateBanlist() - also fix clearing peer detail window, when selecting (clicking) peers in the ban list --- src/qt/clientmodel.cpp | 1 - src/qt/clientmodel.h | 1 - src/qt/rpcconsole.cpp | 32 +++++++++++++++++++------------- src/qt/rpcconsole.h | 4 ++-- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 851e9f186..0900a35cc 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -217,7 +217,6 @@ QString ClientModel::formatClientStartupTime() const void ClientModel::updateBanlist() { banTableModel->refresh(); - emit banListChanged(); } // Handlers for core signals diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 6f7b2de3a..627bdf862 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -91,7 +91,6 @@ Q_SIGNALS: void numBlocksChanged(int count, const QDateTime& blockDate); void alertsChanged(const QString &warnings); void bytesChanged(quint64 totalBytesIn, quint64 totalBytesOut); - void banListChanged(); //! Fired when a message should be reported to the user void message(const QString &title, const QString &message, unsigned int style); diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 380586f61..1b82aada4 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -331,8 +331,7 @@ void RPCConsole::setClientModel(ClientModel *model) { clientModel = model; ui->trafficGraph->setClientModel(model); - if(model) - { + if (model && clientModel->getPeerTableModel() && clientModel->getBanTableModel()) { // Keep up to date with client setNumConnections(model->getNumConnections()); connect(model, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int))); @@ -404,19 +403,23 @@ void RPCConsole::setClientModel(ClientModel *model) ui->banlistWidget->setContextMenuPolicy(Qt::CustomContextMenu); ui->banlistWidget->horizontalHeader()->setStretchLastSection(true); - // ensure ban table is shown or hidden (if empty) - connect(model, SIGNAL(banListChanged()), this, SLOT(showOrHideBanTableIfRequired())); - showOrHideBanTableIfRequired(); - - // create banlist context menu actions + // create ban table context menu action QAction* unbanAction = new QAction(tr("&Unban Node"), this); + + // create ban table context menu banTableContextMenu = new QMenu(); banTableContextMenu->addAction(unbanAction); - // context menu signals + // ban table context menu signals connect(ui->banlistWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showBanTableContextMenu(const QPoint&))); connect(unbanAction, SIGNAL(triggered()), this, SLOT(unbanSelectedNode())); + // ban table signal handling - clear peer details when clicking a peer in the ban table + connect(ui->banlistWidget, SIGNAL(clicked(const QModelIndex&)), this, SLOT(clearSelectedNode())); + // ban table signal handling - ensure ban table is shown or hidden (if empty) + connect(model->getBanTableModel(), SIGNAL(layoutChanged()), this, SLOT(showOrHideBanTableIfRequired())); + showOrHideBanTableIfRequired(); + // Provide initial values ui->clientVersion->setText(model->formatFullVersion()); ui->clientUserAgent->setText(model->formatSubVersion()); @@ -790,6 +793,9 @@ void RPCConsole::disconnectSelectedNode() void RPCConsole::banSelectedNode(int bantime) { + if (!clientModel) + return; + // Get currently selected peer address QString strNode = GUIUtil::getEntryData(ui->peerWidget, 0, PeerTableModel::Address); // Find possible nodes, ban it and clear the selected node @@ -803,14 +809,15 @@ void RPCConsole::banSelectedNode(int bantime) bannedNode->fDisconnect = true; clearSelectedNode(); - ui->banlistWidget->setVisible(true); - ui->banHeading->setVisible(true); - clientModel->updateBanlist(); + clientModel->getBanTableModel()->refresh(); } } void RPCConsole::unbanSelectedNode() { + if (!clientModel) + return; + // Get currently selected ban address QString strNode = GUIUtil::getEntryData(ui->banlistWidget, 0, BanTableModel::Address); CSubNet possibleSubnet(strNode.toStdString()); @@ -818,8 +825,7 @@ void RPCConsole::unbanSelectedNode() if (possibleSubnet.IsValid()) { CNode::Unban(possibleSubnet); - clientModel->updateBanlist(); - showOrHideBanTableIfRequired(); + clientModel->getBanTableModel()->refresh(); } } diff --git a/src/qt/rpcconsole.h b/src/qt/rpcconsole.h index 3f4d1834f..d5a769ae7 100644 --- a/src/qt/rpcconsole.h +++ b/src/qt/rpcconsole.h @@ -66,6 +66,8 @@ private Q_SLOTS: void showBanTableContextMenu(const QPoint& point); /** Hides ban table if no bans are present */ void showOrHideBanTableIfRequired(); + /** clear the selected node */ + void clearSelectedNode(); public Q_SLOTS: void clear(); @@ -100,8 +102,6 @@ private: void setTrafficGraphRange(int mins); /** show detailed information on ui about selected node */ void updateNodeDetail(const CNodeCombinedStats *stats); - /** clear the selected node */ - void clearSelectedNode(); enum ColumnWidths {