option to start hidden. fixes #720
[electrum-nvc.git] / gui / qt / __init__.py
index c3c7da7..374e532 100644 (file)
@@ -71,6 +71,7 @@ class ElectrumGui:
             self.app = QApplication(sys.argv)
         self.app.installEventFilter(self.efilter)
         init_plugins(self)
+        self.payment_request = None
 
 
     def build_tray_menu(self):
@@ -127,8 +128,6 @@ class ElectrumGui:
                 self.config.set_key('lite_mode', False, True)
                 sys.exit(0)
             self.lite_window = None
-            self.main_window.show()
-            self.main_window.raise_()
             return
 
         actuator = lite_window.MiniActuator(self.main_window)
@@ -136,10 +135,6 @@ class ElectrumGui:
         self.lite_window = lite_window.MiniWindow(actuator, self.go_full, self.config)
         driver = lite_window.MiniDriver(self.main_window, self.lite_window)
 
-        if self.config.get('lite_mode') is True:
-            self.go_lite()
-        else:
-            self.go_full()
 
 
     def check_qt_version(self):
@@ -147,28 +142,63 @@ class ElectrumGui:
         return int(qtVersion[0]) >= 4 and int(qtVersion[2]) >= 7
 
 
+    def set_url(self, url):
+        from electrum import util
+        from decimal import Decimal
+
+        try:
+            address, amount, label, message, request_url, url = util.parse_url(url)
+        except Exception:
+            QMessageBox.warning(self.main_window, _('Error'), _('Invalid bitcoin URL'), _('OK'))
+            return
+
+        if amount:
+            try:
+                if self.main_window.base_unit() == 'mBTC': 
+                    amount = str( 1000* Decimal(amount))
+                else: 
+                    amount = str(Decimal(amount))
+            except Exception:
+                amount = "0.0"
+                QMessageBox.warning(self.main_window, _('Error'), _('Invalid Amount'), _('OK'))
+
+        if request_url:
+            from electrum import paymentrequest
+
+        if not request_url:
+            self.main_window.set_send(address, amount, label, message)
+            self.lite_window.set_payment_fields(address, amount)
+            return
+
+        def payment_request():
+            self.payment_request = paymentrequest.PaymentRequest(self.config)
+            self.payment_request.read(request_url)
+            if self.payment_request.verify():
+                self.main_window.emit(SIGNAL('payment_request_ok'))
+            else:
+                self.main_window.emit(SIGNAL('payment_request_error'))
+
+        threading.Thread(target=payment_request).start()
+        self.main_window.prepare_for_payment_request()
+
 
     def main(self, url):
 
         storage = WalletStorage(self.config)
-        if not storage.file_exists:
-            import installwizard
-            wizard = installwizard.InstallWizard(self.config, self.network, storage)
-            wallet = wizard.run()
-            if not wallet: 
-                exit()
+        if storage.file_exists:
+            wallet = Wallet(storage)
+            action = wallet.get_action()
+        else:
+            action = 'new'
 
-        elif storage.get('wallet_type') in ['2of3'] and storage.get('seed') is None:
+        if action is not None:
             import installwizard
             wizard = installwizard.InstallWizard(self.config, self.network, storage)
-            wallet = wizard.run(action= 'create2of3')
+            wallet = wizard.run(action)
             if not wallet: 
                 exit()
-
         else:
-            wallet = Wallet(storage)
             wallet.start_threads(self.network)
-            
 
         # init tray
         self.dark_icon = self.config.get("dark_icon", False)
@@ -186,6 +216,16 @@ class ElectrumGui:
         #lite window
         self.init_lite()
 
+        # initial configuration
+        if self.config.get('hide_gui') is True and self.tray.isVisible():
+            self.main_window.hide()
+            self.lite_window.hide()
+        else:
+            if self.config.get('lite_mode') is True:
+                self.go_lite()
+            else:
+                self.go_full()
+
         # plugins that need to change the GUI do it here
         run_hook('init')
 
@@ -195,13 +235,20 @@ class ElectrumGui:
         s.start()
 
         self.windows.append(w)
-        if url: w.set_url(url)
+        if url: 
+            self.set_url(url)
+
         w.app = self.app
         w.connect_slots(s)
         w.update_wallet()
 
         self.app.exec_()
 
+        # clipboard persistence
+        # see http://www.mail-archive.com/pyqt@riverbankcomputing.com/msg17328.html
+        event = QtCore.QEvent(QtCore.QEvent.Clipboard)
+        self.app.sendEvent(self.app.clipboard(), event)
+
         wallet.stop_threads()