Improve Master Public Keys dialog

- Put the radio buttons inside the group box
- Share more code between the have-group-box and not cases
- Use ChoicesLayout
- Don't use cosigner terminology unless it's a Multisig wallet
This commit is contained in:
Neil Booth 2016-01-11 12:31:45 +09:00
parent b120dd8849
commit 45f518e191
2 changed files with 31 additions and 37 deletions

View File

@ -43,7 +43,7 @@ from electrum.util import PrintError, NotEnoughFunds, StoreDict
from electrum import Transaction, mnemonic from electrum import Transaction, mnemonic
from electrum import util, bitcoin, commands from electrum import util, bitcoin, commands
from electrum import SimpleConfig, COIN_CHOOSERS, paymentrequest from electrum import SimpleConfig, COIN_CHOOSERS, paymentrequest
from electrum.wallet import Wallet, BIP32_RD_Wallet from electrum.wallet import Wallet, BIP32_RD_Wallet, Multisig_Wallet
from amountedit import BTCAmountEdit, MyLineEdit, BTCkBEdit from amountedit import BTCAmountEdit, MyLineEdit, BTCkBEdit
from network_dialog import NetworkDialog from network_dialog import NetworkDialog
@ -1955,41 +1955,29 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
dialog = WindowModalDialog(self, "Master Public Keys") dialog = WindowModalDialog(self, "Master Public Keys")
mpk_dict = self.wallet.get_master_public_keys() mpk_dict = self.wallet.get_master_public_keys()
vbox = QVBoxLayout() vbox = QVBoxLayout()
mpk_text = ShowQRTextEdit()
mpk_text.setMaximumHeight(100)
mpk_text.addCopyButton(self.app)
sorted_keys = sorted(mpk_dict.keys())
def show_mpk(index):
mpk_text.setText(mpk_dict[sorted_keys[index]])
# only show the combobox in case multiple accounts are available # only show the combobox in case multiple accounts are available
if len(mpk_dict) > 1: if len(mpk_dict) > 1:
gb = QGroupBox(_("Master Public Keys")) def label(key):
vbox.addWidget(gb) if isinstance(self.wallet, Multisig_Wallet):
group = QButtonGroup() is_mine = self.wallet.master_private_keys.has_key(key)
first_button = None mine_text = [_("cosigner"), _("self")]
for key in sorted(mpk_dict.keys()): return "%s (%s)" % (key, mine_text[is_mine])
is_mine = self.wallet.master_private_keys.has_key(key) return key
b = QRadioButton(gb) labels = list(map(label, sorted_keys))
name = 'Self' if is_mine else 'Cosigner' on_click = lambda clayout: show_mpk(clayout.selected_index())
b.setText(name + ' (%s)'%key) labels_clayout = ChoicesLayout(_("Master Public Keys"), labels,
b.key = key on_click)
group.addButton(b) vbox.addLayout(labels_clayout.layout())
vbox.addWidget(b)
if not first_button:
first_button = b
mpk_text = ShowQRTextEdit() show_mpk(0)
mpk_text.setMaximumHeight(170) vbox.addWidget(mpk_text)
vbox.addWidget(mpk_text)
def show_mpk(b):
mpk = mpk_dict.get(b.key, "")
mpk_text.setText(mpk)
group.buttonReleased.connect(show_mpk)
first_button.setChecked(True)
show_mpk(first_button)
elif len(mpk_dict) == 1:
mpk = mpk_dict.values()[0]
mpk_text = ShowQRTextEdit(text=mpk)
mpk_text.setMaximumHeight(170)
vbox.addWidget(mpk_text)
mpk_text.addCopyButton(self.app)
vbox.addLayout(Buttons(CloseButton(dialog))) vbox.addLayout(Buttons(CloseButton(dialog)))
dialog.setLayout(vbox) dialog.setLayout(vbox)
dialog.exec_() dialog.exec_()

View File

@ -1,12 +1,14 @@
from electrum.i18n import _
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import os.path import os.path
import time import time
import traceback import traceback
import sys import sys
import threading import threading
import platform import platform
from functools import partial
from electrum.i18n import _
from PyQt4.QtGui import *
from PyQt4.QtCore import *
if platform.system() == 'Windows': if platform.system() == 'Windows':
MONOSPACE_FONT = 'Lucida Console' MONOSPACE_FONT = 'Lucida Console'
@ -267,7 +269,7 @@ def text_dialog(parent, title, label, ok_label, default=None):
return unicode(txt.toPlainText()) return unicode(txt.toPlainText())
class ChoicesLayout(object): class ChoicesLayout(object):
def __init__(self, msg, choices): def __init__(self, msg, choices, on_clicked=None):
vbox = QVBoxLayout() vbox = QVBoxLayout()
if len(msg) > 50: if len(msg) > 50:
label = QLabel(msg) label = QLabel(msg)
@ -289,6 +291,10 @@ class ChoicesLayout(object):
group.setId(button, i) group.setId(button, i)
if i==0: if i==0:
button.setChecked(True) button.setChecked(True)
if on_clicked:
group.buttonClicked.connect(partial(on_clicked, self))
self.vbox = vbox self.vbox = vbox
def layout(self): def layout(self):