electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 62fe37a86357ea5c8e24f45ef0cfd18a82f76ba3
parent 607664e663dbe490b1a09957afdb59f33bae57c1
Author: Neil Booth <kyuupichan@gmail.com>
Date:   Sat, 29 Aug 2015 21:36:42 +0900

Permit multiselect in contacts tab

You can select multiple contacts, and still do all the actions
you could do on a single contact.  In particular, paying to them
all and removing them all.

This covers the first two bullet points of #1372.

Finally, make the new contact dialog box have a sensible width
that can display a full address without scrolling

Diffstat:
Mgui/qt/main_window.py | 51++++++++++++++++++++++++++++++++-------------------
1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py @@ -1508,6 +1508,7 @@ class ElectrumWindow(QMainWindow): def create_contacts_tab(self): l = MyTreeWidget(self, self.create_contact_menu, [_('Name'), _('Address'), _('Type')], 1, [0, 1]) + l.setSelectionMode(QAbstractItemView.ExtendedSelection) l.item_edited = self.contact_edited self.contacts_list = l return self.create_list_tab(l) @@ -1639,12 +1640,16 @@ class ElectrumWindow(QMainWindow): self.tabs.setCurrentIndex(1) self.payto_e.paytomany() - def payto(self, addr): - if not addr: - return + def payto_contacts(self, labels): + paytos = [self.get_contact_payto(label) for label in labels] self.tabs.setCurrentIndex(1) - self.payto_e.setText(addr) - self.amount_e.setFocus() + if len(paytos) == 1: + self.payto_e.setText(paytos[0]) + self.amount_e.setFocus() + else: + text = "\n".join([payto + ", 0" for payto in paytos]) + self.payto_e.setText(text) + self.payto_e.setFocus() def contact_edited(self, item, column, prior): if column == 0: # Remove old contact if renamed @@ -1662,29 +1667,35 @@ class ElectrumWindow(QMainWindow): self.update_completions() return True - def delete_contact(self, x): - if not self.question(_("Do you want to remove")+" %s "%x +_("from your list of contacts?")): + def delete_contacts(self, labels): + if not self.question(_("Remove %s from your list of contacts?") + % " + ".join(labels)): return - self.contacts.pop(x) + for label in labels: + self.contacts.pop(label) self.update_history_tab() self.update_contacts_tab() self.update_completions() def create_contact_menu(self, position): - item = self.contacts_list.itemAt(position) menu = QMenu() - if not item: + selected = self.contacts_list.selectedItems() + if not selected: menu.addAction(_("New contact"), lambda: self.new_contact_dialog()) else: - key = unicode(item.text(0)) - menu.addAction(_("Copy to Clipboard"), lambda: self.app.clipboard().setText(key)) - menu.addAction(_("Pay to"), lambda: self.payto(self.get_contact_payto(key))) - menu.addAction(_("Delete"), lambda: self.delete_contact(key)) - addr_URL = block_explorer_URL(self.config, 'addr', unicode(item.text(1))) - if addr_URL: - menu.addAction(_("View on block explorer"), lambda: webbrowser.open(addr_URL)) - - run_hook('create_contact_menu', menu, item) + labels = [unicode(item.text(0)) for item in selected] + addrs = [unicode(item.text(1)) for item in selected] + menu.addAction(_("Copy to Clipboard"), lambda: + self.app.clipboard().setText('\n'.join(labels))) + menu.addAction(_("Pay to"), lambda: self.payto_contacts(labels)) + menu.addAction(_("Delete"), lambda: self.delete_contacts(labels)) + URLs = [URL for URL in [block_explorer_URL(self.config, 'addr', addr) + for addr in addrs] if URL is not None] + if URLs: + menu.addAction(_("View on block explorer"), + lambda: map(webbrowser.open, URLs)) + + run_hook('create_contact_menu', menu, selected) menu.exec_(self.contacts_list.viewport().mapToGlobal(position)) @@ -1941,7 +1952,9 @@ class ElectrumWindow(QMainWindow): vbox.addWidget(QLabel(_('New Contact') + ':')) grid = QGridLayout() line1 = QLineEdit() + line1.setFixedWidth(280) line2 = QLineEdit() + line2.setFixedWidth(280) grid.addWidget(QLabel(_("Address")), 1, 0) grid.addWidget(line1, 1, 1) grid.addWidget(QLabel(_("Name")), 2, 0)