Skip to content

Commit f385ad7

Browse files
committed
Merge bitcoin-core#263: Revamp context menus
16c157d qt, refactor: Use better QMenu::addAction overloaded function (Hennadii Stepanov) 7931175 qt: Do not assign Alt+<KEY> shortcuts to context menu actions (Hennadii Stepanov) 963e120 qt: Drop menu separator that separates nothing (Hennadii Stepanov) 1398a65 qt, refactor: Make AddressBookPage::deleteAction a local variable (Hennadii Stepanov) Pull request description: This PR: 1. removes useless `Alt` + `<KEY>` shortcuts from context menu items 2. replaces 3 lines of code with the only call of [`QMenu::addAction`](https://doc.qt.io/qt-5/qmenu.html#addAction-5) for each context menu item (it became possible since bitcoin/bitcoin#21286 was merged) 3. makes other minor cleanups No behavior change. ACKs for top commit: kristapsk: ACK 16c157d promag: Code review ACK 16c157d. Nice code cleanup that takes advantage of more recent Qt API. jarolrod: ACK 16c157d Tree-SHA512: e5555fe957058cc67b351aaf9f09fe3635edb2d07a2223d3093913a25607ae538f0a2fde84c0b0cd43e7475b248949548eb4a5d4b21d8f7391fa2fa8541c04ff
2 parents bca0094 + 16c157d commit f385ad7

File tree

8 files changed

+40
-134
lines changed

8 files changed

+40
-134
lines changed

src/qt/addressbookpage.cpp

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -112,29 +112,17 @@ AddressBookPage::AddressBookPage(const PlatformStyle *platformStyle, Mode _mode,
112112
break;
113113
}
114114

115-
// Context menu actions
116-
QAction *copyAddressAction = new QAction(tr("&Copy Address"), this);
117-
QAction *copyLabelAction = new QAction(tr("Copy &Label"), this);
118-
QAction *editAction = new QAction(tr("&Edit"), this);
119-
deleteAction = new QAction(ui->deleteAddress->text(), this);
120-
121115
// Build context menu
122116
contextMenu = new QMenu(this);
123-
contextMenu->addAction(copyAddressAction);
124-
contextMenu->addAction(copyLabelAction);
125-
contextMenu->addAction(editAction);
126-
if(tab == SendingTab)
127-
contextMenu->addAction(deleteAction);
128-
contextMenu->addSeparator();
129-
130-
// Connect signals for context menu actions
131-
connect(copyAddressAction, &QAction::triggered, this, &AddressBookPage::on_copyAddress_clicked);
132-
connect(copyLabelAction, &QAction::triggered, this, &AddressBookPage::onCopyLabelAction);
133-
connect(editAction, &QAction::triggered, this, &AddressBookPage::onEditAction);
134-
connect(deleteAction, &QAction::triggered, this, &AddressBookPage::on_deleteAddress_clicked);
117+
contextMenu->addAction(tr("Copy Address"), this, &AddressBookPage::on_copyAddress_clicked);
118+
contextMenu->addAction(tr("Copy Label"), this, &AddressBookPage::onCopyLabelAction);
119+
contextMenu->addAction(tr("Edit"), this, &AddressBookPage::onEditAction);
135120

136-
connect(ui->tableView, &QWidget::customContextMenuRequested, this, &AddressBookPage::contextualMenu);
121+
if (tab == SendingTab) {
122+
contextMenu->addAction(tr("Delete"), this, &AddressBookPage::on_deleteAddress_clicked);
123+
}
137124

125+
connect(ui->tableView, &QWidget::customContextMenuRequested, this, &AddressBookPage::contextualMenu);
138126
connect(ui->closeButton, &QPushButton::clicked, this, &QDialog::accept);
139127

140128
GUIUtil::handleCloseWindowShortcut(this);
@@ -249,13 +237,11 @@ void AddressBookPage::selectionChanged()
249237
// In sending tab, allow deletion of selection
250238
ui->deleteAddress->setEnabled(true);
251239
ui->deleteAddress->setVisible(true);
252-
deleteAction->setEnabled(true);
253240
break;
254241
case ReceivingTab:
255242
// Deleting receiving addresses, however, is not allowed
256243
ui->deleteAddress->setEnabled(false);
257244
ui->deleteAddress->setVisible(false);
258-
deleteAction->setEnabled(false);
259245
break;
260246
}
261247
ui->copyAddress->setEnabled(true);

