Initial novacoin support
[electrum-nvc.git] / gui / qt / network_dialog.py
index d66b31c..c664993 100644 (file)
 # along with this program. If not, see <http://www.gnu.org/licenses/>.
 
 import sys, time, datetime, re, threading
-from electrum.i18n import _
-from electrum.util import print_error, print_msg
+from electrum_nvc.i18n import _
+from electrum_nvc.util import print_error, print_msg
 import os.path, json, ast, traceback
 
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
-from electrum import DEFAULT_SERVERS, DEFAULT_PORTS
+from electrum_nvc import DEFAULT_SERVERS, DEFAULT_PORTS
 
 from util import *
 
@@ -35,33 +35,30 @@ class NetworkDialog(QDialog):
 
         QDialog.__init__(self,parent)
         self.setModal(1)
-        self.setWindowTitle(_('Server'))
+        self.setWindowTitle(_('Network'))
         self.setMinimumSize(375, 20)
 
         self.network = network
-        self.interface = interface = network.interface
         self.config = config
         self.protocol = None
 
         if parent:
             n = len(network.interfaces)
             if n:
-                status = _("Connected to %d servers")%n + ", %d "%(network.blockchain.height) + _("blocks")
+                status = _("Blockchain") + ": " + "%d "%(network.blockchain.height()) + _("blocks") +  ".\n" + _("Getting block headers from %d nodes.")%n
             else:
                 status = _("Not connected")
 
-            if interface.is_connected:
-                status += "\n" + _("Main server:") + " %s"%(interface.host) 
+            if network.is_connected():
+                status += "\n" + _("Server") + ": %s"%(network.interface.host) 
             else:
-                status += "\n" + _("Disconnected from main server")
+                status += "\n" + _("Disconnected from server")
                 
-
-            server = interface.server
         else:
             import random
             status = _("Please choose a server.") + "\n" + _("Select 'Cancel' if you are offline.")
-            server = interface.server
 
+        server = network.default_server
         self.servers = network.get_servers()
 
 
@@ -75,7 +72,10 @@ class NetworkDialog(QDialog):
         hbox.addWidget(l)
         hbox.addWidget(QLabel(status))
         hbox.addStretch(50)
-        hbox.addWidget(HelpButton(_("As of version 1.9, Electrum connects to several servers in order to download block headers and find out the longest blockchain. However, your wallet addresses are sent to a single server, in order to receive your transaction history.")))
+        msg = _("Electrum sends your wallet addresses to a single server, in order to receive your transaction history.") + "\n\n" \
+            + _("In addition, Electrum connects to several nodes in order to download block headers and find out the longest blockchain.") + " " \
+            + _("This blockchain is used to verify the transactions sent by the address server.")
+        hbox.addWidget(HelpButton(msg))
         vbox.addLayout(hbox)
 
         # grid layout
@@ -83,23 +83,36 @@ class NetworkDialog(QDialog):
         grid.setSpacing(8)
         vbox.addLayout(grid)
 
-        # server
+        # protocol
         self.server_protocol = QComboBox()
         self.server_host = QLineEdit()
         self.server_host.setFixedWidth(200)
         self.server_port = QLineEdit()
         self.server_port.setFixedWidth(60)
-
         self.server_protocol.addItems(protocol_names)
+        self.server_protocol.connect(self.server_protocol, SIGNAL('currentIndexChanged(int)'), self.change_protocol)
+
+        grid.addWidget(QLabel(_('Protocol') + ':'), 3, 0)
+        grid.addWidget(self.server_protocol, 3, 1)
 
+
+        # server
         grid.addWidget(QLabel(_('Server') + ':'), 0, 0)
-        grid.addWidget(self.server_protocol, 0, 1)
-        grid.addWidget(self.server_host, 0, 2)
+
+        # auto connect
+        self.autocycle_cb = QCheckBox(_('Auto-connect'))
+        self.autocycle_cb.setChecked(self.config.get('auto_cycle', True))
+        grid.addWidget(self.autocycle_cb, 0, 1)
+        if not self.config.is_modifiable('auto_cycle'): self.autocycle_cb.setEnabled(False)
+        msg = _("If auto-connect is enabled, Electrum will always use a server that is on the longest blockchain.") + " " \
+            + _("If it is disabled, Electrum will warn you if your server is lagging.")
+        grid.addWidget(HelpButton(msg), 0, 4)
+
+        grid.addWidget(self.server_host, 0, 2, 1, 2)
         grid.addWidget(self.server_port, 0, 3)
 
-        self.server_protocol.connect(self.server_protocol, SIGNAL('currentIndexChanged(int)'), self.change_protocol)
 
