add switch-gui button for qt
[electrum-nvc.git] / lib / gui_qt.py
index 33347cc..6c113e9 100644 (file)
@@ -296,6 +296,7 @@ class ElectrumWindow(QMainWindow):
 
     def __init__(self, wallet, config):
         QMainWindow.__init__(self)
+        self.lite = None
         self.wallet = wallet
         self.config = config
         self.wallet.interface.register_callback('updated', self.update_callback)
@@ -394,9 +395,7 @@ class ElectrumWindow(QMainWindow):
             text = _( "Not connected" )
             icon = QIcon(":icons/status_disconnected.png")
 
-        if self.funds_error:
-            text = _( "Not enough funds" )
-
+        self.status_text = text
         self.statusBar().showMessage(text)
         self.status_button.setIcon( icon )
 
@@ -718,13 +717,16 @@ class ElectrumWindow(QMainWindow):
             if inputs:
                 palette = QPalette()
                 palette.setColor(self.amount_e.foregroundRole(), QColor('black'))
+                text = self.status_text
             else:
                 palette = QPalette()
                 palette.setColor(self.amount_e.foregroundRole(), QColor('red'))
                 self.funds_error = True
+                text = _( "Not enough funds" )
+
+            self.statusBar().showMessage(text)
             self.amount_e.setPalette(palette)
             self.fee_e.setPalette(palette)
-            self.update_wallet()
 
         self.amount_e.textChanged.connect(lambda: entry_changed(False) )
         self.fee_e.textChanged.connect(lambda: entry_changed(True) )
@@ -923,6 +925,14 @@ class ElectrumWindow(QMainWindow):
         return w
 
 
+    def delete_imported_key(self, addr):
+        if self.question("Do you want to remove %s from your wallet?"%addr):
+            self.wallet.imported_keys.pop(addr)
+            self.update_receive_tab()
+            self.update_history_tab()
+            self.wallet.save()
+
+
     def create_receive_menu(self, position):
         # fixme: this function apparently has a side effect.
         # if it is not called the menu pops up several times
@@ -938,6 +948,8 @@ class ElectrumWindow(QMainWindow):
         menu.addAction(_("View QR"), lambda: ElectrumWindow.show_qrcode("Address","bitcoin:"+addr) )
         menu.addAction(_("Edit label"), lambda: self.edit_label(True))
         menu.addAction(_("Sign message"), lambda: self.sign_message(addr))
+        if addr in self.wallet.imported_keys:
+            menu.addAction(_("Remove from wallet"), lambda: self.delete_imported_key(addr))
 
         if self.receive_tab_mode == 1:
             t = _("Unfreeze") if addr in self.wallet.frozen_addresses else _("Freeze")
@@ -1121,8 +1133,12 @@ class ElectrumWindow(QMainWindow):
         return textbox
 
     def create_status_bar(self):
+        self.status_text = ""
         sb = QStatusBar()
         sb.setFixedHeight(35)
+        qtVersion = qVersion()
+        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:
             sb.addPermanentWidget( StatusBarButton( QIcon(":icons/lock.png"), "Password", lambda: self.change_password_dialog(self.wallet, self) ) )
         sb.addPermanentWidget( StatusBarButton( QIcon(":icons/preferences.png"), "Preferences", self.settings_dialog ) )
@@ -1131,6 +1147,15 @@ class ElectrumWindow(QMainWindow):
         self.status_button = StatusBarButton( QIcon(":icons/status_disconnected.png"), "Network", lambda: self.network_dialog(self.wallet, self) ) 
         sb.addPermanentWidget( self.status_button )
         self.setStatusBar(sb)
+        
+    def go_lite(self):
+        import gui_lite
+        self.hide()
+        if self.lite:
+            self.lite.mini.show()
+        else:
+            self.lite = gui_lite.ElectrumGui(self.wallet, self.config, self)
+            self.lite.main(None)
 
     def new_contact_dialog(self):
         text, ok = QInputDialog.getText(self, _('New Contact'), _('Address') + ':')
@@ -1160,10 +1185,9 @@ class ElectrumWindow(QMainWindow):
             password = None
             
         try:
-            seed = wallet.pw_decode(wallet.seed, password)
+            seed = wallet.decode_seed(password)
         except:
-            QMessageBox.warning(parent, _('Error'),
-                                _('Incorrect Password'), _('OK'))
+            QMessageBox.warning(parent, _('Error'), _('Incorrect Password'), _('OK'))
             return
 
         dialog = QDialog(None)
@@ -1246,24 +1270,27 @@ class ElectrumWindow(QMainWindow):
         d = QDialog(self)
         d.setModal(1)
         d.setWindowTitle('Sign Message')
