Skip to content

Commit 4f89c98

Browse files
hebastoknst
authored andcommitted
Merge bitcoin-core/gui#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#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
1 parent c36bb8e commit 4f89c98

File tree

8 files changed

+46
-143
lines changed

8 files changed

+46
-143
lines changed

src/qt/addressbookpage.cpp

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -107,32 +107,20 @@ AddressBookPage::AddressBookPage(Mode _mode, Tabs _tab, QWidget* parent) :
107107
break;
108108
}
109109

110-
// Context menu actions
111-
QAction *copyAddressAction = new QAction(tr("&Copy Address"), this);
112-
QAction *copyLabelAction = new QAction(tr("Copy &Label"), this);
113-
QAction *editAction = new QAction(tr("&Edit"), this);
114-
QAction *showAddressQRCodeAction = new QAction(tr("&Show address QR code"), this);
115-
deleteAction = new QAction(ui->deleteAddress->text(), this);
110+
// Build context menu
111+
contextMenu = new QMenu(this);
112+
contextMenu->addAction(tr("Copy Address"), this, &AddressBookPage::on_copyAddress_clicked);
113+
contextMenu->addAction(tr("Copy Label"), this, &AddressBookPage::onCopyLabelAction);
114+
contextMenu->addAction(tr("Edit"), this, &AddressBookPage::onEditAction);
115+
[[maybe_unused]] QAction* qrAction = contextMenu->addAction(tr("Show address QR code"), this, &AddressBookPage::on_showAddressQRCode_clicked);
116116
#ifndef USE_QRCODE
117-
showAddressQRCodeAction->setEnabled(false);
117+
qrAction->setEnabled(false);
118118
#endif
119119

120-
// Build context menu
121-
contextMenu = new QMenu(this);
122-
contextMenu->addAction(copyAddressAction);
123-
contextMenu->addAction(copyLabelAction);
124-
contextMenu->addAction(editAction);
125-
if(tab == SendingTab)
126-
contextMenu->addAction(deleteAction);
127-
contextMenu->addSeparator();
128-
contextMenu->addAction(showAddressQRCodeAction);
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);
135-
connect(showAddressQRCodeAction, &QAction::triggered, this, &AddressBookPage::on_showAddressQRCode_clicked);
120+
if (tab == SendingTab) {
121+
contextMenu->addAction(tr("Delete"), this, &AddressBookPage::on_deleteAddress_clicked);
122+
}
123+
136124
connect(ui->tableView, &QWidget::customContextMenuRequested, this, &AddressBookPage::contextualMenu);
137125
connect(ui->closeButton, &QPushButton::clicked, this, &QDialog::accept);
138126

@@ -267,13 +255,11 @@ void AddressBookPage::selectionChanged()
267255
// In sending tab, allow deletion of selection
268256
ui->deleteAddress->setEnabled(true);
269257
ui->deleteAddress->setVisible(true);
270-
deleteAction->setEnabled(true);
271258
break;
272259
case ReceivingTab:
273260
// Deleting receiving addresses, however, is not allowed
274261
ui->deleteAddress->setEnabled(false);
275262
ui->deleteAddress->setVisible(false);
276-
deleteAction->setEnabled(false);
277263
break;
278264
}
279265
ui->copyAddress->setEnabled(true);

src/qt/addressbookpage.h

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

6059
private Q_SLOTS:

src/qt/bitcoingui.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2054,11 +2054,8 @@ void UnitDisplayStatusBarControl::mousePressEvent(QMouseEvent *event)
20542054
void UnitDisplayStatusBarControl::createContextMenu()
20552055
{
20562056
menu = new QMenu(this);
2057-
for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits())
2058-
{
2059-
QAction *menuAction = new QAction(QString(BitcoinUnits::name(u)), this);
2060-
menuAction->setData(QVariant(u));
2061-
menu->addAction(menuAction);
2057+
for (const BitcoinUnits::Unit u : BitcoinUnits::availableUnits()) {
2058+
menu->addAction(BitcoinUnits::name(u))->setData(QVariant(u));
20622059
}
20632060
connect(menu, &QMenu::triggered, this, &UnitDisplayStatusBarControl::onMenuSelection);
20642061
}

