|
25 | 25 | #endif
|
26 | 26 |
|
27 | 27 | #include <QKeyEvent>
|
| 28 | +#include <QMenu> |
28 | 29 | #include <QScrollBar>
|
29 | 30 | #include <QThread>
|
30 | 31 | #include <QTime>
|
@@ -205,7 +206,8 @@ RPCConsole::RPCConsole(QWidget *parent) :
|
205 | 206 | ui(new Ui::RPCConsole),
|
206 | 207 | clientModel(0),
|
207 | 208 | historyPtr(0),
|
208 |
| - cachedNodeid(-1) |
| 209 | + cachedNodeid(-1), |
| 210 | + contextMenu(0) |
209 | 211 | {
|
210 | 212 | ui->setupUi(this);
|
211 | 213 | GUIUtil::restoreWindowGeometry("nRPCConsoleWindow", this->size(), this);
|
@@ -305,10 +307,22 @@ void RPCConsole::setClientModel(ClientModel *model)
|
305 | 307 | ui->peerWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
306 | 308 | ui->peerWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
|
307 | 309 | ui->peerWidget->setSelectionMode(QAbstractItemView::SingleSelection);
|
| 310 | + ui->peerWidget->setContextMenuPolicy(Qt::CustomContextMenu); |
308 | 311 | ui->peerWidget->setColumnWidth(PeerTableModel::Address, ADDRESS_COLUMN_WIDTH);
|
309 | 312 | ui->peerWidget->setColumnWidth(PeerTableModel::Subversion, SUBVERSION_COLUMN_WIDTH);
|
310 | 313 | ui->peerWidget->setColumnWidth(PeerTableModel::Ping, PING_COLUMN_WIDTH);
|
311 | 314 |
|
| 315 | + // create context menu actions |
| 316 | + QAction* disconnectAction = new QAction(tr("&Disconnect Node"), this); |
| 317 | + |
| 318 | + // create context menu |
| 319 | + contextMenu = new QMenu(); |
| 320 | + contextMenu->addAction(disconnectAction); |
| 321 | + |
| 322 | + // context menu signals |
| 323 | + connect(ui->peerWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showMenu(const QPoint&))); |
| 324 | + connect(disconnectAction, SIGNAL(triggered()), this, SLOT(disconnectSelectedNode())); |
| 325 | + |
312 | 326 | // connect the peerWidget selection model to our peerSelected() handler
|
313 | 327 | connect(ui->peerWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
|
314 | 328 | this, SLOT(peerSelected(const QItemSelection &, const QItemSelection &)));
|
@@ -659,3 +673,21 @@ void RPCConsole::hideEvent(QHideEvent *event)
|
659 | 673 | // stop PeerTableModel auto refresh
|
660 | 674 | clientModel->getPeerTableModel()->stopAutoRefresh();
|
661 | 675 | }
|
| 676 | + |
| 677 | +void RPCConsole::showMenu(const QPoint& point) |
| 678 | +{ |
| 679 | + QModelIndex index = ui->peerWidget->indexAt(point); |
| 680 | + if (index.isValid()) |
| 681 | + contextMenu->exec(QCursor::pos()); |
| 682 | +} |
| 683 | + |
| 684 | +void RPCConsole::disconnectSelectedNode() |
| 685 | +{ |
| 686 | + // Get currently selected peer address |
| 687 | + QString strNode = GUIUtil::getEntryData(ui->peerWidget, 0, PeerTableModel::Address); |
| 688 | + // Find the node, disconnect it and clear the selected node |
| 689 | + if (CNode *bannedNode = FindNode(strNode.toStdString())) { |
| 690 | + bannedNode->CloseSocketDisconnect(); |
| 691 | + ui->peerWidget->selectionModel()->clearSelection(); |
| 692 | + } |
| 693 | +} |
0 commit comments