URI: 
       tRemove all self.window references from plugins - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit bbd50ba83c310c5c36b7e6da8422b276635f0be6
   DIR parent 079279251378eb9ac5e1b434b9697a762728e19f
  HTML Author: Neil Booth <kyuupichan@gmail.com>
       Date:   Fri,  4 Sep 2015 18:23:18 +0900
       
       Remove all self.window references from plugins
       
       Diffstat:
         M gui/qt/main_window.py               |       4 ++--
         M plugins/btchipwallet.py             |       9 ++++-----
         M plugins/keepkey.py                  |      21 ++++++++-------------
         M plugins/trezor.py                   |      21 ++++++++-------------
         M plugins/trustedcoin.py              |      66 ++++++++++++++-----------------
       
       5 files changed, 52 insertions(+), 69 deletions(-)
       ---
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -1172,7 +1172,7 @@ class ElectrumWindow(QMainWindow):
        
        
            def do_send(self):
       -        if run_hook('before_send'):
       +        if run_hook('before_send', window):
                    return
                r = self.read_send_tab()
                if not r:
       t@@ -1228,7 +1228,7 @@ class ElectrumWindow(QMainWindow):
                self.send_button.setDisabled(True)
        
                # call hook to see if plugin needs gui interaction
       -        run_hook('sign_tx', tx)
       +        run_hook('sign_tx', parent, tx)
        
                # sign the tx
                success = [False]  # Array to work around python scoping
   DIR diff --git a/plugins/btchipwallet.py b/plugins/btchipwallet.py
       t@@ -83,15 +83,14 @@ class Plugin(BasePlugin):
            def load_wallet(self, wallet, window):
                self.wallet = wallet
                self.wallet.plugin = self
       -        self.window = window
                if self.handler is None:
       -            self.handler = BTChipQTHandler(self.window.app)
       +            self.handler = BTChipQTHandler(window.app)
                if self.btchip_is_connected():
                    if not self.wallet.check_proper_device():
       -                QMessageBox.information(self.window, _('Error'), _("This wallet does not match your Ledger device"), _('OK'))
       +                QMessageBox.information(window, _('Error'), _("This wallet does not match your Ledger device"), _('OK'))
                        self.wallet.force_watching_only = True
                else:
       -            QMessageBox.information(self.window, _('Error'), _("Ledger device not detected.\nContinuing in watching-only mode."), _('OK'))
       +            QMessageBox.information(window, _('Error'), _("Ledger device not detected.\nContinuing in watching-only mode."), _('OK'))
                    self.wallet.force_watching_only = True
        
            @hook
       t@@ -111,7 +110,7 @@ class Plugin(BasePlugin):
                return wallet
        
            @hook
       -    def sign_tx(self, tx):
       +    def sign_tx(self, window, tx):
                tx.error = None
                try:
                    self.wallet.sign_transaction(tx, None)
   DIR diff --git a/plugins/keepkey.py b/plugins/keepkey.py
       t@@ -5,6 +5,7 @@ from time import sleep
        import unicodedata
        import threading
        import re
       +from functools import partial
        
        from PyQt4.Qt import QMessageBox, QDialog, QVBoxLayout, QLabel, QThread, SIGNAL, QGridLayout, QInputDialog, QPushButton
        import PyQt4.QtCore as QtCore
       t@@ -128,29 +129,23 @@ class Plugin(BasePlugin):
            def load_wallet(self, wallet, window):
                self.print_error("load_wallet")
                self.wallet = wallet
       -        self.window = window
                self.wallet.plugin = self
       -        self.keepkey_button = StatusBarButton(QIcon(":icons/keepkey.png"), _("KeepKey"), self.settings_dialog)
       +        self.keepkey_button = StatusBarButton(QIcon(":icons/keepkey.png"), _("KeepKey"), partial(self.settings_dialog, window))
                if type(window) is ElectrumWindow:
       -            self.window.statusBar().addPermanentWidget(self.keepkey_button)
       +            window.statusBar().addPermanentWidget(self.keepkey_button)
                if self.handler is None:
       -            self.handler = KeepKeyQtHandler(self.window)
       +            self.handler = KeepKeyQtHandler(window)
                try:
                    self.get_client().ping('t')
                except BaseException as e:
       -            QMessageBox.information(self.window, _('Error'), _("KeepKey device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK'))
       +            QMessageBox.information(window, _('Error'), _("KeepKey device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK'))
                    self.wallet.force_watching_only = True
                    return
                if self.wallet.addresses() and not self.wallet.check_proper_device():
       -            QMessageBox.information(self.window, _('Error'), _("This wallet does not match your KeepKey device"), _('OK'))
       +            QMessageBox.information(window, _('Error'), _("This wallet does not match your KeepKey device"), _('OK'))
                    self.wallet.force_watching_only = True
        
            @hook
       -    def close_wallet(self):
       -        if type(self.window) is ElectrumWindow:
       -            self.window.statusBar().removeWidget(self.keepkey_button)
       -
       -    @hook
            def installwizard_load_wallet(self, wallet, window):
                self.load_wallet(wallet, window)
        
       t@@ -196,11 +191,11 @@ class Plugin(BasePlugin):
                    self.handler.stop()
        
        
       -    def settings_dialog(self):
       +    def settings_dialog(self, window):
                try:
                    device_id = self.get_client().get_device_id()
                except BaseException as e:
       -            self.window.show_message(str(e))
       +            window.show_message(str(e))
                    return
                get_label = lambda: self.get_client().features.label
                update_label = lambda: current_label_label.setText("Label: %s" % get_label())
   DIR diff --git a/plugins/trezor.py b/plugins/trezor.py
       t@@ -5,6 +5,7 @@ from time import sleep
        import unicodedata
        import threading
        import re
       +from functools import partial
        
        from PyQt4.Qt import QMessageBox, QDialog, QVBoxLayout, QLabel, QThread, SIGNAL, QGridLayout, QInputDialog, QPushButton
        import PyQt4.QtCore as QtCore
       t@@ -128,29 +129,23 @@ class Plugin(BasePlugin):
            def load_wallet(self, wallet, window):
                self.print_error("load_wallet")
                self.wallet = wallet
       -        self.window = window
                self.wallet.plugin = self
       -        self.trezor_button = StatusBarButton(QIcon(":icons/trezor.png"), _("Trezor"), self.settings_dialog)
       +        self.trezor_button = StatusBarButton(QIcon(":icons/trezor.png"), _("Trezor"), partial(self.settings_dialog, window))
                if type(window) is ElectrumWindow:
       -            self.window.statusBar().addPermanentWidget(self.trezor_button)
       +            window.statusBar().addPermanentWidget(self.trezor_button)
                if self.handler is None:
       -            self.handler = TrezorQtHandler(self.window)
       +            self.handler = TrezorQtHandler(window)
                try:
                    self.get_client().ping('t')
                except BaseException as e:
       -            QMessageBox.information(self.window, _('Error'), _("Trezor device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK'))
       +            QMessageBox.information(window, _('Error'), _("Trezor device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK'))
                    self.wallet.force_watching_only = True
                    return
                if self.wallet.addresses() and not self.wallet.check_proper_device():
       -            QMessageBox.information(self.window, _('Error'), _("This wallet does not match your Trezor device"), _('OK'))
       +            QMessageBox.information(window, _('Error'), _("This wallet does not match your Trezor device"), _('OK'))
                    self.wallet.force_watching_only = True
        
            @hook
       -    def close_wallet(self):
       -        if type(self.window) is ElectrumWindow:
       -            self.window.statusBar().removeWidget(self.trezor_button)
       -
       -    @hook
            def installwizard_load_wallet(self, wallet, window):
                self.load_wallet(wallet, window)
        
       t@@ -196,11 +191,11 @@ class Plugin(BasePlugin):
                    self.handler.stop()
        
        
       -    def settings_dialog(self):
       +    def settings_dialog(self, window):
                try:
                    device_id = self.get_client().get_device_id()
                except BaseException as e:
       -            self.window.show_message(str(e))
       +            window.show_message(str(e))
                    return
                get_label = lambda: self.get_client().features.label
                update_label = lambda: current_label_label.setText("Label: %s" % get_label())
   DIR diff --git a/plugins/trustedcoin.py b/plugins/trustedcoin.py
       t@@ -25,6 +25,7 @@ import json
        from hashlib import sha256
        from urlparse import urljoin
        from urllib import quote
       +from functools import partial
        
        from PyQt4.QtGui import *
        from PyQt4.QtCore import *
       t@@ -325,9 +326,8 @@ class Plugin(BasePlugin):
            @hook
            def load_wallet(self, wallet, window):
                self.wallet = wallet
       -        self.window = window
       -        self.trustedcoin_button = StatusBarButton(QIcon(":icons/trustedcoin.png"), _("TrustedCoin"), self.settings_dialog)
       -        self.window.statusBar().addPermanentWidget(self.trustedcoin_button)
       +        self.trustedcoin_button = StatusBarButton(QIcon(":icons/trustedcoin.png"), _("TrustedCoin"), partial(self.settings_dialog, window))
       +        window.statusBar().addPermanentWidget(self.trustedcoin_button)
                self.xpub = self.wallet.master_public_keys.get('x1/')
                self.user_id = self.get_user_id()[1]
                t = threading.Thread(target=self.request_billing_info)
       t@@ -337,11 +337,6 @@ class Plugin(BasePlugin):
            @hook
            def installwizard_load_wallet(self, wallet, window):
                self.wallet = wallet
       -        self.window = window
       -
       -    @hook
       -    def close_wallet(self):
       -        self.window.statusBar().removeWidget(self.trustedcoin_button)
        
            @hook
            def get_wizard_action(self, window, wallet, action):
       t@@ -375,7 +370,6 @@ class Plugin(BasePlugin):
        
            def create_remote_key(self, wallet, window):
                self.wallet = wallet
       -        self.window = window
        
                if wallet.storage.get('wallet_type') != '2fa':
                    raise
       t@@ -396,7 +390,7 @@ class Plugin(BasePlugin):
                try:
                    r = server.create(xpub_hot, xpub_cold, email)
                except socket.error:
       -            self.window.show_message('Server not reachable, aborting')
       +            window.show_message('Server not reachable, aborting')
                    return
                except TrustedCoinException as e:
                    if e.status_code == 409:
       t@@ -409,7 +403,7 @@ class Plugin(BasePlugin):
                else:
                    otp_secret = r.get('otp_secret')
                    if not otp_secret:
       -                self.window.show_message(_('Error'))
       +                window.show_message(_('Error'))
                        return
                    _xpub3 = r['xpubkey_cosigner']
                    _id = r['id']
       t@@ -417,10 +411,10 @@ class Plugin(BasePlugin):
                        assert _id == self.user_id, ("user id error", _id, self.user_id)
                        assert xpub3 == _xpub3, ("xpub3 error", xpub3, _xpub3)
                    except Exception as e:
       -                self.window.show_message(str(e))
       +                window.show_message(str(e))
                        return
        
       -        if not self.setup_google_auth(self.window, self.user_id, otp_secret):
       +        if not self.setup_google_auth(window, self.user_id, otp_secret):
                    return
        
                self.wallet.add_master_public_key('x3/', xpub3)
       t@@ -441,7 +435,7 @@ class Plugin(BasePlugin):
                return False
        
            @hook
       -    def sign_tx(self, tx):
       +    def sign_tx(self, window, tx):
                self.print_error("twofactor:sign_tx")
                if self.wallet.storage.get('wallet_type') != '2fa':
                    return
       t@@ -451,17 +445,17 @@ class Plugin(BasePlugin):
                    self.auth_code = None
                    return
        
       -        self.auth_code = self.auth_dialog()
       +        self.auth_code = self.auth_dialog(window)
        
            @hook
       -    def before_send(self):
       +    def before_send(self, window):
                # request billing info before forming the transaction
                self.billing_info = None
       -        self.waiting_dialog = WaitingDialog(self.window, 'please wait...', self.request_billing_info)
       +        self.waiting_dialog = WaitingDialog(window, 'please wait...', self.request_billing_info)
                self.waiting_dialog.start()
                self.waiting_dialog.wait()
                if self.billing_info is None:
       -            self.window.show_message('Could not contact server')
       +            window.show_message('Could not contact server')
                    return True
                return False
        
       t@@ -518,8 +512,8 @@ class Plugin(BasePlugin):
                self.print_error("twofactor: is complete", tx.is_complete())
        
        
       -    def auth_dialog(self ):
       -        d = QDialog(self.window)
       +    def auth_dialog(self, window):
       +        d = QDialog(window)
                d.setModal(1)
                vbox = QVBoxLayout(d)
                pw = AmountEdit(None, is_int = True)
       t@@ -535,16 +529,16 @@ class Plugin(BasePlugin):
                    return
                return pw.get_amount()
        
       -    def settings_dialog(self):
       -        self.waiting_dialog = WaitingDialog(self.window, 'please wait...', self.request_billing_info, self.show_settings_dialog)
       +    def settings_dialog(self, window):
       +        self.waiting_dialog = WaitingDialog(window, 'please wait...', self.request_billing_info, partial(self.show_settings_dialog, window))
                self.waiting_dialog.start()
        
       -    def show_settings_dialog(self, success):
       +    def show_settings_dialog(self, window, success):
                if not success:
       -            self.window.show_message(_('Server not reachable.'))
       +            window.show_message(_('Server not reachable.'))
                    return
        
       -        d = QDialog(self.window)
       +        d = QDialog(window)
                d.setWindowTitle("TrustedCoin Information")
                d.setMinimumSize(500, 200)
                vbox = QVBoxLayout(d)
       t@@ -577,7 +571,7 @@ class Plugin(BasePlugin):
        
                v = self.price_per_tx.get(1)
                grid.addWidget(QLabel(_("Price per transaction (not prepaid):")), 0, 0)
       -        grid.addWidget(QLabel(self.window.format_amount(v) + ' ' + self.window.base_unit()), 0, 1)
       +        grid.addWidget(QLabel(window.format_amount(v) + ' ' + window.base_unit()), 0, 1)
        
                i = 1
        
       t@@ -588,9 +582,9 @@ class Plugin(BasePlugin):
                    if k == 1:
                        continue
                    grid.addWidget(QLabel("Price for %d prepaid transactions:"%k), i, 0)
       -            grid.addWidget(QLabel("%d x "%k + self.window.format_amount(v/k) + ' ' + self.window.base_unit()), i, 1)
       +            grid.addWidget(QLabel("%d x "%k + window.format_amount(v/k) + ' ' + window.base_unit()), i, 1)
                    b = QPushButton(_("Buy"))
       -            b.clicked.connect(lambda b, k=k, v=v: self.on_buy(k, v, d))
       +            b.clicked.connect(lambda b, k=k, v=v: self.on_buy(window, k, v, d))
                    grid.addWidget(b, i, 2)
                    i += 1
        
       t@@ -610,16 +604,16 @@ class Plugin(BasePlugin):
                vbox.addLayout(Buttons(CloseButton(d)))
                d.exec_()
        
       -    def on_buy(self, k, v, d):
       +    def on_buy(self, window, k, v, d):
                d.close()
       -        if self.window.pluginsdialog:
       -            self.window.pluginsdialog.close()
       +        if window.pluginsdialog:
       +            window.pluginsdialog.close()
                uri = "bitcoin:" + self.billing_info['billing_address'] + "?message=TrustedCoin %d Prepaid Transactions&amount="%k + str(Decimal(v)/100000000)
                self.is_billing = True
       -        self.window.pay_to_URI(uri)
       -        self.window.payto_e.setFrozen(True)
       -        self.window.message_e.setFrozen(True)
       -        self.window.amount_e.setFrozen(True)
       +        window.pay_to_URI(uri)
       +        window.payto_e.setFrozen(True)
       +        window.message_e.setFrozen(True)
       +        window.amount_e.setFrozen(True)
        
            def request_billing_info(self):
                billing_info = server.get(self.user_id)
       t@@ -706,5 +700,5 @@ class Plugin(BasePlugin):
                        server.auth(_id, otp)
                        return True
                    except:
       -                QMessageBox.information(self.window, _('Message'), _('Incorrect password'), _('OK'))
       +                QMessageBox.information(window, _('Message'), _('Incorrect password'), _('OK'))
                        pw.setText('')