src/qt/coincontroldialog.cpp

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -62,32 +62,16 @@ CoinControlDialog::CoinControlDialog(CCoinControl& coin_control, WalletModel* _m
6262

6363
GUIUtil::disableMacFocusRect(this);
6464

65-
// context menu actions
66-
QAction *copyAddressAction = new QAction(tr("Copy address"), this);
67-
QAction *copyLabelAction = new QAction(tr("Copy label"), this);
68-
QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
69-
copyTransactionHashAction = new QAction(tr("Copy transaction ID"), this); // we need to enable/disable this
70-
lockAction = new QAction(tr("Lock unspent"), this); // we need to enable/disable this
71-
unlockAction = new QAction(tr("Unlock unspent"), this); // we need to enable/disable this
72-
7365
// context menu
7466
contextMenu = new QMenu(this);
75-
contextMenu->addAction(copyAddressAction);
76-
contextMenu->addAction(copyLabelAction);
77-
contextMenu->addAction(copyAmountAction);
78-
contextMenu->addAction(copyTransactionHashAction);
67+
contextMenu->addAction(tr("Copy address"), this, &CoinControlDialog::copyAddress);
68+
contextMenu->addAction(tr("Copy label"), this, &CoinControlDialog::copyLabel);
69+
contextMenu->addAction(tr("Copy amount"), this, &CoinControlDialog::copyAmount);
70+
copyTransactionHashAction = contextMenu->addAction(tr("Copy transaction ID"), this, &CoinControlDialog::copyTransactionHash);
7971
contextMenu->addSeparator();
80-
contextMenu->addAction(lockAction);
81-
contextMenu->addAction(unlockAction);
82-
83-
// context menu signals
72+
lockAction = contextMenu->addAction(tr("Lock unspent"), this, &CoinControlDialog::lockCoin);
73+
unlockAction = contextMenu->addAction(tr("Unlock unspent"), this, &CoinControlDialog::unlockCoin);
8474
connect(ui->treeWidget, &QWidget::customContextMenuRequested, this, &CoinControlDialog::showMenu);
85-
connect(copyAddressAction, &QAction::triggered, this, &CoinControlDialog::copyAddress);
86-
connect(copyLabelAction, &QAction::triggered, this, &CoinControlDialog::copyLabel);
87-
connect(copyAmountAction, &QAction::triggered, this, &CoinControlDialog::copyAmount);
88-
connect(copyTransactionHashAction, &QAction::triggered, this, &CoinControlDialog::copyTransactionHash);
89-
connect(lockAction, &QAction::triggered, this, &CoinControlDialog::lockCoin);
90-
connect(unlockAction, &QAction::triggered, this, &CoinControlDialog::unlockCoin);
9175

9276
// clipboard actions
9377
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
@@ -31,28 +31,14 @@ ReceiveCoinsDialog::ReceiveCoinsDialog(QWidget* parent) :
3131
ui->label_3}, GUIUtil::FontWeight::Normal, 15);
3232
GUIUtil::updateFonts();
3333

34-
// context menu actions
35-
QAction *copyURIAction = new QAction(tr("Copy URI"), this);
36-
QAction* copyAddressAction = new QAction(tr("Copy address"), this);
37-
copyLabelAction = new QAction(tr("Copy label"), this);
38-
copyMessageAction = new QAction(tr("Copy message"), this);
39-
copyAmountAction = new QAction(tr("Copy amount"), this);
40-
4134
// context menu
4235
contextMenu = new QMenu(this);
43-
contextMenu->addAction(copyURIAction);
44-
contextMenu->addAction(copyAddressAction);
45-
contextMenu->addAction(copyLabelAction);
46-
contextMenu->addAction(copyMessageAction);
47-
contextMenu->addAction(copyAmountAction);
48-
49-
// context menu signals
36+
contextMenu->addAction(tr("Copy URI"), this, &ReceiveCoinsDialog::copyURI);
37+
contextMenu->addAction(tr("Copy address"), this, &ReceiveCoinsDialog::copyAddress);
38+
copyLabelAction = contextMenu->addAction(tr("Copy label"), this, &ReceiveCoinsDialog::copyLabel);
39+
copyMessageAction = contextMenu->addAction(tr("Copy message"), this, &ReceiveCoinsDialog::copyMessage);
40+
copyAmountAction = contextMenu->addAction(tr("Copy amount"), this, &ReceiveCoinsDialog::copyAmount);
5041
connect(ui->recentRequestsView, &QWidget::customContextMenuRequested, this, &ReceiveCoinsDialog::showMenu);
51-
connect(copyURIAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyURI);
52-
connect(copyAddressAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyAddress);
53-
connect(copyLabelAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyLabel);
54-
connect(copyMessageAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyMessage);
55-
connect(copyAmountAction, &QAction::triggered, this, &ReceiveCoinsDialog::copyAmount);
5642