src/qt/addressbookpage.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ public Q_SLOTS:
5555
QString returnValue;
5656
AddressBookSortFilterProxyModel *proxyModel;
5757
QMenu *contextMenu;
58-
QAction *deleteAction; // to be able to explicitly disable it
5958
QString newAddressToSelect;
6059

6160
private Q_SLOTS:

src/qt/bitcoingui.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,11 +1468,8 @@ void UnitDisplayStatusBarControl::mousePressEvent(QMouseEvent *event)
14681468
void UnitDisplayStatusBarControl::createContextMenu()
14691469
{
14701470
menu = new QMenu(this);
1471-
for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits())
1472-
{
1473-
QAction *menuAction = new QAction(QString(BitcoinUnits::longName(u)), this);
1474-
menuAction->setData(QVariant(u));
1475-
menu->addAction(menuAction);
1471+
for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits()) {
1472+
menu->addAction(BitcoinUnits::longName(u))->setData(QVariant(u));
14761473
}
14771474
connect(menu, &QMenu::triggered, this, &UnitDisplayStatusBarControl::onMenuSelection);
14781475
}

src/qt/coincontroldialog.cpp

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,32 +50,16 @@ CoinControlDialog::CoinControlDialog(CCoinControl& coin_control, WalletModel* _m
5050
{
5151
ui->setupUi(this);
5252

53-
// context menu actions
54-
QAction *copyAddressAction = new QAction(tr("Copy address"), this);
55-
QAction *copyLabelAction = new QAction(tr("Copy label"), this);
56-
QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
57-
copyTransactionHashAction = new QAction(tr("Copy transaction ID"), this); // we need to enable/disable this
58-
lockAction = new QAction(tr("Lock unspent"), this); // we need to enable/disable this
59-
unlockAction = new QAction(tr("Unlock unspent"), this); // we need to enable/disable this
60-
6153
// context menu
6254
contextMenu = new QMenu(this);
63-
contextMenu->addAction(copyAddressAction);
64-
contextMenu->addAction(copyLabelAction);
65-
contextMenu->addAction(copyAmountAction);
66-
contextMenu->addAction(copyTransactionHashAction);
55+
contextMenu->addAction(tr("Copy address"), this, &CoinControlDialog::copyAddress);
56+
contextMenu->addAction(tr("Copy label"), this, &CoinControlDialog::copyLabel);
57+
contextMenu->addAction(tr("Copy amount"), this, &CoinControlDialog::copyAmount);
58+
copyTransactionHashAction = contextMenu->addAction(tr("Copy transaction ID"), this, &CoinControlDialog::copyTransactionHash);
6759
contextMenu->addSeparator();
68-
contextMenu->addAction(lockAction);
69-
contextMenu->addAction(unlockAction);
70-
71-
// context menu signals
60+
lockAction = contextMenu->addAction(tr("Lock unspent"), this, &CoinControlDialog::lockCoin);
61+
unlockAction = contextMenu->addAction(tr("Unlock unspent"), this, &CoinControlDialog::unlockCoin);
7262
connect(ui->treeWidget, &QWidget::customContextMenuRequested, this, &CoinControlDialog::showMenu);
73-
connect(copyAddressAction, &QAction::triggered, this, &CoinControlDialog::copyAddress);
74-
connect(copyLabelAction, &QAction::triggered, this, &CoinControlDialog::copyLabel);
75-
connect(copyAmountAction, &QAction::triggered, this, &CoinControlDialog::copyAmount);
76-
connect(copyTransactionHashAction, &QAction::triggered, this, &CoinControlDialog::copyTransactionHash);
77-
connect(lockAction, &QAction::triggered, this, &CoinControlDialog::lockCoin);
78-
connect(unlockAction, &QAction::triggered, this, &CoinControlDialog::unlockCoin);
7963

8064
// clipboard actions
8165
QAction *clipboardQuantityAction = new QAction(tr("Copy quantity"), this);

src/qt/qrimagewidget.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,8 @@ QRImageWidget::QRImageWidget(QWidget *parent):
2727
QLabel(parent), contextMenu(nullptr)
2828
{
2929
contextMenu = new QMenu(this);
30-
QAction *saveImageAction = new QAction(tr("&Save Image..."), this);
31-
connect(saveImageAction, &QAction::triggered, this, &QRImageWidget::saveImage);
32-
contextMenu->addAction(saveImageAction);
33-
QAction *copyImageAction = new QAction(tr("&Copy Image"), this);
34-
connect(copyImageAction, &QAction::triggered, this, &QRImageWidget::copyImage);
35-
contextMenu->addAction(copyImageAction);
30+
contextMenu->addAction(tr("Save Image..."), this, &QRImageWidget::saveImage);
31+
contextMenu->addAction(tr("Copy Image"), this, &QRImageWidget::copyImage);
3632
}
3733

3834
bool QRImageWidget::setQR(const QString& data, const QString& text)

src/qt/receivecoinsdialog.cpp

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,14 @@ ReceiveCoinsDialog::ReceiveCoinsDialog(const PlatformStyle *_platformStyle, QWid
4242
ui->removeRequestButton->setIcon(_platformStyle->SingleColorIcon(":/icons/remove"));
4343
}
4444

45-
// context menu actions
46-
QAction *copyURIAction = new QAction(tr("Copy URI"), this);
47-
QAction* copyAddressAction = new QAction(tr("Copy address"), this);
48-
copyLabelAction = new QAction(tr("Copy label"), this);
49-
copyMessageAction = new QAction(tr("Copy message"), this);
50-
copyAmountAction = new QAction(tr("Copy amount"), this);
51-
5245
// context menu
5346
contextMenu = new QMenu(this);
54-
contextMenu->addAction(copyURIAction);
55-
contextMenu->addAction(copyAddressAction);
56-
contextMenu->addAction(copyLabelAction);
57-
contextMenu->addAction(copyMessageAction);
58-
contextMenu->addAction(copyAmountAction);
59-
60-
// context menu signals
47+
contextMenu->addAction(tr("Copy URI"), this, &ReceiveCoinsDialog::copyURI);
48+
contextMenu->addAction(tr("Copy address"), this, &ReceiveCoinsDialog::copyAddress);
49+
copyLabelAction = contextMenu->addAction(tr("Copy label"), this, &ReceiveCoinsDialog::copyLabel);
50+
copyMessageAction = contextMenu->addAction(tr("Copy message"), this, &ReceiveCoinsDialog::copyMessage);
51+
copyAmountAction = contextMenu->addAction(tr("Copy amount"), this, &ReceiveCoinsDialog::copyAmount);
6152
connect(ui->recentRequestsView, &QWidget::customContextMenuRequested, this, &ReceiveCoinsDialog::showMenu);
62-
connect(copyURIAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyURI);
63-
connect(copyAddressAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyAddress);
64-
connect(copyLabelAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyLabel);
65-
connect(copyMessageAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyMessage);
66-
connect(copyAmountAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyAmount);
6753

6854
connect(ui->clearButton, &QPushButton::clicked, this, &ReceiveCoinsDialog::clear);
6955

src/qt/rpcconsole.cpp

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -616,29 +616,14 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
616616
ui->peerWidget->setColumnWidth(PeerTableModel::Ping, PING_COLUMN_WIDTH);
617617
ui->peerWidget->horizontalHeader()->setStretchLastSection(true);
618618

619-
// create peer table context menu actions
620-
QAction* disconnectAction = new QAction(tr("&Disconnect"), this);
621-
QAction* banAction1h = new QAction(ts.ban_for + " " + tr("1 &hour"), this);
622-
QAction* banAction24h = new QAction(ts.ban_for + " " + tr("1 &day"), this);
623-
QAction* banAction7d = new QAction(ts.ban_for + " " + tr("1 &week"), this);
624-
QAction* banAction365d = new QAction(ts.ban_for + " " + tr("1 &year"), this);
625-
626619
// create peer table context menu
627620
peersTableContextMenu = new QMenu(this);
628-
peersTableContextMenu->addAction(disconnectAction);
629-
peersTableContextMenu->addAction(banAction1h);
630-
peersTableContextMenu->addAction(banAction24h);
631-
peersTableContextMenu->addAction(banAction7d);
632-
peersTableContextMenu->addAction(banAction365d);
633-
634-
connect(banAction1h, &QAction::triggered, [this] { banSelectedNode(60 * 60); });
635-
connect(banAction24h, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24); });
636-
connect(banAction7d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 7); });
637-
connect(banAction365d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 365); });
638-
639-
// peer table context menu signals
621+
peersTableContextMenu->addAction(tr("Disconnect"), this, &RPCConsole::disconnectSelectedNode);
622+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 hour"), [this] { banSelectedNode(60 * 60); });
623+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 day"), [this] { banSelectedNode(60 * 60 * 24); });
624+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 week"), [this] { banSelectedNode(60 * 60 * 24 * 7); });
625+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 year"), [this] { banSelectedNode(60 * 60 * 24 * 365); });
640626
connect(ui->peerWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showPeersTableContextMenu);
641-
connect(disconnectAction, &QAction::triggered, this, &RPCConsole::disconnectSelectedNode);
642627