-        d.setMinimumSize(270, 350)
+        d.setMinimumSize(410, 290)
 
         tab_widget = QTabWidget()
         tab = QWidget()
         layout = QGridLayout(tab)
 
         sign_address = QLineEdit()
+
         sign_address.setText(address)
         layout.addWidget(QLabel(_('Address')), 1, 0)
         layout.addWidget(sign_address, 1, 1)
 
         sign_message = QTextEdit()
         layout.addWidget(QLabel(_('Message')), 2, 0)
-        layout.addWidget(sign_message, 2, 1, 2, 1)
+        layout.addWidget(sign_message, 2, 1)
+        layout.setRowStretch(2,3)
 
-        sign_signature = QLineEdit()
+        sign_signature = QTextEdit()
         layout.addWidget(QLabel(_('Signature')), 3, 0)
         layout.addWidget(sign_signature, 3, 1)
+        layout.setRowStretch(3,1)
 
         def do_sign():
             if self.wallet.use_encryption:
@@ -1274,7 +1301,7 @@ class ElectrumWindow(QMainWindow):
                 password = None
 
             try:
-                signature = self.wallet.sign_message(sign_address.text(), str(sign_message.toPlainText()), password)
+                signature = self.wallet.sign_message(str(sign_address.text()), str(sign_message.toPlainText()), password)
                 sign_signature.setText(signature)
             except BaseException, e:
                 self.show_message(str(e))
@@ -1300,15 +1327,17 @@ class ElectrumWindow(QMainWindow):
 
         verify_message = QTextEdit()
         layout.addWidget(QLabel(_('Message')), 2, 0)
-        layout.addWidget(verify_message, 2, 1, 2, 1)
+        layout.addWidget(verify_message, 2, 1)
+        layout.setRowStretch(2,3)
 
-        verify_signature = QLineEdit()
+        verify_signature = QTextEdit()
         layout.addWidget(QLabel(_('Signature')), 3, 0)
         layout.addWidget(verify_signature, 3, 1)
+        layout.setRowStretch(3,1)
 
         def do_verify():
             try:
-                self.wallet.verify_message(verify_address.text(), verify_signature.text(), str(verify_message.toPlainText()))
+                self.wallet.verify_message(verify_address.text(), str(verify_signature.toPlainText()), str(verify_message.toPlainText()))
                 self.show_message("Signature verified")
             except BaseException, e:
                 self.show_message(str(e))
@@ -1439,7 +1468,7 @@ class ElectrumWindow(QMainWindow):
         new_password2 = unicode(conf_pw.text())
 
         try:
-            seed = wallet.pw_decode( wallet.seed, password)
+            seed = wallet.decode_seed(password)
         except:
             QMessageBox.warning(parent, _('Error'), _('Incorrect Password'), _('OK'))
             return
@@ -1534,16 +1563,29 @@ class ElectrumWindow(QMainWindow):
         csv_transaction(self.wallet)
 
     def do_import_privkey(self):
-        text, ok = QInputDialog.getText(self, _('Import private key'), _('Key') + ':')
+        if not self.wallet.imported_keys:
+            r = QMessageBox.question(None, _('Warning'), _('Warning: Imported keys are not recoverable from seed.') + ' ' \
+                                         + _('If you ever need to restore your wallet from its seed, these keys will be lost.') + '\n\n' \
+                                         + _('Are you sure you understand what you are doing?'), 3, 4)
+            if r == 4: return
+
+        text, ok = QInputDialog.getText(self, _('Import private key'), _('Private Key') + ':')
         if not ok: return
         sec = str(text)
-        password = self.password_dialog()
+        if self.wallet.use_encryption:
+            password = self.password_dialog()
+            if not password:
+                return
+        else:
+            password = None
         try:
             addr = self.wallet.import_key(sec, password)
             if not addr:
                 QMessageBox.critical(None, "Unable to import key", "error")
             else:
                 QMessageBox.information(None, "Key imported", addr)
+                self.update_receive_tab()
+                self.update_history_tab()
         except BaseException as e:
             QMessageBox.critical(None, "Unable to import key", str(e))
 
@@ -1691,9 +1733,7 @@ class ElectrumWindow(QMainWindow):
 
         grid_io.addWidget(QLabel(_('Private key')), 3, 0)
         grid_io.addWidget(EnterButton(_("Import"), self.do_import_privkey), 3, 2)
-        grid_io.addWidget(HelpButton('Import private key' + '\n' \
-                                         + _('Warning: Imported keys are not recoverable with your seed.') + '\n' \
-                                         + _('If you import keys, you will need to do backups of your wallet.')), 3, 3)
+        grid_io.addWidget(HelpButton('Import private key'), 3, 3)
 
         grid_io.setRowStretch(4,1)
         vbox.addLayout(ok_cancel_buttons(d))