separate gui init() and load_wallet()
authorThomasV <thomasv@gitorious>
Fri, 30 Aug 2013 08:11:10 +0000 (10:11 +0200)
committerThomasV <thomasv@gitorious>
Fri, 30 Aug 2013 08:11:10 +0000 (10:11 +0200)
electrum
gui/gui_classic.py
gui/installwizard.py
gui/plugins.py

index a8142fc..77e9572 100755 (executable)
--- a/electrum
+++ b/electrum
@@ -128,8 +128,15 @@ if __name__ == '__main__':
             sys.exit()
             #sys.exit("Error: Unknown GUI: " + gui_name )
         
-        gui = gui.ElectrumGui(config)
+        # network interface
+        interface = Interface(config, True)
+        interface.start(wait = False)
+        interface.send([('server.peers.subscribe',[])])
+
+        gui = gui.ElectrumGui(config,interface)
         gui.main(url)
+        
+        interface.stop()
 
         # we use daemon threads, their termination is enforced.
         # this sleep command gives them time to terminate cleanly. 
index 78d5690..734e9bb 100644 (file)
@@ -223,11 +223,10 @@ class ElectrumWindow(QMainWindow):
             self.showNormal()
 
 
-    def __init__(self, wallet, config):
+    def __init__(self, config):
         QMainWindow.__init__(self)
         self._close_electrum = False
         self.lite = None
-        self.wallet = wallet
         self.config = config
         self.current_account = self.config.get("current_account", None)
 
@@ -243,11 +242,6 @@ class ElectrumWindow(QMainWindow):
         self.create_status_bar()
 
         self.need_update = threading.Event()
-        self.wallet.interface.register_callback('updated', lambda: self.need_update.set())
-        self.wallet.interface.register_callback('banner', lambda: self.emit(QtCore.SIGNAL('banner_signal')))
-        self.wallet.interface.register_callback('disconnected', lambda: self.emit(QtCore.SIGNAL('update_status')))
-        self.wallet.interface.register_callback('disconnecting', lambda: self.emit(QtCore.SIGNAL('update_status')))
-        self.wallet.interface.register_callback('new_transaction', lambda: self.emit(QtCore.SIGNAL('transaction_signal')))
 
         self.expert_mode = config.get('classic_expert_mode', False)
         self.decimal_point = config.get('decimal_point', 8)
@@ -270,9 +264,6 @@ class ElectrumWindow(QMainWindow):
 
         g = self.config.get("winpos-qt",[100, 100, 840, 400])
         self.setGeometry(g[0], g[1], g[2], g[3])
-        title = 'Electrum ' + self.wallet.electrum_version + '  -  ' + self.config.path
-        if not self.wallet.seed: title += ' [%s]' % (_('seedless'))
-        self.setWindowTitle( title )
 
         self.init_menubar()
 
@@ -296,31 +287,84 @@ class ElectrumWindow(QMainWindow):
             tabs.setCurrentIndex (n)
             tabs.setCurrentIndex (0)
 
+
+        # plugins that need to change the GUI do it here
+        self.run_hook('init')
+
+
+    def load_wallet(self, wallet):
+        import electrum
+        self.wallet = wallet
+
+        self.wallet.interface.register_callback('updated', lambda: self.need_update.set())
+        self.wallet.interface.register_callback('banner', lambda: self.emit(QtCore.SIGNAL('banner_signal')))
+        self.wallet.interface.register_callback('disconnected', lambda: self.emit(QtCore.SIGNAL('update_status')))
+        self.wallet.interface.register_callback('disconnecting', lambda: self.emit(QtCore.SIGNAL('update_status')))
+        self.wallet.interface.register_callback('new_transaction', lambda: self.emit(QtCore.SIGNAL('transaction_signal')))
+        title = 'Electrum ' + self.wallet.electrum_version + '  -  ' + self.config.path
+        if not self.wallet.seed: title += ' [%s]' % (_('seedless'))
+        self.setWindowTitle( title )
+        self.update_wallet()
         # set initial message
         self.console.showMessage(self.wallet.interface.banner)
-
         # Once GUI has been initialized check if we want to announce something since the callback has been called before the GUI was initialized
         self.notify_transactions()
 
