tkivy: allow manual server entry - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 38d6c18b60989d59eb40db784121635251faff65 DIR parent 51f8816ec776b6e06c826a4cc7afff5c7ea253d0 HTML Author: ThomasV <thomasv@electrum.org> Date: Tue, 28 Mar 2017 08:53:18 +0200 kivy: allow manual server entry Diffstat: M gui/kivy/uix/dialogs/choice_dialog… | 2 ++ M gui/kivy/uix/dialogs/settings.py | 31 ++++++++++++++++++++++--------- M gui/kivy/uix/ui_screens/network.kv | 54 +++++++++++++++++++++----------- 3 files changed, 60 insertions(+), 27 deletions(-) --- DIR diff --git a/gui/kivy/uix/dialogs/choice_dialog.py b/gui/kivy/uix/dialogs/choice_dialog.py t@@ -53,9 +53,11 @@ class ChoiceDialog(Factory.Popup): for k, v in sorted(choices.items()): l = Label(text=v) l.height = '48dp' + l.size_hint_x = 4 cb = CheckBox(group='choices') cb.value = k cb.height = '48dp' + cb.size_hint_x = 1 def f(cb, x): if x: self.value = cb.value cb.bind(active=f) DIR diff --git a/gui/kivy/uix/dialogs/settings.py b/gui/kivy/uix/dialogs/settings.py t@@ -92,8 +92,8 @@ Builder.load_string(''' CardSeparator SettingsItem: status: root.network_status() - title: _('Network') + ': ' + self.status - description: _("Network status and server selection.") + title: _('Server') + ': ' + self.status + description: _("Select your history server.") action: partial(root.network_dialog, self) CardSeparator SettingsItem: t@@ -236,18 +236,31 @@ class SettingsDialog(Factory.Popup): self._proxy_dialog.open() def network_dialog(self, item, dt): + host, port, protocol, proxy, auto_connect = self.app.network.get_parameters() + servers = self.app.network.get_servers() if self._network_dialog is None: - server, port, protocol, proxy, auto_connect = self.app.network.get_parameters() - def cb(popup): - server = popup.ids.host.text + def cb1(popup): + host = str(popup.ids.host.text) + port = str(popup.ids.port.text) auto_connect = popup.ids.auto_connect.active - self.app.network.set_parameters(server, port, protocol, proxy, auto_connect) + self.app.network.set_parameters(host, port, protocol, proxy, auto_connect) item.status = self.network_status() + def cb2(host): + from electrum.network import DEFAULT_PORTS + pp = servers.get(host, DEFAULT_PORTS) + port = pp.get(protocol, '') + popup.ids.host.text = host + popup.ids.port.text = port + def cb3(): + ChoiceDialog(_('Choose a server'), sorted(servers), popup.ids.host.text, cb2).open() popup = Builder.load_file('gui/kivy/uix/ui_screens/network.kv') - popup.ids.host.text = server - popup.ids.auto_connect.active = auto_connect - popup.on_dismiss = lambda: cb(popup) + popup.ids.chooser.on_release = cb3 + popup.on_dismiss = lambda: cb1(popup) self._network_dialog = popup + + self._network_dialog.ids.auto_connect.active = auto_connect + self._network_dialog.ids.host.text = host + self._network_dialog.ids.port.text = port self._network_dialog.open() def network_status(self): DIR diff --git a/gui/kivy/uix/ui_screens/network.kv b/gui/kivy/uix/ui_screens/network.kv t@@ -1,46 +1,64 @@ Popup: id: nd - title: _('Network') + title: _('Server') is_connected: app.network.is_connected() - server: app.network.interface.host BoxLayout: orientation: 'vertical' padding: '10dp' spacing: '10dp' TopLabel: - text: _("Connected to %s.")%root.server if root.is_connected else _("Not connected?") - Widget: - size_hint: 1, 0.1 - TopLabel: - text: _("Electrum retrieves your wallet information from a single server. In addition, it connects to a number of extra nodes, in order to fetch block headers. Block headers are used to verify the information sent by the address server, using Simple Payment Verification (SPV).") + text: _("Electrum retrieves your transaction history from a single server. The history is then checked against blockchain headers sent by other nodes, using Simple Payment Verification (SPV).") font_size: '6pt' Widget: - size_hint: 1, 0.1 + size_hint: 1, 0.8 GridLayout: - cols: 2 + cols: 3 Label: - text: _('Server') - Spinner: + height: '36dp' + size_hint_x: 1 + size_hint_y: None + text: _('Host') + ':' + TextInput: id: host - height: '48dp' + height: '36dp' + size_hint_x: 3 size_hint_y: None text: '' - values: sorted(app.network.get_servers()) + disabled: auto_connect.active + Button: + id: chooser + text:'v' + height: '36dp' + size_hint_x: 0.5 + size_hint_y: None disabled: auto_connect.active Label: - text: _('Auto-connect') - CheckBox: - id: auto_connect + height: '36dp' + size_hint_x: 1 + size_hint_y: None + text: _('Port') + ':' + TextInput: + id: port + input_type: 'number' + height: '36dp' + size_hint_x: 3 size_hint_y: None + text: '' + disabled: auto_connect.active Widget: size_hint: 1, 0.1 TopLabel: - text: _("If auto-connect is checked, the address server will be selected automatically.") + text: _("If auto-connect is checked, your history server will be selected automatically.") font_size: '6pt' + BoxLayout: + Label: + text: _('Auto-connect') + CheckBox: + id: auto_connect + size_hint_y: None Widget: size_hint: 1, 0.1 - BoxLayout: Widget: size_hint: 0.5, None