643628
// peer table signal handling - update peer details when selecting new node
644629
connect(ui->peerWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RPCConsole::updateDetailWidget);
@@ -657,16 +642,10 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
657642
ui->banlistWidget->setColumnWidth(BanTableModel::Bantime, BANTIME_COLUMN_WIDTH);
658643
ui->banlistWidget->horizontalHeader()->setStretchLastSection(true);
659644

660-
// create ban table context menu action
661-
QAction* unbanAction = new QAction(tr("&Unban"), this);
662-
663645
// create ban table context menu
664646
banTableContextMenu = new QMenu(this);
665-
banTableContextMenu->addAction(unbanAction);
666-
667-
// ban table context menu signals
647+
banTableContextMenu->addAction(tr("Unban"), this, &RPCConsole::unbanSelectedNode);
668648
connect(ui->banlistWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showBanTableContextMenu);
669-
connect(unbanAction, &QAction::triggered, this, &RPCConsole::unbanSelectedNode);
670649

671650
// ban table signal handling - clear peer details when clicking a peer in the ban table
672651
connect(ui->banlistWidget, &QTableView::clicked, this, &RPCConsole::clearSelectedNode);

src/qt/transactionview.cpp

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -161,32 +161,21 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
161161
transactionView->horizontalHeader()->setStretchLastSection(true);
162162
}
163163

