URI: 
       tradio buttons for ports - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit a579e1555e1b3fc33fc3aab98605d2ff008cfd0a
   DIR parent e05e0e971179a25881cd1272f63aa26391ea35ad
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Sat, 31 Mar 2012 14:03:30 +0200
       
       radio buttons for ports
       
       Diffstat:
         M client/gui_qt.py                    |      67 +++++++++++++++++++++++++++++--
         M client/interface.py                 |       8 +++++---
         M client/wallet.py                    |       5 ++++-
       
       3 files changed, 73 insertions(+), 7 deletions(-)
       ---
   DIR diff --git a/client/gui_qt.py b/client/gui_qt.py
       t@@ -849,6 +849,15 @@ class ElectrumWindow(QMainWindow):
                    status = "Please choose a server."
                    server = random.choice( interface.servers )
        
       +        plist = {}
       +        for item in wallet.interface.servers:
       +            host, pp = item
       +            z = {}
       +            for item2 in pp:
       +                protocol, port = item2
       +                z[protocol] = port
       +            plist[host] = z
       +
                d = QDialog(parent)
                d.setModal(1)
                d.setWindowTitle('Server')
       t@@ -872,13 +881,65 @@ class ElectrumWindow(QMainWindow):
                hbox.addWidget(host_line)
                vbox.addLayout(hbox)
        
       +        hbox = QHBoxLayout()
       +
       +        buttonGroup = QGroupBox("protocol")
       +        radio1 = QRadioButton("tcp", buttonGroup)
       +        radio2 = QRadioButton("http", buttonGroup)
       +        radio3 = QRadioButton("native", buttonGroup)
       +
       +        def current_line():
       +            return unicode(host_line.text()).split(':')
       +            
       +        def set_button(protocol):
       +            if protocol == 't':
       +                radio1.setChecked(1)
       +            elif protocol == 'h':
       +                radio2.setChecked(1)
       +            elif protocol == 'n':
       +                radio3.setChecked(1)
       +
       +        def set_protocol(protocol):
       +            host = current_line()[0]
       +            pp = plist[host]
       +            if protocol not in pp.keys():
       +                protocol = pp.keys()[0]
       +                set_button(protocol)
       +            port = pp[protocol]
       +            host_line.setText( host + ':' + port + ':' + protocol)
       +
       +        radio1.clicked.connect(lambda x: set_protocol('t') )
       +        radio2.clicked.connect(lambda x: set_protocol('h') )
       +        radio3.clicked.connect(lambda x: set_protocol('n') )
       +
       +        set_button(current_line()[2])
       +
       +        hbox.addWidget(QLabel('Protocol:'))
       +        hbox.addWidget(radio1)
       +        hbox.addWidget(radio2)
       +        hbox.addWidget(radio3)
       +
       +        vbox.addLayout(hbox)
       +
                if wallet.interface.servers:
                    servers_list = QTreeWidget(parent)
                    servers_list.setHeaderLabels( [ 'Active servers'] )
                    servers_list.setMaximumHeight(150)
       -            for item in wallet.interface.servers:
       -                servers_list.addTopLevelItem(QTreeWidgetItem( [ item ] ))
       -            servers_list.connect(servers_list, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), lambda x:host_line.setText( x.text(0) ))
       +            for host in plist.keys():
       +                servers_list.addTopLevelItem(QTreeWidgetItem( [ host ] ))
       +
       +            def do_set_line(x):
       +                host = unicode(x.text(0))
       +                pp = plist[host]
       +                if 't' in pp.keys():
       +                    protocol = 't'
       +                else:
       +                    protocol = pp.keys()[0]
       +                port = pp[protocol]
       +                host_line.setText( host + ':' + port + ':' + protocol)
       +                set_button(protocol)
       +
       +            servers_list.connect(servers_list, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), do_set_line)
                    vbox.addWidget(servers_list)
                else:
                    hbox = QHBoxLayout()
   DIR diff --git a/client/interface.py b/client/interface.py
       t@@ -21,7 +21,7 @@ import random, socket, ast, re
        import threading, traceback, sys, time, json, Queue
        
        DEFAULT_TIMEOUT = 5
       -DEFAULT_SERVERS = ['ecdsa.org:50001:t'] #  ['electrum.bitcoins.sk','ecdsa.org','electrum.novit.ro']  # list of default servers
       +DEFAULT_SERVERS = [ ('ecdsa.org', [('t','50001')]) ] #  ['electrum.bitcoins.sk','ecdsa.org','electrum.novit.ro']  # list of default servers
        
        
        def old_to_new(s):
       t@@ -371,15 +371,17 @@ class WalletSynchronizer(threading.Thread):
                    for item in result:
                        s = []
                        host = item[1]
       +                ports = []
                        if len(item)>2:
                            for v in item[2]:
                                if re.match("[thn]\d+",v):
       -                            s.append(host+":"+v[1:]+":"+v[0])
       +                            ports.append((v[0],v[1:]))
                            #if not s:
                            #    s.append(host+":50000:n")
                        #else:
                        #    s.append(host+":50000:n")
       -                servers = servers + s
       +                if ports:
       +                    servers.append( (host, ports) )
                    self.interface.servers = servers
        
                elif method == 'blockchain.address.subscribe':
   DIR diff --git a/client/wallet.py b/client/wallet.py
       t@@ -283,7 +283,9 @@ class Wallet:
        
        
            def pick_random_server(self):
       -        self.server = random.choice( DEFAULT_SERVERS )         # random choice when the wallet is created
       +        host, pp = random.choice( DEFAULT_SERVERS )         # random choice when the wallet is created
       +        protocol, port = pp[0]
       +        self.server = host + ':' + port + ':' + protocol
        
            def is_up_to_date(self):
                return self.interface.responses.empty() and not ( self.addresses_waiting_for_status or self.addresses_waiting_for_history )
       t@@ -292,6 +294,7 @@ class Wallet:
            def set_server(self, server):
                if server != self.server:
                    self.server = server
       +            self.save()
                    self.interface.is_connected = False  # this exits the polling loop
        
            def set_path(self, wallet_path):