allow enable/disable proxy without nuking proxy mode, host and port (explicit enable_proxy config setting), move tor probe from frontend to backend code, add probe buttons for Qt and QML
112 lines
4.4 KiB
Python
112 lines
4.4 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
from PyQt6.QtCore import Qt
|
|
from PyQt6.QtGui import QPixmap
|
|
from PyQt6.QtWidgets import QCheckBox, QLabel, QHBoxLayout, QVBoxLayout, QWidget
|
|
|
|
from electrum.i18n import _
|
|
from electrum.wizard import ServerConnectWizard
|
|
from electrum.gui.qt.network_dialog import ProxyWidget, ServerWidget
|
|
from electrum.gui.qt.util import icon_path
|
|
from .wizard import QEAbstractWizard, WizardComponent
|
|
|
|
if TYPE_CHECKING:
|
|
from electrum.simple_config import SimpleConfig
|
|
from electrum.plugin import Plugins
|
|
from electrum.daemon import Daemon
|
|
from electrum.gui.qt import QElectrumApplication
|
|
|
|
|
|
class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard):
|
|
|
|
def __init__(self, config: 'SimpleConfig', app: 'QElectrumApplication', plugins: 'Plugins', daemon: 'Daemon', parent=None):
|
|
ServerConnectWizard.__init__(self, daemon)
|
|
QEAbstractWizard.__init__(self, config, app)
|
|
self.window_title = _('Network and server configuration')
|
|
self.finish_label = _('Next')
|
|
|
|
# attach gui classes
|
|
self.navmap_merge({
|
|
'welcome': {'gui': WCWelcome, 'params': {'icon': ''}},
|
|
'proxy_config': {'gui': WCProxyConfig},
|
|
'server_config': {'gui': WCServerConfig},
|
|
})
|
|
|
|
|
|
class WCWelcome(WizardComponent):
|
|
def __init__(self, parent, wizard):
|
|
WizardComponent.__init__(self, parent, wizard, title='')
|
|
self.wizard_title = _('Electrum Bitcoin Wallet')
|
|
self.use_advanced_w = QCheckBox(_('Advanced network settings'))
|
|
self.use_advanced_w.setChecked(False)
|
|
self.use_advanced_w.stateChanged.connect(self.on_advanced_changed)
|
|
|
|
self.img_label = QLabel()
|
|
pixmap = QPixmap(icon_path('electrum_darkblue_1.png'))
|
|
self.img_label.setPixmap(pixmap)
|
|
self.img_label2 = QLabel()
|
|
pixmap = QPixmap(icon_path('electrum_text.png'))
|
|
self.img_label2.setPixmap(pixmap)
|
|
hbox_img = QHBoxLayout()
|
|
hbox_img.addStretch(1)
|
|
hbox_img.addWidget(self.img_label)
|
|
hbox_img.addWidget(self.img_label2)
|
|
hbox_img.addStretch(1)
|
|
|
|
self.config_proxy_w = QCheckBox(_('Configure Proxy'))
|
|
self.config_proxy_w.setChecked(False)
|
|
self.config_proxy_w.setVisible(False)
|
|
self.config_proxy_w.stateChanged.connect(self.on_updated)
|
|
self.config_server_w = QCheckBox(_('Select Server'))
|
|
self.config_server_w.setChecked(False)
|
|
self.config_server_w.setVisible(False)
|
|
self.config_server_w.stateChanged.connect(self.on_updated)
|
|
options_w = QWidget()
|
|
vbox = QVBoxLayout()
|
|
vbox.addWidget(self.config_proxy_w)
|
|
vbox.addWidget(self.config_server_w)
|
|
vbox.addStretch(1)
|
|
options_w.setLayout(vbox)
|
|
|
|
self.layout().addLayout(hbox_img)
|
|
self.layout().addSpacing(50)
|
|
self.layout().addWidget(self.use_advanced_w, False, Qt.AlignmentFlag.AlignHCenter)
|
|
self.layout().addWidget(options_w, False, Qt.AlignmentFlag.AlignHCenter)
|
|
self._valid = True
|
|
|
|
def on_advanced_changed(self):
|
|
self.config_proxy_w.setVisible(self.use_advanced_w.isChecked())
|
|
self.config_server_w.setVisible(self.use_advanced_w.isChecked())
|
|
self.on_updated()
|
|
|
|
def apply(self):
|
|
self.wizard_data['use_defaults'] = not self.use_advanced_w.isChecked()
|
|
self.wizard_data['want_proxy'] = self.use_advanced_w.isChecked() and self.config_proxy_w.isChecked()
|
|
self.wizard_data['autoconnect'] = not self.use_advanced_w.isChecked() or not self.config_server_w.isChecked()
|
|
|
|
|
|
class WCProxyConfig(WizardComponent):
|
|
def __init__(self, parent, wizard):
|
|
WizardComponent.__init__(self, parent, wizard, title=_('Proxy'))
|
|
self.pw = ProxyWidget(wizard._daemon.network, self)
|
|
self.pw.proxy_cb.setChecked(True)
|
|
self.pw.proxy_host.setText('localhost')
|
|
self.pw.proxy_port.setText('9050')
|
|
self.layout().addWidget(self.pw)
|
|
self._valid = True
|
|
|
|
def apply(self):
|
|
self.wizard_data['proxy'] = self.pw.get_proxy_settings().to_dict()
|
|
|
|
|
|
class WCServerConfig(WizardComponent):
|
|
def __init__(self, parent, wizard):
|
|
WizardComponent.__init__(self, parent, wizard, title=_('Server'))
|
|
self.sw = ServerWidget(wizard._daemon.network, self)
|
|
self.layout().addWidget(self.sw)
|
|
self._valid = True
|
|
|
|
def apply(self):
|
|
self.wizard_data['autoconnect'] = self.sw.server_e.text().strip() == ''
|
|
self.wizard_data['server'] = self.sw.server_e.text()
|