164-
// Actions
165-
abandonAction = new QAction(tr("Abandon transaction"), this);
166-
bumpFeeAction = new QAction(tr("Increase transaction fee"), this);
167-
bumpFeeAction->setObjectName("bumpFeeAction");
168-
copyAddressAction = new QAction(tr("Copy address"), this);
169-
copyLabelAction = new QAction(tr("Copy label"), this);
170-
QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
171-
QAction *copyTxIDAction = new QAction(tr("Copy transaction ID"), this);
172-
QAction *copyTxHexAction = new QAction(tr("Copy raw transaction"), this);
173-
QAction *copyTxPlainText = new QAction(tr("Copy full transaction details"), this);
174-
QAction *editLabelAction = new QAction(tr("Edit address label"), this);
175-
QAction *showDetailsAction = new QAction(tr("Show transaction details"), this);
176-
177164
contextMenu = new QMenu(this);
178165
contextMenu->setObjectName("contextMenu");
179-
contextMenu->addAction(copyAddressAction);
180-
contextMenu->addAction(copyLabelAction);
181-
contextMenu->addAction(copyAmountAction);
182-
contextMenu->addAction(copyTxIDAction);
183-
contextMenu->addAction(copyTxHexAction);
184-
contextMenu->addAction(copyTxPlainText);
185-
contextMenu->addAction(showDetailsAction);
166+
copyAddressAction = contextMenu->addAction(tr("Copy address"), this, &TransactionView::copyAddress);
167+
copyLabelAction = contextMenu->addAction(tr("Copy label"), this, &TransactionView::copyLabel);
168+
contextMenu->addAction(tr("Copy amount"), this, &TransactionView::copyAmount);
169+
contextMenu->addAction(tr("Copy transaction ID"), this, &TransactionView::copyTxID);
170+
contextMenu->addAction(tr("Copy raw transaction"), this, &TransactionView::copyTxHex);
171+
contextMenu->addAction(tr("Copy full transaction details"), this, &TransactionView::copyTxPlainText);
172+
contextMenu->addAction(tr("Show transaction details"), this, &TransactionView::showDetails);
186173
contextMenu->addSeparator();
187-
contextMenu->addAction(bumpFeeAction);
188-
contextMenu->addAction(abandonAction);
189-
contextMenu->addAction(editLabelAction);
174+
bumpFeeAction = contextMenu->addAction(tr("Increase transaction fee"));
175+
GUIUtil::ExceptionSafeConnect(bumpFeeAction, &QAction::triggered, this, &TransactionView::bumpFee);
176+
bumpFeeAction->setObjectName("bumpFeeAction");
177+
abandonAction = contextMenu->addAction(tr("Abandon transaction"), this, &TransactionView::abandonTx);
178+
contextMenu->addAction(tr("Edit address label"), this, &TransactionView::editLabel);
190179

