From a03b2d7bae416d5ebbcfcfe2dba8312e79cc2c63 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 11 Dec 2023 15:17:45 +0100 Subject: [PATCH 1/3] qt,qml: add a welcome page as initial page for server connect wizard This is much less intimidating than asking if the user wants to use a proxy out of the gate. --- electrum/gui/icons/electrum_darkblue_1.png | Bin 0 -> 5255 bytes electrum/gui/icons/electrum_text.png | Bin 0 -> 7439 bytes .../qml/components/wizard/WCAutoConnect.qml | 1 + .../gui/qml/components/wizard/WCProxyAsk.qml | 1 + .../qml/components/wizard/WCProxyConfig.qml | 1 + .../qml/components/wizard/WCServerConfig.qml | 1 + .../gui/qml/components/wizard/WCWelcome.qml | 48 +++++++++++++++ electrum/gui/qml/components/wizard/Wizard.qml | 3 +- .../qml/components/wizard/WizardComponent.qml | 1 + electrum/gui/qml/qewizard.py | 1 + electrum/gui/qt/wizard/server_connect.py | 55 +++++++++++++++--- electrum/gui/qt/wizard/wallet.py | 3 +- electrum/gui/qt/wizard/wizard.py | 10 +++- electrum/wizard.py | 18 ++++-- 14 files changed, 126 insertions(+), 17 deletions(-) create mode 100644 electrum/gui/icons/electrum_darkblue_1.png create mode 100644 electrum/gui/icons/electrum_text.png create mode 100644 electrum/gui/qml/components/wizard/WCWelcome.qml diff --git a/electrum/gui/icons/electrum_darkblue_1.png b/electrum/gui/icons/electrum_darkblue_1.png new file mode 100644 index 0000000000000000000000000000000000000000..199e5993cc47cc540b8b413da68ace07ae56260f GIT binary patch literal 5255 zcmV;26nN{2P)1^@s6$I7^K00009a7bBm0003* z0003*0Zk0GTmS$78FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H16ckBB zK~#90?VNd>RK>N&zo%|@&pr%{D4;QdaY-UkGm08urokvid>X~fARcJURMn|d=Z>fx1%4A$qfIT=6>lA|<0{bpY$A7HK z=N^k92tRms7?|PUL_(a~+mEqVI(RKj&ymN*KLS4%-s9pkuf#O~)+kus+JOQ>r z8^i56>ptnZGK!*gSaSlRVPHTnmQJ7vk-0Qf|K;<7{<*-A+Es(W-j8rXjv}7{zawUD z(}%}?l2z|%&kaM}YfzmIl;x=VaU4BM7l*gx$ltf#T?IoXtr|+uu0|P=g(XJzVc3c2 z|6mJl*2bf{k~&XZUrcew^>HgJ+6BG;!ikO6#YcadQzv@SE={0P`$h=IF7E}z24D(m zcGrd)VUrf&I{SkB5aeMX;^Qqwz{4DQ&tYKG% zNwnt-Qb0s7a$!ERxHg72YD0J`F6RPnuct1^*;-#SEmt4_bT$^F7Xk^(EJv7{t9*iX zVb0J~d^Zp4lIjoh)gY%e9frfLfYa-V1A3dB)^cdxty&U(5BQ@`*D2X}vr%4PNbU1Q zz;{w5_ThXhl)9CpvGO!fnJVNpAIo5@J}Z-(j?7m#D$9I#W90Zh733qHpJh1F1A)TS zy)@?|F10JGz&uIHc~X=sw7zB}a5W@{TLmhA&fh|;zdc2imh7L8bber1_Ve9s&d0%# zQ(N{!%yOVSUZkkb)W(`$0BA$a&k#8uu<_>uu=GFlp`GDdh)- z=pMeC4{{beWzFt5x&lbZE28IWWB6V_pVn6|K;!~a7BU#s<({XTGrjNAI3y3bJi*Z9 zDguzxvL&@|gb2nOfqi^>uGaeSZ!%U?+kFF8N87Rg80;;IBsC8S*_SvVa zYs;psv5t=TB&(xkVCl-jvp3w(6NtU43#zj2Ye0Kaza^AU_wwDsC-)I(YIiErR+P{a z9Ag5(qtrM@IgV2$j#H^NhDK96Y^R`*qCu6Fh#_%_aXK_Tb_ zlnLU*kyb@j^4h)Tv^VjFLE%Nf<)FJ~VT+05Y%l?{#*Nvp;JV-UJv&z$YJQzh!_w-X z+%f~zUnUETv&=a1k#*hgVD%7^o~&R30lZaPQMI39^%oTM+@}v7yHhLa7Yr|qC+DO5 z1n3KbXa~qLtSl#JR_H@xTBUYn6=K$svbx8$q2|OsqElYm1Kl=^;+{{r|Cmphy7o|r zxw>%7hTgmYQrGeX=*0MK3?rj-N%c!|`s#tWu?Z+Ah&U&kV6fN&18g)IHTV?dCiK%^ zYU2;wO#1r;Lu#82LCkMJtFj4$T%--v_a*PF-?VhcC`l)wzm-RoqBVZ#6F> z_8hGrml5!ceumUForlQUUO>1A3sHF{RiuZc3BKMu!v_Q?mt_J100+bfn0OP6K_trr z1n9$KKSAX3R3kYI8GKH9Z=8cM1~CRP@-(oBlt&A2IBM3)Rayhx_C43}vw!)5w&d*hmN5rc@S z43^Ed^cP4WD!-Px zraSrtgW8r~pmK??q#cpz+E_C|>#P6nN%%KIvY$+C+ROVH`3W#E{ve9V1^zgP6Vzjk z2H$ZAz2gvg-#BtTMliy87`sl4F=9+*sAB)Ng7Y`5D>(PntL5}p2jU}D6vy?)Ee2vD z*8vpISid($Mo7Xk#54iu;&HFDwE7r?vjE>DDp&LdBngI0Zax$AQs1+GAu>wqs~=1Q zti1ehz-M9%#&IxGFi}ojJp#DE$2DIY$G(v!hjF~OZ;*t;mHaDlvlK+6)Tnc~am;N6 z1DusI>z%aY0bM-qbs)8}C>Kg?%WzA<#3T^Lv_*Hk{gNLl+?aa}(Zq3_t-!e=3eSF=Z9< zr%bDc)`wq112w?AsY0D6r#&|;2?lCslZr@pV&(h#aQNSS8j--taUK=NAdUk#M*~xQ zk8kg9Yp)NEdKYm%h|d=&w06%s;LXVV!`4N9bZ0rUABehMXs6RNXw`ybctJ#zRxRKCuF;2HQ2J1#c zqkr_R2&pzLUGIJ>Iw#*?5}=r zX;pvpe5y=aQDQLWSW?le2oZML8EvfEE{^jU7;G$U^Ey`_9lc{`@?K{Rh~O9*SbE{h zhm_5HwWj2vzn`z@;)G=wao!ZmqD(4u(Gj14+zk*cF2OfM9@D$O_SsI`5D3gAb(T{^ zB=}u}rbUC+=^w*wJ5>Z2$62VcsBeEDodlen0_h2-hJnSIZYg-l)nF6G%oAhw6VEbK zjd?=LdYg`qGLJwSH&|u)fto(k_hsLymyqGF52N+LBEl7>o0if!n=?kNwDG8I1p^1YpRfw7 zx}DoTcsAEQpz7Dz5opV1FV>GLl?Y4Q5Hly$6o! zxO=~m?RV`r%)yK@VqQpik~q%(PG|QynbZup{NIBDCB^$BtRmXc?$Dt}=iG<1{_19f z>RY~o!{y|rioP-#DY-s7p#lPhg+&@OGjkF28lRXX(?`MfyGFcdT)ockdtmymC;+C= zTw;t<7@sSMcI*HnXXMld&tpD3RbbyVbeBGbm*)TwBE+Q`rTvOLz>;YQ!Ll;Magd;y zIr!==IiwKy94^y$KcWS)r-(_;17e&$A;!u%+sZNKVxLu@t_78or1t6Fc^nx!5xopZ z98h->ias6C$ErG|u6Z#K-@M3GGG)~=T|D-ctcnWEL{#G|kVJx|Wk!q>5F>+J<6aEh zl1XgPrElyVjRs2ynB7H)hq|P=;;Q$DTMZRBPUlc-L*p=ki<4F%f{3>C)@9x3Ofk+t zyd7$^r?pLi5KxE&j|Y}y#o@G;LqV@hmFPl!@Ys&H)8*bk$~ua1?ITkA+}>HiP(8_a z^Rxtl4~dC8VUF|T@;RUE)>}j_|94T34ZLXsydffcC*5&l&b6xVAd$bj8hjSR^@ypE zWSms~()QM#4Sro^*KQnajB}Nk#1hOR8;hhSPVu*|HxNzxV09TOccL8=ybuBjFBE2&>KM?O}!sEPR2F$32DmYl?P*`8UL|` z$a%VC^v6js0K5&E-szLw2bHx_*K(GKFVeYvM-~3mA`@8NcGDj3D(dZRRKe8@#4sMF^sn&_jzw$en&t~LPSNR)fhcER1g@{cFWL1w%xeLZ91E7zn;pU zZu}>=-A%yJ*w00ukXPW2a&y5@6Gvj*^6{Li$$`k`c3{1s_K_{v^@ zlz{%0+U94Zwq>NpWNLiR-%6lroyg7Vx~*zm)Y_mccAg)^&+gcN%Z|DGuH12_cLj}k zU<kKH5>RH^e!14bkOkJYYrT^( zi&}eE@yxgP%2bC5@RSib6KfuUZ^Q`5kHol_XW|7Yx%$Il*5yvsr0y46o!x(x-f;D; zfI1#!O0PbyMRb%lRR2Cx9sNhg=U}|JCf5T)Gq7|4k0SB}#y+Ks!&@qT{QkGC(e!$9IyX6SeKAElE&#cb)Jb}8vM8@1tS+h?Jj{fG-;a-Ltc{)5J%8ka z+`8VE$}WHB0x{-3;wzCG=~>qK$;TT}#vmL-)&q3i2<8sDO6DhzAN%WPJ_&A8w{jAg zKg277Y{zK=g##-QV~AUajkI?z(^%|f&}|^wK(`^P7}{`EaYV3GpduiHKnEdO>4XXn zF09=BWHI6(g2tkBZ0zUUIgRvWZ3sV-Yya{*c$QS2gvviK+=DWa-f7YbJ=@zT7%%{J z6}4)dP~g;xoCn(mP{=G=fXCXsR=$QDJr@e*UpdbJ@2>;O7~#U({15U9jjR0JD~t%~(@%s~UM zXye$;Sz9RTKMu&2a-EU#JcY;iTBYBV1Hvk5?K?rY>twzAYdHV`ps98l^2*Q1H!0S4ZmM6+ zRY)7hZdPlL^~npW^QEpiEf^F!bKQAr?cJ&tRRy)16()YRpemowCQ^G3ORmcfkay~% z{?m82n@nlyvsKSV+8BNtBgd0E{1MYK>Y2Yul{VV|o^h{70^J zNNv*)Qb(MCyq&8oXzanpSMosur8ehJazfJ6jdKz?qftbQHbTd|fn5Usd6 zA@bWpGo}t?r?gFEC+!_?Wo6AIoe#4<5bj3hIiL8XeB=SNKD-t&N0SIdi-77kG!BGX zyGbnLBELUuUH_UgkZ7ts%4&V`dpXWC9_61%Z`7ZkJxL}#oAca}Agv$!H&m_zbrUI% zSVh%!t=n^LWZ|ehEdr#rWjNqVoszus+Vck^P`C)s7XSzm2;3)ga@Ql1Rt=T9=EaCE zfYhE{)uOI-u<{$JYg!~zp2^vJlsOng=aCBVZl|#Oq5fnt>e;m~k(y>9a%-wY7f?}l zalc<8d1*+O0vD0~g`)-5;CZfoP&*L02W#hM&Hf=ChHPuU5AdC>=vCSf?vsqNGulNk z-UuO^p9j9}E8YNl2g=jh7~Uu|)(2_b@m0iBqnwE7M0z`U!aor`SC@pFq_$N5^;42mAP6q@r|me=jC$zjpcS#oDGJh^&Up2Ru8W z4um@?(pwXI3Qy4dfZ% zak@&D<`QH{>Ylcugh)XxmJ<-h<4=Y5s2x~|at}*up8k)1@!UsQ?NSGZ900K*2spTW z*x#4UdF!9FYA6n0ftZVNIy=u0qs^uI1PL1rF3Ru=#O N002ovPDHLkV1iF<{VV_g literal 0 HcmV?d00001 diff --git a/electrum/gui/icons/electrum_text.png b/electrum/gui/icons/electrum_text.png new file mode 100644 index 0000000000000000000000000000000000000000..546381f28ab6c79fe6acd4a23a41cb1ac8533cc4 GIT binary patch literal 7439 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.title}' if page.title else '') self.back_button.setText(_('Back') if self.can_go_back() else _('Cancel')) self.back_button.setEnabled(not page.busy) @@ -178,8 +180,11 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): self.error_msg.setText(str(page.error)) self.error.setVisible(not page.busy and bool(page.error)) icon = page.params.get('icon', icon_path('electrum.png')) - if icon != self.icon_filename: + if icon and icon != self.icon_filename: self.set_icon(icon) + self.logo.setVisible(True) + else: + self.logo.setVisible(False) def on_back_button_clicked(self): if self.can_go_back(): @@ -238,6 +243,7 @@ class WizardComponent(QWidget): self.setLayout(layout if layout else QVBoxLayout(self)) self.wizard_data = {} self.title = title if title is not None else 'No title' + self.wizard_title = None self.busy_msg = '' self.wizard = wizard self._error = '' diff --git a/electrum/wizard.py b/electrum/wizard.py index 5307f2455..c32c9d855 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -264,7 +264,9 @@ class NewWalletWizard(AbstractWizard): if initial_data is None: initial_data = {} self.reset() - self._current = WizardViewState('wallet_name', initial_data, {}) + start_view = 'wallet_name' + params = self.navmap[start_view].get('params', {}) + self._current = WizardViewState(start_view, initial_data, params) return self._current def is_single_password(self) -> bool: @@ -652,14 +654,18 @@ class ServerConnectWizard(AbstractWizard): def __init__(self, daemon: 'Daemon'): AbstractWizard.__init__(self) self.navmap = { + 'welcome': { + 'next': 'proxy_ask', + 'last': lambda d: d['use_defaults'] + }, + 'proxy_ask': { + 'next': lambda d: 'proxy_config' if d['want_proxy'] else 'autoconnect' + }, 'autoconnect': { 'next': 'server_config', 'accept': self.do_configure_autoconnect, 'last': lambda d: d['autoconnect'] }, - 'proxy_ask': { - 'next': lambda d: 'proxy_config' if d['want_proxy'] else 'autoconnect' - }, 'proxy_config': { 'next': 'autoconnect', 'accept': self.do_configure_proxy @@ -704,5 +710,7 @@ class ServerConnectWizard(AbstractWizard): if initial_data is None: initial_data = {} self.reset() - self._current = WizardViewState('proxy_ask', initial_data, {}) + start_view = 'welcome' + params = self.navmap[start_view].get('params', {}) + self._current = WizardViewState(start_view, initial_data, params) return self._current From 5e39ff49bcb96bd7ef5bd3acae0d163c795e2519 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 18 Dec 2023 13:03:30 +0100 Subject: [PATCH 2/3] add missing accept handler for welcome page --- electrum/gui/qml/components/wizard/WCWelcome.qml | 4 +++- electrum/gui/qt/wizard/server_connect.py | 4 +++- electrum/wizard.py | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/electrum/gui/qml/components/wizard/WCWelcome.qml b/electrum/gui/qml/components/wizard/WCWelcome.qml index 56754b774..7d440e58c 100644 --- a/electrum/gui/qml/components/wizard/WCWelcome.qml +++ b/electrum/gui/qml/components/wizard/WCWelcome.qml @@ -12,9 +12,11 @@ WizardComponent { function apply() { wizard_data['use_defaults'] = use_defaults.checked + wizard_data['want_proxy'] = false if (use_defaults.checked) { wizard_data['autoconnect'] = true - wizard_data['want_proxy'] = false + } else { + wizard_data['autoconnect'] = undefined } } diff --git a/electrum/gui/qt/wizard/server_connect.py b/electrum/gui/qt/wizard/server_connect.py index 4b0d3a739..5ff56d764 100644 --- a/electrum/gui/qt/wizard/server_connect.py +++ b/electrum/gui/qt/wizard/server_connect.py @@ -66,9 +66,11 @@ class WCWelcome(WizardComponent): def apply(self): self.wizard_data['use_defaults'] = self.use_defaults_w.isChecked() + self.wizard_data['want_proxy'] = False if self.use_defaults_w.isChecked(): self.wizard_data['autoconnect'] = True - self.wizard_data['want_proxy'] = False + else: + self.wizard_data['autoconnect'] = None class WCAutoConnect(WizardComponent): diff --git a/electrum/wizard.py b/electrum/wizard.py index c32c9d855..3b714a1a5 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -656,6 +656,7 @@ class ServerConnectWizard(AbstractWizard): self.navmap = { 'welcome': { 'next': 'proxy_ask', + 'accept': self.do_configure_autoconnect, 'last': lambda d: d['use_defaults'] }, 'proxy_ask': { @@ -704,7 +705,8 @@ class ServerConnectWizard(AbstractWizard): def do_configure_autoconnect(self, wizard_data: dict): self._logger.debug(f'configuring autoconnect: {wizard_data!r}') if self._daemon.config.cv.NETWORK_AUTO_CONNECT.is_modifiable(): - self._daemon.config.NETWORK_AUTO_CONNECT = wizard_data['autoconnect'] + if autoconnect := wizard_data.get('autoconnect') is not None: + self._daemon.config.NETWORK_AUTO_CONNECT = autoconnect def start(self, initial_data: dict = None) -> WizardViewState: if initial_data is None: From ebcecdccceb96ee5fc3b3dfa40cda41d26863ecb Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 18 Dec 2023 14:34:42 +0100 Subject: [PATCH 3/3] qt,qml: add checkboxes for advanced network config on welcome page, remove separate proxy-ask and autoconnect pages --- .../qml/components/wizard/WCAutoConnect.qml | 50 -------- .../gui/qml/components/wizard/WCProxyAsk.qml | 44 ------- .../qml/components/wizard/WCServerConfig.qml | 2 +- .../gui/qml/components/wizard/WCWelcome.qml | 49 ++++---- electrum/gui/qml/qewizard.py | 2 - electrum/gui/qt/wizard/server_connect.py | 110 +++++++----------- electrum/gui/qt/wizard/wizard.py | 8 +- electrum/wizard.py | 37 +++--- 8 files changed, 91 insertions(+), 211 deletions(-) delete mode 100644 electrum/gui/qml/components/wizard/WCAutoConnect.qml delete mode 100644 electrum/gui/qml/components/wizard/WCProxyAsk.qml diff --git a/electrum/gui/qml/components/wizard/WCAutoConnect.qml b/electrum/gui/qml/components/wizard/WCAutoConnect.qml deleted file mode 100644 index 1736619a7..000000000 --- a/electrum/gui/qml/components/wizard/WCAutoConnect.qml +++ /dev/null @@ -1,50 +0,0 @@ -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -import "../controls" - -WizardComponent { - valid: true - title: qsTr('Server') - - function apply() { - wizard_data['autoconnect'] = serverconnectgroup.checkedButton.connecttype === 'auto' - } - - ColumnLayout { - width: parent.width - - Label { - Layout.fillWidth: true - text: qsTr('How do you want to connect to a server?') - wrapMode: Text.Wrap - } - - InfoTextArea { - Layout.fillWidth: true - text: qsTr('Electrum communicates with remote servers to get information about your transactions and addresses. The servers all fulfill the same purpose only differing in hardware. In most cases you simply want to let Electrum pick one at random. However if you prefer feel free to select a server manually.') - } - - ButtonGroup { - id: serverconnectgroup - onCheckedButtonChanged: checkIsLast() - } - - ElRadioButton { - Layout.fillWidth: true - ButtonGroup.group: serverconnectgroup - property string connecttype: 'auto' - text: qsTr('Auto connect') - checked: true - } - ElRadioButton { - Layout.fillWidth: true - ButtonGroup.group: serverconnectgroup - property string connecttype: 'manual' - text: qsTr('Select servers manually') - } - - } - -} diff --git a/electrum/gui/qml/components/wizard/WCProxyAsk.qml b/electrum/gui/qml/components/wizard/WCProxyAsk.qml deleted file mode 100644 index 660920eee..000000000 --- a/electrum/gui/qml/components/wizard/WCProxyAsk.qml +++ /dev/null @@ -1,44 +0,0 @@ -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls -import QtQuick.Controls.Material - -import "../controls" - -WizardComponent { - valid: true - title: qsTr('Proxy') - - function apply() { - wizard_data['want_proxy'] = wantproxygroup.checkedButton.wantproxy - } - - ColumnLayout { - width: parent.width - - Label { - Layout.fillWidth: true - text: qsTr('Do you use a local proxy service such as TOR to reach the internet?') - wrapMode: Text.Wrap - } - - ButtonGroup { - id: wantproxygroup - onCheckedButtonChanged: checkIsLast() - } - - ElRadioButton { - ButtonGroup.group: wantproxygroup - property bool wantproxy: true - text: qsTr('Yes') - } - ElRadioButton { - ButtonGroup.group: wantproxygroup - property bool wantproxy: false - text: qsTr('No') - checked: true - } - - } - -} diff --git a/electrum/gui/qml/components/wizard/WCServerConfig.qml b/electrum/gui/qml/components/wizard/WCServerConfig.qml index cfff2e936..df114f84a 100644 --- a/electrum/gui/qml/components/wizard/WCServerConfig.qml +++ b/electrum/gui/qml/components/wizard/WCServerConfig.qml @@ -10,7 +10,7 @@ WizardComponent { title: qsTr('Server') function apply() { - wizard_data['autoconnect'] = sc.address == "" + wizard_data['autoconnect'] = sc.address.trim() == "" wizard_data['server'] = sc.address } diff --git a/electrum/gui/qml/components/wizard/WCWelcome.qml b/electrum/gui/qml/components/wizard/WCWelcome.qml index 7d440e58c..3a8654275 100644 --- a/electrum/gui/qml/components/wizard/WCWelcome.qml +++ b/electrum/gui/qml/components/wizard/WCWelcome.qml @@ -2,22 +2,16 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls -// import org.electrum 1.0 - import "../controls" WizardComponent { valid: true - title: qsTr('Electrum Bitcoin Wallet') + wizard_title: qsTr('Electrum Bitcoin Wallet') function apply() { - wizard_data['use_defaults'] = use_defaults.checked - wizard_data['want_proxy'] = false - if (use_defaults.checked) { - wizard_data['autoconnect'] = true - } else { - wizard_data['autoconnect'] = undefined - } + wizard_data['use_defaults'] = !config_advanced.checked + wizard_data['want_proxy'] = config_advanced.checked && config_proxy.checked + wizard_data['autoconnect'] = !config_server.checked || !config_advanced.checked } ColumnLayout { @@ -29,22 +23,37 @@ WizardComponent { source: Qt.resolvedUrl('../../../icons/electrum_presplash.png') // reduce spacing a bit Layout.topMargin: -50 - Layout.bottomMargin: -160 + Layout.bottomMargin: -120 } - Label { + CheckBox { + id: config_advanced Layout.alignment: Qt.AlignHCenter - text: qsTr('Welcome') - font.pixelSize: constants.fontSizeXLarge - Layout.bottomMargin: constants.paddingXXLarge + text: qsTr('Advanced network settings') + checked: false + onCheckedChanged: checkIsLast() } - CheckBox { - id: use_defaults + ColumnLayout { Layout.alignment: Qt.AlignHCenter - text: qsTr('Use default network settings') - checked: true - onCheckedChanged: checkIsLast() + + opacity: config_advanced.checked ? 1 : 0 + Behavior on opacity { + NumberAnimation { duration: 300 } + } + + CheckBox { + id: config_proxy + text: qsTr('Configure Proxy') + checked: false + onCheckedChanged: checkIsLast() + } + CheckBox { + id: config_server + text: qsTr('Select Server') + checked: false + onCheckedChanged: checkIsLast() + } } } } diff --git a/electrum/gui/qml/qewizard.py b/electrum/gui/qml/qewizard.py index c905f5ae3..dd15c1764 100644 --- a/electrum/gui/qml/qewizard.py +++ b/electrum/gui/qml/qewizard.py @@ -148,8 +148,6 @@ class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard): # attach view names self.navmap_merge({ 'welcome': {'gui': 'WCWelcome'}, - 'autoconnect': {'gui': 'WCAutoConnect'}, - 'proxy_ask': {'gui': 'WCProxyAsk'}, 'proxy_config': {'gui': 'WCProxyConfig'}, 'server_config': {'gui': 'WCServerConfig'}, }) diff --git a/electrum/gui/qt/wizard/server_connect.py b/electrum/gui/qt/wizard/server_connect.py index 5ff56d764..a86c6b327 100644 --- a/electrum/gui/qt/wizard/server_connect.py +++ b/electrum/gui/qt/wizard/server_connect.py @@ -2,12 +2,12 @@ from typing import TYPE_CHECKING from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap -from PyQt5.QtWidgets import QCheckBox, QLabel, QHBoxLayout +from PyQt5.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 ChoiceWidget, icon_path +from electrum.gui.qt.util import icon_path from .wizard import QEAbstractWizard, WizardComponent if TYPE_CHECKING: @@ -23,12 +23,11 @@ class QEServerConnectWizard(ServerConnectWizard, QEAbstractWizard): 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_ask': {'gui': WCProxyAsk}, - 'autoconnect': {'gui': WCAutoConnect}, 'proxy_config': {'gui': WCProxyConfig}, 'server_config': {'gui': WCServerConfig}, }) @@ -38,82 +37,57 @@ class WCWelcome(WizardComponent): def __init__(self, parent, wizard): WizardComponent.__init__(self, parent, wizard, title='') self.wizard_title = _('Electrum Bitcoin Wallet') - self.use_defaults_w = QCheckBox(_('Use default network settings')) - self.use_defaults_w.setChecked(True) - self.use_defaults_w.stateChanged.connect(self.on_updated) + 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 = QHBoxLayout() - hbox.addStretch(1) - hbox.addWidget(self.img_label) - hbox.addWidget(self.img_label2) - hbox.addStretch(1) - self.layout().addLayout(hbox) - self.welcome_label = QLabel('Welcome') - font = self.welcome_label.font() - font.setPointSize(font.pointSize() + 3) - self.welcome_label.setFont(font) - self.layout().addStretch(1) - self.layout().addWidget(self.welcome_label, False, Qt.AlignHCenter) - self.layout().addStretch(1) - self.layout().addWidget(self.use_defaults_w, False, Qt.AlignHCenter) - self.layout().addStretch(1) + 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.AlignHCenter) + self.layout().addWidget(options_w, False, Qt.AlignHCenter) self._valid = True - def apply(self): - self.wizard_data['use_defaults'] = self.use_defaults_w.isChecked() - self.wizard_data['want_proxy'] = False - if self.use_defaults_w.isChecked(): - self.wizard_data['autoconnect'] = True - else: - self.wizard_data['autoconnect'] = None - - -class WCAutoConnect(WizardComponent): - def __init__(self, parent, wizard): - WizardComponent.__init__(self, parent, wizard, title=_("How do you want to connect to a server? ")) - message = _("Electrum communicates with remote servers to get " - "information about your transactions and addresses. The " - "servers all fulfill the same purpose only differing in " - "hardware. In most cases you simply want to let Electrum " - "pick one at random. However if you prefer feel free to " - "select a server manually.") - choices = [('autoconnect', _("Auto connect")), - ('select', _("Select server manually"))] - self.choice_w = ChoiceWidget(message=message, choices=choices, selected='autoconnect') - self.choice_w.itemSelected.connect(self.on_updated) - self.layout().addWidget(self.choice_w) - self.layout().addStretch(1) - self._valid = True - - def apply(self): - self.wizard_data['autoconnect'] = (self.choice_w.selected_item[0] == 'autoconnect') - - -class WCProxyAsk(WizardComponent): - def __init__(self, parent, wizard): - WizardComponent.__init__(self, parent, wizard, title=_("Proxy")) - message = _("Do you use a local proxy service such as TOR to reach the internet?") - choices = [ - ('no', _("No")), - ('yes', _("Yes")), - ] - self.choice_w = ChoiceWidget(message=message, choices=choices, selected='no') - self.layout().addWidget(self.choice_w) - self.layout().addStretch(1) - 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['want_proxy'] = (self.choice_w.selected_item[0] == 'yes') + 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")) + WizardComponent.__init__(self, parent, wizard, title=_('Proxy')) self.pw = ProxyWidget(self) self.pw.proxy_cb.setChecked(True) self.pw.proxy_host.setText('localhost') @@ -128,11 +102,11 @@ class WCProxyConfig(WizardComponent): class WCServerConfig(WizardComponent): def __init__(self, parent, wizard): - WizardComponent.__init__(self, parent, wizard, title=_("Server")) + 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.autoconnect_cb.isChecked() + self.wizard_data['autoconnect'] = self.sw.server_e.text().strip() == '' self.wizard_data['server'] = self.sw.server_e.text() diff --git a/electrum/gui/qt/wizard/wizard.py b/electrum/gui/qt/wizard/wizard.py index 3e48212b9..791bceadf 100644 --- a/electrum/gui/qt/wizard/wizard.py +++ b/electrum/gui/qt/wizard/wizard.py @@ -6,7 +6,7 @@ from typing import TYPE_CHECKING from PyQt5.QtCore import Qt, QTimer, pyqtSignal, pyqtSlot, QSize from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import (QDialog, QPushButton, QWidget, QLabel, QVBoxLayout, QScrollArea, - QHBoxLayout, QLayout, QStackedWidget) + QHBoxLayout, QLayout) from electrum.i18n import _ from electrum.logging import get_logger @@ -40,6 +40,7 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): self.title = QLabel() self.window_title = '' + self.finish_label = _('Finish') self.main_widget = ResizableStackedWidget(self) @@ -64,9 +65,6 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): error_layout = QVBoxLayout() error_layout.addStretch(1) - # error_l = QLabel(_("Error!")) - # error_l.setAlignment(Qt.AlignCenter) - # error_layout.addWidget(error_l) self.error_msg = WWLabel() self.error_msg.setAlignment(Qt.AlignCenter) error_layout.addWidget(self.error_msg) @@ -172,7 +170,7 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): self.title.setText(f'{page.title}' if page.title else '') self.back_button.setText(_('Back') if self.can_go_back() else _('Cancel')) self.back_button.setEnabled(not page.busy) - self.next_button.setText(_('Next') if not self.is_last(page.wizard_data) else _('Finish')) + self.next_button.setText(_('Next') if not self.is_last(page.wizard_data) else self.finish_label) self.next_button.setEnabled(not page.busy and page.valid) self.main_widget.setVisible(not page.busy and not bool(page.error)) self.please_wait.setVisible(page.busy) diff --git a/electrum/wizard.py b/electrum/wizard.py index 3b714a1a5..7aa4fa417 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -655,21 +655,14 @@ class ServerConnectWizard(AbstractWizard): AbstractWizard.__init__(self) self.navmap = { 'welcome': { - 'next': 'proxy_ask', + 'next': lambda d: 'proxy_config' if d['want_proxy'] else 'server_config', 'accept': self.do_configure_autoconnect, - 'last': lambda d: d['use_defaults'] - }, - 'proxy_ask': { - 'next': lambda d: 'proxy_config' if d['want_proxy'] else 'autoconnect' - }, - 'autoconnect': { - 'next': 'server_config', - 'accept': self.do_configure_autoconnect, - 'last': lambda d: d['autoconnect'] + 'last': lambda d: bool(d['autoconnect'] and not d['want_proxy']) }, 'proxy_config': { - 'next': 'autoconnect', - 'accept': self.do_configure_proxy + 'next': 'server_config', + 'accept': self.do_configure_proxy, + 'last': lambda d: bool(d['autoconnect']) }, 'server_config': { 'accept': self.do_configure_server, @@ -687,26 +680,28 @@ class ServerConnectWizard(AbstractWizard): net_params = self._daemon.network.get_parameters() if not proxy_settings['enabled']: proxy_settings = None - net_params = net_params._replace(proxy=proxy_settings) + net_params = net_params._replace(proxy=proxy_settings, auto_connect=bool(wizard_data['autoconnect'])) self._daemon.network.run_from_another_thread(self._daemon.network.set_parameters(net_params)) def do_configure_server(self, wizard_data: dict): self._logger.debug(f'configuring server: {wizard_data!r}') net_params = self._daemon.network.get_parameters() - try: - server = ServerAddr.from_str_with_inference(wizard_data['server']) - if not server: - raise Exception('failed to parse server %s' % wizard_data['server']) - except Exception: - return + server = '' + if not wizard_data['autoconnect']: + try: + server = ServerAddr.from_str_with_inference(wizard_data['server']) + if not server: + raise Exception('failed to parse server %s' % wizard_data['server']) + except Exception: + return net_params = net_params._replace(server=server, auto_connect=wizard_data['autoconnect']) self._daemon.network.run_from_another_thread(self._daemon.network.set_parameters(net_params)) def do_configure_autoconnect(self, wizard_data: dict): self._logger.debug(f'configuring autoconnect: {wizard_data!r}') if self._daemon.config.cv.NETWORK_AUTO_CONNECT.is_modifiable(): - if autoconnect := wizard_data.get('autoconnect') is not None: - self._daemon.config.NETWORK_AUTO_CONNECT = autoconnect + if wizard_data.get('autoconnect') is not None: + self._daemon.config.NETWORK_AUTO_CONNECT = wizard_data.get('autoconnect') def start(self, initial_data: dict = None) -> WizardViewState: if initial_data is None: