Browse Source

Qt: make copy menus more consistent

master
ThomasV 3 years ago
parent
commit
d766f2fd9e
  1. 4
      electrum/gui/qt/history_list.py
  2. 7
      electrum/gui/qt/invoice_list.py
  3. 8
      electrum/gui/qt/request_list.py
  4. 4
      electrum/gui/qt/util.py
  5. 45
      electrum/gui/qt/utxo_list.py

4
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

7
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:

8
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]))

4
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

45
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:

Loading…
Cancel
Save