-        # plugins that need to change the GUI do it here
-        self.run_hook('init')
+        # account selector
+        accounts = self.wallet.get_accounts()
+        if len(accounts) > 1:
+            self.account_selector.addItems([_("All accounts")] + accounts.values())
+            self.account_selector.setCurrentIndex(0)
+
 
 
     def select_wallet_file(self):
         wallet_folder = self.wallet.config.path
         re.sub("(\/\w*.dat)$", "", wallet_folder)
-        file_name = QFileDialog.getOpenFileName(self, "Select your wallet file", wallet_folder, "*.dat")
+        file_name = unicode( QFileDialog.getOpenFileName(self, "Select your wallet file", wallet_folder, "*.dat") )
         return file_name
 
+
     def open_wallet(self):
-        n = self.select_wallet_file()
-        if n:
-            self.load_wallet(n)
+        from electrum import SimpleConfig, Wallet, WalletSynchronizer
+
+        filename = self.select_wallet_file()
+        if not filename:
+            return
+
+        config = SimpleConfig({'wallet_path': filename})
+        if not config.wallet_file_exists:
+            self.show_message("file not found "+ filename)
+            return
+
+        interface = self.wallet.interface
+        verifier = self.wallet.verifier
+        self.wallet.synchronizer.stop()
+        
+        self.config = config
+
+        # create wallet 
+        wallet = Wallet(config)
+        wallet.interface = interface
+        wallet.verifier = verifier
+        synchronizer = WalletSynchronizer(wallet, config)
+        synchronizer.start()
+
+        self.load_wallet(wallet)
+
 
     def new_wallet(self):
-        n = self.getOpenFileName("Select wallet file")
+        from electrum import SimpleConfig, Wallet, WalletSynchronizer
+        import installwizard
 
-        wizard = installwizard.InstallWizard(self.config, self.interface)
+        wallet_folder = self.wallet.config.path
+        re.sub("(\/\w*.dat)$", "", wallet_folder)
+        filename = self.getSaveFileName("Select your wallet file", wallet_folder, "*.dat")
+
+        config = SimpleConfig({'wallet_path': filename})
+        assert not config.wallet_file_exists
+
+        wizard = installwizard.InstallWizard(config, self.wallet.interface)
         wallet = wizard.run()
         if wallet: 
             self.load_wallet(wallet)
@@ -363,9 +407,9 @@ class ElectrumWindow(QMainWindow):
 
         show_menu = wallet_menu.addMenu(_("Show"))
 
-        if self.wallet.seed:
-            show_seed = show_menu.addAction(_("&Seed"))
-            show_seed.triggered.connect(self.show_seed_dialog)
+        #if self.wallet.seed:
+        show_seed = show_menu.addAction(_("&Seed"))
+        show_seed.triggered.connect(self.show_seed_dialog)
 
         show_mpk = show_menu.addAction(_("&Master Public Key"))
         show_mpk.triggered.connect(self.show_master_public_key)
@@ -403,28 +447,6 @@ class ElectrumWindow(QMainWindow):
         self.setMenuBar(menubar)
 
 
-    def load_wallet(self, filename):
-        import electrum
-
-        config = electrum.SimpleConfig({'wallet_path': filename})
-        if not config.wallet_file_exists:
-            self.show_message("file not found "+ filename)
-            return
-
-        #self.wallet.verifier.stop()
-        interface = self.wallet.interface
-        verifier = self.wallet.verifier
-        self.wallet.synchronizer.stop()
-        
-        self.config = config
-        self.wallet = electrum.Wallet(self.config)
-        self.wallet.interface = interface
-        self.wallet.verifier = verifier
-
-        synchronizer = electrum.WalletSynchronizer(self.wallet, self.config)
-        synchronizer.start()
-
-        self.update_wallet()
 
     def notify_transactions(self):
         print_error("Notifying GUI")
@@ -829,10 +851,12 @@ class ElectrumWindow(QMainWindow):
                     + _('The amount of fee can be decided freely by the sender. However, transactions with low fees take more time to be processed.') + '\n\n'\
                     + _('A suggested fee is automatically added to this field. You may override it. The suggested fee increases with the size of the transaction.')), 4, 3)
         b = ''
-        if self.wallet.seed: 
+
+        if 1:#self.wallet.seed: 
             b = EnterButton(_("Send"), self.do_send)
         else:
             b = EnterButton(_("Create unsigned transaction"), self.do_send)
+
         grid.addWidget(b, 6, 1)
 
         b = EnterButton(_("Clear"),self.do_clear)