191180
connect(dateWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseDate);
192181
connect(typeWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseType);
@@ -199,16 +188,6 @@ TransactionView::TransactionView(const PlatformStyle *platformStyle, QWidget *pa
199188
connect(transactionView, &QTableView::doubleClicked, this, &TransactionView::doubleClicked);
200189
connect(transactionView, &QTableView::customContextMenuRequested, this, &TransactionView::contextualMenu);
201190

202-
GUIUtil::ExceptionSafeConnect(bumpFeeAction, &QAction::triggered, this, &TransactionView::bumpFee);
203-
connect(abandonAction, &QAction::triggered, this, &TransactionView::abandonTx);
204-
connect(copyAddressAction, &QAction::triggered, this, &TransactionView::copyAddress);
205-
connect(copyLabelAction, &QAction::triggered, this, &TransactionView::copyLabel);
206-
connect(copyAmountAction, &QAction::triggered, this, &TransactionView::copyAmount);
207-
connect(copyTxIDAction, &QAction::triggered, this, &TransactionView::copyTxID);
208-
connect(copyTxHexAction, &QAction::triggered, this, &TransactionView::copyTxHex);
209-
connect(copyTxPlainText, &QAction::triggered, this, &TransactionView::copyTxPlainText);
210-
connect(editLabelAction, &QAction::triggered, this, &TransactionView::editLabel);
211-
connect(showDetailsAction, &QAction::triggered, this, &TransactionView::showDetails);
212191
// Double-clicking on a transaction on the transaction history page shows details
213192
connect(this, &TransactionView::doubleClicked, this, &TransactionView::showDetails);
214193
// Highlight transaction after fee bump

0 commit comments

Comments
 (0)