From d766f2fd9ef060f3247d939b9962e55ce94b678f Mon Sep 17 00:00:00 2001 From: ThomasV Date: Sun, 12 Feb 2023 11:13:03 +0100 Subject: [PATCH] Qt: make copy menus more consistent --- electrum/gui/qt/history_list.py | 4 +-- electrum/gui/qt/invoice_list.py | 7 ++--- electrum/gui/qt/request_list.py | 8 +++--- electrum/gui/qt/util.py | 4 ++- electrum/gui/qt/utxo_list.py | 45 +++++++++++++++++---------------- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/electrum/gui/qt/history_list.py b/electrum/gui/qt/history_list.py index 9d5e22539..66476723f 100644 --- a/electrum/gui/qt/history_list.py +++ b/electrum/gui/qt/history_list.py @@ -726,8 +726,8 @@ class HistoryList(MyTreeView, AcceptFileDragDrop): menu = QMenu() if tx_details.can_remove: menu.addAction(_("Remove"), lambda: self.remove_local_tx(tx_hash)) - cc = self.add_copy_menu(menu, idx) - cc.addAction(_("Transaction ID"), lambda: self.place_text_on_clipboard(tx_hash, title="TXID")) + copy_menu = self.add_copy_menu(menu, idx) + copy_menu.addAction(_("Transaction ID"), lambda: self.place_text_on_clipboard(tx_hash, title="TXID")) menu_edit = menu.addMenu(_("Edit")) for c in self.editable_columns: if self.isColumnHidden(c): continue diff --git a/electrum/gui/qt/invoice_list.py b/electrum/gui/qt/invoice_list.py index 9a928d4f0..6a5375ae9 100644 --- a/electrum/gui/qt/invoice_list.py +++ b/electrum/gui/qt/invoice_list.py @@ -157,12 +157,13 @@ class InvoiceList(MyTreeView): key = item_col0.data(ROLE_REQUEST_ID) invoice = self.wallet.get_invoice(key) menu = QMenu(self) - self.add_copy_menu(menu, idx) + copy_menu = self.add_copy_menu(menu, idx) + address = invoice.get_address() + if address: + copy_menu.addAction(_("Address"), lambda: self.parent.do_copy(invoice.get_address(), title='Bitcoin Address')) if invoice.is_lightning(): menu.addAction(_("Details"), lambda: self.parent.show_lightning_invoice(invoice)) else: - if len(invoice.outputs) == 1: - menu.addAction(_("Copy Address"), lambda: self.parent.do_copy(invoice.get_address(), title='Bitcoin Address')) menu.addAction(_("Details"), lambda: self.parent.show_onchain_invoice(invoice)) status = wallet.get_invoice_status(invoice) if status == PR_UNPAID: diff --git a/electrum/gui/qt/request_list.py b/electrum/gui/qt/request_list.py index 1e3fcfad4..8d03ce713 100644 --- a/electrum/gui/qt/request_list.py +++ b/electrum/gui/qt/request_list.py @@ -194,13 +194,13 @@ class RequestList(MyTreeView): self.update() return menu = QMenu(self) + copy_menu = self.add_copy_menu(menu, idx) if req.get_address(): - menu.addAction(_("Copy Address"), lambda: self.parent.do_copy(req.get_address(), title='Bitcoin Address')) + copy_menu.addAction(_("Address"), lambda: self.parent.do_copy(req.get_address(), title='Bitcoin Address')) if URI := self.wallet.get_request_URI(req): - menu.addAction(_("Copy URI"), lambda: self.parent.do_copy(URI, title='Bitcoin URI')) + copy_menu.addAction(_("Bitcoin URI"), lambda: self.parent.do_copy(URI, title='Bitcoin URI')) if req.is_lightning(): - menu.addAction(_("Copy Lightning Request"), lambda: self.parent.do_copy(req.lightning_invoice, title='Lightning Request')) - self.add_copy_menu(menu, idx) + copy_menu.addAction(_("Lightning Request"), lambda: self.parent.do_copy(req.lightning_invoice, title='Lightning Request')) #if 'view_url' in req: # menu.addAction(_("View in web browser"), lambda: webopen(req['view_url'])) menu.addAction(_("Delete"), lambda: self.delete_requests([key])) diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py index fce6f4474..677e4f2b7 100644 --- a/electrum/gui/qt/util.py +++ b/electrum/gui/qt/util.py @@ -774,8 +774,10 @@ class MyTreeView(QTreeView): self.show_toolbar(not self.toolbar_shown, config) def add_copy_menu(self, menu: QMenu, idx) -> QMenu: - cc = menu.addMenu(_("Copy Column")) + cc = menu.addMenu(_("Copy")) for column in self.Columns: + if self.isColumnHidden(column): + continue column_title = self.original_model().horizontalHeaderItem(column).text() if not column_title: continue diff --git a/electrum/gui/qt/utxo_list.py b/electrum/gui/qt/utxo_list.py index 5e9d11bed..d5adc5327 100644 --- a/electrum/gui/qt/utxo_list.py +++ b/electrum/gui/qt/utxo_list.py @@ -244,41 +244,42 @@ class UTXOList(MyTreeView): menu = QMenu() menu.setSeparatorsCollapsible(True) # consecutive separators are merged together coins = [self._utxo_dict[name] for name in selected] - if coins: - menu_spend = menu.addMenu(_("Fully spend") + '…') - m = menu_spend.addAction(_("send to address in clipboard"), lambda: self.pay_to_clipboard_address(coins)) - m.setEnabled(self.clipboard_contains_address()) - m = menu_spend.addAction(_("in new channel"), lambda: self.open_channel_with_coins(coins)) - m.setEnabled(self.can_open_channel(coins)) - m = menu_spend.addAction(_("in submarine swap"), lambda: self.swap_coins(coins)) - m.setEnabled(self.can_swap_coins(coins)) - # coin control - if self.are_in_coincontrol(coins): - menu.addAction(_("Remove from coin control"), lambda: self.remove_from_coincontrol(coins)) - else: - menu.addAction(_("Add to coin control"), lambda: self.add_to_coincontrol(coins)) - + if not coins: + return if len(coins) == 1: + idx = self.indexAt(position) + if not idx.isValid(): + return + self.add_copy_menu(menu, idx) utxo = coins[0] - addr = utxo.address txid = utxo.prevout.txid.hex() # "Details" tx = self.wallet.adb.get_transaction(txid) if tx: label = self.wallet.get_label_for_txid(txid) menu.addAction(_("Details"), lambda: self.parent.show_transaction(tx, tx_desc=label)) - # "Copy ..." - idx = self.indexAt(position) - if not idx.isValid(): - return - self.add_copy_menu(menu, idx) - # "Freeze coin" + # fully spend + menu_spend = menu.addMenu(_("Fully spend") + '…') + m = menu_spend.addAction(_("send to address in clipboard"), lambda: self.pay_to_clipboard_address(coins)) + m.setEnabled(self.clipboard_contains_address()) + m = menu_spend.addAction(_("in new channel"), lambda: self.open_channel_with_coins(coins)) + m.setEnabled(self.can_open_channel(coins)) + m = menu_spend.addAction(_("in submarine swap"), lambda: self.swap_coins(coins)) + m.setEnabled(self.can_swap_coins(coins)) + # coin control + if self.are_in_coincontrol(coins): + menu.addAction(_("Remove from coin control"), lambda: self.remove_from_coincontrol(coins)) + else: + menu.addAction(_("Add to coin control"), lambda: self.add_to_coincontrol(coins)) + # Freeze menu + if len(coins) == 1: + utxo = coins[0] + addr = utxo.address menu_freeze = menu.addMenu(_("Freeze")) if not self.wallet.is_frozen_coin(utxo): menu_freeze.addAction(_("Freeze Coin"), lambda: self.parent.set_frozen_state_of_coins([utxo], True)) else: menu_freeze.addAction(_("Unfreeze Coin"), lambda: self.parent.set_frozen_state_of_coins([utxo], False)) - # "Freeze address" if not self.wallet.is_frozen_address(addr): menu_freeze.addAction(_("Freeze Address"), lambda: self.parent.set_frozen_state_of_addresses([addr], True)) else: