tnew Button widgets - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit 01cfb8f8f1202f4f7f42648256715787d32c49e8
 (DIR) parent 94c0d8682161f480fcf52f66db1b1049dcb0bd94
 (HTM) Author: ThomasV <thomasv@gitorious>
       Date:   Sat, 14 Mar 2015 12:28:19 +0100
       
       new Button widgets
       
       Diffstat:
         M gui/qt/installwizard.py             |      31 ++++++++++++-------------------
         M gui/qt/main_window.py               |      64 +++++++++----------------------
         M gui/qt/network_dialog.py            |       2 +-
         M gui/qt/password_dialog.py           |       2 +-
         M gui/qt/seed_dialog.py               |       3 +--
         M gui/qt/util.py                      |      57 ++++++++++++++++---------------
         M plugins/btchipwallet.py             |       1 -
         M plugins/openalias.py                |      13 +++++++------
         M plugins/trezor.py                   |       4 ++--
         M plugins/trustedcoin.py              |      15 +++++++--------
       
       10 files changed, 80 insertions(+), 112 deletions(-)
       ---
 (DIR) diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py
       t@@ -89,12 +89,10 @@ class InstallWizard(QDialog):
                        button.setChecked(True)
        
                vbox.addStretch(1)
       -        hbox, button = ok_cancel_buttons2(self, _('Next'))
       -        vbox.addLayout(hbox)
       +        vbox.addLayout(Buttons(CancelButton(self), OkButton(self, _('Next'))))
                self.set_layout(vbox)
                self.show()
                self.raise_()
       -        button.setDefault(True)
        
                if not self.exec_():
                    return None, None
       t@@ -131,8 +129,8 @@ class InstallWizard(QDialog):
                    func = self.is_any
                vbox, seed_e = seed_dialog.enter_seed_box(msg, self, sid)
                vbox.addStretch(1)
       -        hbox, button = ok_cancel_buttons2(self, _('Next'))
       -        vbox.addLayout(hbox)
       +        button = OkButton(self, _('Next'))
       +        vbox.addLayout(Buttons(CancelButton(self), button))
                button.setEnabled(False)
                seed_e.textChanged.connect(lambda: button.setEnabled(func(self.get_seed_text(seed_e))))
                self.set_layout(vbox)
       t@@ -151,8 +149,8 @@ class InstallWizard(QDialog):
                    vbox.addLayout(vbox2)
                    entries.append(seed_e2)
                vbox.addStretch(1)
       -        hbox, button = ok_cancel_buttons2(self, _('Next'))
       -        vbox.addLayout(hbox)
       +        button = OkButton(self, _('Next'))
       +        vbox.addLayout(Buttons(CancelButton(self), button))
                button.setEnabled(False)
                f = lambda: button.setEnabled( map(lambda e: Wallet.is_xpub(self.get_seed_text(e)), entries) == [True]*len(entries))
                for e in entries:
       t@@ -173,23 +171,18 @@ class InstallWizard(QDialog):
                    vbox.addLayout(vbox2)
                    entries.append(seed_e2)
                vbox.addStretch(1)
       -        hbox, button = ok_cancel_buttons2(self, _('Next'))
       -        vbox.addLayout(hbox)
       +        button = OkButton(self, _('Next'))
       +        vbox.addLayout(Buttons(CancelButton(self), button))
                button.setEnabled(False)
       -
                f = lambda: button.setEnabled( map(lambda e: self.is_any(self.get_seed_text(e)), entries) == [True]*len(entries))
                for e in entries:
                    e.textChanged.connect(f)
       -
                self.set_layout(vbox)
                if not self.exec_():
                    return
                return map(lambda e: self.get_seed_text(e), entries)
        
        
       -
       -
       -
            def waiting_dialog(self, task, msg= _("Electrum is generating your addresses, please wait.")):
                def target():
                    task()
       t@@ -239,7 +232,7 @@ class InstallWizard(QDialog):
                vbox.addLayout(grid)
        
                vbox.addStretch(1)
       -        vbox.addLayout(ok_cancel_buttons(self, _('Next')))
       +        vbox.addLayout(Buttons(CancelButton(self), OkButton(self, _('Next'))))
        
                self.set_layout(vbox)
                if not self.exec_():
       t@@ -261,7 +254,7 @@ class InstallWizard(QDialog):
                    vbox.addWidget(logo)
                vbox.addWidget(QLabel(msg))
                vbox.addStretch(1)
       -        vbox.addLayout(close_button(self, _('Next')))
       +        vbox.addLayout(Buttons(CloseButton(self, _('Next'))))
                if not self.exec_():
                    return None
        
       t@@ -282,7 +275,7 @@ class InstallWizard(QDialog):
                    if i==0:
                        button.setChecked(True)
                vbox.addStretch(1)
       -        vbox.addLayout(ok_cancel_buttons(self, _("Next")))
       +        vbox.addLayout(Buttons(CancelButton(self), OkButton(self, _('Next'))))
                if not self.exec_():
                    return
                wallet_type = choices[group2.checkedId()][0]
       t@@ -300,7 +293,7 @@ class InstallWizard(QDialog):
                label.setWordWrap(True)
                vbox.addWidget(label)
                vbox.addStretch(1)
       -        vbox.addLayout(ok_cancel_buttons(self, yes_label, no_label))
       +        vbox.addLayout(Buttons(CancelButton(self, no_label), OkButton(self, yes_label)))
                if not self.exec_():
                    return None
                return True
       t@@ -308,7 +301,7 @@ class InstallWizard(QDialog):
        
            def show_seed(self, seed, sid):
                vbox = seed_dialog.show_seed_box_msg(seed, sid)
       -        vbox.addLayout(ok_cancel_buttons(self, _("Next")))
       +        vbox.addLayout(Buttons(CancelButton(self), OkButton(self, _("Next"))))
                self.set_layout(vbox)
                return self.exec_()
        
 (DIR) diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -61,10 +61,7 @@ import csv
        from electrum import ELECTRUM_VERSION
        import re
        
       -from util import MyTreeWidget, HelpButton, EnterButton, line_dialog, text_dialog, ok_cancel_buttons, close_button, WaitingDialog
       -from util import filename_field, ok_cancel_buttons2, address_field
       -from util import MONOSPACE_FONT
       -
       +from util import *
        
        
        class StatusBarButton(QPushButton):
       t@@ -1849,7 +1846,7 @@ class ElectrumWindow(QMainWindow):
                grid.addWidget(line2, 2, 1)
        
                vbox.addLayout(grid)
       -        vbox.addLayout(ok_cancel_buttons(d))
       +        vbox.addLayout(Buttons(CancelButton(d), OkButton(d)))
        
                if not d.exec_():
                    return
       t@@ -1873,11 +1870,9 @@ class ElectrumWindow(QMainWindow):
        
            @protected
            def new_account_dialog(self, password):
       -
                dialog = QDialog(self)
                dialog.setModal(1)
                dialog.setWindowTitle(_("New Account"))
       -
                vbox = QVBoxLayout()
                vbox.addWidget(QLabel(_('Account name')+':'))
                e = QLineEdit()
       t@@ -1887,22 +1882,18 @@ class ElectrumWindow(QMainWindow):
                l = QLabel(msg)
                l.setWordWrap(True)
                vbox.addWidget(l)
       -
       -        vbox.addLayout(ok_cancel_buttons(dialog))
       +        vbox.addLayout(Buttons(CancelButton(dialog), OkButton(dialog)))
                dialog.setLayout(vbox)
                r = dialog.exec_()
       -        if not r: return
       -
       +        if not r:
       +            return
                name = str(e.text())
       -
                self.wallet.create_pending_account(name, password)
                self.update_address_tab()
                self.update_account_selector()
                self.tabs.setCurrentIndex(3)
        
        
       -
       -
            def show_master_public_keys(self):
        
                dialog = QDialog(self)
       t@@ -1933,22 +1924,17 @@ class ElectrumWindow(QMainWindow):
                        name = str(b.text())
                        mpk = mpk_dict.get(name, "")
                        mpk_text.setText(mpk)
       -                mpk_text.selectAll()    # for easy copying
        
                    group.buttonReleased.connect(show_mpk)
                    first_button.setChecked(True)
                    show_mpk(first_button)
       -
       -            #combobox.currentIndexChanged[str].connect(lambda acc: show_mpk(acc))
                elif len(mpk_dict) == 1:
                    mpk = mpk_dict.values()[0]
                    mpk_text = ShowQRTextEdit(text=mpk)
                    mpk_text.setMaximumHeight(170)
       -            mpk_text.selectAll()    # for easy copying
                    vbox.addWidget(mpk_text)
        
       -        vbox.addLayout(close_button(dialog))
       -
       +        vbox.addLayout(Buttons(CopyButton(mpk_text, self.app), CloseButton(dialog)))
                dialog.setLayout(vbox)
                dialog.exec_()
        
       t@@ -2009,7 +1995,7 @@ class ElectrumWindow(QMainWindow):
                vbox.addWidget( QLabel(_("Public key") + ':'))
                keys = ShowQRTextEdit(text='\n'.join(pubkey_list))
                vbox.addWidget(keys)
       -        vbox.addLayout(close_button(d))
       +        vbox.addLayout(Buttons(CopyButton(keys, self.app), CloseButton(d)))
                d.setLayout(vbox)
                d.exec_()
        
       t@@ -2032,7 +2018,7 @@ class ElectrumWindow(QMainWindow):
                vbox.addWidget( QLabel(_("Private key") + ':'))
                keys = ShowQRTextEdit(text='\n'.join(pk_list))
                vbox.addWidget(keys)
       -        vbox.addLayout(close_button(d))
       +        vbox.addLayout(Buttons(CopyButton(keys, self.app), CloseButton(d)))
                d.setLayout(vbox)
                d.exec_()
        
       t@@ -2187,7 +2173,7 @@ class ElectrumWindow(QMainWindow):
                grid.addWidget(pw, 1, 1)
                vbox.addLayout(grid)
        
       -        vbox.addLayout(ok_cancel_buttons(d))
       +        vbox.addLayout(Buttons(CancelButton(d), OkButton(d)))
                d.setLayout(vbox)
        
                run_hook('password_dialog', pw, grid, 1)
       t@@ -2384,9 +2370,9 @@ class ElectrumWindow(QMainWindow):
                hbox, filename_e, csv_button = filename_field(self, self.config, defaultname, select_msg)
                vbox.addLayout(hbox)
        
       -        h, b = ok_cancel_buttons2(d, _('Export'))
       +        b = OkButton(d, _('Export'))
                b.setEnabled(False)
       -        vbox.addLayout(h)
       +        vbox.addLayout(Buttons(CancelButton(d), b))
        
                private_keys = {}
                addresses = self.wallet.addresses(True)
       t@@ -2469,40 +2455,30 @@ class ElectrumWindow(QMainWindow):
        
        
            def export_history_dialog(self):
       -
                d = QDialog(self)
                d.setWindowTitle(_('Export History'))
                d.setMinimumSize(400, 200)
                vbox = QVBoxLayout(d)
       -
                defaultname = os.path.expanduser('~/electrum-history.csv')
                select_msg = _('Select file to export your wallet transactions to')
       -
                hbox, filename_e, csv_button = filename_field(self, self.config, defaultname, select_msg)
                vbox.addLayout(hbox)
       -
                vbox.addStretch(1)
       -
       -        h, b = ok_cancel_buttons2(d, _('Export'))
       -        vbox.addLayout(h)
       -
       -        run_hook('export_history_dialog', self,hbox)
       +        hbox = Buttons(CancelButton(d), OkButton(d, _('Export')))
       +        vbox.addLayout(hbox)
       +        run_hook('export_history_dialog', self, hbox)
                self.update()
       -
                if not d.exec_():
                    return
       -
                filename = filename_e.text()
                if not filename:
                    return
       -
                try:
                    self.do_export_history(self.wallet, filename, csv_button.isChecked())
                except (IOError, os.error), reason:
                    export_error_label = _("Electrum was unable to produce a transaction export.")
                    QMessageBox.critical(self, _("Unable to export history"), export_error_label + "\n" + str(reason))
                    return
       -
                QMessageBox.information(self,_("History exported"), _("Your wallet history has been successfully exported."))
        
        
       t@@ -2572,8 +2548,8 @@ class ElectrumWindow(QMainWindow):
                vbox.addLayout(h)
        
                vbox.addStretch(1)
       -        hbox, button = ok_cancel_buttons2(d, _('Sweep'))
       -        vbox.addLayout(hbox)
       +        button = OkButton(d, _('Sweep'))
       +        vbox.addLayout(Buttons(CancelButton(d), button))
                button.setEnabled(False)
        
                def get_address():
       t@@ -2787,7 +2763,7 @@ class ElectrumWindow(QMainWindow):
        
                vbox.addLayout(grid)
                vbox.addStretch(1)
       -        vbox.addLayout(close_button(d))
       +        vbox.addLayout(Buttons(CloseButton(d)))
                d.setLayout(vbox)
        
                # run the dialog
       t@@ -2873,7 +2849,7 @@ class ElectrumWindow(QMainWindow):
                        print_msg("Error: cannot display plugin", p)
                        traceback.print_exc(file=sys.stdout)
                grid.setRowStretch(i+1,1)
       -        vbox.addLayout(close_button(d))
       +        vbox.addLayout(Buttons(CloseButton(d)))
                d.exec_()
        
            def show_account_details(self, k):
       t@@ -2898,9 +2874,7 @@ class ElectrumWindow(QMainWindow):
                text.setReadOnly(True)
                text.setMaximumHeight(170)
                vbox.addWidget(text)
       -
                mpk_text = '\n'.join( account.get_master_pubkeys() )
                text.setText(mpk_text)
       -
       -        vbox.addLayout(close_button(d))
       +        vbox.addLayout(Buttons(CloseButton(d)))
                d.exec_()
 (DIR) diff --git a/gui/qt/network_dialog.py b/gui/qt/network_dialog.py
       t@@ -166,7 +166,7 @@ class NetworkDialog(QDialog):
                grid.addWidget(self.proxy_port, 4, 3)
        
                # buttons
       -        vbox.addLayout(ok_cancel_buttons(self))
       +        vbox.addLayout(Buttons(CancelButton(self), OkButton(self)))
                self.setLayout(vbox)
        
        
 (DIR) diff --git a/gui/qt/password_dialog.py b/gui/qt/password_dialog.py
       t@@ -74,7 +74,7 @@ def make_password_dialog(self, wallet, msg, new_pass=True):
            self.new_pw.textChanged.connect(lambda: update_password_strength(self.pw_strength, self.new_pw.text()))
        
            vbox.addStretch(1)
       -    vbox.addLayout(ok_cancel_buttons(self))
       +    vbox.addLayout(Buttons(CancelButton(self), OkButton(self)))
            return vbox
        
        
 (DIR) diff --git a/gui/qt/seed_dialog.py b/gui/qt/seed_dialog.py
       t@@ -22,7 +22,6 @@ import PyQt4.QtCore as QtCore
        from electrum.i18n import _
        from electrum import mnemonic
        from qrcodewidget import QRCodeWidget, QRDialog
       -from util import close_button
        from qrtextedit import ShowQRTextEdit, ScanQRTextEdit
        
        class SeedDialog(QDialog):
       t@@ -34,7 +33,7 @@ class SeedDialog(QDialog):
                vbox = show_seed_box_msg(seed)
                if imported_keys:
                    vbox.addWidget(QLabel("<b>"+_("WARNING")+":</b> " + _("Your wallet contains imported keys. These keys cannot be recovered from seed.") + "</b><p>"))
       -        vbox.addLayout(close_button(self))
       +        vbox.addLayout(Buttons(CloseButton(self)))
                self.setLayout(vbox)
        
        
 (DIR) diff --git a/gui/qt/util.py b/gui/qt/util.py
       t@@ -93,33 +93,36 @@ class HelpButton(QPushButton):
                else:
                    QMessageBox.information(self, 'Help', self.help_text, 'OK')
        
       +class Buttons(QHBoxLayout):
       +    def __init__(self, *buttons):
       +        QHBoxLayout.__init__(self)
       +        self.addStretch(1)
       +        for b in buttons:
       +            self.addWidget(b)
       +
       +class CloseButton(QPushButton):
       +    def __init__(self, dialog):
       +        QPushButton.__init__(self, _("Close"))
       +        self.clicked.connect(dialog.close)
       +        self.setDefault(True)
       +
       +class CopyButton(QPushButton):
       +    def __init__(self, text, app):
       +        QPushButton.__init__(self, _("Copy"))
       +        self.clicked.connect(lambda: app.clipboard().setText(str(text.toPlainText())))
       +
       +class OkButton(QPushButton):
       +    def __init__(self, dialog, label=None):
       +        QPushButton.__init__(self, label or _("OK"))
       +        self.clicked.connect(dialog.accept)
       +        self.setDefault(True)
       +
       +class CancelButton(QPushButton):
       +    def __init__(self, dialog, label=None):
       +        QPushButton.__init__(self, label or _("Cancel"))
       +        self.clicked.connect(dialog.reject)
        
        
       -def close_button(dialog, label=None):
       -    hbox = QHBoxLayout()
       -    hbox.addStretch(1)
       -    b = QPushButton(label or _("Close"))
       -    hbox.addWidget(b)
       -    b.clicked.connect(dialog.close)
       -    b.setDefault(True)
       -    return hbox
       -
       -def ok_cancel_buttons2(dialog, ok_label=None, cancel_label=None):
       -    hbox = QHBoxLayout()
       -    hbox.addStretch(1)
       -    b = QPushButton(cancel_label or _('Cancel'))
       -    hbox.addWidget(b)
       -    b.clicked.connect(dialog.reject)
       -    b = QPushButton(ok_label or _("OK"))
       -    hbox.addWidget(b)
       -    b.clicked.connect(dialog.accept)
       -    b.setDefault(True)
       -    return hbox, b
       -
       -def ok_cancel_buttons(dialog, ok_label=None, cancel_label=None):
       -    hbox, b = ok_cancel_buttons2(dialog, ok_label, cancel_label)
       -    return hbox
       -
        def line_dialog(parent, title, label, ok_label, default=None):
            dialog = QDialog(parent)
            dialog.setMinimumWidth(500)
       t@@ -132,7 +135,7 @@ def line_dialog(parent, title, label, ok_label, default=None):
            if default:
                txt.setText(default)
            l.addWidget(txt)
       -    l.addLayout(ok_cancel_buttons(dialog, ok_label))
       +    l.addLayout(Buttons(CancelButton(dialog), OkButton(dialog, ok_label)))
            if dialog.exec_():
                return unicode(txt.text())
        
       t@@ -149,7 +152,7 @@ def text_dialog(parent, title, label, ok_label, default=None):
            if default:
                txt.setText(default)
            l.addWidget(txt)
       -    l.addLayout(ok_cancel_buttons(dialog, ok_label))
       +    l.addLayout(Buttons(CancelButton(dialog), OkButton(dialog, ok_label)))
            if dialog.exec_():
                return unicode(txt.toPlainText())
        
 (DIR) diff --git a/plugins/btchipwallet.py b/plugins/btchipwallet.py
       t@@ -9,7 +9,6 @@ from base64 import b64encode, b64decode
        
        import electrum
        from electrum_gui.qt.password_dialog import make_password_dialog, run_password_dialog
       -from electrum_gui.qt.util import ok_cancel_buttons
        from electrum.account import BIP32_Account
        from electrum.bitcoin import EncodeBase58Check, DecodeBase58Check, public_key_to_bc_address, bc_address_to_hash_160
        from electrum.i18n import _
 (DIR) diff --git a/plugins/openalias.py b/plugins/openalias.py
       t@@ -15,14 +15,15 @@
        # Version: 0.1
        # Todo: optionally use OA resolvers; add DNSCrypt support
        
       -from electrum_gui.qt.util import EnterButton
       +import re
       +from PyQt4.QtGui import *
       +from PyQt4.QtCore import *
       +
       +from electrum_gui.qt.util import *
        from electrum.plugins import BasePlugin, hook
        from electrum.util import print_error
        from electrum.i18n import _
       -from PyQt4.QtGui import *
       -from PyQt4.QtCore import *
        
       -import re
        
        # Import all of the rdtypes, as py2app and similar get confused with the dnspython
        # autoloader and won't include all the rdatatypes
       t@@ -182,7 +183,7 @@ class Plugin(BasePlugin):
                grid.addWidget(line1, 1, 1)
        
                vbox.addLayout(grid)
       -        vbox.addLayout(ok_cancel_buttons(d))
       +        vbox.addLayout(Buttons(CancelButton(d), OkButton(d)))
        
                if not d.exec_():
                    return
       t@@ -224,7 +225,7 @@ class Plugin(BasePlugin):
                grid2.addWidget(QLabel(address), 4, 1)
        
                vbox2.addLayout(grid2)
       -        vbox2.addLayout(ok_cancel_buttons(d2))
       +        vbox2.addLayout(Buttons(CancelButton(d2), OkButton(d2)))
        
                if not d2.exec_():
                    return
 (DIR) diff --git a/plugins/trezor.py b/plugins/trezor.py
       t@@ -16,7 +16,7 @@ from electrum.transaction import deserialize
        from electrum.wallet import BIP32_HD_Wallet
        from electrum.util import print_error
        
       -from electrum_gui.qt.util import ok_cancel_buttons, EnterButton
       +from electrum_gui.qt.util import *
        
        try:
            from trezorlib.client import types
       t@@ -519,7 +519,7 @@ class TrezorQtGuiMixin(object):
                vbox = QVBoxLayout()
                vbox.addWidget(QLabel(msg))
                vbox.addWidget(matrix)
       -        vbox.addLayout(ok_cancel_buttons(d))
       +        vbox.addLayout(Buttons(CancelButton(d), OkButton(d)))
                d.setLayout(vbox)
        
                if not d.exec_(): return
 (DIR) diff --git a/plugins/trustedcoin.py b/plugins/trustedcoin.py
       t@@ -38,9 +38,8 @@ from electrum.wallet import Wallet_2of3
        from electrum.i18n import _
        from electrum.plugins import BasePlugin, run_hook, hook
        
       -from electrum_gui.qt.util import text_dialog, EnterButton, WaitingDialog
       +from electrum_gui.qt.util import *
        from electrum_gui.qt.qrcodewidget import QRCodeWidget
       -from electrum_gui.qt import ok_cancel_buttons, ok_cancel_buttons2, close_button
        from electrum_gui.qt.amountedit import AmountEdit
        from electrum_gui.qt.main_window import StatusBarButton
        
       t@@ -532,7 +531,7 @@ class Plugin(BasePlugin):
                grid.addWidget(QLabel(_('Code')), 1, 0)
                grid.addWidget(pw, 1, 1)
                vbox.addLayout(grid)
       -        vbox.addLayout(ok_cancel_buttons(d))
       +        vbox.addLayout(Buttons(CancelButton(d), OkButton(d)))
                if not d.exec_(): 
                    return
                return pw.get_amount()
       t@@ -617,7 +616,7 @@ class Plugin(BasePlugin):
        
                #grid.addWidget(QLabel(_("Next Billing Address:")), i, 0)
                #grid.addWidget(QLabel(self.billing_info['billing_address']), i, 1)
       -        vbox.addLayout(close_button(d))
       +        vbox.addLayout(Buttons(CloseButton(d)))
                d.exec_()
        
        
       t@@ -642,9 +641,9 @@ class Plugin(BasePlugin):
                email_e = QLineEdit()
                vbox.addWidget(email_e)
                vbox.addStretch()
       -        hbox, accept_button = ok_cancel_buttons2(window, _('Accept'))
       +        accept_button = OkButton(window, _('Accept'))
                accept_button.setEnabled(False)
       -        vbox.addLayout(hbox)
       +        vbox.addLayout(Buttons(CancelButton(window), accept_button))
        
                def request_TOS():
                    tos = server.get_terms_of_service()
       t@@ -688,9 +687,9 @@ class Plugin(BasePlugin):
                hbox.addStretch(1)
                vbox.addLayout(hbox)
        
       -        hbox, b = ok_cancel_buttons2(window, _('Next'))
       +        b = OkButton(window, _('Next'))
                b.setEnabled(False)
       -        vbox.addLayout(hbox)
       +        vbox.addLayout(Buttons(CancelButton(window), b))
                pw.textChanged.connect(lambda: b.setEnabled(len(pw.text())==6))
        
                window.exec_()