-        label = _('Active Servers') #if interface.servers else _('Default Servers')
+        label = _('Active Servers') if network.irc_servers else _('Default Servers')
         self.servers_list_widget = QTreeWidget(parent)
         self.servers_list_widget.setHeaderLabels( [ label, _('Limit') ] )
         self.servers_list_widget.setMaximumHeight(150)
@@ -107,10 +120,9 @@ class NetworkDialog(QDialog):
 
         if server:
             host, port, protocol = server.split(':')
-            self.set_protocol(protocol)
             self.change_server(host, protocol)
-        else:
-            self.set_protocol('s')
+
+        self.set_protocol(self.network.protocol)
 
         self.servers_list_widget.connect(self.servers_list_widget, 
                                          SIGNAL('currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)'), 
@@ -120,11 +132,16 @@ class NetworkDialog(QDialog):
         if not config.is_modifiable('server'):
             for w in [self.server_host, self.server_port, self.server_protocol, self.servers_list_widget]: w.setEnabled(False)
 
-        # auto cycle
-        self.autocycle_cb = QCheckBox(_('Try random servers if disconnected'))
-        self.autocycle_cb.setChecked(self.config.get('auto_cycle', True))
-        grid.addWidget(self.autocycle_cb, 3, 1, 3, 2)
-        if not self.config.is_modifiable('auto_cycle'): self.autocycle_cb.setEnabled(False)
+
+        
+        def enable_set_server():
+            enabled = not self.autocycle_cb.isChecked()
+            self.server_host.setEnabled(enabled)
+            self.server_port.setEnabled(enabled)
+            self.servers_list_widget.setEnabled(enabled)
+
+        self.autocycle_cb.clicked.connect(enable_set_server)
+        enable_set_server()
 
         # proxy setting
         self.proxy_mode = QComboBox()
@@ -148,15 +165,15 @@ class NetworkDialog(QDialog):
         if not self.config.is_modifiable('proxy'):
             for w in [self.proxy_host, self.proxy_port, self.proxy_mode]: w.setEnabled(False)
 
-        proxy_config = interface.proxy if interface.proxy else { "mode":"none", "host":"localhost", "port":"8080"}
+        proxy_config = network.proxy if network.proxy else { "mode":"none", "host":"localhost", "port":"8080"}
         self.proxy_mode.setCurrentIndex(self.proxy_mode.findText(str(proxy_config.get("mode").upper())))
         self.proxy_host.setText(proxy_config.get("host"))
         self.proxy_port.setText(proxy_config.get("port"))
 
-        grid.addWidget(QLabel(_('Proxy') + ':'), 2, 0)
-        grid.addWidget(self.proxy_mode, 2, 1)
-        grid.addWidget(self.proxy_host, 2, 2)
-        grid.addWidget(self.proxy_port, 2, 3)
+        grid.addWidget(QLabel(_('Proxy') + ':'), 4, 0)
+        grid.addWidget(self.proxy_mode, 4, 1)
+        grid.addWidget(self.proxy_host, 4, 2)
+        grid.addWidget(self.proxy_port, 4, 3)
 
         # buttons
         vbox.addLayout(ok_cancel_buttons(self))
@@ -179,7 +196,7 @@ class NetworkDialog(QDialog):
     def change_protocol(self, index):
         p = protocol_letters[index]
         host = unicode(self.server_host.text())
-        pp = self.servers.get(host)
+        pp = self.servers.get(host, DEFAULT_PORTS)
         if p not in pp.keys():
             p = pp.keys()[0]
         port = pp[p]
@@ -225,9 +242,9 @@ class NetworkDialog(QDialog):
         if not self.exec_():
             return
 
-        server = ':'.join([str( self.server_host.text() ),
-                           str( self.server_port.text() ),
-                           (protocol_letters[self.server_protocol.currentIndex()]) ])
+        host = str( self.server_host.text() )
+        port = str( self.server_port.text() )
+        protocol = protocol_letters[self.server_protocol.currentIndex()]
 
         if self.proxy_mode.currentText() != 'NONE':
             proxy = { 'mode':str(self.proxy_mode.currentText()).lower(), 
@@ -236,9 +253,7 @@ class NetworkDialog(QDialog):
         else:
             proxy = None
 
-        self.config.set_key("proxy", proxy, True)
-        self.config.set_key("server", server, True)
-        self.network.set_server(server, proxy)
+        auto_connect = self.autocycle_cb.isChecked()
 
-        self.config.set_key('auto_cycle', self.autocycle_cb.isChecked(), True)
+        self.network.set_parameters(host, port, protocol, proxy, auto_connect)
         return True