5743
connect(ui->clearButton, &QPushButton::clicked, this, &ReceiveCoinsDialog::clear);
5844
}

src/qt/rpcconsole.cpp

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -705,29 +705,14 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
705705
ui->peerWidget->horizontalHeader()->setStretchLastSection(true);
706706
ui->peerWidget->setItemDelegateForColumn(PeerTableModel::NetNodeId, new PeerIdViewDelegate(this));
707707

708-
// create peer table context menu actions
709-
QAction* disconnectAction = new QAction(tr("&Disconnect"), this);
710-
QAction* banAction1h = new QAction(ts.ban_for + " " + tr("1 &hour"), this);
711-
QAction* banAction24h = new QAction(ts.ban_for + " " + tr("1 &day"), this);
712-
QAction* banAction7d = new QAction(ts.ban_for + " " + tr("1 &week"), this);
713-
QAction* banAction365d = new QAction(ts.ban_for + " " + tr("1 &year"), this);
714-
715708
// create peer table context menu
716709
peersTableContextMenu = new QMenu(this);
717-
peersTableContextMenu->addAction(disconnectAction);
718-
peersTableContextMenu->addAction(banAction1h);
719-
peersTableContextMenu->addAction(banAction24h);
720-
peersTableContextMenu->addAction(banAction7d);
721-
peersTableContextMenu->addAction(banAction365d);
722-
723-
connect(banAction1h, &QAction::triggered, [this] { banSelectedNode(60 * 60); });
724-
connect(banAction24h, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24); });
725-
connect(banAction7d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 7); });
726-
connect(banAction365d, &QAction::triggered, [this] { banSelectedNode(60 * 60 * 24 * 365); });
727-
728-
// peer table context menu signals
710+
peersTableContextMenu->addAction(tr("Disconnect"), this, &RPCConsole::disconnectSelectedNode);
711+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 hour"), [this] { banSelectedNode(60 * 60); });
712+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 day"), [this] { banSelectedNode(60 * 60 * 24); });
713+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 week"), [this] { banSelectedNode(60 * 60 * 24 * 7); });
714+
peersTableContextMenu->addAction(ts.ban_for + " " + tr("1 year"), [this] { banSelectedNode(60 * 60 * 24 * 365); });
729715
connect(ui->peerWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showPeersTableContextMenu);
730-
connect(disconnectAction, &QAction::triggered, this, &RPCConsole::disconnectSelectedNode);
731716