@@ -1314,6 +1338,9 @@ class ElectrumWindow(QMainWindow):
     def create_console_tab(self):
         from qt_console import Console
         self.console = console = Console()
+        return console
+    #
+
         self.console.history = self.config.get("console-history",[])
         self.console.history_index = len(self.console.history)
 
@@ -1356,22 +1383,18 @@ class ElectrumWindow(QMainWindow):
         if(update_notification.new_version):
             sb.addPermanentWidget(update_notification)
 
-        accounts = self.wallet.get_accounts()
-        if len(accounts) > 1:
-            from_combo = QComboBox()
-            from_combo.addItems([_("All accounts")] + accounts.values())
-            from_combo.setCurrentIndex(0)
-            self.connect(from_combo,SIGNAL("activated(QString)"),self.change_account) 
-            sb.addPermanentWidget(from_combo)
+        self.account_selector = QComboBox()
+        self.connect(self.account_selector,SIGNAL("activated(QString)"),self.change_account) 
+        sb.addPermanentWidget(self.account_selector)
 
         if (int(qtVersion[0]) >= 4 and int(qtVersion[2]) >= 7):
             sb.addPermanentWidget( StatusBarButton( QIcon(":icons/switchgui.png"), _("Switch to Lite Mode"), self.go_lite ) )
-        if self.wallet.seed:
-            self.lock_icon = QIcon(":icons/lock.png") if self.wallet.use_encryption else QIcon(":icons/unlock.png")
+        if 1:#self.wallet.seed:
+            self.lock_icon = QIcon(":icons/lock.png") #if self.wallet.use_encryption else QIcon(":icons/unlock.png")
             self.password_button = StatusBarButton( self.lock_icon, _("Password"), self.change_password_dialog )
             sb.addPermanentWidget( self.password_button )
         sb.addPermanentWidget( StatusBarButton( QIcon(":icons/preferences.png"), _("Preferences"), self.settings_dialog ) )
-        if self.wallet.seed:
+        if 1:#self.wallet.seed:
             sb.addPermanentWidget( StatusBarButton( QIcon(":icons/seed.png"), _("Seed"), self.show_seed_dialog ) )
         self.status_button = StatusBarButton( QIcon(":icons/status_disconnected.png"), _("Network"), self.run_network_dialog ) 
         sb.addPermanentWidget( self.status_button )
@@ -2152,8 +2175,8 @@ class OpenFileEventFilter(QObject):
 
 class ElectrumGui:
 
-    def __init__(self, config, app=None):
-        self.interface = Interface(config, True)
+    def __init__(self, config, interface, app=None):
+        self.interface = interface
         self.config = config
         self.windows = []
         self.efilter = OpenFileEventFilter(self.windows)
@@ -2174,10 +2197,6 @@ class ElectrumGui:
         else:
             wallet = Wallet(self.config)
 
-        self.wallet = wallet
-
-        self.interface.start(wait = False)
-        self.interface.send([('server.peers.subscribe',[])])
         wallet.interface = self.interface
 
         verifier = WalletVerifier(self.interface, self.config)
@@ -2186,10 +2205,11 @@ class ElectrumGui:
         synchronizer = WalletSynchronizer(wallet, self.config)
         synchronizer.start()
 
-
         s = Timer()
         s.start()
-        w = ElectrumWindow(self.wallet, self.config)
+        w = ElectrumWindow(self.config)
+        w.load_wallet(wallet)
+
         self.windows.append(w)
         if url: w.set_url(url)
         w.app = self.app
@@ -2201,6 +2221,5 @@ class ElectrumGui:
 
         verifier.stop()
         synchronizer.stop()
-        self.interface.stop()
 
 
index dddd015..6803ef2 100644 (file)
@@ -167,7 +167,7 @@ class InstallWizard(QDialog):
             self.config.set_key("server", None, True)
             self.config.set_key('auto_cycle', False, True)
 
-        self.interface.start(wait = False)
+        #self.interface.start(wait = False)
 
         # start wallet threads
         verifier = WalletVerifier(self.interface, self.config)
index 1a758a9..e9e9916 100644 (file)
@@ -4,7 +4,6 @@ class BasePlugin:
 
     def __init__(self, gui, name):
         self.gui = gui
-        self.wallet = self.gui.wallet
         self.name = name
         self.config = gui.config