732717
// peer table signal handling - update peer details when selecting new node
733718
connect(ui->peerWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RPCConsole::updateDetailWidget);
@@ -746,16 +731,10 @@ void RPCConsole::setClientModel(ClientModel *model, int bestblock_height, int64_
746731
ui->banlistWidget->setColumnWidth(BanTableModel::Bantime, BANTIME_COLUMN_WIDTH);
747732
ui->banlistWidget->horizontalHeader()->setStretchLastSection(true);
748733

749-
// create ban table context menu action
750-
QAction* unbanAction = new QAction(tr("&Unban"), this);
751-
752734
// create ban table context menu
753735
banTableContextMenu = new QMenu(this);
754-
banTableContextMenu->addAction(unbanAction);
755-
756-
// ban table context menu signals
736+
banTableContextMenu->addAction(tr("Unban"), this, &RPCConsole::unbanSelectedNode);
757737
connect(ui->banlistWidget, &QTableView::customContextMenuRequested, this, &RPCConsole::showBanTableContextMenu);
758-
connect(unbanAction, &QAction::triggered, this, &RPCConsole::unbanSelectedNode);
759738

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

src/qt/transactionview.cpp

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -145,36 +145,23 @@ TransactionView::TransactionView(QWidget* parent) :
145145

146146
transactionView->setObjectName("transactionView");
147147

148-
// Actions
149-
abandonAction = new QAction(tr("Abandon transaction"), this);
150-
resendAction = new QAction(tr("Resend transaction"), this);
151-
copyAddressAction = new QAction(tr("Copy address"), this);
152-
copyLabelAction = new QAction(tr("Copy label"), this);
153-
QAction *copyAmountAction = new QAction(tr("Copy amount"), this);
154-
QAction *copyTxIDAction = new QAction(tr("Copy transaction ID"), this);
155-
QAction *copyTxHexAction = new QAction(tr("Copy raw transaction"), this);
156-
QAction *copyTxPlainText = new QAction(tr("Copy full transaction details"), this);
157-
QAction *editLabelAction = new QAction(tr("Edit address label"), this);
158-
QAction *showDetailsAction = new QAction(tr("Show transaction details"), this);
159-
QAction *showAddressQRCodeAction = new QAction(tr("Show address QR code"), this);
160-
#ifndef USE_QRCODE
161-
showAddressQRCodeAction->setEnabled(false);
162-
#endif
163-
164148
contextMenu = new QMenu(this);
165149
contextMenu->setObjectName("contextMenu");
166-
contextMenu->addAction(copyAddressAction);
167-
contextMenu->addAction(copyLabelAction);
168-
contextMenu->addAction(copyAmountAction);
169-
contextMenu->addAction(copyTxIDAction);
170-
contextMenu->addAction(copyTxHexAction);
171-
contextMenu->addAction(copyTxPlainText);
172-
contextMenu->addAction(showDetailsAction);
173-
contextMenu->addAction(showAddressQRCodeAction);
150+
copyAddressAction = contextMenu->addAction(tr("Copy address"), this, &TransactionView::copyAddress);
151+
copyLabelAction = contextMenu->addAction(tr("Copy label"), this, &TransactionView::copyLabel);
152+
contextMenu->addAction(tr("Copy amount"), this, &TransactionView::copyAmount);
153+
contextMenu->addAction(tr("Copy transaction ID"), this, &TransactionView::copyTxID);
154+
contextMenu->addAction(tr("Copy raw transaction"), this, &TransactionView::copyTxHex);
155+
contextMenu->addAction(tr("Copy full transaction details"), this, &TransactionView::copyTxPlainText);
156+
contextMenu->addAction(tr("Show transaction details"), this, &TransactionView::showDetails);
174157
contextMenu->addSeparator();
175-
contextMenu->addAction(abandonAction);
176-
contextMenu->addAction(resendAction);
177-
contextMenu->addAction(editLabelAction);
158+
abandonAction = contextMenu->addAction(tr("Abandon transaction"), this, &TransactionView::abandonTx);
159+
resendAction = contextMenu->addAction(tr("Resend transaction"), this, &TransactionView::resendTx);
160+
contextMenu->addAction(tr("Edit address label"), this, &TransactionView::editLabel);
161+
[[maybe_unused]] QAction* showAddressQRCodeAction = contextMenu->addAction(tr("Show address QR code"), this, &TransactionView::showAddressQRCode);
162+
#ifndef USE_QRCODE
163+
showAddressQRCodeAction->setEnabled(false);
164+
#endif
178165

179166
connect(dateWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseDate);
180167
connect(typeWidget, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), this, &TransactionView::chooseType);
@@ -188,17 +175,6 @@ TransactionView::TransactionView(QWidget* parent) :
188175
connect(transactionView, &QTableView::clicked, this, &TransactionView::computeSum);
189176
connect(transactionView, &QTableView::customContextMenuRequested, this, &TransactionView::contextualMenu);
190177

191-
connect(abandonAction, &QAction::triggered, this, &TransactionView::abandonTx);
192-
connect(resendAction, &QAction::triggered, this, &TransactionView::resendTx);
193-
connect(copyAddressAction, &QAction::triggered, this, &TransactionView::copyAddress);
194-
connect(copyLabelAction, &QAction::triggered, this, &TransactionView::copyLabel);
195-
connect(copyAmountAction, &QAction::triggered, this, &TransactionView::copyAmount);
196-
connect(copyTxIDAction, &QAction::triggered, this, &TransactionView::copyTxID);
197-
connect(copyTxHexAction, &QAction::triggered, this, &TransactionView::copyTxHex);
198-
connect(copyTxPlainText, &QAction::triggered, this, &TransactionView::copyTxPlainText);
199-
connect(editLabelAction, &QAction::triggered, this, &TransactionView::editLabel);
200-
connect(showDetailsAction, &QAction::triggered, this, &TransactionView::showDetails);
201-
connect(showAddressQRCodeAction, &QAction::triggered, this, &TransactionView::showAddressQRCode);
202178
// Double-clicking on a transaction on the transaction history page shows details
203179
connect(this, &TransactionView::doubleClicked, this, &TransactionView::showDetails);
204180
}

0 commit comments

Comments
 (0)