From 05d2a8784096b7def57c19f324ba79dfb60d48f3 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Tue, 16 Feb 2021 09:56:25 +0100 Subject: [PATCH 1/4] Add new wizard icons and remove obsolete ones Signed-off-by: Felix Weilbach --- theme.qrc | 30 ++++++++++ theme/black/external.png | Bin 0 -> 1135 bytes theme/black/external.svg | 1 + theme/black/external@2x.png | Bin 0 -> 2096 bytes theme/black/folder.png | Bin 0 -> 346 bytes theme/black/folder.svg | 1 + theme/black/folder@2x.png | Bin 0 -> 569 bytes theme/black/wizard-files.png | Bin 0 -> 1278 bytes theme/black/wizard-files.svg | 1 + theme/black/wizard-files@2x.png | Bin 0 -> 2524 bytes theme/black/wizard-groupware.png | Bin 0 -> 1778 bytes theme/black/wizard-groupware.svg | 1 + theme/black/wizard-groupware@2x.png | Bin 0 -> 3734 bytes theme/black/wizard-nextcloud.png | Bin 0 -> 3410 bytes theme/black/wizard-nextcloud.svg | 81 +++++++++++++++++++++++++ theme/black/wizard-nextcloud@2x.png | Bin 0 -> 7396 bytes theme/black/wizard-talk.png | Bin 0 -> 1954 bytes theme/black/wizard-talk.svg | 1 + theme/black/wizard-talk@2x.png | Bin 0 -> 4303 bytes theme/colored/external.png | Bin 0 -> 1439 bytes theme/colored/external.svg | 1 + theme/colored/external@2x.png | Bin 0 -> 2487 bytes theme/colored/folder.png | Bin 0 -> 426 bytes theme/colored/folder.svg | 2 +- theme/colored/folder@2x.png | Bin 0 -> 659 bytes theme/colored/wizard-files.png | Bin 1697 -> 1681 bytes theme/colored/wizard-files@2x.png | Bin 3201 -> 3185 bytes theme/colored/wizard-groupware.png | Bin 2476 -> 2460 bytes theme/colored/wizard-groupware@2x.png | Bin 5042 -> 5026 bytes theme/colored/wizard-nextcloud.png | Bin 2633 -> 5228 bytes theme/colored/wizard-nextcloud.svg | 82 +++++++++++++++++++++++++- theme/colored/wizard-nextcloud@2x.png | Bin 5377 -> 11010 bytes theme/colored/wizard-talk.png | Bin 2992 -> 2976 bytes theme/colored/wizard-talk@2x.png | Bin 6161 -> 6145 bytes theme/colored/wizard_logo.svg | 2 +- theme/sync-arrow.svg | 1 + theme/white/external.png | Bin 0 -> 1255 bytes theme/white/external.svg | 1 + theme/white/external@2x.png | Bin 0 -> 2256 bytes theme/white/folder.png | Bin 0 -> 364 bytes theme/white/folder.svg | 2 +- theme/white/folder@2x.png | Bin 0 -> 590 bytes theme/white/wizard-files.png | Bin 0 -> 1444 bytes theme/white/wizard-files.svg | 1 + theme/white/wizard-files@2x.png | Bin 0 -> 2777 bytes theme/white/wizard-groupware.png | Bin 0 -> 2003 bytes theme/white/wizard-groupware.svg | 1 + theme/white/wizard-groupware@2x.png | Bin 0 -> 4278 bytes theme/white/wizard-nextcloud.png | Bin 0 -> 4075 bytes theme/white/wizard-nextcloud.svg | 81 +++++++++++++++++++++++++ theme/white/wizard-nextcloud@2x.png | Bin 0 -> 9394 bytes theme/white/wizard-talk.png | Bin 0 -> 2301 bytes theme/white/wizard-talk.svg | 1 + theme/white/wizard-talk@2x.png | Bin 0 -> 5282 bytes 54 files changed, 287 insertions(+), 4 deletions(-) create mode 100644 theme/black/external.png create mode 100644 theme/black/external.svg create mode 100644 theme/black/external@2x.png create mode 100644 theme/black/folder.png create mode 100644 theme/black/folder.svg create mode 100644 theme/black/folder@2x.png create mode 100644 theme/black/wizard-files.png create mode 100644 theme/black/wizard-files.svg create mode 100644 theme/black/wizard-files@2x.png create mode 100644 theme/black/wizard-groupware.png create mode 100644 theme/black/wizard-groupware.svg create mode 100644 theme/black/wizard-groupware@2x.png create mode 100644 theme/black/wizard-nextcloud.png create mode 100644 theme/black/wizard-nextcloud.svg create mode 100644 theme/black/wizard-nextcloud@2x.png create mode 100644 theme/black/wizard-talk.png create mode 100644 theme/black/wizard-talk.svg create mode 100644 theme/black/wizard-talk@2x.png create mode 100644 theme/colored/external.png create mode 100644 theme/colored/external.svg create mode 100644 theme/colored/external@2x.png create mode 100644 theme/colored/folder.png create mode 100644 theme/colored/folder@2x.png create mode 100644 theme/sync-arrow.svg create mode 100644 theme/white/external.png create mode 100644 theme/white/external.svg create mode 100644 theme/white/external@2x.png create mode 100644 theme/white/folder.png create mode 100644 theme/white/folder@2x.png create mode 100644 theme/white/wizard-files.png create mode 100644 theme/white/wizard-files.svg create mode 100644 theme/white/wizard-files@2x.png create mode 100644 theme/white/wizard-groupware.png create mode 100644 theme/white/wizard-groupware.svg create mode 100644 theme/white/wizard-groupware@2x.png create mode 100644 theme/white/wizard-nextcloud.png create mode 100644 theme/white/wizard-nextcloud.svg create mode 100644 theme/white/wizard-nextcloud@2x.png create mode 100644 theme/white/wizard-talk.png create mode 100644 theme/white/wizard-talk.svg create mode 100644 theme/white/wizard-talk@2x.png diff --git a/theme.qrc b/theme.qrc index 7d0c732b8e23..620a406027b9 100644 --- a/theme.qrc +++ b/theme.qrc @@ -80,6 +80,12 @@ theme/colored/state-warning-64.png theme/colored/state-warning-128.png theme/colored/state-warning-256.png + theme/black/folder.png + theme/black/folder@2x.png + theme/white/folder.png + theme/white/folder@2x.png + theme/colored/folder.png + theme/colored/folder@2x.png theme/black/control-next.svg theme/black/control-prev.svg theme/black/state-error.svg @@ -124,6 +130,23 @@ theme/white/state-warning-64.png theme/white/state-warning-128.png theme/white/state-warning-256.png + theme/white/wizard-files.png + theme/white/wizard-files@2x.png + theme/white/wizard-groupware.png + theme/white/wizard-groupware@2x.png + theme/white/wizard-nextcloud.png + theme/white/wizard-nextcloud@2x.png + theme/white/wizard-talk.png + theme/white/wizard-talk@2x.png + theme/black/wizard-files.png + theme/black/wizard-files@2x.png + theme/black/wizard-groupware.png + theme/black/wizard-groupware@2x.png + theme/black/wizard-nextcloud.png + theme/black/wizard-nextcloud@2x.png + theme/black/wizard-talk.png + theme/black/wizard-talk@2x.png + theme/black/wizard-files.png theme/colored/wizard-files.png theme/colored/wizard-files@2x.png theme/colored/wizard-groupware.png @@ -132,6 +155,13 @@ theme/colored/wizard-nextcloud@2x.png theme/colored/wizard-talk.png theme/colored/wizard-talk@2x.png + theme/sync-arrow.svg + theme/white/external.png + theme/white/external@2x.png + theme/black/external.png + theme/black/external@2x.png + theme/colored/external.png + theme/colored/external@2x.png theme/white/folder.svg theme/white/more-apps.svg theme/white/talk-app.svg diff --git a/theme/black/external.png b/theme/black/external.png new file mode 100644 index 0000000000000000000000000000000000000000..db82098ecd55fbbec2bd00b367cf6490d56ad436 GIT binary patch literal 1135 zcmeAS@N?(olHy`uVBq!ia0vp^DImmmtT}V`<;yx0|WCPPZ!6KiaBrR?#&i)lxUy- zqfzBz4d*Pa1zQ)e{8{yrH@7%pJX^w#+u0T}iAOC`Z?oqtOAe|( z@OmL&C&74+N&3+3nv3i=!v0HiB(YlX@8Om`GVMx>!;_#O5hg)z&rl8*twe9`XqM#ei#({|U?>!pfW+*%zl=?1?KbM_DEg?reKX+4`__Df49_3A@`54soF zyJEYF6@PQ6E3;~zYxUv&5g>iQJt6<-8=)l@qDD>ki`^o-HwJOF-r%WT{^G62Dy_)} zWUemhkQKVkVfnzuwN|ZBJmmK;A zr8Ml;{wi^k)rLW@jqj3IaO)Rl{>I{k%{fau<0F|lrZS#gJt5{;$O{Emla)?KPB%OY zIl=IO!$R81L(+G}gp3r2U!q0~Hf-lw_%7*chM!QFc(S2HTV;BoRYBjWB@v1jPc?ke zN)f1Fn!^PQmnm8)9LD;Of{*E6xAt*8Veo;+;^oHkkq;F5o(BgB81dM!`c=Fs7BlYu zBzt^v%tr2$+R80Ge_o$@c_#UcQ<3Cx+i#Y~_Zt<>@$3ve!SPK0>h>OQk@+X)dUOV! z;8RtYCg8Sd-6miqaK5Nj#ans39Y*6Z*?yGn-h4Tfu zsZu|>v}exRph+T3Zl~T(vRRn=WQ&()7{`IKJ035AGBIA4oDO*G44$+)xVm>Q&+KT$ zb3Ec3vm&BCd;D za?2b28B=&}g7ml-9y326=U%(@oq5L;o}W$&BD%aKx7^%ct{FL7K&bV=fAy;CMhpHL ze$Z0Y=1>ge_%rnqw`4$#%pT8^RxJ}WSk4qJ-(@c%cJXCI%-UU>uUtzN{aC&E=dw>< z-EuxFo?PtIvXBClxS1zo>yy%z*_)j{Y<|UNCi>}W((GlQmI9gnMiR`^GR`SkM_)7K z_x&B1syv%3^4J}_WhH5CT}H1A_;iB)e%rWgi>ps*#ZwNgr5?u~N*&)S_IQSR{mdKI;Vst09ZKpQUCw| literal 0 HcmV?d00001 diff --git a/theme/black/external.svg b/theme/black/external.svg new file mode 100644 index 000000000000..79c9cebf5889 --- /dev/null +++ b/theme/black/external.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/theme/black/external@2x.png b/theme/black/external@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04779d85945a9083d59168a462d6c5d5d757dade GIT binary patch literal 2096 zcmd6o`!m~l7snId_{ObhQHcgwiKQ28qAC?CRNBNo)k-hAF3Y;52$6(_Rh~rKwJJhX zyQMB|H?3NYR(EaPO1f21m#oo6rCQdl6rn;J>ayui&oj?o@XUP9=Y8IeQ0#jKx7j6bkcEV zbQ1SFb`*rmqJV)-0SZ9mQj|{_ssam={IRm zD(Q&*R@jM59!^U;;?@yY*qHCWcm1UadmDNNV@Ch*30|=#B|*Qa^*273(}zfQfSOd+ z*!tp(zpkorZ2SA!n@=T=iiTDA;iLG*H|{O+()o0`2S>RdO)bFw=P3TF9sZ^_i$qc^ z1y~cHGD{R0hEB#6gn=|`jBX@48DD?~X-*hj4RtQaMpD)Vk>0l256#usg^&?!B3MV- z7?@|UO8{YRYQfns>=q*AoSB-q;xtu^frgIMO-=P5__fGgXYJyeot!esN}4I}KixQ$ z)t&x_O`b}+jwxx3LQtRaXTc28#^ozxiFTEH@=-0~e*@|hKO}$sz$m5gT4`(O(C(#} z#ZA+le<#{K=Ok5?HMLttdM-$$%f6F-wCr|LvrZE+@o{fFbXZ2YwB4*dVMO06t}jwQ z1;+ex`|e%&7-^rzw`B!s=je^|ZzRV~Je7Epwb=nZZZ6IRT4e3TG7Wq?kG+_!H-4atYheWmxy0D=O@7IE}wK5FqWCs!;74``S{o5O~o%)#|UKY`CUx(MEwo|G`K7+ zUw0j;wl_Psl*uogNEpfb%~~eoy}di4q8f-%AA2_B@7?dqaQ1H7fSpf0mWZ-fY$N>5 zxlx4aj%@xo_rgl+d&cOnDN)Hrlgir4g!tkLEm2XPLO_c_qFtW;HACPgr$oCRqNuc*aocfq6>F zn&-6afS-x#L9E@3`_MbKL4#mFTx*WZwn!PiOF!dLb*MM0h^@;pf+@1ag#@t5r*{I$ z!U5BB6`MrWka_BEmci9rap&G)Z*Z|85VO-o_yjLXs{bLVmGp+;x&CWVz0>NcQN*50 z;?8}8S|Ga;kX{~dQJY)Rc^{7^8Q#g)6kJag^BMP-D6u&a4~}C)+KLJcBI&me(c)0& z=WM3ghK1qi82Hq%y(8CD(uz}WQX1~Pz#`hiZ~L%8wX}6}fWj1rJBb}~gUJ2$m>37) z6JzR6sX|L+`=TM_D6X6!)Ru5e)$E?Y-Ol-aC|HKyCl;gxt~3ga3+-|H%tAo-?j=?e zWXM7ls^}+&V|Ets@6q2;*s>=(qKlHT;KSxlUU_dcYGJY{TJsAS(X$laY{0QJ{;CMk zKIsV0AP2FeADrcm+W@5Oj;M*UIhbWT7}Ng^IUGH#cNOJYH-WJyN{ z>07h;0_GsaR|s5f1dH=pNq1N}YL{ukfx`HPi9KnSdo8p1|Dsn=(;hGeDIT!!-LCRo={{xV$5yOF%t+KIepn^`-@ zYv#;>vfR_yUHO+krx}`#6X-l`$tvL{;wj2@wlT`fv7#6JG^2sWv^qfluj0t@WcaFMHCD71N7U72FZHggp6(z3Q^a}8Q& zp-xdG;~)p|%-tHg0Dt4=FfcG`q2?iSaWw+S%<()bu;e?WRO{2Zv}D!p!{ z3pb{RhdfK&JKX(%@~BBetx&kUU~|W)e;aGN+G4#{baMPfQ_d_Pgj&Ouuc6+;|K{S3b@Plb(jMtfUc9Z@_7E!B&!^fuEb|{s3A8c* literal 0 HcmV?d00001 diff --git a/theme/black/folder.png b/theme/black/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..3d67f6ec2f0a5b0eb1ff8661a54f19c25ae18fa1 GIT binary patch literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8oCO|{#S9G6>p+;XC${(pP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprYrVE{-7?jc;!$@*Q#zalOdR z#>~Wda5LwTHB5)2JSOC{^iEu4=rKu&gJn_>)7veVua{5Kk20KT{i}KA%t#|P*8k5A zNJ)g+STpm9p6|%xk!jqs?51heZ~HYX^tTCLZ2Z++oNzzkus>5_)8t;hBiw#QRs!Z0 zJ6|~bd9Y*=^H~;iL-B;$%O4!qiDz!VALnr3&DX{J2lHjtoICi65V7w2!Rujpg5jB$ zSu8I8o8=TcxiEftjaHOiEQ54H)Hfs9f@k~g%-UKjXl%ThKW~$vqf^AuP6?ow89ZJ6 KT-G@yGywp9Y>eIj literal 0 HcmV?d00001 diff --git a/theme/black/folder.svg b/theme/black/folder.svg new file mode 100644 index 000000000000..9289fb05d74c --- /dev/null +++ b/theme/black/folder.svg @@ -0,0 +1 @@ + diff --git a/theme/black/folder@2x.png b/theme/black/folder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac972b9a830b261184ab4302dd6244988bf7c83 GIT binary patch literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?5DSP*8EY;XfI7$i$v zBT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq65IU|>Av>EaktG3V_~L%%x#5)2P- z`W_X$^i<$9rv-1U%jQ&#iB7VvbJ+ZtT;ELyX=LK$Ox>vbR`1y3pG(4jzI?g;SZk{D zBo$96+LOsThxz+~$Lx{QkMDW7bZ6SH1+I3Jf*0}*$nC8Aq!;|= zxpaZ)R{{B}5f66W2zoMCr*Yv4>zPc>6aOc2^SIU>m5}KAb4W^}i)RP3^Te->i4P}E z7myH>snl#tTsU#Mh{Usxxqs`g*`D8D5T0zlXUhSx_y+j{-#7NM&fCtNV7z7FfzR8R z&b66|RQzMBe<>ER?m!XiH0=#BjZe9B!V`8fofaK5LdlK)_na2FdHnst?&QYzd=?&j z?*(_r-ujUFq#^!5dP4Dn#-a%O#@V&}k<8);n9uwBWdHigP_wjr1w7bQ@~fH7-EnPU TnsK@m80`$6u6{1-oD!Mz>%8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11dB;T zK~#90?VVky7DX6^u9M z*=63DZx1Mnq9}@@D2k#eilQh=Gq}Ov_!3}_L0y}i0Y0kndX1nD_zbw}scd%M!-nw+ z{$!|>3D}E&Au6Sf5&X-@%G-|n+6Y1tqEZM?Nb*ub6q2-*P=zEbC1fEBMtvXmZVSoz+oq6nGbSk8&fTA9x+O0=$Xb z?1{J$nbmJ6oO|;>b&QZBz~Y?iw}9t>)5wT;gYqMyAJ~fIu(E5O0yY8PDF+e zA!SzXIvGOV6}MW7B{+O!d+)Ar?omX_HsCKi;e>?`A&V-We-4@04FX$$i&X<^3a;iM zCy*3{Ehd_chhB2$AwEXPY+#MW_OcNZ^`i{j&eSgh^Bu+Agb|ZFLW*!H} zLfXaHUT5F!DArsdF>RE)6LW3s`PB7Nd*C&H%D&u`DkF57-T* z8cmyr6qPaHsS3Ie$LnJgO4rXY2;gkCO^ diff --git a/theme/black/wizard-files@2x.png b/theme/black/wizard-files@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..30a6ddfaff34e8a118d1551e178b183e3090f682 GIT binary patch literal 2524 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 Q>C8|RXLqL?dxBH`0aa9V;Q#;t literal 0 HcmV?d00001 diff --git a/theme/black/wizard-groupware.png b/theme/black/wizard-groupware.png new file mode 100644 index 0000000000000000000000000000000000000000..f560466a2733c3ae3fb0621e33f89e3a7ba49e0e GIT binary patch literal 1778 zcmVz>%8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H127gIJ zK~#90?VVX{7F860zm@`F3kV2^R%jKafCfzkwJLFaaCs4p3&saxq9#5VHO3bo+~Ptc z8WUqQ(Wp^zO~fUrQBl!AtYWH$xDYBJOF=hxz+#}@s`ojf4!8~I#w-z)(hkhAIF4K} z7I+ukL{whN7F!!l#+eMPCB0-ED)(C&Q)U?le21N6l;vJ4Bg-K5zzXapqb%217+>bN z3pdFq0egVv^oN)ojtBn1T|!F02dR%TLoCB>GRksc+5^o3Gk|{FC!>UXhYflj#(g5n z(hoGIJ6yr%a=}8^4je)~aEUELJ~ACR&b1R2oMXd?uL(KXwF3cIsdM?7km;@+2;gWN zMtn`k7}pL2V8th26XGK!8%BIh$UfH&1YpIdA|df965<(qZ5Z)2A^TlB5Wt{5L#%un zYoy195nmIs%e4amY`0;gAtk+IfQx~%fn$K7Ko{^e@E-76#Q$$g$uARjxON~3qmf>8 z*c6?9;8mo&UX95i|L;m3NgNeNGy^{ne}I1jSB2=?U4t$ga%0lKxZo&YBgy&<)snI% zfxa~5g5=?`OC9hP$p_j?@I-=V40NU;Q%!^F!>kAZL)xTip&|Skl0_q8{m8 zXapeY24RVkojB49%u5y$_k4nR0D6dS1q?y1=V>Qn2hujkEO%fYgb!odssnCC@2sqp zRY?CP(==ngR=n2I_FQ1Iq0LHpg7g}8)_IoXf#?E8Ca`&;fz3*JIe~qznT|Y@BnieM z1G_&Zv{@-(jk3&gEw!x&+zZ@bXj7|aGTG1%Z)pX#5FLQOfCUQnZi!(lN;WI_p@#M} zpmyM;7{{#uK2xx_PC>`_3OdwCV_sIf(lK%PT|viI1s!Unk&s_w9J5}@mPWPNt7)rg zBxGoeW3*~S8k>&|SJ0t`c0wj1lM|x25}haF6BKmJQqbWQb-=kucdwR`#sQ@HbQ#G$ z>2<(^HQ1{rdw?So*!PZ!z@5O)mPX+UPPJVngAv9O}vYNTj5#oVt!Pb>1_|I}1b zJ+j^Q=lHW_YgVNPI3giGa-|J*^2t| zOx4SlW&7b1w2wISaYejd1By3`)o*ogK(--fNM& z%q~;Kt`ibOJ+isxY~&1TMCLj*4#)&ce(Xoqux~3+2L3?a&ae$R6AB6n3JMAe3JNmMziBO( U#`I=(c>n+a07*qoM6N<$f{cnEh5!Hn literal 0 HcmV?d00001 diff --git a/theme/black/wizard-groupware.svg b/theme/black/wizard-groupware.svg new file mode 100644 index 000000000000..f7f31340b043 --- /dev/null +++ b/theme/black/wizard-groupware.svg @@ -0,0 +1 @@ + diff --git a/theme/black/wizard-groupware@2x.png b/theme/black/wizard-groupware@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d544966db57302044668b35858673176e082a2 GIT binary patch literal 3734 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 oJRXn7 + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/theme/black/wizard-nextcloud@2x.png b/theme/black/wizard-nextcloud@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0fbfc99f048d0ced8498dea966415c0c71803a3b GIT binary patch literal 7396 zcmbVx_di?z7jOuYnnBg3)TmWeqZGAQiPnxCQnQGv81+HaR-Me^nk{P7 zh{i~(YOh*RBTv51^B+7v-1oh&v+g5o2iVc^i^;mB5V1CI?qyCqZMt^S-=y5c&k zYKyTmT(YT8@rCsZjYEOnon_=(zs=jexp_f{6s>M>7kmvr@wIFnW-8Di#R z&iSLaSvQ%@LjE=}x6!xZUe%$Cu#LPTFR2v91&{Gj`283lIuf`1W>ACSj6ENC#@faQ zy{-$kU@QV4>7!^hQnyU1-X@~=(Fk;*9h8j;@?@pMic&qL@@NuZz2a$B(^# zT{oNo%CA)j$3aASL+EbwMwf4ep0g6(_uOUIO&T);b)~Be3{66IZ8pzRA-ZB;*kP}9 zc4*#Xo`O|FhFv&xleGO9iZdtx>4F<{p3PedB5{GQ89JC`cvdyN?>+Lp^pB5Sm(Bx0 z;wH0YTSlA<5c8-!kPdJdfbz*=-RzhqQEAIWB<^}LU!bV1!F0rf>~cUni#spS7Fw6G$CVi3`Rm`^fn1mu_G;ZGSjF`zu~r z7slZu6^<7u{=&GDP1k2!d|Qr|W!e%zbpY{p^R=5y`3!F}P=D?~FFx47)Y7Y2=2_7z`E#A>TL*OL9<{v>D6uF?mD^y`uktB#WG*D^RXFxBK zx*Kj(*P5=D=@vnwgN)kk>8Kq=bqd@g}VckKw(S@l6P)P zxFZ3_q(z-hZ=N;)L2+^S@@G$iV@v38%H)3}Cc^w8=l&%}JF{MiI(au&)rGz5mP|3w zpkxQ!=CgV}=AXh%F3kW(wftga*n~S{pg>DDXHJaB2hnK z-2D1wy;_4V?d(I6$L@f(isZ)2hx~p87*_(f`s|kAj7BhT7xFX6-3Pnycy|I~OAhjF zj7j|*MKD3`;0+%Ll4b8M>n`McLMqLt0L|J zQ`4mqZ?NNu$+j-m2j+Hn2VgjT4ew?ToD*M^uZ0?{2DuAK$Q5pxM10xXoVzwroQIeV zUD!%{>-zG+VXCGH#mvYa11x(@P+p2O*>8$EBwBT6e;w5Q>bi$YnXkdP4SkZjOB8Bn zB50bH5BpHU%zZG4+#0r#rb4fz_sqTJuERYz-B2_eJ>^@krdX< zT2K=pTE^1Y3i39s!C1{>@b={EKIeZHUg{Oq&^!S)SG!sd9L+eXrCij>bLz~%6Xlz3 z(a2bB&!?LU|2{q%o5uWQojBQ=H$dj_NL0#aR76D}w>$X%E<+}USxpQ&=k8x@11{9Z zZ`yL-d$=@GrI;*GgiBkBVFHqO?CJq7bB~d~dl#%%x`6j1%eI?f3?_)3O7n6QAxU)mnuOGSqWUhKasrCH58IOU5t*74yn-l z=r`j<8`h9=g@zbBEjL>LcG{U6!_=~NRAhbg3A6!>BGycun~j3|?RIx&a0iJue(ZBh zkl(FKIvah;Yb;?e&$O9zhZ};r1a<_pxt&!87U-q{bOicVWrYmVu5 zXUv5{^{sPOedc!jenv!3n3!&dIvbj!h8HfED@=3;bB>HAo{6JdZSQm^yIKe+Z??Pc zL?Np;io%4%juf2?1gEOX+TEoCqtOY*k9-flY&p}0`BodDM<503M{5=%rqJO?o^bSvyy6a(sjbvKM4JhG$hZ_IRn{kYO*prv6!?4mKTK^ zbL^2^%KLwgFGtwtdf!iLv+G>A^?8L2NX{&LB)-e+Ft$CQ$zK;L?*5MPW3UfT+oxGm z#dX*>N?Avmb+IN6=*~X6u$i*8a?ac7t^Y@K6TafmjDa@Ywl&o5txl-FZw@NmcvLOr zMYDLIA`%ApXm$4&>NOL3ru<-gb@=m*z4q?!(WL**v`VVJ-IYgzNr-0K7YLybs|CEh zZ;K-}?-8K}TGe_Xx+R4#MW>nW0NK+N_o8oDhJ{p5N4{sO^lsTE>yZW}qBX@Y(mM+l z8Ryb+N~165$2ptt2g4&si`eD%FLzZ=U*-^Ae$iYo?ByF4Tio!7FTr$QF?BBh$cl~6Y{oT+lRSm)@?kEe< zm7kRVsv1Bs@(6@sYpZNPLiKxB-NHHznV1ox@@_9c;^X)&Khh$`xw0LuvHLXmI7oiI z>IY_5B;I$#0>#;KOVL*6yLmxO4k=ngo7g^nX^Ri_1Q1*DhP60N&VWmYMZKS*jc$2e z#ot8dn4R)9KDg!-n_T%uX$gu|bgtb5%}-)PA{cJYByTgY`c5Sk+Y39_&ZaG7$qiTN zFCdhO{F|=~qs(wjN!OhHCX<()QgZXl6p7b8j(gEAqU&W!Y8xc& zG_s6tM4HmsD?oz7+G#Ilsfq0V?P;fU{8nz$z{ z;G?qM?kIVTj@W&AhTt@j&d(QOHzkFwzweB1f=IwYT%CyTX7}anGX}Qnj#QK!*xWu$ zSe#tBP)HHwS}@BP{YjbAxA8>kIX9JzeXx^;+-phj7`&gKDF z%HMGDi%}@ud~A+D^04}DhLz$L)9z1zq2Y$K`&LBrFJeCEdvmZag~V-=EdO84vlPBFqQNhQW<-T&&f+wc!R zY<>qIfuf3`;rxN_3TrN!5Z}~PD*7iC-GdiEa+=HjRk?briJJFvKEYP6T)w1iXjrIi z3kVG>T8-&`${z@q3ZXO^XH6Z4+NC*mupHq1VQLo;{X*@4f$ceHj$Vqkdk5Ruw zkU-YqeU&kw%%y`0K_6Osl7G38<#AcOBvrxET6f{s7mkr*M7*yk^s1DnYnqtlQ)m0P zyDC?ozD|kE|A$mgr5JM>uOoGBoJ`H-GF;w5^A8U=!Y7E@8F9Ris7zU%EC++_3k(80 zEB@LC!*ta5dB6RVY|J_Mbb;Zi7>Z(_ze+`zah={gT=eCkWJDar@oBpT`ja{8n(co$unL2@(W&74x^OQv@$&TT zV-lsfs!D`pdO45fA1yop9TI{uB`W`^r(q7MQ^UXdZS@j<F(c$>_5{@lDNObqVkhtX=J zwqRH6F}t3*5tdtE&Ph9p}e=tIu{|oWQFTo7R0tY z*2?ch#aQ$qilA4E;F8a+>T+CdY&jaw&gF6PI_!x|G29VFJO;hgIJI&K?nt`GjKI4@Z5ih63HM)~2tc`xiHkiAGT#x<*+)VSaq>j4>|_JcX!xSbut?sv0RnvJU+`EgrbPqjcJN7JeHV#+It2jg^`VsBdqZ23I5s&8j%C2~ack#v6KnP}ZY4`4P_ z7~hQH_(N6)K0dawkwntDf=Nv!LK0=}!4+yvNo8s$A6S1p4gr+eOmSWgTbYOeDq&OF z3%)fR%%_uECB7LP4y3?=q$_8qttGbZ%QySo=jnb-G(PnLoqy-lVjdfm_L0I`8EGQU zWYH_QVBY1$qv_F9kmu4OwJ7Mg@uOK0OGQZ67F~Q9{)dOMrqxv>#LQ4Dj{A?b0gEN8 zPIu(vwECW#@=|Z%x#v0%tOtm!q$zK#?s9X<(iA9SYlx@>N`;z)-w~teW#u- z+fL#*(t%-f#z5=xXQpvayV8GBCr3~HhK598v_oW3H;DZSK`pO z9KZEp3Lr{q_9>g zlxAGc8^%6!ye1hWX;X6VB7$aAqEj}P+9e7~*VDq@UOVqvhuOkQC$V+R9mHJB_5f>q z;zI`M@QM0$*z8#a`7v50q;45cOaU8KbUas*cm8L={>gjS<(F-FI;NY((c@A`ff?w= zCoP!Nss(9k_Vb*ATqX`A!`|m zjnCfkmHty)o{GPB(%*WDwp$i{xhue`fsQ_FTK|2fH<4|RcfIFpmEw>rcf#VC+9)&H zH$B%8%L84p4Co(!NJ^*uVevXDB@%k5u87{>%LtWkPYWvBNv=Xkyq488E;p-t>qmQb zg#tGm(<2mBgXCAo5D(>mcg?-x#jOy|q-f*rUns#amv6YW>=`$%vQ7jGXuQ^{!MdAY;KqsNzv6J-^W%^su&vdj6@ew|%O7c7Us2vAuEP#v zjZ+6C)>iZU4l#?sk1Lm(s#GCu01E4%)pP9IM3%oyR@=of(ZwkfQ}}4o1LtOzBAS6r z+sJnTsHXwrU&{`$3#QY|Z1|4Ie<^a<<)RGQ?$7VGI*5+BxwIb-gg#r^gHA^-(t{gkR9xwOX3>Sp5U5v^twVO9_o><%W4MR zz1u{&wJAH4Ob9a8+Os)ZY^YK?6#w_U6DvPCOD-As03@rZC?rNJB>$tINcYD!X2s$# zFNs-{zvJhye_J{DYP|5t4AHw=L8vYDtnPKn#UDml%}&?F6iN3yIZd`x|IH+Ez29H5 z2({<@xW|7i-}0euRjJ0LdO~C+8>#Vu60{e_?bo6V`N@ zIM4=+Q0wGs<0r)-Wz4i)8(pth&&Q$3*H_EkjB#x*D1l|$i|n9kd+C7*iH z2htU4#6jd#Q+;y^Gw*zd1X2eZ3JgfGlC!YdFlxqhH4Y;9H{c9(K{8_rqMMZ3At>i%V<8jMN*!-#28p#KuWP)TGH z4jr6k`C(|vRY|T&5ZX&L4nmJpK99~b=0Y*qau|a}7(Mhzx@RCwDPd=A+8oz-$hjVi z46>2AKG+6iZXli(2Qlvu_?Z7C;%0XHcXyIF^q&=2LK4#OtDZ-hwPDpL#an|AfD zkK>l4I=l++FF7jNKrm_PjnjYXa)7%GW*?VAN>BV@Z9r>d04`a7{UoJ)fZ|_EVgZr zReWlIY;HAu_vwywvl5J%HL;?oX<#W(0NwdPiwQO`W$`E%IOCSpFF<0Ht-O~cHclt{ zFYOY(6u*rRz&EhuM0#vogVE1@z(etA_%fVcwC(|Yp|-va;j((I=9AvC`#qNKc8~5L zC=%-g|EO#4A#F_gTDnYs-^=T3D8+zrDpoktJPD->3ZrZ_S>d*kE|{v@|KDO9PXQUn XvFANW2Ch>llmHV0bNvQg__O~5DK8R% literal 0 HcmV?d00001 diff --git a/theme/black/wizard-talk.png b/theme/black/wizard-talk.png new file mode 100644 index 0000000000000000000000000000000000000000..5b512630f9a5957694a12f4816001355eb21c800 GIT binary patch literal 1954 zcmV;T2VMAyP)z>%8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H12QNuP zK~#90?VVX{Rz(zmzrU?0P#WATRzQ}D0b+t;#6nvj(U=%D7!8T>(Zn@AxL{%wtQxnd z@x{2H5*3Ug`rwlqR+s3LCdj_IU|STi8?*)6{yv-^(b{|a|98$Tx7;r|A?f9xIdkUT zxie?ZoC_Hl85tQF85tS+&2y6xNhGmXua=?7xHQ*3pESvHh@FuW;aBoa6 zOaPt)e#Cw!M9F@j38=B$)}Xl7C_@ErQ!$KaOij@K2*+QFA$@#$N z_&21sY(!>;sbVfN&-ZOSTha>5QL~n176BdjH=1qf0()%Rk54} zmID3wHFxiHpuPZ9qjl)?; z0ZCGD=3ji9EE9T89KI@VWPyn3JP>!$7}1Fap;7>-W^xTaPN?X ziPb;JT4a%xcDjI%6v}Bd`LV{h*=2Y=?&lgnhQA?+ z8?rPGt!zZx4=;{ZO4EdJzStVg^hV>!|eA-=9HXGgiQX^IFNNV6DG;(Ss;ZGu8B{gnR zZee76NynB95Ob961e&Yk?Z6h`CLB%kQbrDWhir0PaU=e7u!kx?;pwZQbC3m*Zv%uV zu{pDBo!|HlxD5EzQu%4dYre@G@-fNd_`fqlku63RRiX~~0sqDbMItkly4r&{0IWp( zNLM2s<23Lm@C@R%sYUOF{3SZaJyfVc9EKqeW4*x3{5PA$6yQa4W{^z=_Or%hB;#{P z9}_!*7(FiOaV2mMW_v zG-JOL_5#lXS1RZ|0SN#sR_`?mbvkDTa2Ik19>C1_14uaRYT!-`j|9X}fqW2bC2%-K zpPQo!@Uo0gNF{R2y0-9dRpD>rkv)(KWE-FlID~i#nvo*_+i;(VvjSNh*CF3GtVU*; o9|Ipa)+Hk&BO@atBjXh3Zz_71k5m8iQUCw|07*qoM6N<$g5t7uuK)l5 literal 0 HcmV?d00001 diff --git a/theme/black/wizard-talk.svg b/theme/black/wizard-talk.svg new file mode 100644 index 000000000000..f81beb060fdf --- /dev/null +++ b/theme/black/wizard-talk.svg @@ -0,0 +1 @@ + diff --git a/theme/black/wizard-talk@2x.png b/theme/black/wizard-talk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8f77d93e559e568919888b825a0d9c906b2bfdf3 GIT binary patch literal 4303 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 literal 0 HcmV?d00001 diff --git a/theme/colored/external.png b/theme/colored/external.png new file mode 100644 index 0000000000000000000000000000000000000000..21bb821e945a250801ecd01e039183ab3b40bcfb GIT binary patch literal 1439 zcmeAS@N?(olHy`uVBq!ia0vp^DImmmtT}V`<;yx0|Tp$r;B4q#hkZueRD!WMH=>7 z=PuM`=~CM?$;Et=!Nf&=*^4Izxz?F%O3IwNBe2|Uaa%-O$P!Os@i!hSAE(cic2R!n z?!?V_J7CwbR#nBu)~y>aTq?V_Tdz%1LDuU1x3ksX?^)jec5dhQlzo=p_slF;=Vx&g z0HT&BfsyJHB%-wK{x25)a%@d-q{vx~>f81a87u7G#;j@!nw5}Zzw>6@gPUtES1Nc- zt-W8I`7E%s=^E#v)aZtVYl01r>MK6jBl5qc;d0O)5vFrqp37Fgmyd8>xR878wS^fT zDd$=*WGwoS-PHH7D^7lkpFmGe;i8N8(=w;;{e5n|YDhf8-2hj?^2JwN4;?x!>dnaE z7WHP*BEQR%-^XMesX5KnHcutQ`M~WZs>}|rd#_xTSGV{caMX}5H$Kg&X>fO!?u|G*PU}R=L_lnj>_-|5Ty)j#)32 z&d%E?F)ufs&8cDySEUYb|F-o%?mKUZ`gx%H={&RYI!C@Jbq==jN!dSyGfr8_e)u`N zN>ygZo;fjx9d#x$+Wq|_H=TL>1#uCsH0e?yh#>yUr`Z*wCL z78sisg`H}MT0J3Q$IO@tmXPpkE2k_j(@KeBy9N|qIbl)H{Km79%Qs2<3-53?I`ExK z^OOabPR09!ZhzKJ*mqHM-ARUc?Irmote1`58+{{}3yJ>+YHqtXrBqApN2p@$V(l6G zzH)y^y0&u0BmY*G=i!F6uPt7ln&DUFWZ&|IZ@t^fu&ikkyC&8Tk{?FOWC-y zK0lMD9=R(*QE zz%t_NR+IFMygTRG{qLG|ncvxWM~KN))9SxoSN`f9rx>cT+BfzHu?5``W)fJ@VX%L< zR}fprvTed8_dHUz%?P?9!c@NGKso2RS!;TP443TCX6XvL)~~9%)XK;!MB`|#BE#;o z);03CdmmLlwlrxzX5`~{_w}dnu6Nvxi>9a_yT``s3=WM)@YXY{dDc*3LQ0y~tS&U1@* zmHh0jA^a;^AAH(rbIM}>~D1l^fI~X8+=)N diff --git a/theme/colored/external@2x.png b/theme/colored/external@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9e23cc497900028700f010ea2b9285a24243a1e0 GIT binary patch literal 2487 zcmc&$dpy(KA7_oI6cdt5*p}R;Lb)Ux!*}EwV;-j5aw&|}(4!0$VQfYh;dy?!<&si! zUn+B%P)%Ykd9W}lrKC;j`TFbk-|yewdA-g#uk(JN_xpU#Ij{41olJLEN4af#w@FAy z$l(C2C)oFHRvBrqt@FKK0(P>o03lvNqB(oBO7?$mGX_Cbvb`_)WK0;Dayl+lfgHOkXqGICC6n#3j7ZhS~Sd3S~osW}&*I%hF?`HjS`RkC;xg<

bKe&)j9AOJ@B-;yG7`qMb2 z1_)flk62AH8JbfyUQRQ_H+Peb`{%T`_l-$?&3kvjqf^oNg)jx76LG_k50Ai8-#Gb6 zeKmVS@y#4Z3EP*wEmf)M*+4ry@0CKP4-~dV=gU=e5C%b%2To*g)Tx}SzzGE)JA<=> z%DE1lkO%rR%E(Zdm5!db`C5>*sL!_exG1F|Bp)_nAauZuIEz!}2j*tm83K%4orTvT z^Y15}drL-9H)5CZMIsvvFF4CP=Fh;By1$JoE1AtPI6niSbeG08#A*((v zmw2(k9Wd*#4o32bS?8B^UbEKI8i4NHC-;`%ee1-7R~QPAlSU!5|7 zkbKxW$-X$4JHak|xeKM()Tgp?xy|ZlR7(d=oV#phi`6QQ7IeL@9(L#|YWA_$Dn1L2 z`joRH<~oj&l%TwO8MC+3zuE{NxpReivJqs0@3V&=H&Y1NhrIH!bnMDG| zAzbNqwv(Yb#!`yZFH0q-J|>xv`sJuz0b|VsvzeO)kb4c&+yWC4nd4|skczI3Oo%JL zqlTo3rt5vZO^>yBqSW%g;ihUhG{v$=UT~AV$<6Rw7OSRIt`6W{W- zs?6;NvE0cVQ+;Z4yqCmGK?nK7)G}(Ujb{!>Q8~5me38PcvRpB-yjliRJQ`% zyjR(#>qrg8H|?n!=0a&-4m=p>68@befLu>U*XEcWtrC;k56zp$ zQL(mKg$}pXm@SpwtL6=Ff6nwu$;(oG?;TzCo~ynb7g8r#zHvEb+$4#XjyC*oYt*nM zjd6V8VgZb0L%Y)h$dsM!R7`VXY+)#ih~?NAeXg`~CVXBG2GJYp#g_WNpZ#$I)`YQJ zBBGLc?o+3c+_b~l>F7SPu+=7f?omzkq6?BACb!BCIzkE`(0-8*a!fFJINwMn@P?lF z=shDL`N{irdoHRHqZI(YW~(r@5Vg*zR^pOE2i?>y?gBC#Tb9nPO!&w3tYv#c9c_7o zU6W*tvtJs>CB1B$tdCqyVoo#9%N3A(m5)Q z_jBm-88N?eL;BbBeKL;H{EKw7^W^)nD^gb!xU!+F9FHD)l-=efAKZ+Sz4TI(5?-I^ zV5_CwqK;d+b4_?@W>0jqUb2HG&SgGq-5nz90xtRC1Kxst%6xc=J3S%!F(TS1c@R86 zR>kGR|qdHT^I|VyI9ca3|h5;Rxga&19<`^n_^FwB7@zIgWxl{mr7n`HhjVi zU_FP;<0|O#fOlC&HK<*1s zwtU9)8@gsF&4;e!y!+iJ#N`tfB%@U-GeArD zR8>z@0z&yil-18-N^Lj)N&b_I1I7YI>8(NRdGigg+`5hO_rUreE)#qWhE@1+6?**E z_Z1XBH`XqMMswMRi6a))(Z|*3PM7ZI8js#5|HBZ4EK!#|V=e{6p+;XC${(pP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_nlRPZ!6KjK;UOZ2b;92(&%S z7gJ_gvXEustZ7;SMO`K`Dx#m*%uhNN^_h4yWGr~d(l|}a>v4+af)AgRRgB`IC%=EW zXVbCIr&^_%U0ht&D&F_|b5=0sTKkD}QIo@sobSzEW4f5FaKrqv2jAu~mV_>2=b1Ra za%!YkOv%)@^PIHB7+5UZzQ^UxYqGFt@%hUse^L4C&i_yT?Q?BRxG?R7$w7zgMVDEb z*LL_x^O(rV)=%rY&COz-n<1WC+|g5bReM$Y%lidZzd0UC9X;&%^+M5y<)1cGZDl-Y z$QFG(;k87LZ1dXW4W&HW`VL+*ykUhYm|L;I0T~D!HfF$7$+? + diff --git a/theme/colored/folder@2x.png b/theme/colored/folder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1f79228397da7359ac171c17253f03f4fed6306c GIT binary patch literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?5DSP*8EY;XfI7$i$v zBT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq65IU|>@4ba4!+nDh3gZB|I2Oxwrr zJ!WNkirogBWsa+LTm&`-9?VpccV_9lCUo#<&(xT^Es?EZmSRyIM~a>I%(VV|=lS(} z^&bx%PVDkj@tg!jz9BF7uGsqI$?L~gei@y-)~mm(Yu00#cXGY9$-;MD?Va&~~?d!6qy?=Y&_v_^e(Iz`)Rc*|X-NG#Yrq1tdyP|legK4_u zj{95ve$_X>J~vrKf6^R&6Yu};ZC0KSDxcS9>jH~M&r7#{aqiq2s(w7>O$;zWF?hQA KxvXS|IyNc>@Bjc-payvW diff --git a/theme/colored/wizard-groupware.png b/theme/colored/wizard-groupware.png index 417629bb9df180024bb2d58c718c89cecd94f28e..034c078d55256dd76df39c729dc0e077b4e06f70 100644 GIT binary patch delta 10 RcmZ1@JV$tf%0`n4P5>1@1Bn0t delta 24 ecmbOuyheC}3NK5slV=DA5Y%v_bZk_t<^%vyyasFl diff --git a/theme/colored/wizard-groupware@2x.png b/theme/colored/wizard-groupware@2x.png index cea41d3c614b1f513493cd9d66781090076cd054..1aa5999a0031651dc17f64b30c457f1f72e134f6 100644 GIT binary patch delta 10 Rcmdm_zDRw7%0`nqVE`8a1I+*c delta 24 ecmZ3azDa$83NK5slV=DA5Y%v_bZk^?6b1lRRtB&D diff --git a/theme/colored/wizard-nextcloud.png b/theme/colored/wizard-nextcloud.png index 321f83e31ab4fa2c6b0955f4d09076c6381ce81d..1f7903a655bc46afea430e6afe002209d6d1d288 100644 GIT binary patch literal 5228 zcmV-y6qDpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H16ZuI* zK~#90?VWp^RaM!?zt1|uAQw@2wJcLGFMxze&73n_LL`$g%TmJ>vGOf3dBrqu=$x57 z=L~A`rsl2G>NQb}(cY-MrRad%&YYPfEd;f=q=KTaiQJjl`+5I3gWTqN&e~_68Ta?| z;RBq@Z~gYne)e8#?X{jq2+1!sH4$F^)X_*}5Qa~q(g)RpLHc5}FRF@~Eufnbc|Y^F zu7aXh7_@2)6DPVsAHqio3EDunC)sceo;MEBvA{{du|RQ_YCC{`Ap8|&KAw3Fr*xGq zt0DUn28eAOHAEW5q277GslZV_x40Hz9-cgmme%5k=W}}>DZ&7;MRMs7R4xR$0Qgiu zF5Uor5YY#Sk600qhi*j}Ah}YV8jUB{0$-t^exAA*HI-CGpAFhcSEhh|pNGsL z0bxwgR@z49BQk?{>AawwbVb4d=`2qDr!n5`WbPPUiN_G85s$47+DKO-43Lg;PeTtj zG+m0y44_ZYcCus}%1=0?|4mFgZb#5&x&mQ9nt zr{rHj8!05h0NIn|(jln%GjL?kRs!O6yvS)dB`bqAQYeH0vI{5mDU2+}|Fu&Ej;zBp zj--6l+Mt~j0^uwcfYWd&hG+Q52M2(D60hhPoW&mt+DRec?;XTZLnJ)_WDv@y5j_x3 z4gxixJ2A2aPd6ZD6<*^CoKYKm_0yuqhTe$#%tvTI-Z50u^zJo|t3SIX?`=DaKSoiH z!MNTr82K2U_5mpd@i4j(l}!k%aOG7_SiRQIJu>zKB#|x!{SxRYAR~d^o%r?!U_Qcg zxREFGGGI*BJ%}>N_jbA_HB`jT^}Utq#RKq)CLoMMIT`58-D@kzV#KRO?h@eV)^*!PftP`Wh_1wwm5987 z=Wd~A(?$SX(~qV|A4HDC=wMU^BaB8FO1{U9Di>23z0bO?)6g4fIv0^|17omuT)Glu z7GC51IHT9)s+OB6XX!wUTmf=1a6qnR+Tb0OyV2s?aE8BcMbSy0gwdt=>w6b2Fb~y- zDB@{uD0@3Al^Lmziz8sP@Zp7tcOYPM(OR<0}A=wmzJEISz4 zaU~*GNu4D0U2f2RHt|yHB+c8eX=uO>Ue-SwM9tpa)daAF+IEq zWeSzChdcExr|x(RF9ALMvBgtJmT{IGi;3I?oaR#t+wt6CoxUg~(`TXj zE8t*%Y;_6+y#w#St8s?z?8p~779ck*JcP#LKLB6I#houGGpUGPi->mU^NG|GAQOCW z(u7b>dGse8_F@}Vp}KAwDnG%WuJ6-S#Kw2nOQLQjB0uuMN3JZuEB<;%#$K>p{+>B3kc*cIQbfje+?C@Nw(f${AF~ z9&htAH8l}d4!9R6i3>bOr%SJlP$Kf z9psEIks%}=TMhbEGHFX~F^)v)^LxFLSQ-PWEw+(QPRG<=)6yIJ2S{~#B&g%JBOfUO z?;)Jj?uTc}w=K7E1r?>sENl8lMcH3~t1PQt_~E~9Za4_cBR~(!ZR8P6Qk^Q>_tm`v z#HlU9)4R#f5(YmRfQSQtv%DBln+xvdQW5)wMZNq`5xW!klRZH>k9!(20kOkP()Bl) z72%nCKRl*p_70FppUZ*I=F^pL2-9%VClT3vI&i2Z)vcJOA6nANKSrhkn=Ppw#s+sh zi6z4jeqc#6V00K8nl9b*mEF%loK!!ItN{+mvnxM&9APWUH?61%*AS1*w4xOhiS%`# zH`x)B--7n1>yB4j;yrpc4&1eFYxf-_!c@9fZ~%M-wf4(9Dp9Ys@i{U>t=x&5`Cy#L->{CM)3S^u&Gktad^g6pk=$YzZG2dV>s5eQ!g zj`pE#dvu4p$1ako>8RWow2gLH1A`z;RcKagq1 z?Z^a3GIb6rkND6~4M>8D=<+r{m03eH0c1vjKDFP9r=P$n`ygl|R=Bz0Aa=UzfnGsd zX@O;kmQx;kvfVXpiS$rJE3I{*_e431%GmEST`V<|Ez7@)at0N#bK4CL01+i#_5|+M zQUnJmv?@t+yG?KaTvxIY(LV-lV;@|QID^-g5-)qALkm7DqRWZLCZh5+;61Bugvpt| zGK2GXu{VePIv%Iu#9qx>A#+EYZP8P1h)f_JeJW@hR>|z^c`Rrf%`~EV9+hRk%UU5> zKM3{aVQ-((PI@*TYKX`f?45`k5pR4>!2u92dld8%OP+FNJMNbGL7T9SZhaQWeuto4 zzL!&Q0K`jQ!PD`8tvh`&+k1{ScskaSAi$;8YU5Ru{TgAG6|J1mMLBIXEmShcv@~cN zp!ZV|d%%j6Q}!}gTni>T&LCnbAC%0eA~xHORx@tXRY0fr5nDyf^MSVSC&Ge&9ehBM z*j)k>kIq6_WJOE0%wQ``kLt}PoVhPyxzz4vH!EG zDWYKPOkoRy4bb0$(mFKyOzt`@pkn9tn=N9xZz5-x+{TKzBHnL&(H*k-X~4!dghTBl zUl4uPw*vN+r7r^6<&m;MubyiHYuj&nH3hj`f4#L_Tl+F`qKjaq{I#6`QGLmZPD_X= zs6Ri*_HnuD#O_;p>6%fS$t1N40{_k#0JWoUDL{I& z#eo5}n@@r{Miqb08Dr<1vDC%#J;$xz`mND(-yLS%irZi7Nq%!H?}@*^Q%mQhtuB^- z85f;~LxCZ_>9@x_-r<3@?KdB62=Lf+D9#cedj@LdoHW?Uc2PpI&Y%4p5%+9@%mwTQ zcK7lhHxlHr8BF9XUzC###{i$RptRipHj*q0o)7tu95pD@tm}3Lu~rbM@DK_3*kl^2 z_6q`e?&a7h$Rqs2AiS8nBS828&XQxTXnm-e{w{EWRn1PLv0&Tx5n;bHH~B?}k*v3y zlF6w%9^qn3YA+f*skJ0_0229)wLxvN;TVLUTG7f0IW=epzM+f_+5+e;I7>79O<*ZL$?0AdF;#`>WQ{IChvDUpNeHdJH(oj8nk_F)Jre<7K=yi?uus`?4+=&=mM?u=Nb ztJXZyuTCF{r>pTN<>*pW@1uw(TCDEsq)s3r-$1z-ILe3i?I1dyc-hlI+pt11{bf`; zRjV)0tOf2xyx+IDL)A$ij`2=M<@-KOG`JXd0Ocd!+|y#u5?`a05O zs|4+di|1W}BOW)DtOw>zs!8G4`>Zw(X;OUnN~#W z(Jp^sUBI9*|QbiZtqj(B+PB4T;pxd??HOF1-%8r{y+B zZNM|*={mg+7uCs>m$jOSvF$EGe8eAt|D^DPWIecFBwqGftDm@b^d^Mc?KiDIq&htd zXL(RtSNF$RUW}=K2*mzg8sRps{%q@+P@K|L%}Jzv&UBMAO~6I%CCzTX4_y&^0O1=z zq2`BLh3AgxP!h5pk=yX&>ZVLWHZP!haqth!oTUSiO$$N&Sd924#f|M>WSp{>@Vt=_ zaOTF=*^2V@jwH?Q*dQ|=dkkbO5M(C4mUs#;5^G+O+&z@OwWgqtC&xl^uW|z+y6ELz2e^cHx0<#dk z*|$J(>W;_gbdX8-Ta9Z6UgRX4lI#f+zm3yqOT4j>p-VxQ->t`*%zm_FQ(7c zpqG)C^3l2yBuPB_u$6S6$+|17u1jhi7kCn67T%UW=3I=&sXYMcb0(q}02Ae&Gy*@%m;lABa3L-x)SGW{#9i6%AnIVWb2;^uoNf-`dcfz{Oz&oJ-L}Vp+ zf1{{rA=AI`Z{K|FOLct|&#T4iI;C#G77Sx4k2U12#hVr$!pzi~zHt$z5|6dK5b+~Q7$7ZCl{yoVhk;%}TgekU5WRqSnZ5n{-GneeS|gD@8T3&g zx0INL&j#QeDq;(RHd2U$W02OUh%UgmCjs5}#8IBdYaAX1N9%+E(iY_--^ANG4wak8 z%)xgTJkV-}tR2_dPP&i`VHc~TRHaTq-K4N~*M!EuFfOLj?8hWsy z=~7gx$voZdN^C`$$szr3V%l*w%IS=oTUSam>W?hl9$!AIpG3x@FLT3O8ynJ znXX0{Ai0pNI~vs=f=t0yRU>;eBK#K24C1A)1Z}3P5(bD3oTURX<}%=XAn3Bu>rtIe z#Jz*^QELPC(&Y&Q#3qg!A`RofyAb6ppiiD!-VV$|d4R(sbD2`on5TBTJz;?O#Vt#E zvDJJYl~Jgk3Ni+JTYO#MuPF0C7IVPP`MGWk3Tc@zK=Or?>W7h`&HEe%AsmlzG)g}* zMTGjYJAihQ*(>ut!Urg;L0>_66_J&Ax*VtMgP;y2BqSJ|<;4Y+fG#8?BqSsxBqSsx mBqSsxBqSsxBqSuHYxDol=~tui_gf?Y00003kF+p?8#`^ddzJ0t$vI zNEaj0mSSWTMH*y$YigipA6opa z2n@8J;u+Lk3*fY|uVqSxJ~iZbu5*y~%Xf3EIg^=6vJGx&RCfRR-m$X9()ft@c@^(o z)9Bt3ycN`ctA5g^Kd85Z$Fkn)x{)t1B{6hJ5SDtUtn{KzwW;%YM4Ae zk`3Egz`g6*iTJe?vK<9d0@VcB@NYiu zgP=#sV@VSkqD%GOLubs;b|6UVyElb!eHs!oW3A#Iq!$N^LYpVy@9Ii5+TACbP`lrPfg{(vze{C-LoE6BBxUp6h#_?5{LR77 z$2D>JmzC(f6>i;+J$G9ssy6>z^XE_7SOCI}rv3MlzAIH_;c%N>q<#qlX;CFM5AM31 z_$>*}xx&Vw&$R80!GdkRZ26*nvTFO^YsTvvJ(-6^y}UsnMN23B8eUkXbL zv~xDBiiHZ@3nt5nH@<9}ajhg!yARz^{NzW#GgFs@K-~>lT94V-R)-z7tVR>LAt|jF=w&viZwk$$L%$zS|Mc&$(1 zK$xPZ98%Ll2&Gt&rF^mkb3%d59Z~er4Czm3QzXmv)6&Iw7c>1mGNJR~$nGLvuu-S|#?EDa-Rp)Zb6 zKX0l!$uc3Z6&n`1_Od1kBr_BXQ7Yn_hfo2Hvqk1_gT};7SZ32Pa7*V0$8#-KyA`;Y zL7EdUqk|(cr+Sn?)TJyKWX<3#F72JgRilv9><=liFR2Cd?!7Oe>kJwENTGBvG%d%c zN^4 z$?aALKvW(yTNLm$tu3fHv&_NtBQn8d2inCW)2&!zMnNm{FeOPKZ!C_%*(va^UhCeR zGc=>W=JRiZ>MzH6Wkp!a59-V0b6o$L9y1!oi(e(slCIoo^9~ogN7K#JK8J7V_aaD}d0v@n7lbVP3}4lRerF}o#}5r2d> z8oS>V27Kt~C&twAybDao=1h%QR-T6*oFFB=`iJRVN|xFb`8P)wwgygQ8DJjzTlDrLA`VjC zZ5Wyl*8!1UTIDYg(TGC({`ZRhoiNho99nPWrUPsy*pEWZqS5 zA(1c(+?UT?zB>44csYPN#Aw9?cIyk}aVKQ84CMH!YCBncz8ce!Ki5M-Xy)Nj9P@ZA z4P{N69q@v+?bSqO?8Ev~z5$)whb=%aMoPy!O6l&3W%i{KWfjDV)v))Bmdz(Enkfjw zcD|+!$ODYZlpqhomaywpLML;0UR#LeT%G5{Wf#^JUu`5*tFEH+EBi%sn$*^KNr1C8 z7n!58F1LBp$8+^+A4_vz;ly36>2jW|&0PlcZ`M)iD}UH(-%z|3q(K^Y8<;ivfT3pA zzf_JR3<~qFpSN=#xyZ~{Rd4k7P%dsK6(YlCAs!z|@76e@{9(C%gO@Mek zdsL9{6!BA)_O}})4-|I=RYqFN7ScAcq}i?@Be9p+Dk2$}FXcBAI3!PH<}Zn+p^gFc z)+(ZVxUteVRu;KRPBC0Dv@ha78|ylYz|t)OB=hdnKFJfC_{hM{)kMb!`(bEua=)ZBoS$sP9~xj9Ax$LFD5_sP@xtL*8z0V>EWaGMsJtt zgN5rdcf$!Sc_(umuX-9Lk_WK?9lBM&i&q}fZG2gpw!J@(asNh#Arv!5ChTLzj%`k1 zw^T|yo^XkSf1(YyBL)&PFRqpF7#>RrHd3?)%!_xmj3YvXR6&!XW V!BT{c{et}fQ$tIGXGr(Be*kpj)uR9a diff --git a/theme/colored/wizard-nextcloud.svg b/theme/colored/wizard-nextcloud.svg index e92362c5455b..bc48cd582ee7 100644 --- a/theme/colored/wizard-nextcloud.svg +++ b/theme/colored/wizard-nextcloud.svg @@ -1 +1,81 @@ - + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/theme/colored/wizard-nextcloud@2x.png b/theme/colored/wizard-nextcloud@2x.png index a73e467d8a125fc4e3bbdaa8dfc129a86bd8e8d8..da68bc6fbf99eff3f03583c2224164d3b4588976 100644 GIT binary patch literal 11010 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 W{5CBAcAwgn07Y44Xr;7q;C}!?drOS~ diff --git a/theme/colored/wizard-talk.png b/theme/colored/wizard-talk.png index e1c3839a169210e4f9b6a04346b84ab907283928..8231b27e0dbaa2887f04879396349b6011c206cd 100644 GIT binary patch delta 10 RcmdlWzCe6}%0`nKZU7b01D^l@ delta 24 ecmZ1=zCnC~3NK5slV=DA5Y%v_bZk_t=LP^%E(U@C diff --git a/theme/colored/wizard-talk@2x.png b/theme/colored/wizard-talk@2x.png index 92a36806229457398cc86f2414e27d1b87c29fca..ccaa62f9491c23e8cb491543f83e2ed1bd1581bc 100644 GIT binary patch delta 10 RcmbPe&}cA0WuwVmaR3$p1ONa4 delta 24 ecmZoPm}oFTg_ot+$uool2x>S|IyNdk5C;HKwg%$> diff --git a/theme/colored/wizard_logo.svg b/theme/colored/wizard_logo.svg index f2c08adbf22c..8d86581d3a0f 100644 --- a/theme/colored/wizard_logo.svg +++ b/theme/colored/wizard_logo.svg @@ -1,2 +1,2 @@ - + diff --git a/theme/sync-arrow.svg b/theme/sync-arrow.svg new file mode 100644 index 000000000000..56108b6d84f0 --- /dev/null +++ b/theme/sync-arrow.svg @@ -0,0 +1 @@ + diff --git a/theme/white/external.png b/theme/white/external.png new file mode 100644 index 0000000000000000000000000000000000000000..bac44b1d8113423b98576ef690f20c35393f81ae GIT binary patch literal 1255 zcmeAS@N?(olHy`uVBq!ia0vp^DImmmtT}V`<;yx0|QHmr;B4q#hkZuPp_776=~m} ztRyr)@St`_*Sgpi>G|5G<}9X7KeFj*s#%}kw#{5sJflDOs%>qRl+5u$Ae!^##s$tLPLmk( z8CE+#ztnU&?c1la{5S8cC%Y!5P5NSGz$7POHDB`0kG=6%)5W@vojJ$U-jLsRPIcO< z7KfiftAv?Sy;lZtOwm?7xlHe6S_1D5?j2S~=UBHg-80*4f2-!knR8xNE|SuJ|9C`A z{4#Ax{Z;w)<4Ba?2G$B@Y$&@WMuACD~ zq(4{|q~9uu3SK+q23KY8!xWP>OzJ9kZ5MUAZ{t>MQ@6{_#wh zB=5>4BI+t9EZA&rB;QzRBo*YL>E&Uu#ny4ZQQu{t>It7%KGgbbSk%Js{KfX%=PI|~ zNN(o1`!n0+Nz@bpW8n`3HFvv_I{Mda>wbxopJroOCr+gRon;qijEUtN!tMN&Yn9|~fYo{z~WteeO z^;l5fIm5G>N~t{eO7&k}%``u+%6-Llee5K=o}KsgW86D?e>+cK_uD`%R`H3J%9Cy0 zmoD-dnW^}`eU>j6Y#20Y;^qkx;-fW-Pjh^fYMVG|x4;gar_Gv~^Cp!zFN&D_MSm%a zqCu#ak)-0euwPSyx&&^NE%w(^K60ZkLo>8=ZqCs&dY)Bgd-h0ITsm{^t3Z`}LChsb zyfHKY literal 0 HcmV?d00001 diff --git a/theme/white/external.svg b/theme/white/external.svg new file mode 100644 index 000000000000..892a4e5afc38 --- /dev/null +++ b/theme/white/external.svg @@ -0,0 +1 @@ + diff --git a/theme/white/external@2x.png b/theme/white/external@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5c49e615ae9080a70be2473d5c5ee8e46bfec0fa GIT binary patch literal 2256 zcmd5-`BRhU7KRXOM1u*k6Sff6VG#t46eK`^d;vkCY|?;?0SrbU8XA@YWx0X@LJ~kg zQCba~Y%T;VF+i_jYhCcO$P$DaxJqOz65&#$-jAR9L;r#M&Ybrw?>Wyr@0l}muAB(+ zN2(jBtEi|T0TPh{>7gA#dBA^Bp$^<{Sh6%_;(AbOojt6h3?yonmFKd_oW&ya}jUHGuO zO*^pplbV+2WbWwXtuBjQ)X$FL!p1plS}zQ7?KxuydZl@>ez~PyL&-ms*$a82^%c)2vMFFJde|*166C_tCrHI-ey9MS2sFrU zCo`&!n)5hlARSIQinS>w7!Yv(L6OXhg!^E01Yc^-8$bbeFgl7aHRJiA0Vt}+FDWA! z_~T~pyc0!q#h59K0XDhY7eoryN!_h;(P}sNtYorczS@UE-Y+|59W54p+pl(Sn+z1< z-Z(0*{d=KR)*v*Qv=sPhON!&R$^}8BKRFG${vBnsneqIe#G-6p*u5K!901&~kn~73 zem-nr)FsJT^djDmew#a<{YbdmBFib`+gL+Eb{_y<)wCK4x5(=3n=(idxLCTNWOY2{ z#88d497iWbn07f=6wP8$l3ne6X%D|;Dj!5~jiIBAK+ABBX@>7&l1>C({NgZ0v_-DO4Ls_$2KpX3P}aoZB5rYn|L^I+Q#h>`I{gq1~Jnf@k@9w%ctv6L`*(vh?vS`T)}_!*5NhW{sv~Oa=JdX z*7U&Htu`!IWX9X0kdJFJTamee1xpXFl%HKf&|uy8E*v!~qpI1AH!zXiD6He){k%+( z3-Yv6;Cb?jb0{3NmaS+qOStd73_7(2TLM;`Ap&kWAp}tAwc-m={RBzpH*n^-}zmzW|Hn8`nV@|e?!Gh`r9=CA=K=e=}^>Razb_e zznCPJ6%cGk`k6$q1!8(@O+G)0*^{dkzjgST6}QoG-SamC$o;KUMs;xfxHTYXy|6Zfe)F^?EJB zgh2ghTas(pn4EG}CRs6jZ+9wxs-=&FpncOjDi4lp{BRUt*H;7)k%2Zwp}zy(rsiau z8|6wT`|L}uu2vRV*7CWu<{@zu-1&Y57zu39PxG~kZ|iFB$%R)(;Ic3|b`la1;wLPg zn@!wu0$iEO0d4^SR$md#V-YU+QK%S+6GZq-0N*_#db( z--F_+Gno&U>X4g{mPP`_c~r$Yh-xw*UD*$mMnby*s;%(y~2}SGa-L$ zb*h;+gS@B?<+4TkXA)=NWmcJF)6aQM$4-(-k0yRBH}iZ_Y;Eknv2A}n0q2v{4~ob7 z7RrPiyl`){;aV|m$UZV-t zOgM=bUWhS##ifnn8L;71tRRMpEJ80&n;NG`#Ftwv+NynGh`=v8|_1pqGVNon+-i!>K-^v2gaZk zR^nkj2ZshU96VwkAFE?rROF-X=7k$xPXerPR72MT(r#u=4xeQZ>g~}*n6i_hdoZTl?#rUWIarbd`S@M=7>{!g+79I zhsPQpQcip+;XC${(pP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprW6iE{-7?jc;$+`ZYOdUxGZqq;C+x1ez(_g&jt-%CAk9{vKI&f$5lY>k5 zd=rY*maytvC&?r0a-Fa3*hSr@MDf^L+m}TCD_H$N>RrRmCC4A8K6$XW{ozBYCVmSG zD|Ywi4_?T~%xzv=Tu{Q-ckbXtOANtxubS&;i*-QgMI2?kwTj t!|>S4d+H}vonWuq*ScrSocZ^$IQvzLiE-!q*nxq-;OXk;vd$@?2>`|wnMD8q literal 0 HcmV?d00001 diff --git a/theme/white/folder.svg b/theme/white/folder.svg index 003e8b3fb80d..a32ffc8570c2 100644 --- a/theme/white/folder.svg +++ b/theme/white/folder.svg @@ -1 +1 @@ - + diff --git a/theme/white/folder@2x.png b/theme/white/folder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..03a919e6c2b13e9d72a610caa243178fc950c999 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?5DSP*8EY;XfI7$i$v zBT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq65IU|_uM>EaktG3V_~Lq8cu0k?bvM65d~+luK&qsTI+G?Kg;OFbQmr@ev4ivDp85_)Le8|I-o?yXzSaQ$^IXBkJ zr*OZ09R9vQz>%8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11u;oP zK~#90?VW3=6;%|+f9rNJGqb|9LI{N(L=;6rWd#jVFVgc^wOgI z>c=RMq9P@_lm-exg;5xSiWCxP*B)kRSpEC3@2TVM&N(yZ>^sl(gY#+cy=Kk%vG-xt z?3n|O<2a7vIF92uj^j9vQw^+Bqa*`v0WR*=H!}Oo?DZUvR~iPB8YB$@Zvpf2OXs-b zpJ!&Pi#T>Ek@T>NXLZrvL*5K@XuC1DERtE(G%1~goSa)0omnO6xuTQEi%vqy#N$no zQWYW45Ghp>0u7K-H6c)QDOD5#HI`CUAy88(RTcs@lu~seP%|ls1w%=jfw}pmQhWXc zz5te+*|wxkb(kSlVGy_i_(;+vNu69s{+tLrkksfxisAgE1{YE?Tu8}qAtl3wlnfVA zG7>jA)SPdC4}fohzkwOR4Z!8(ySwIpG)>43V40Z>jnTGJ(rn-r;OczS`i~|pS(|_> z6J!8jW}gGs0qb+iY7|WovK_d~%noRCF40vlk|e5 z!)?dhD`|zK%Op*fG)dBhk{*)uRSxGYg*|Vj6Y{2{i7E0pO}&YDUdM|l6Ny5KnwDFD zg-J_CJ7)HC+Mo(c)1!oaPi1)|FB3%wIR-3FBO@)6&Hx?+mH|^@#Vvv&glsUg-7x~S z&4{JI%ic0=q zr=f^y?^(SLG_x-WQeFgpi1!{R}p#Y~rUW{Q4OByAes(@Yjpwp}L^=zg&}m2fw2Zx%6TcEHT` zr|5SGm=AoGCT?uXCL{~(Vpc1ZRia>KM}T_?5Bujzm4&pJ3akS5NLrb7DNDl4b`qfw znw2^TX)zUemM~*tiFqeNj7-!?NQ=>8`YA;2jFeMq>L{c|OH4nHr{!KJtFw?6Jy)0e z9NQC35OP%?W3P#pMM|0=268?Zm5%VlB9W( zHWIGRqm^N@Qm!4|`7meXgQTAbJ1M6Zno%1~6w=P=MJF(tCM{W&z=f0y7g91@NXh6V zq>|fcDnjCS+eyfl_<1-Ze4NzK>1F&A2yeqF!{6uCi4TF>lAa*z_SdTez^%Y+!sa%o yca9QvvTQOl6`hRZIF92uj^j9v<2a7v^vgdFmk^_J+w6w`0000w$s* literal 0 HcmV?d00001 diff --git a/theme/white/wizard-files.svg b/theme/white/wizard-files.svg new file mode 100644 index 000000000000..e01fb5b88937 --- /dev/null +++ b/theme/white/wizard-files.svg @@ -0,0 +1 @@ + diff --git a/theme/white/wizard-files@2x.png b/theme/white/wizard-files@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..810030290dee48294d15bcce4cd7583c50e460a3 GIT binary patch literal 2777 zcma)8i#yZ%AK&&JqZp1$E}PbDxei4(qUM-vb|jNH6tWZLvQ21y_oQm2qfG=*>f2P(>nwJM;xRN+)vP#JdN?`!d7h*~d?x z0I}I@>r;%VIQntc32Wx*h@u&1Ll9_7IECbTII(zoIHU{VhisesqOqlx=qkL;4b3F_ za1Wblf>p_`>3TjVi2wcNuFdNWB(62 zf?yT1fb(@qNsWcatZW*o5$y1u;_H*SnhdAOmCnZX_r(JxjzIXovcAY&9nJg+&?ImZ z3WtRIzdn4qipwqU^$LhCt~*t zn#Mo@)~75Iw2w4N?YM$;4lL>;)?*}_yOoANzGM)g?09S5dj3h59i={7o9ANr1*|{evcW@z($v?vj9x;C*t$AZ4817dzxCFu^`J1x7$E zohI*|B>=gknz|U~wtHLnIOBeu74un%W9Z_;e z3~qu`o9-s1!O7}LiiV0&1^{-RQqPouhOXUc}o}UjCa4Ur6X!XXxyOOpxUq>9em@v2B!O7V)qJd z^q0`}okr0nHbT)Cz0nP=xp&+KdvssZ5dsJ;6LME$NyQL^+EI=B9pOW5V0m>aIKty) zrdF)SK)Q)+j7vZg^1~easBkjg1%fcvvNT1Sp=Y31A&ipvN`xb7ctMjDO>z!=%h8&% zZ{5?O?w5UiD@+hn3f-r#<$c73MQQ{UyTuAejNoLp3IUJ)9_XLOO*CFLn|&pUtjz|b zNJ|r0o9MC{WOZ6JReKSTs@s4aUw- z0WH3&QTP@GIdS0$9$PuAvR{L51AdTp6Z`pi!G$MAW1RQ$@X;tOp>^zby7-B?X>iyF zH;F~oP``JiD*@!$#M_B4b)Ek+-+(TX+6X!n-7{j;+h*66+-NI4cpKqhMB<$IzB{%2 zuX#rl4ex`0g_@QQ8qlNo%g`S0VGnHt?@T*dKWJ^IEj~fpYxW1rlB4;whbTE|w6QnY zzSWLw__SLeL>{~*b69zo#Bffx_mCKla*M;S?4YcJn!pofGi4NbdzS;mh?Dvgp~qI= z%o$H$qXQyTrcnAAK=4%CZ*z65@ zfuIC)3@tBfRwN^RKCBu0?8TH+Ur*mPtVgM*e9aJyV{trtf2kE^0fV%b+woH@is_nj#6&ik5R{HCMiVZeKJkuX(o}k4# zDLWH=V;}UryY%z1y;79^J)bUp_yOwD4%8G{_NBZ?f1YMxldRJIg@y-}?mGSU634ml zQA2u8{XQsW;ES;ZL%RtQP*?#g`e{3Z?Y$HU;%JPqeyP#`U(c;s_99ND7S~=^6zecv zH2C{vgJwWhI=@VjDyJ)6`UrOw3-`?bs>!4K;z18p{x55iDSiI?CbSX zbH9KN+rxsE`UE~y)Kn_Y6=ljB7yoeE4uQ1Nh0pFWWKR<1ZyAa^IgfTK+CA~0>@PGT zukRz32zrhwU-F(F)JP!DZ~UUs%@w zzbAK*lyL8?&q%ywjY3 z>NZsVu#@6(mvQ$BHxWX(7?b*+L#71ODXY7ydR4-0(}#DUje#CPe^li*1h4i{kqjrzpmw?)~p#Cg0C;ko>_Md@MZ3c1KDjwl-Y8@lHedU_i)n?)2I zKb6~biF`xdDykybQz04A8cFw>&xU}OV`_qTD+ItQr&ch7=1&0IdXL@1A$W|R&E-6i zazU--Y}9CW!rPNZ3h9`D;O}SPBPoO62E&sZ@HM~FL{UWQXsHGBvcE9rUAE-Z|1_p( zS()+cqP+RQX?kwFS`D0Vi{GQr^7y~3CD%CX7#!|gjX;TCt;B#WKM*}V+T}USc{>w2 z8c3N+i{ccet((aF&IM7z>%8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H12VhA= zK~#90?VV}NT~!r^pY_pNL7Eb%6s6d~sl_2cYQX>!C4e}@1T+dFKS(1c_6K5O{Gl-x z5(B10B{4>bjS`E7V4|RD4VV&XQey?R#mdkW>|kwCs&t0(_~YDa{k-$pXSlcLNp8NI z`|Y#V+WWodoIRa&p`oFnp`oFnp&>m{bpR<*-wa#`ECl8NGk__;K43TSG_W367ZLlb zigT<{=c%`-TkM~M>QB{=swY%khp|ANqy9jBX#gSG@vM4-I#G3#DAQ?NGm1kr=8ks`JaNZ>YIQKz^f|^;%%(y9Og+9dt0Ut5WjLxsWjnEi`owpcdR7^Z>Qdo$TwQel$1nkWuq;QlL!Aq} zvFbP`@t!iA)KU=OomB_WhEnFa>MF?Gssm`lnPoVst02>>4xkOC#8g*7>WF1HsjDD| zst%wHrNq<-(m#zLHRE6zPU~@!*P9vl=5vHkbPx1sjDC_R2@JY{#J&QDMc7n zrvo1VE(T@;Q-NK;Z-Jjj#B)7N>?|U#ob0YTfPqm@R+rg*i_Q`C$F1r0PIhJ$xePcY zx0l(Lxl!k<8waT1ztoR+vA3s?W*wdz%V@_W_Yn1Uz#8Cf0~|ITSZQZbp3ECpVm6oI zB)1@H0QUpKEZ|H4D{Q}!;E%ZiOV6LmaFXH-xfXbLj^j@R+FhT2ox^5ownfB_G90B4 zOo;DLlbhT*$q zI?F3a${Em3;(k4$k3o4JxTj2qc?J1Lk|;8sZ}(wDtOZsl^fL%|M8ttI9p)9}*%U#v z=+@8w9Pm;?U;VHFSYEQv+=6T;-DRtzAQ7<%_+}zM{cr$S5)pM=DC>^;s{|8w`_!&W z0qP0rJqdjEVz+v6S?xEO6eIOtB(SkIB3|xRAR>+c*OOhoids%x3!EDfb($p@46|wX zyw8dcG_|dsqi)N4Doo-|dz_^sgZjN34Y5l-X$YThO(H|a$|BmOGSs>1p&=XNlR5l8 znMjb13uPmVdaZh3fJQi|F3IWhu0(>&O4SavLS3Zp=%WGtsa}%6-_itPY)eu1R3zO7 z6cOuzANEmnRYW|Jz~!a{HZ~-%k&GhtWvx$CrXRK^u<_RfHj+_e^oq}glv{aS)v){E+Ei)fotQD>@OP@hWBC|lJpo1J03{Jx=8c5?#1M>(Y4 zuYSl;n?6xbS8q4_W~FAY`VA*#O;D$(SE;Mb_68Tp4)r#5K~-(s7wQ@6aU+4}zShT6OM z?Rd#*-N^QE{N6VPWhbxeRLz25A(nStphNM$=OMw~go z_knflg@Yd4O^|_&HT(~Yfi>#VK@RFB$dP>UG>|>_a;N&8etTox1i1ZUny4 zPr+UT!wIry2tQ4B39D=7hf!cZFgqf;W~u1AC!oF_xRgwo#boOUwOZU60j`dSpL8oQ z^y6r)YvTOY>rApo(q@w-i#&f=yJOBB5%KwM1%@8>xAx*b)q4F0^)obrbmF331&X*Q zoL7L&apBxvQ!GUY(o9BnW-2|BETrD#Favl;N}FRy*BOx1XUHWKl!I%G=sJU*T98W< z+Z#vDZ>_?%CAA>$OKfi(Igu{+*<^y4C65^-U)J$V$IDjAGh{I}{>7e}@vct)NGZtP zgto?=jx*^g1$mVEWr3?J_jUS5GC^8XDOUg+Q`sC-?xPGr03u>1SwgehXco98Bk(QY zx`^ob(-(!^gw=&)5BYzJ>VJ!{Y90c<6cNAaRj}}0ky#qRtAK0BM)D~hvKa;TkR@Qd zJ0c$I_n=a{sp=_YgU8Fs=5!V?UaOFsfQQLa0zNWK@|sG=4K0B#0L~#BRGv+iHn8sd z!34ID^(r?4j{}cJ#IC%CYd4Te!l6KDb1O5~i@-?M{H67Jj!c9n zBBGFSSM3Dpg;`#dIlxRZaZYW$j=n#MY^{G<>-|yo^WQ8&d&wI7g-NeHz~9NXh3@Ru l8)|51XlQ6?XlNKE{te#}hd(K;sfhpp002ovPDHLkV1nY@w$T6p literal 0 HcmV?d00001 diff --git a/theme/white/wizard-groupware.svg b/theme/white/wizard-groupware.svg new file mode 100644 index 000000000000..0cd9a33e5469 --- /dev/null +++ b/theme/white/wizard-groupware.svg @@ -0,0 +1 @@ + diff --git a/theme/white/wizard-groupware@2x.png b/theme/white/wizard-groupware@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae5024e442498297977e711c0189a5dfd576970d GIT binary patch literal 4278 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 Yg7;U|Byo=He+~e&xvg2l1+S$40rX_~uK)l5 literal 0 HcmV?d00001 diff --git a/theme/white/wizard-nextcloud.png b/theme/white/wizard-nextcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..8022b79a331a01f46415cc28ff1c1d3a423151a2 GIT binary patch literal 4075 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 literal 0 HcmV?d00001 diff --git a/theme/white/wizard-nextcloud.svg b/theme/white/wizard-nextcloud.svg new file mode 100644 index 000000000000..a0330d783f9c --- /dev/null +++ b/theme/white/wizard-nextcloud.svg @@ -0,0 +1,81 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/theme/white/wizard-nextcloud@2x.png b/theme/white/wizard-nextcloud@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ad10827c2b88aa2bed198416b3a497cff093e7fd GIT binary patch literal 9394 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 diff --git a/theme/white/wizard-talk@2x.png b/theme/white/wizard-talk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b576ec365970614400a4e3cf0ae669c43b25d168 GIT binary patch literal 5282 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 literal 0 HcmV?d00001 From 91859560697970a188a16c343e0aec1e32208875 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Tue, 16 Feb 2021 10:20:04 +0100 Subject: [PATCH 2/4] Split out wizard welcome page Signed-off-by: Felix Weilbach --- NEXTCLOUD.cmake | 3 +- config.h.in | 1 + src/gui/CMakeLists.txt | 3 + src/gui/owncloudsetupwizard.cpp | 7 +- src/gui/wizard/linklabel.cpp | 58 ++++++ src/gui/wizard/linklabel.h | 46 +++++ src/gui/wizard/owncloudwizard.cpp | 37 +++- src/gui/wizard/owncloudwizard.h | 2 + src/gui/wizard/owncloudwizardcommon.cpp | 13 ++ src/gui/wizard/owncloudwizardcommon.h | 6 + src/gui/wizard/welcomepage.cpp | 120 +++++++++++++ src/gui/wizard/welcomepage.h | 54 ++++++ src/gui/wizard/welcomepage.ui | 229 ++++++++++++++++++++++++ src/libsync/theme.cpp | 42 ++++- src/libsync/theme.h | 6 + test/CMakeLists.txt | 2 + test/testtheme.cpp | 111 ++++++++++++ test/themeutils.cpp | 40 +++++ test/themeutils.h | 34 ++++ 19 files changed, 809 insertions(+), 5 deletions(-) create mode 100644 src/gui/wizard/linklabel.cpp create mode 100644 src/gui/wizard/linklabel.h create mode 100644 src/gui/wizard/welcomepage.cpp create mode 100644 src/gui/wizard/welcomepage.h create mode 100644 src/gui/wizard/welcomepage.ui create mode 100644 test/testtheme.cpp create mode 100644 test/themeutils.cpp create mode 100644 test/themeutils.h diff --git a/NEXTCLOUD.cmake b/NEXTCLOUD.cmake index e9edb7b801ec..82f1bd4b7a5f 100644 --- a/NEXTCLOUD.cmake +++ b/NEXTCLOUD.cmake @@ -34,7 +34,8 @@ option( WITH_PROVIDERS "Build with providers list" ON ) ## Theming options -set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "#0082c9" CACHE STRING "Hex color of the wizard header background") +set(NEXTCLOUD_BACKGROUND_COLOR "#0082c9" CACHE STRING "Default Nextcloud background color") +set( APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR ${NEXTCLOUD_BACKGROUND_COLOR} CACHE STRING "Hex color of the wizard header background") set( APPLICATION_WIZARD_HEADER_TITLE_COLOR "#ffffff" CACHE STRING "Hex color of the text in the wizard header") option( APPLICATION_WIZARD_USE_CUSTOM_LOGO "Use the logo from ':/client/theme/colored/wizard_logo.(png|svg)' else the default application icon is used" ON ) diff --git a/config.h.in b/config.h.in index d697887525dc..13d4cdf08c3a 100644 --- a/config.h.in +++ b/config.h.in @@ -25,6 +25,7 @@ #cmakedefine APPLICATION_SERVER_URL_ENFORCE "@APPLICATION_SERVER_URL_ENFORCE@" #cmakedefine LINUX_APPLICATION_ID "@LINUX_APPLICATION_ID@" #cmakedefine APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR "@APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR@" +#cmakedefine NEXTCLOUD_BACKGROUND_COLOR "@NEXTCLOUD_BACKGROUND_COLOR@" #cmakedefine APPLICATION_WIZARD_HEADER_TITLE_COLOR "@APPLICATION_WIZARD_HEADER_TITLE_COLOR@" #cmakedefine APPLICATION_WIZARD_USE_CUSTOM_LOGO "@APPLICATION_WIZARD_USE_CUSTOM_LOGO@" #cmakedefine APPLICATION_VIRTUALFILE_SUFFIX "@APPLICATION_VIRTUALFILE_SUFFIX@" diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 346114074f04..13cde2ff9b86 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -51,6 +51,7 @@ set(client_UI_SRCS wizard/owncloudsetupnocredspage.ui wizard/owncloudwizardresultpage.ui wizard/webview.ui + wizard/welcomepage.ui ) set(client_SRCS @@ -134,6 +135,8 @@ set(client_SRCS wizard/webviewpage.cpp wizard/webview.cpp wizard/slideshow.cpp + wizard/welcomepage.cpp + wizard/linklabel.cpp ) IF(BUILD_UPDATER) diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index ba7fecd2916e..2c964d5ced07 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -131,7 +131,12 @@ void OwncloudSetupWizard::startWizard() _ocWizard->setRemoteFolder(_remoteFolder); - _ocWizard->setStartId(WizardCommon::Page_ServerSetup); +#ifdef WITH_PROVIDERS + const auto startPage = WizardCommon::Page_Welcome; +#else // WITH_PROVIDERS + const auto startPage = WizardCommon::Page_ServerSetup; +#endif // WITH_PROVIDERS + _ocWizard->setStartId(startPage); _ocWizard->restart(); diff --git a/src/gui/wizard/linklabel.cpp b/src/gui/wizard/linklabel.cpp new file mode 100644 index 000000000000..918e9dc7f91c --- /dev/null +++ b/src/gui/wizard/linklabel.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "linklabel.h" +#include "guiutility.h" + +namespace OCC { + +LinkLabel::LinkLabel(QWidget *parent) : QLabel(parent) +{ + +} + +void LinkLabel::setUrl(const QUrl &url) +{ + this->url = url; +} + +void LinkLabel::enterEvent(QEvent * /*event*/) +{ + setFontUnderline(true); + setCursor(Qt::PointingHandCursor); +} + +void LinkLabel::leaveEvent(QEvent * /*event*/) +{ + setFontUnderline(false); + setCursor(Qt::ArrowCursor); +} + +void LinkLabel::mouseReleaseEvent(QMouseEvent * /*event*/) +{ + if (url.isValid()) { + Utility::openBrowser(url); + } + + emit clicked(); +} + +void LinkLabel::setFontUnderline(bool value) +{ + auto labelFont = font(); + labelFont.setUnderline(value); + setFont(labelFont); +} + +} diff --git a/src/gui/wizard/linklabel.h b/src/gui/wizard/linklabel.h new file mode 100644 index 000000000000..eb4ba0f814c6 --- /dev/null +++ b/src/gui/wizard/linklabel.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#pragma once + +#include +#include + +namespace OCC { + +class LinkLabel : public QLabel +{ + Q_OBJECT +public: + explicit LinkLabel(QWidget *parent = nullptr); + + void setUrl(const QUrl &url); + +signals: + void clicked(); + +protected: + void enterEvent(QEvent *event) override; + + void leaveEvent(QEvent *event) override; + + void mouseReleaseEvent(QMouseEvent *event) override; + +private: + void setFontUnderline(bool value); + + QUrl url; +}; + +} diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index d97b0b19fd50..4c57e96c1c67 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -20,6 +20,7 @@ #include "owncloudgui.h" #include "wizard/owncloudwizard.h" +#include "wizard/welcomepage.h" #include "wizard/owncloudsetuppage.h" #include "wizard/owncloudhttpcredspage.h" #include "wizard/owncloudoauthcredspage.h" @@ -46,6 +47,9 @@ Q_LOGGING_CATEGORY(lcWizard, "nextcloud.gui.wizard", QtInfoMsg) OwncloudWizard::OwncloudWizard(QWidget *parent) : QWizard(parent) , _account(nullptr) +#ifdef WITH_PROVIDERS + , _welcomePage(new WelcomePage(this)) +#endif // WITH_PROVIDERS , _setupPage(new OwncloudSetupPage(this)) , _httpCredsPage(new OwncloudHttpCredsPage(this)) , _browserCredsPage(new OwncloudOAuthCredsPage) @@ -57,6 +61,9 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setObjectName("owncloudWizard"); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); +#ifdef WITH_PROVIDERS + setPage(WizardCommon::Page_Welcome, _welcomePage); +#endif // WITH_PROVIDERS setPage(WizardCommon::Page_ServerSetup, _setupPage); setPage(WizardCommon::Page_HttpCreds, _httpCredsPage); setPage(WizardCommon::Page_OAuthCreds, _browserCredsPage); @@ -94,6 +101,12 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setSubTitleFormat(Qt::RichText); setButtonText(QWizard::CustomButton1, tr("Skip folders configuration")); + // Change the next buttons size policy since we hide it on the + // welcome page but want it to fill it's space that we don't get + // flickering when the page changes + auto nextButtonSizePolicy = button(QWizard::NextButton)->sizePolicy(); + nextButtonSizePolicy.setRetainSizeWhenHidden(true); + button(QWizard::NextButton)->setSizePolicy(nextButtonSizePolicy); // Connect styleChanged events to our widgets, so they can adapt (Dark-/Light-Mode switching) connect(this, &OwncloudWizard::styleChanged, _setupPage, &OwncloudSetupPage::slotStyleChanged); @@ -220,6 +233,29 @@ void OwncloudWizard::slotCurrentPageChanged(int id) { qCDebug(lcWizard) << "Current Wizard page changed to " << id; + const auto setNextButtonAsDefault = [this]() { + auto nextButton = qobject_cast(button(QWizard::NextButton)); + if (nextButton) { + nextButton->setDefault(true); + nextButton->setFocus(); + } + }; + + if (id == WizardCommon::Page_Welcome) { + // Set next button to just hidden so it retains it's layout + button(QWizard::NextButton)->setHidden(true); + // Need to set it from here, otherwise it has no effect + _welcomePage->setLoginButtonDefault(); + } else if (id == WizardCommon::Page_WebView || id == WizardCommon::Page_Flow2AuthCreds) { + setButtonLayout({ QWizard::Stretch, QWizard::BackButton }); + } else if (id == WizardCommon::Page_AdvancedSetup) { + setButtonLayout({ QWizard::Stretch, QWizard::CustomButton1, QWizard::BackButton, QWizard::NextButton }); + setNextButtonAsDefault(); + } else { + setButtonLayout({ QWizard::Stretch, QWizard::BackButton, QWizard::NextButton }); + setNextButtonAsDefault(); + } + if (id == WizardCommon::Page_ServerSetup) { emit clearPendingRequests(); } @@ -232,7 +268,6 @@ void OwncloudWizard::slotCurrentPageChanged(int id) done(Accepted); } - setOption(QWizard::HaveCustomButton1, id == WizardCommon::Page_AdvancedSetup); if (id == WizardCommon::Page_AdvancedSetup && (_credentialsPage == _browserCredsPage || _credentialsPage == _flow2CredsPage)) { // For OAuth, disable the back button in the Page_AdvancedSetup because we don't want // to re-open the browser. diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h index 947d5f679ff2..3c6fb5c6e1f8 100644 --- a/src/gui/wizard/owncloudwizard.h +++ b/src/gui/wizard/owncloudwizard.h @@ -29,6 +29,7 @@ namespace OCC { Q_DECLARE_LOGGING_CATEGORY(lcWizard) +class WelcomePage; class OwncloudSetupPage; class OwncloudHttpCredsPage; class OwncloudOAuthCredsPage; @@ -115,6 +116,7 @@ public slots: void customizeStyle(); AccountPtr _account; + WelcomePage *_welcomePage; OwncloudSetupPage *_setupPage; OwncloudHttpCredsPage *_httpCredsPage; OwncloudOAuthCredsPage *_browserCredsPage; diff --git a/src/gui/wizard/owncloudwizardcommon.cpp b/src/gui/wizard/owncloudwizardcommon.cpp index 56768209bc99..0f473508243b 100644 --- a/src/gui/wizard/owncloudwizardcommon.cpp +++ b/src/gui/wizard/owncloudwizardcommon.cpp @@ -16,6 +16,10 @@ #include #include #include +#include +#include +#include +#include #include "wizard/owncloudwizardcommon.h" #include "theme.h" @@ -68,6 +72,15 @@ namespace WizardCommon { errorLabel->setVisible(false); } + void customizeHintLabel(QLabel *label) + { + auto palette = label->palette(); + QColor textColor = palette.color(QPalette::Text); + textColor.setAlpha(128); + palette.setColor(QPalette::Text, textColor); + label->setPalette(palette); + } + } // ns WizardCommon } // namespace OCC diff --git a/src/gui/wizard/owncloudwizardcommon.h b/src/gui/wizard/owncloudwizardcommon.h index d1f7c08be07a..eb68c9279ab2 100644 --- a/src/gui/wizard/owncloudwizardcommon.h +++ b/src/gui/wizard/owncloudwizardcommon.h @@ -18,6 +18,10 @@ class QVariant; class QLabel; +class QRadioButton; +class QSpinBox; +class QCheckBox; +class QAbstractButton; namespace OCC { @@ -27,6 +31,7 @@ namespace WizardCommon { QString titleTemplate(); QString subTitleTemplate(); void initErrorLabel(QLabel *errorLabel); + void customizeHintLabel(QLabel *label); enum SyncMode { SelectiveMode, @@ -34,6 +39,7 @@ namespace WizardCommon { }; enum Pages { + Page_Welcome, Page_ServerSetup, Page_HttpCreds, Page_ShibbolethCreds, diff --git a/src/gui/wizard/welcomepage.cpp b/src/gui/wizard/welcomepage.cpp new file mode 100644 index 000000000000..668c5b02f56f --- /dev/null +++ b/src/gui/wizard/welcomepage.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "welcomepage.h" +#include "theme.h" +#include "wizard/owncloudwizard.h" +#include "wizard/slideshow.h" +#include "ui_welcomepage.h" + +namespace OCC { + +WelcomePage::WelcomePage(OwncloudWizard *ocWizard) + : QWizardPage() + , _ui(new Ui::WelcomePage) + , _ocWizard(ocWizard) +{ + setupUi(); +} + +WelcomePage::~WelcomePage() = default; + +void WelcomePage::setupUi() +{ + _ui->setupUi(this); + setupSlideShow(); + setupLoginButton(); + setupCreateAccountButton(); + setupHostYourOwnServerLabel(); +} + +void WelcomePage::initializePage() +{ + customizeStyle(); +} + +void WelcomePage::setLoginButtonDefault() +{ + _ui->loginButton->setDefault(true); + _ui->loginButton->setFocus(); +} + +void WelcomePage::styleSlideShow() +{ + const auto theme = Theme::instance(); + const auto backgroundColor = palette().window().color(); + + const auto wizardNextcloudIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-nextcloud.png", backgroundColor) + : Theme::hidpiFileName(":/client/theme/colored/wizard-nextcloud.png"); + const auto wizardFilesIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-files.png", backgroundColor) + : Theme::hidpiFileName(":/client/theme/colored/wizard-files.png"); + const auto wizardGroupwareIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-groupware.png", backgroundColor) + : Theme::hidpiFileName(":/client/theme/colored/wizard-groupware.png"); + const auto wizardTalkIconFileName = theme->isBranded() ? Theme::hidpiFileName("wizard-talk.png", backgroundColor) + : Theme::hidpiFileName(":/client/theme/colored/wizard-talk.png"); + + _ui->slideShow->addSlide(wizardNextcloudIconFileName, tr("Keep your data secure and under your control")); + _ui->slideShow->addSlide(wizardFilesIconFileName, tr("Secure collaboration & file exchange")); + _ui->slideShow->addSlide(wizardGroupwareIconFileName, tr("Easy-to-use web mail, calendaring & contacts")); + _ui->slideShow->addSlide(wizardTalkIconFileName, tr("Screensharing, online meetings & web conferences")); + + const auto isDarkBackground = Theme::isDarkColor(backgroundColor); + _ui->slideShowNextButton->setIcon(theme->uiThemeIcon(QString("control-next.svg"), isDarkBackground)); + _ui->slideShowPreviousButton->setIcon(theme->uiThemeIcon(QString("control-prev.svg"), isDarkBackground)); +} + +void WelcomePage::setupSlideShow() +{ + connect(_ui->slideShow, &SlideShow::clicked, _ui->slideShow, &SlideShow::stopShow); + connect(_ui->slideShowNextButton, &QPushButton::clicked, _ui->slideShow, &SlideShow::nextSlide); + connect(_ui->slideShowPreviousButton, &QPushButton::clicked, _ui->slideShow, &SlideShow::prevSlide); +} + +void WelcomePage::setupLoginButton() +{ + const auto appName = Theme::instance()->appNameGUI(); + + _ui->loginButton->setText(tr("Log in to your %1").arg(appName)); + connect(_ui->loginButton, &QPushButton::clicked, this, [this](bool /*checked*/) { + _nextPage = WizardCommon::Page_ServerSetup; + _ocWizard->next(); + }); +} + +void WelcomePage::setupCreateAccountButton() +{ + connect(_ui->createAccountButton, &QPushButton::clicked, this, [this](bool /*checked*/) { + _ocWizard->setRegistration(true); + _nextPage = WizardCommon::Page_WebView; + _ocWizard->next(); + }); +} + +void WelcomePage::setupHostYourOwnServerLabel() +{ + _ui->hostYourOwnServerLabel->setText(tr("Host your own server")); + _ui->hostYourOwnServerLabel->setAlignment(Qt::AlignCenter); + _ui->hostYourOwnServerLabel->setUrl(QUrl("https://docs.nextcloud.com/server/latest/admin_manual/installation/#installation")); +} + +int WelcomePage::nextId() const +{ + return _nextPage; +} + +void WelcomePage::customizeStyle() +{ + styleSlideShow(); +} +} diff --git a/src/gui/wizard/welcomepage.h b/src/gui/wizard/welcomepage.h new file mode 100644 index 000000000000..9d0aa1c0a849 --- /dev/null +++ b/src/gui/wizard/welcomepage.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#pragma once + +#include + +#include "wizard/owncloudwizardcommon.h" + +namespace OCC { + +class OwncloudWizard; + +namespace Ui { + class WelcomePage; +} + +class WelcomePage : public QWizardPage +{ + Q_OBJECT + +public: + explicit WelcomePage(OwncloudWizard *ocWizard); + ~WelcomePage() override; + int nextId() const override; + void initializePage() override; + void setLoginButtonDefault(); + +private: + void setupUi(); + void customizeStyle(); + void styleSlideShow(); + void setupSlideShow(); + void setupLoginButton(); + void setupCreateAccountButton(); + void setupHostYourOwnServerLabel(); + + QScopedPointer _ui; + + OwncloudWizard *_ocWizard; + WizardCommon::Pages _nextPage = WizardCommon::Page_ServerSetup; +}; +} diff --git a/src/gui/wizard/welcomepage.ui b/src/gui/wizard/welcomepage.ui new file mode 100644 index 000000000000..1d54a802754d --- /dev/null +++ b/src/gui/wizard/welcomepage.ui @@ -0,0 +1,229 @@ + + + OCC::WelcomePage + + + + 0 + 0 + 500 + 500 + + + + + 0 + 0 + + + + Form + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 80 + + + + + + + + 0 + + + + + + 40 + 16777215 + + + + + + + false + + + false + + + true + + + + + + + + 12 + 75 + true + + + + + + + + + 40 + 16777215 + + + + + + + false + + + false + + + true + + + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Log in to your %1 + + + true + + + true + + + + + + + Create account with Provider + + + true + + + false + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + OCC::SlideShow + QWidget +

wizard/slideshow.h
+ + + OCC::LinkLabel + QWidget +
wizard/linklabel.h
+ 1 +
+ + + + diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index be3bde5e6a5d..b77a6665593e 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -246,6 +246,12 @@ QString Theme::themeImagePath(const QString &name, int size, bool sysTray) const } } +bool Theme::isHidpi(QPaintDevice *dev) +{ + const auto devicePixelRatio = dev ? dev->devicePixelRatio() : qApp->primaryScreen()->devicePixelRatio(); + return devicePixelRatio > 1; +} + QIcon Theme::uiThemeIcon(const QString &iconName, bool uiHasDarkBg) const { QString themeResBasePath = ":/client/theme/"; @@ -256,8 +262,7 @@ QIcon Theme::uiThemeIcon(const QString &iconName, bool uiHasDarkBg) const QString Theme::hidpiFileName(const QString &fileName, QPaintDevice *dev) { - qreal devicePixelRatio = dev ? dev->devicePixelRatio() : qApp->primaryScreen()->devicePixelRatio(); - if (devicePixelRatio <= 1.0) { + if (!Theme::isHidpi(dev)) { return fileName; } // try to find a 2x version @@ -274,6 +279,16 @@ QString Theme::hidpiFileName(const QString &fileName, QPaintDevice *dev) return fileName; } +QString Theme::hidpiFileName(const QString &iconName, const QColor &backgroundColor, QPaintDevice *dev) +{ + const auto isDarkBackground = Theme::isDarkColor(backgroundColor); + + const QString themeResBasePath = ":/client/theme/"; + const QString iconPath = themeResBasePath + (isDarkBackground ? "white/" : "black/") + iconName; + + return Theme::hidpiFileName(iconPath, dev); +} + #endif @@ -541,6 +556,29 @@ QColor Theme::wizardHeaderBackgroundColor() const return {APPLICATION_WIZARD_HEADER_BACKGROUND_COLOR}; } +QPixmap Theme::wizardApplicationLogo() const +{ + if (!Theme::isBranded()) { + return QPixmap(Theme::hidpiFileName(":/client/theme/colored/wizard-nextcloud.png")); + } +#ifdef APPLICATION_WIZARD_USE_CUSTOM_LOGO + const auto useSvg = shouldPreferSvg(); + const auto logoBasePath = QStringLiteral(":/client/theme/colored/wizard_logo"); + if (useSvg) { + const auto maxHeight = Theme::isHidpi() ? 200 : 100; + const auto maxWidth = 2 * maxHeight; + const auto icon = QIcon(logoBasePath + ".svg"); + const auto size = icon.actualSize(QSize(maxWidth, maxHeight)); + return icon.pixmap(size); + } else { + return QPixmap(hidpiFileName(logoBasePath + ".png")); + } +#else + const auto size = Theme::isHidpi() ?: 200 : 100; + return applicationIcon().pixmap(size); +#endif +} + QPixmap Theme::wizardHeaderLogo() const { #ifdef APPLICATION_WIZARD_USE_CUSTOM_LOGO diff --git a/src/libsync/theme.h b/src/libsync/theme.h index 394cb8930537..a06828b1fcb4 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -132,6 +132,10 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject #ifndef TOKEN_AUTH_ONLY static QString hidpiFileName(const QString &fileName, QPaintDevice *dev = nullptr); + static QString hidpiFileName(const QString &iconName, const QColor &backgroundColor, QPaintDevice *dev = nullptr); + + static bool isHidpi(QPaintDevice *dev = nullptr); + /** * get an sync state icon */ @@ -231,6 +235,8 @@ class OWNCLOUDSYNC_EXPORT Theme : public QObject /** @return color for the setup wizard. */ virtual QColor wizardHeaderBackgroundColor() const; + virtual QPixmap wizardApplicationLogo() const; + /** @return logo for the setup wizard. */ virtual QPixmap wizardHeaderLogo() const; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2297eb0da89e..9dcc1730de11 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,6 +9,7 @@ add_library(testutils STATIC syncenginetestutils.cpp pushnotificationstestutils.cpp + themeutils.cpp ) target_link_libraries(testutils PUBLIC ${APPLICATION_EXECUTABLE}sync Qt5::Test) @@ -54,6 +55,7 @@ nextcloud_add_test(LockedFiles) nextcloud_add_test(FolderWatcher) nextcloud_add_test(Capabilities) nextcloud_add_test(PushNotifications) +nextcloud_add_test(Theme) if( UNIX AND NOT APPLE ) nextcloud_add_test(InotifyWatcher) diff --git a/test/testtheme.cpp b/test/testtheme.cpp new file mode 100644 index 000000000000..52bc7b324d49 --- /dev/null +++ b/test/testtheme.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include + +#include "theme.h" +#include "themeutils.h" + +class TestTheme : public QObject +{ + Q_OBJECT + +public: + TestTheme() + { + Q_INIT_RESOURCE(resources); + Q_INIT_RESOURCE(theme); + } + +private slots: + void testHidpiFileName_darkBackground_returnPathToWhiteIcon() + { + FakePaintDevice paintDevice; + const QColor backgroundColor("#000000"); + const QString iconName("icon-name"); + + const auto iconPath = OCC::Theme::hidpiFileName(iconName + ".png", backgroundColor, &paintDevice); + + QCOMPARE(iconPath, ":/client/theme/white/" + iconName + ".png"); + } + + void testHidpiFileName_lightBackground_returnPathToBlackIcon() + { + FakePaintDevice paintDevice; + const QColor backgroundColor("#ffffff"); + const QString iconName("icon-name"); + + const auto iconPath = OCC::Theme::hidpiFileName(iconName + ".png", backgroundColor, &paintDevice); + + QCOMPARE(iconPath, ":/client/theme/black/" + iconName + ".png"); + } + + void testHidpiFileName_hidpiDevice_returnHidpiIconPath() + { + FakePaintDevice paintDevice; + paintDevice.setHidpi(true); + const QColor backgroundColor("#000000"); + const QString iconName("wizard-files"); + + const auto iconPath = OCC::Theme::hidpiFileName(iconName + ".png", backgroundColor, &paintDevice); + + QCOMPARE(iconPath, ":/client/theme/white/" + iconName + "@2x.png"); + } + + void testIsDarkColor_nextcloudBlue_returnTrue() + { + const QColor color(0, 130, 201); + + const auto result = OCC::Theme::isDarkColor(color); + + QCOMPARE(result, true); + } + + void testIsDarkColor_lightColor_returnFalse() + { + const QColor color(255, 255, 255); + + const auto result = OCC::Theme::isDarkColor(color); + + QCOMPARE(result, false); + } + + void testIsDarkColor_darkColor_returnTrue() + { + const QColor color(0, 0, 0); + + const auto result = OCC::Theme::isDarkColor(color); + + QCOMPARE(result, true); + } + + void testIsHidpi_hidpi_returnTrue() + { + FakePaintDevice paintDevice; + paintDevice.setHidpi(true); + + QCOMPARE(OCC::Theme::isHidpi(&paintDevice), true); + } + + void testIsHidpi_lowdpi_returnFalse() + { + FakePaintDevice paintDevice; + paintDevice.setHidpi(false); + + QCOMPARE(OCC::Theme::isHidpi(&paintDevice), false); + } +}; + +QTEST_GUILESS_MAIN(TestTheme) +#include "testtheme.moc" diff --git a/test/themeutils.cpp b/test/themeutils.cpp new file mode 100644 index 000000000000..763d58a1f997 --- /dev/null +++ b/test/themeutils.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2021 by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "themeutils.h" + +FakePaintDevice::FakePaintDevice() = default; + +QPaintEngine *FakePaintDevice::paintEngine() const +{ + return nullptr; +} + +void FakePaintDevice::setHidpi(bool value) +{ + _hidpi = value; +} + +int FakePaintDevice::metric(QPaintDevice::PaintDeviceMetric metric) const +{ + switch (metric) { + case QPaintDevice::PdmDevicePixelRatio: + if (_hidpi) { + return 2; + } + return 1; + default: + return QPaintDevice::metric(metric); + } +} diff --git a/test/themeutils.h b/test/themeutils.h new file mode 100644 index 000000000000..4e8327e54a14 --- /dev/null +++ b/test/themeutils.h @@ -0,0 +1,34 @@ +/* + * Copyright (C) by Felix Weilbach + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#pragma once + +#include +#include + +class FakePaintDevice : public QPaintDevice +{ +public: + FakePaintDevice(); + + QPaintEngine *paintEngine() const override; + + void setHidpi(bool value); + +protected: + int metric(QPaintDevice::PaintDeviceMetric metric) const override; + +private: + bool _hidpi = false; +}; From f55e5b18851e00b34a7f657371e3bb3b3d8922d4 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Tue, 16 Feb 2021 10:24:26 +0100 Subject: [PATCH 3/4] Restyle wizard Signed-off-by: Felix Weilbach --- src/gui/application.cpp | 3 -- src/gui/wizard/owncloudwizard.cpp | 62 ++++++++++++++++++++++++++----- src/gui/wizard/owncloudwizard.h | 4 ++ 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 2813ae45fe70..d23be5c145f2 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -338,9 +338,6 @@ Application::Application(int &argc, char **argv) FolderMan::instance()->setupFolders(); _proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy. - // Enable word wrapping of QInputDialog (#4197) - setStyleSheet("QInputDialog QLabel { qproperty-wordWrap:1; }"); - connect(AccountManager::instance(), &AccountManager::accountAdded, this, &Application::slotAccountStateAdded); connect(AccountManager::instance(), &AccountManager::accountRemoved, diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 4c57e96c1c67..92a7bcf6557b 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -47,9 +47,7 @@ Q_LOGGING_CATEGORY(lcWizard, "nextcloud.gui.wizard", QtInfoMsg) OwncloudWizard::OwncloudWizard(QWidget *parent) : QWizard(parent) , _account(nullptr) -#ifdef WITH_PROVIDERS , _welcomePage(new WelcomePage(this)) -#endif // WITH_PROVIDERS , _setupPage(new OwncloudSetupPage(this)) , _httpCredsPage(new OwncloudHttpCredsPage(this)) , _browserCredsPage(new OwncloudOAuthCredsPage) @@ -61,9 +59,7 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setObjectName("owncloudWizard"); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); -#ifdef WITH_PROVIDERS setPage(WizardCommon::Page_Welcome, _welcomePage); -#endif // WITH_PROVIDERS setPage(WizardCommon::Page_ServerSetup, _setupPage); setPage(WizardCommon::Page_HttpCreds, _httpCredsPage); setPage(WizardCommon::Page_OAuthCreds, _browserCredsPage); @@ -76,7 +72,6 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) // note: start Id is set by the calling class depending on if the // welcome text is to be shown or not. - setWizardStyle(QWizard::ModernStyle); connect(this, &QWizard::currentIdChanged, this, &OwncloudWizard::slotCurrentPageChanged); connect(_setupPage, &OwncloudSetupPage::determineAuthType, this, &OwncloudWizard::determineAuthType); @@ -90,15 +85,11 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) Theme *theme = Theme::instance(); - setWindowTitle(tr("%1 Connection Wizard").arg(theme->appNameGUI())); + setWindowTitle(tr("Add %1 account").arg(theme->appNameGUI())); setWizardStyle(QWizard::ModernStyle); - setPixmap(QWizard::BannerPixmap, theme->wizardHeaderBanner()); - setPixmap(QWizard::LogoPixmap, theme->wizardHeaderLogo()); setOption(QWizard::NoBackButtonOnStartPage); setOption(QWizard::NoBackButtonOnLastPage); setOption(QWizard::NoCancelButton); - setTitleFormat(Qt::RichText); - setSubTitleFormat(Qt::RichText); setButtonText(QWizard::CustomButton1, tr("Skip folders configuration")); // Change the next buttons size policy since we hide it on the @@ -117,6 +108,48 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) // allow Flow2 page to poll on window activation connect(this, &OwncloudWizard::onActivate, _flow2CredsPage, &Flow2AuthCredsPage::slotPollNow); + + adjustWizardSize(); + centerWindow(); +} + +void OwncloudWizard::centerWindow() +{ + const auto wizardWindow = window(); + const auto screenGeometry = QGuiApplication::screenAt(wizardWindow->pos())->geometry(); + const auto windowGeometry = wizardWindow->geometry(); + const auto newWindowPosition = screenGeometry.center() - QPoint(windowGeometry.width() / 2, windowGeometry.height() / 2); + wizardWindow->move(newWindowPosition); +} + + +void OwncloudWizard::adjustWizardSize() +{ + const auto pageSizes = calculateWizardPageSizes(); + const auto longestSide = calculateLongestSideOfWizardPages(pageSizes); + + resize(QSize(longestSide, longestSide)); +} + +QList OwncloudWizard::calculateWizardPageSizes() const +{ + QList pageSizes; + const auto pIds = pageIds(); + + std::transform(pIds.cbegin(), pIds.cend(), std::back_inserter(pageSizes), [this](int pageId) { + auto p = page(pageId); + p->adjustSize(); + return p->sizeHint(); + }); + + return pageSizes; +} + +int OwncloudWizard::calculateLongestSideOfWizardPages(const QList &pageSizes) const +{ + return std::accumulate(std::cbegin(pageSizes), std::cend(pageSizes), 0, [](int current, const QSize &size) { + return std::max({ current, size.width(), size.height() }); + }); } void OwncloudWizard::setAccount(AccountPtr account) @@ -337,6 +370,15 @@ void OwncloudWizard::changeEvent(QEvent *e) void OwncloudWizard::customizeStyle() { // HINT: Customize wizard's own style here, if necessary in the future (Dark-/Light-Mode switching) + + // Set background colors + auto wizardPalette = palette(); + const auto backgroundColor = wizardPalette.color(QPalette::Window); + wizardPalette.setColor(QPalette::Base, backgroundColor); + // Set separator color + wizardPalette.setColor(QPalette::Mid, backgroundColor); + + setPalette(wizardPalette); } void OwncloudWizard::bringToTop() diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h index 3c6fb5c6e1f8..e8480d3bda70 100644 --- a/src/gui/wizard/owncloudwizard.h +++ b/src/gui/wizard/owncloudwizard.h @@ -74,6 +74,7 @@ class OwncloudWizard : public QWizard AbstractCredentials *getCredentials() const; void bringToTop(); + void centerWindow(); /** * Shows a dialog explaining the virtual files mode and warning about it @@ -114,6 +115,9 @@ public slots: private: void customizeStyle(); + void adjustWizardSize(); + int calculateLongestSideOfWizardPages(const QList &pageSizes) const; + QList calculateWizardPageSizes() const; AccountPtr _account; WelcomePage *_welcomePage; From e0b7ef15b207f59d73884f8e1c12a206803c5c40 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Tue, 16 Feb 2021 10:32:20 +0100 Subject: [PATCH 4/4] Restyle wizard pages Signed-off-by: Felix Weilbach --- src/gui/owncloudsetupwizard.cpp | 2 +- src/gui/wizard/flow2authcredspage.cpp | 5 +- src/gui/wizard/flow2authwidget.cpp | 52 +- src/gui/wizard/flow2authwidget.h | 1 + src/gui/wizard/flow2authwidget.ui | 179 +++- src/gui/wizard/owncloudadvancedsetuppage.cpp | 176 +++- src/gui/wizard/owncloudadvancedsetuppage.h | 13 +- src/gui/wizard/owncloudadvancedsetuppage.ui | 978 +++++++++++++------ src/gui/wizard/owncloudsetupnocredspage.ui | 470 ++++----- src/gui/wizard/owncloudsetuppage.cpp | 140 ++- src/gui/wizard/owncloudsetuppage.h | 2 + src/gui/wizard/owncloudwizard.cpp | 3 +- src/gui/wizard/owncloudwizardcommon.h | 2 + src/gui/wizard/webview.ui | 6 +- src/gui/wizard/webviewpage.cpp | 40 + src/gui/wizard/webviewpage.h | 6 + src/libsync/nextcloudtheme.cpp | 2 +- 17 files changed, 1286 insertions(+), 791 deletions(-) diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 2c964d5ced07..51c727208a14 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -116,7 +116,7 @@ void OwncloudSetupWizard::startWizard() // if its a relative path, prepend with users home dir, otherwise use as absolute path if (!QDir(localFolder).isAbsolute()) { - localFolder = QDir::homePath() + QDir::separator() + localFolder; + localFolder = QDir::homePath() + QLatin1Char('/') + localFolder; } _ocWizard->setProperty("localFolder", localFolder); diff --git a/src/gui/wizard/flow2authcredspage.cpp b/src/gui/wizard/flow2authcredspage.cpp index 33bced5837b8..e03b9a50faba 100644 --- a/src/gui/wizard/flow2authcredspage.cpp +++ b/src/gui/wizard/flow2authcredspage.cpp @@ -33,9 +33,6 @@ Flow2AuthCredsPage::Flow2AuthCredsPage() { _layout = new QVBoxLayout(this); - setTitle(WizardCommon::titleTemplate().arg(tr("Connect to %1").arg(Theme::instance()->appNameGUI()))); - setSubTitle(WizardCommon::subTitleTemplate().arg(tr("Login in your browser (Login Flow v2)"))); - _flow2AuthWidget = new Flow2AuthWidget(); _layout->addWidget(_flow2AuthWidget); @@ -59,6 +56,8 @@ void Flow2AuthCredsPage::initializePage() // Don't hide the wizard (avoid user confusion)! //wizard()->hide(); + + _flow2AuthWidget->slotStyleChanged(); } void OCC::Flow2AuthCredsPage::cleanupPage() diff --git a/src/gui/wizard/flow2authwidget.cpp b/src/gui/wizard/flow2authwidget.cpp index 86a6ebb4ad9b..04b78d5cca83 100644 --- a/src/gui/wizard/flow2authwidget.cpp +++ b/src/gui/wizard/flow2authwidget.cpp @@ -17,6 +17,8 @@ #include "common/utility.h" #include "account.h" #include "wizard/owncloudwizardcommon.h" +#include "theme.h" +#include "linklabel.h" #include "QProgressIndicator.h" @@ -34,13 +36,23 @@ Flow2AuthWidget::Flow2AuthWidget(QWidget *parent) WizardCommon::initErrorLabel(_ui.errorLabel); _ui.errorLabel->setTextFormat(Qt::RichText); - connect(_ui.openLinkButton, &QCommandLinkButton::clicked, this, &Flow2AuthWidget::slotOpenBrowser); - connect(_ui.copyLinkButton, &QCommandLinkButton::clicked, this, &Flow2AuthWidget::slotCopyLinkToClipboard); + connect(_ui.openLinkLabel, &LinkLabel::clicked, this, &Flow2AuthWidget::slotOpenBrowser); + connect(_ui.copyLinkLabel, &LinkLabel::clicked, this, &Flow2AuthWidget::slotCopyLinkToClipboard); - _ui.horizontalLayout->addWidget(_progressIndi); + auto sizePolicy = _progressIndi->sizePolicy(); + sizePolicy.setRetainSizeWhenHidden(true); + _progressIndi->setSizePolicy(sizePolicy); + + _ui.progressLayout->addWidget(_progressIndi); stopSpinner(false); +} - customizeStyle(); +void Flow2AuthWidget::setLogo() +{ + const auto backgroundColor = palette().window().color(); + const auto logoIconFileName = Theme::instance()->isBranded() ? Theme::hidpiFileName("external.png", backgroundColor) + : Theme::hidpiFileName(":/client/theme/colored/external.png"); + _ui.logoLabel->setPixmap(logoIconFileName); } void Flow2AuthWidget::startAuth(Account *account) @@ -160,24 +172,24 @@ void Flow2AuthWidget::slotStatusChanged(Flow2Auth::PollStatus status, int second void Flow2AuthWidget::startSpinner() { - _ui.horizontalLayout->setEnabled(true); + _ui.progressLayout->setEnabled(true); _ui.statusLabel->setVisible(true); _progressIndi->setVisible(true); _progressIndi->startAnimation(); - _ui.openLinkButton->setEnabled(false); - _ui.copyLinkButton->setEnabled(false); + _ui.openLinkLabel->setEnabled(false); + _ui.copyLinkLabel->setEnabled(false); } void Flow2AuthWidget::stopSpinner(bool showStatusLabel) { - _ui.horizontalLayout->setEnabled(false); + _ui.progressLayout->setEnabled(false); _ui.statusLabel->setVisible(showStatusLabel); _progressIndi->setVisible(false); _progressIndi->stopAnimation(); - _ui.openLinkButton->setEnabled(_statusUpdateSkipCount == 0); - _ui.copyLinkButton->setEnabled(_statusUpdateSkipCount == 0); + _ui.openLinkLabel->setEnabled(_statusUpdateSkipCount == 0); + _ui.copyLinkLabel->setEnabled(_statusUpdateSkipCount == 0); } void Flow2AuthWidget::slotStyleChanged() @@ -187,8 +199,24 @@ void Flow2AuthWidget::slotStyleChanged() void Flow2AuthWidget::customizeStyle() { - if(_progressIndi) - _progressIndi->setColor(QGuiApplication::palette().color(QPalette::Text)); + setLogo(); + + if (_progressIndi) { + const auto isDarkBackground = Theme::isDarkColor(palette().window().color()); + if (isDarkBackground) { + _progressIndi->setColor(Qt::white); + } else { + _progressIndi->setColor(Qt::black); + } + } + + _ui.openLinkLabel->setText(tr("Reopen Browser")); + _ui.openLinkLabel->setAlignment(Qt::AlignCenter); + + _ui.copyLinkLabel->setText(tr("Copy Link")); + _ui.copyLinkLabel->setAlignment(Qt::AlignCenter); + + WizardCommon::customizeHintLabel(_ui.statusLabel); } } // namespace OCC diff --git a/src/gui/wizard/flow2authwidget.h b/src/gui/wizard/flow2authwidget.h index 8c13806b1258..90095c79c14c 100644 --- a/src/gui/wizard/flow2authwidget.h +++ b/src/gui/wizard/flow2authwidget.h @@ -60,6 +60,7 @@ protected slots: void startSpinner(); void stopSpinner(bool showStatusLabel); void customizeStyle(); + void setLogo(); QProgressIndicator *_progressIndi; int _statusUpdateSkipCount = 0; diff --git a/src/gui/wizard/flow2authwidget.ui b/src/gui/wizard/flow2authwidget.ui index 57f23186d814..44961ddae1a2 100644 --- a/src/gui/wizard/flow2authwidget.ui +++ b/src/gui/wizard/flow2authwidget.ui @@ -27,44 +27,138 @@ - - - Please switch to your browser to proceed. - - - true - - - - - - - An error occurred while connecting. Please try again. + + + Qt::Vertical - - Qt::PlainText + + QSizePolicy::Expanding - - - - - - Re-open Browser + + + 20 + 80 + - + - - - - 50 - false - + + + 0 - - Copy link + + 0 - + + + + Logo + + + Qt::AlignCenter + + + + + + + + 12 + 75 + true + + + + Switch to your browser to connect your account + + + Qt::AlignCenter + + + true + + + + + + + Status + + + Qt::AlignCenter + + + 0 + + + + + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + An error occurred while connecting. Please try again. + + + Qt::PlainText + + + Qt::AlignCenter + + + + + + + @@ -79,19 +173,6 @@ - - - - TextLabel - - - Qt::AlignCenter - - - - - - @@ -100,13 +181,21 @@ 20 - 107 + 80 + + + OCC::LinkLabel + QWidget +
wizard/linklabel.h
+ 1 +
+
diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index b3d45bb6152f..9249ea45a282 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "QProgressIndicator.h" @@ -32,27 +33,31 @@ #include #include "creds/abstractcredentials.h" #include "networkjobs.h" +#include "wizard/owncloudwizard.h" namespace OCC { -OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage() +OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage(OwncloudWizard *wizard) : QWizardPage() , _progressIndi(new QProgressIndicator(this)) + , _ocWizard(wizard) { _ui.setupUi(this); - Theme *theme = Theme::instance(); - setTitle(WizardCommon::titleTemplate().arg(tr("Connect to %1").arg(theme->appNameGUI()))); - setSubTitle(WizardCommon::subTitleTemplate().arg(tr("Setup local folder options"))); + setupResoultionWidget(); registerField(QLatin1String("OCSyncFromScratch"), _ui.cbSyncFromScratch); + auto sizePolicy = _progressIndi->sizePolicy(); + sizePolicy.setRetainSizeWhenHidden(true); + _progressIndi->setSizePolicy(sizePolicy); + _ui.resultLayout->addWidget(_progressIndi); stopSpinner(); setupCustomization(); connect(_ui.pbSelectLocalFolder, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectFolder); - setButtonText(QWizard::NextButton, tr("Connect …")); + setButtonText(QWizard::NextButton, tr("Connect")); connect(_ui.rSyncEverything, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSyncEverythingClicked); connect(_ui.rSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); @@ -65,13 +70,11 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage() }); connect(_ui.bSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); - QIcon appIcon = theme->applicationIcon(); - _ui.lServerIcon->setText(QString()); - _ui.lServerIcon->setPixmap(appIcon.pixmap(48)); - _ui.lLocalIcon->setText(QString()); - - // TO DO: File doesn't exist anymore - unneccessary or replacement needed? - _ui.lLocalIcon->setPixmap(QPixmap(Theme::hidpiFileName(":/client/theme/folder-sync.png"))); + const auto theme = Theme::instance(); + const auto appIcon = theme->applicationIcon(); + const auto appIconSize = Theme::isHidpi() ? 128 : 64; + + _ui.lServerIcon->setPixmap(appIcon.pixmap(appIconSize)); if (theme->wizardHideExternalStorageConfirmationCheckbox()) { _ui.confCheckBoxExternal->hide(); @@ -106,6 +109,11 @@ void OwncloudAdvancedSetupPage::setupCustomization() variant = theme->customMedia(Theme::oCSetupBottom); WizardCommon::setupCustomMedia(variant, _ui.bottomLabel); + + WizardCommon::customizeHintLabel(_ui.lFreeSpace); + WizardCommon::customizeHintLabel(_ui.lSyncEverythingSizeLabel); + WizardCommon::customizeHintLabel(_ui.lSelectiveSyncSizeLabel); + WizardCommon::customizeHintLabel(_ui.serverAddressLabel); } bool OwncloudAdvancedSetupPage::isComplete() const @@ -158,6 +166,69 @@ void OwncloudAdvancedSetupPage::initializePage() _ui.confCheckBoxSize->setChecked(newFolderLimit.first); _ui.confSpinBox->setValue(newFolderLimit.second); _ui.confCheckBoxExternal->setChecked(cfgFile.confirmExternalStorage()); + + fetchUserAvatar(); + fetchUserData(); + + customizeStyle(); + + auto nextButton = qobject_cast(_ocWizard->button(QWizard::NextButton)); + if (nextButton) { + nextButton->setDefault(true); + } +} + +void OwncloudAdvancedSetupPage::fetchUserAvatar() +{ + // Reset user avatar + const auto appIcon = Theme::instance()->applicationIcon(); + _ui.lServerIcon->setPixmap(appIcon.pixmap(48)); + // Fetch user avatar + const auto account = _ocWizard->account(); + auto avatarSize = 64; + if (Theme::isHidpi()) { + avatarSize *= 2; + } + const auto avatarJob = new AvatarJob(account, account->davUser(), avatarSize, this); + avatarJob->setTimeout(20 * 1000); + QObject::connect(avatarJob, &AvatarJob::avatarPixmap, this, [this](const QImage &avatarImage) { + if (avatarImage.isNull()) { + return; + } + const auto avatarPixmap = QPixmap::fromImage(AvatarJob::makeCircularAvatar(avatarImage)); + _ui.lServerIcon->setPixmap(avatarPixmap); + }); + avatarJob->start(); +} + +void OwncloudAdvancedSetupPage::fetchUserData() +{ + const auto account = _ocWizard->account(); + + // Fetch user data + const auto userJob = new JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/user"), this); + userJob->setTimeout(20 * 1000); + connect(userJob, &JsonApiJob::jsonReceived, this, [this](const QJsonDocument &json) { + const auto objData = json.object().value("ocs").toObject().value("data").toObject(); + const auto displayName = objData.value("display-name").toString(); + _ui.userNameLabel->setText(displayName); + }); + userJob->start(); + + const auto serverUrl = account->url().toString(); + setServerAddressLabelUrl(serverUrl); + const auto userName = account->davDisplayName(); + _ui.userNameLabel->setText(userName); +} + +void OwncloudAdvancedSetupPage::setServerAddressLabelUrl(const QUrl &url) +{ + if (!url.isValid()) { + return; + } + + const auto prettyUrl = url.toString().mid(url.scheme().size() + 3); // + 3 because we need to remove :// + _ui.serverAddressLabel->setText(prettyUrl); } // Called if the user changes the user- or url field. Adjust the texts and @@ -172,7 +243,8 @@ void OwncloudAdvancedSetupPage::updateStatus() QString t; - _ui.pbSelectLocalFolder->setText(QDir::toNativeSeparators(locFolder)); + setLocalFolderPushButtonPath(locFolder); + if (dataChanged()) { if (_remoteFolder.isEmpty() || _remoteFolder == QLatin1String("/")) { t = ""; @@ -185,20 +257,18 @@ void OwncloudAdvancedSetupPage::updateStatus() const bool dirNotEmpty(QDir(locFolder).entryList(QDir::AllEntries | QDir::NoDotAndDotDot).count() > 0); if (dirNotEmpty) { - t += tr("

Warning: The local folder is not empty. " - "Pick a resolution!

"); + t += tr("Warning: The local folder is not empty. Pick a resolution!"); } - _ui.resolutionWidget->setVisible(dirNotEmpty); + setResolutionGuiVisible(dirNotEmpty); } else { - _ui.resolutionWidget->setVisible(false); + setResolutionGuiVisible(false); } QString lfreeSpaceStr = Utility::octetsToString(availableLocalSpace()); - _ui.lFreeSpace->setText(QString(tr("Free space: %1")).arg(lfreeSpaceStr)); + _ui.lFreeSpace->setText(QString(tr("%1 free space", "%1 gets replaced with the size and a matching unit. Example: 3 MB or 5 GB")).arg(lfreeSpaceStr)); _ui.syncModeLabel->setText(t); _ui.syncModeLabel->setFixedHeight(_ui.syncModeLabel->sizeHint().height()); - wizard()->resize(wizard()->sizeHint()); qint64 rSpace = _ui.rSyncEverything->isChecked() ? _rSize : _rSelectedSize; @@ -211,6 +281,13 @@ void OwncloudAdvancedSetupPage::updateStatus() emit completeChanged(); } +void OwncloudAdvancedSetupPage::setResolutionGuiVisible(bool value) +{ + _ui.syncModeLabel->setVisible(value); + _ui.rKeepLocal->setVisible(value); + _ui.cbSyncFromScratch->setVisible(value); +} + /* obsolete */ bool OwncloudAdvancedSetupPage::dataChanged() { @@ -334,7 +411,7 @@ void OwncloudAdvancedSetupPage::slotSelectFolder() { QString dir = QFileDialog::getExistingDirectory(nullptr, tr("Local Sync Folder"), QDir::homePath()); if (!dir.isEmpty()) { - _ui.pbSelectLocalFolder->setText(dir); + setLocalFolderPushButtonPath(dir); wizard()->setProperty("localFolder", dir); updateStatus(); } @@ -344,6 +421,22 @@ void OwncloudAdvancedSetupPage::slotSelectFolder() setErrorString(errorStr); } + +void OwncloudAdvancedSetupPage::setLocalFolderPushButtonPath(const QString &path) +{ + const auto homeDir = QDir::homePath().endsWith('/') ? QDir::homePath() : QDir::homePath() + QLatin1Char('/'); + + if (!path.startsWith(homeDir)) { + _ui.pbSelectLocalFolder->setText(QDir::toNativeSeparators(path)); + return; + } + + auto prettyPath = path; + prettyPath.remove(0, homeDir.size()); + + _ui.pbSelectLocalFolder->setText(QDir::toNativeSeparators(prettyPath)); +} + void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() { AccountPtr acc = static_cast(wizard())->account(); @@ -384,6 +477,8 @@ void OwncloudAdvancedSetupPage::slotSelectiveSyncClicked() wizard()->setProperty("blacklist", _selectiveSyncBlacklist); } + updateStatus(); + }); dlg->open(); } @@ -439,8 +534,25 @@ void OwncloudAdvancedSetupPage::slotStyleChanged() void OwncloudAdvancedSetupPage::customizeStyle() { - if(_progressIndi) - _progressIndi->setColor(QGuiApplication::palette().color(QPalette::Text)); + if (_progressIndi) { + const auto isDarkBackground = Theme::isDarkColor(palette().window().color()); + if (isDarkBackground) { + _progressIndi->setColor(Qt::white); + } else { + _progressIndi->setColor(Qt::black); + } + } + + styleSyncLogo(); + styleLocalFolderLabel(); +} + +void OwncloudAdvancedSetupPage::styleLocalFolderLabel() +{ + const auto backgroundColor = palette().window().color(); + const auto folderIconFileName = Theme::instance()->isBranded() ? Theme::hidpiFileName("folder.png", backgroundColor) + : Theme::hidpiFileName(":/client/theme/colored/folder.png"); + _ui.lLocal->setPixmap(folderIconFileName); } void OwncloudAdvancedSetupPage::setRadioChecked(QRadioButton *radio) @@ -457,4 +569,24 @@ void OwncloudAdvancedSetupPage::setRadioChecked(QRadioButton *radio) _ui.rVirtualFileSync->setCheckable(false); } +void OwncloudAdvancedSetupPage::styleSyncLogo() +{ + const auto syncArrowIcon = Theme::createColorAwareIcon(QLatin1String(":/client/theme/sync-arrow.svg"), palette()); + _ui.syncLogoLabel->setPixmap(syncArrowIcon.pixmap(QSize(50, 50))); +} + +void OwncloudAdvancedSetupPage::setupResoultionWidget() +{ + for (int i = 0; i < _ui.resolutionWidgetLayout->count(); ++i) { + auto widget = _ui.resolutionWidgetLayout->itemAt(i)->widget(); + if (!widget) { + continue; + } + + auto sizePolicy = widget->sizePolicy(); + sizePolicy.setRetainSizeWhenHidden(true); + widget->setSizePolicy(sizePolicy); + } +} + } // namespace OCC diff --git a/src/gui/wizard/owncloudadvancedsetuppage.h b/src/gui/wizard/owncloudadvancedsetuppage.h index 7fcde225a716..8af948d9cc47 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.h +++ b/src/gui/wizard/owncloudadvancedsetuppage.h @@ -25,6 +25,8 @@ class QProgressIndicator; namespace OCC { +class OwncloudWizard; + /** * @brief The OwncloudAdvancedSetupPage class * @ingroup gui @@ -33,7 +35,7 @@ class OwncloudAdvancedSetupPage : public QWizardPage { Q_OBJECT public: - OwncloudAdvancedSetupPage(); + OwncloudAdvancedSetupPage(OwncloudWizard *wizard); bool isComplete() const override; void initializePage() override; @@ -73,6 +75,14 @@ private slots: qint64 availableLocalSpace() const; QString checkLocalSpace(qint64 remoteSize) const; void customizeStyle(); + void setServerAddressLabelUrl(const QUrl &url); + void setLocalFolderPushButtonPath(const QString &path); + void styleSyncLogo(); + void styleLocalFolderLabel(); + void setResolutionGuiVisible(bool value); + void setupResoultionWidget(); + void fetchUserAvatar(); + void fetchUserData(); Ui_OwncloudAdvancedSetupPage _ui; bool _checking = false; @@ -83,6 +93,7 @@ private slots: QStringList _selectiveSyncBlacklist; qint64 _rSize = -1; qint64 _rSelectedSize = -1; + OwncloudWizard *_ocWizard; }; } // namespace OCC diff --git a/src/gui/wizard/owncloudadvancedsetuppage.ui b/src/gui/wizard/owncloudadvancedsetuppage.ui index 3b3b688dd80f..075de08409c7 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.ui +++ b/src/gui/wizard/owncloudadvancedsetuppage.ui @@ -11,7 +11,7 @@ - + 0 0 @@ -48,7 +48,7 @@ Qt::Vertical - QSizePolicy::Fixed + QSizePolicy::Expanding @@ -59,9 +59,291 @@ - - - + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + Avatar + + + Qt::AlignCenter + + + + + + + + 75 + true + + + + User name + + + Qt::AlignCenter + + + + + + + Server address + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + Sync Logo + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + 0 + 0 + + + + &Local Folder + + + Qt::AlignCenter + + + pbSelectLocalFolder + + + + + + + + 75 + true + + + + Local Folder + + + Qt::AlignCenter + + + + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 0 + 20 + + + + + + + + + 0 + 0 + + + + pbSelectLocalFolder + + + true + + + false + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 0 + 20 + + + + + + + + + + + 0 + 0 + + + + Free space + + + Qt::AlignCenter + + + + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal @@ -73,378 +355,428 @@ - - - - - 0 - - - 0 - - - + + + + + + QLayout::SetMinimumSize + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 0 + + + 0 + + + + + 0 + + + 0 + + + + + 0 + + + + + Synchronize everything from server + + + true + + + + + + + Size + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 20 + 20 + + + + + + + + Ask before syncing folders larger than + + + + + + + + 0 + 0 + + + + Qt::StrongFocus + + + 999999 + + + 99 + + + + + + + MB + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 20 + 20 + + + + + + + + Ask before syncing external storages + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 0 + + + + + + 0 + 0 + + + + + + + false + + + + + + + Choose what to sync + + + true + + + false + + + + + + + TextLabel + + + Qt::PlainText + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + Use virtual files !PLACEHOLDER! + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + + 6 + + + QLayout::SetMinimumSize + + + 0 + + + 2 + + + 0 + + + 0 + - - - S&ynchronize everything from server + + + + 0 + 0 + - - true + + + 9 + 75 + true + + + + 1 - - - - - TextLabel + Status message - Qt::PlainText + Qt::AutoText - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - 0 - - - - - Qt::Horizontal + + Qt::AlignCenter - - QSizePolicy::Minimum - - - - 10 - 20 - - - - - - - - - - Ask for confirmation before synchroni&zing folders larger than - - - - - - - 999999 - - - 99 - - - - - - - MB - - - - - - - - - Ask for confirmation before synchronizing e&xternal storages + + false - - - - - + - + 0 0 - - - - false - - - - - - - Choose what to sync - - - - - - - TextLabel + Keep local data - - Qt::PlainText + + true - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - + - + 0 0 + + <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> + - Use &virtual files !PLACEHOLDER! + Erase local folder and start a clean sync - false + true - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - TextLabel - - - Qt::AlignCenter - - - - - - - - 0 - 0 - - - - &Local Folder - - - Qt::AlignCenter - - - pbSelectLocalFolder - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 0 - 0 - - - - pbSelectLocalFolder - - - - - - - - - TextLabel - - - Qt::AlignCenter - - - - - - - Server - - - Qt::AlignCenter - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - 0 - 0 - - - - - QLayout::SetMinimumSize - - - QFormLayout::ExpandingFieldsGrow - - - - - &Keep local data - - - true - - - - - - - <html><head/><body><p>If this box is checked, existing content in the local folder will be erased to start a clean sync from the server.</p><p>Do not check this if the local content should be uploaded to the servers folder.</p></body></html> - - - Start a &clean sync (Erases the local folder!) - - - true - - - - - - - - + + - Qt::Vertical - - - QSizePolicy::MinimumExpanding + Qt::Horizontal - 20 - 40 + 40 + 20 - - - - TextLabel - - - - - - TextLabel + + + Qt::Vertical - + + QSizePolicy::Expanding + + + + 20 + 40 + + + - + - Status message - - - Qt::RichText - - - Qt::AlignCenter - - - true + TextLabel diff --git a/src/gui/wizard/owncloudsetupnocredspage.ui b/src/gui/wizard/owncloudsetupnocredspage.ui index d3e62595e06d..d67873450da9 100644 --- a/src/gui/wizard/owncloudsetupnocredspage.ui +++ b/src/gui/wizard/owncloudsetupnocredspage.ui @@ -6,12 +6,12 @@ 0 0 - 802 - 629 + 556 + 489 - + 0 0 @@ -27,102 +27,84 @@ - + + + TextLabel + + + + + Qt::Vertical - QSizePolicy::MinimumExpanding + QSizePolicy::Expanding 20 - 20 + 80 - - - - 0 - 0 - - - - TextLabel - - - Qt::RichText - - - Qt::AlignCenter - - - true + + + 0 - - - - - - - - 40 - 0 - + + + Qt::Horizontal - + - 40 - 16777215 + 0 + 0 - - - - - true - - + - - - - 12 - 75 - true - + + + Logo - - - - 40 - 0 - + + + Qt::Horizontal - + - 40 - 16777215 + 0 + 0 - - - - - true - - + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 0 + 0 + + + + @@ -143,38 +125,28 @@ + + 0 + QLayout::SetDefaultConstraint - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 40 - 0 - - - - + + 6 + Qt::Vertical - QSizePolicy::MinimumExpanding + QSizePolicy::Minimum - 20 + 0 0 @@ -182,73 +154,138 @@ + + 0 + - - - - 0 - 0 - + + + Qt::Horizontal - - Server Address + + + 0 + 0 + - - leUrl + + + + + + + 12 + 75 + true + + + + Server address - - - - 0 - 0 - + + + Qt::Horizontal - - + + + 0 + 0 + - + + + + + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 80 + 0 + + + - - + + + 8 + + 0 + + + + + 0 + 0 + + + + + 200 + 0 + + + + https://try.nextcloud.com + + + + + + + + 0 + 0 + + + + This is the link to your %1 web interface when you open it in the browser. + + + Qt::AlignCenter + + + true + + + - - - - 0 - 0 - + + + Qt::Horizontal + + + QSizePolicy::Expanding - + - 24 - 24 + 80 + 0 - - - - + - - - - This is the link to your %1 web interface when you open it in the browser.<br/>It looks like https://cloud.example.com or https://example.com/cloud - - - true - - - @@ -268,6 +305,9 @@ + + + @@ -278,7 +318,7 @@ - 20 + 0 0 @@ -286,22 +326,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Preferred - - - - 40 - 0 - - - - @@ -317,163 +341,26 @@ - 20 - 20 + 0 + 0 - - - 6 - - - 20 + + + TextLabel - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 150 - 0 - - - - false - - - Sign up with a provider - - - false - - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - Log in to your %1 - - - false - - - true - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + 0 - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - <a href="https://docs.nextcloud.com/server/latest/admin_manual/installation/#installation"><span style=" text-decoration: underline; color:#7a7a7a;">Host your own server</span></a> - - - true - - - Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - TextLabel - - - Qt::RichText - - - @@ -482,11 +369,6 @@ QLineEdit
wizard/postfixlineedit.h
- - OCC::SlideShow - QWidget -
wizard/slideshow.h
-
diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index eff655e000c3..800d965d65df 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -45,10 +45,9 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) { _ui.setupUi(this); - Theme *theme = Theme::instance(); - setTitle(WizardCommon::titleTemplate().arg(tr("Connect to %1").arg(theme->appNameGUI()))); - setSubTitle(WizardCommon::subTitleTemplate().arg(tr("Setup %1 server").arg(theme->appNameGUI()))); + setupServerAddressDescriptionLabel(); + Theme *theme = Theme::instance(); if (theme->overrideServerUrl().isEmpty()) { _ui.leUrl->setPostfix(theme->wizardUrlPostfix()); _ui.leUrl->setPlaceholderText(theme->wizardUrlHint()); @@ -59,7 +58,11 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) registerField(QLatin1String("OCUrl*"), _ui.leUrl); - _ui.resultLayout->addWidget(_progressIndi); + auto sizePolicy = _progressIndi->sizePolicy(); + sizePolicy.setRetainSizeWhenHidden(true); + _progressIndi->setSizePolicy(sizePolicy); + + _ui.progressLayout->addWidget(_progressIndi); stopSpinner(); setupCustomization(); @@ -70,35 +73,17 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) addCertDial = new AddCertificateDialog(this); connect(addCertDial, &QDialog::accepted, this, &OwncloudSetupPage::slotCertificateAccepted); +} -#ifdef WITH_PROVIDERS - connect(_ui.loginButton, &QPushButton::clicked, this, &OwncloudSetupPage::slotLogin); - connect(_ui.createAccountButton, &QPushButton::clicked, this, &OwncloudSetupPage::slotGotoProviderList); - - _ui.login->hide(); - _ui.slideShow->addSlide(Theme::hidpiFileName(":/client/theme/colored/wizard-nextcloud.png"), tr("Keep your data secure and under your control")); - _ui.slideShow->addSlide(Theme::hidpiFileName(":/client/theme/colored/wizard-files.png"), tr("Secure collaboration & file exchange")); - _ui.slideShow->addSlide(Theme::hidpiFileName(":/client/theme/colored/wizard-groupware.png"), tr("Easy-to-use web mail, calendaring & contacts")); - _ui.slideShow->addSlide(Theme::hidpiFileName(":/client/theme/colored/wizard-talk.png"), tr("Screensharing, online meetings & web conferences")); - - connect(_ui.slideShow, &SlideShow::clicked, _ui.slideShow, &SlideShow::stopShow); - connect(_ui.nextButton, &QPushButton::clicked, _ui.slideShow, &SlideShow::nextSlide); - connect(_ui.prevButton, &QPushButton::clicked, _ui.slideShow, &SlideShow::prevSlide); - - _ui.slideShow->startShow(); -#else - _ui.createAccountButton->hide(); - _ui.loginButton->hide(); - _ui.installLink->hide(); - _ui.slideShow->hide(); -#endif +void OwncloudSetupPage::setLogo() +{ + _ui.logoLabel->setPixmap(Theme::instance()->wizardApplicationLogo()); +} +void OwncloudSetupPage::setupServerAddressDescriptionLabel() +{ const auto appName = Theme::instance()->appNameGUI(); - _ui.loginButton->setText(tr("Log in to your %1").arg(appName)); - _ui.addressDescriptionLabel->setText(tr("This is the link to your %1 web interface when you open it in the browser.
" - "It looks like https://cloud.example.com or https://example.com/cloud").arg(appName)); - - customizeStyle(); + _ui.serverAddressDescriptionLabel->setText(tr("The link to your %1 web interface when you open it in the browser.", "%1 will be replaced with the application name").arg(appName)); } void OwncloudSetupPage::setServerUrl(const QString &newUrl) @@ -127,25 +112,17 @@ void OwncloudSetupPage::setupCustomization() variant = theme->customMedia(Theme::oCSetupBottom); WizardCommon::setupCustomMedia(variant, _ui.bottomLabel); + + auto leUrlPalette = _ui.leUrl->palette(); + leUrlPalette.setColor(QPalette::Text, Qt::black); + leUrlPalette.setColor(QPalette::Base, Qt::white); + _ui.leUrl->setPalette(leUrlPalette); } #ifdef WITH_PROVIDERS void OwncloudSetupPage::slotLogin() { - _ui.slideShow->hide(); - _ui.nextButton->hide(); - _ui.prevButton->hide(); - _ocWizard->setRegistration(false); - _ui.login->setMaximumHeight(0); - auto *animation = new QPropertyAnimation(_ui.login, "maximumHeight"); - animation->setDuration(0); - animation->setStartValue(500); - animation->setEndValue(500); - _ui.login->show(); - _ui.loginButton->hide(); - wizard()->resize(wizard()->sizeHint()); - animation->start(); } void OwncloudSetupPage::slotGotoProviderList() { @@ -160,6 +137,14 @@ void OwncloudSetupPage::slotGotoProviderList() // slot hit from textChanged of the url entry field. void OwncloudSetupPage::slotUrlChanged(const QString &url) { + // Need to set next button as default button here because + // otherwise the on OSX the next button does not stay the default + // button + auto nextButton = qobject_cast(_ocWizard->button(QWizard::NextButton)); + if (nextButton) { + nextButton->setDefault(true); + } + _authTypeKnown = false; QString newUrl = url; @@ -181,16 +166,6 @@ void OwncloudSetupPage::slotUrlChanged(const QString &url) if (newUrl != url) { _ui.leUrl->setText(newUrl); } - - const auto isSecure = url.startsWith(QLatin1String("https://")); - const auto toolTip = isSecure ? tr("This URL is secure. You can use it.") - : tr("This URL is NOT secure as it is not encrypted.\n" - "It is not advisable to use it."); - const auto pixmap = isSecure ? QPixmap(Theme::hidpiFileName(":/client/theme/lock-https.svg")) - : QPixmap(Theme::hidpiFileName(":/client/theme/lock-http.svg")); - - _ui.urlLabel->setToolTip(toolTip); - _ui.urlLabel->setPixmap(pixmap.scaled(_ui.urlLabel->size(), Qt::KeepAspectRatio)); } void OwncloudSetupPage::slotUrlEditFinished() @@ -210,6 +185,8 @@ bool OwncloudSetupPage::isComplete() const void OwncloudSetupPage::initializePage() { + customizeStyle(); + WizardCommon::initErrorLabel(_ui.errorLabel); _authTypeKnown = false; @@ -217,26 +194,29 @@ void OwncloudSetupPage::initializePage() QAbstractButton *nextButton = wizard()->button(QWizard::NextButton); auto *pushButton = qobject_cast(nextButton); - if (pushButton) + if (pushButton) { pushButton->setDefault(true); + } + + _ui.leUrl->setFocus(); - // If url is overriden by theme, it's already set and - // we just check the server type and switch to second page - // immediately. - if (Theme::instance()->overrideServerUrl().isEmpty()) { - _ui.leUrl->setFocus(); - } else if (!Theme::instance()->forceOverrideServerUrl()) { + const auto isServerUrlOverridden = !Theme::instance()->overrideServerUrl().isEmpty(); + if (isServerUrlOverridden && !Theme::instance()->forceOverrideServerUrl()) { + // If the url is overwritten but we don't force to use that url + // Just focus the next button to let the user navigate quicker if (nextButton) { nextButton->setFocus(); } - } else { + } else if (isServerUrlOverridden) { + // If the overwritten url is not empty and we force this overwritten url + // we just check the server type and switch to next page + // immediately. setCommitPage(true); // Hack: setCommitPage() changes caption, but after an error this page could still be visible setButtonText(QWizard::CommitButton, tr("&Next >")); validatePage(); setVisible(false); } - wizard()->resize(wizard()->sizeHint()); } int OwncloudSetupPage::nextId() const @@ -269,7 +249,7 @@ bool OwncloudSetupPage::validatePage() QString u = url(); QUrl qurl(u); if (!qurl.isValid() || qurl.host().isEmpty()) { - setErrorString(tr("Invalid URL"), false); + setErrorString(tr("Server address does not seem to be valid"), false); return false; } @@ -338,21 +318,18 @@ void OwncloudSetupPage::setErrorString(const QString &err, bool retryHTTPonly) _checking = false; emit completeChanged(); stopSpinner(); - wizard()->resize(wizard()->sizeHint()); } void OwncloudSetupPage::startSpinner() { - _ui.resultLayout->setEnabled(true); - _ui.urlLabel->setVisible(false); + _ui.progressLayout->setEnabled(true); _progressIndi->setVisible(true); _progressIndi->startAnimation(); } void OwncloudSetupPage::stopSpinner() { - _ui.resultLayout->setEnabled(false); - _ui.urlLabel->setVisible(true); + _ui.progressLayout->setEnabled(false); _progressIndi->setVisible(false); _progressIndi->stopAnimation(); } @@ -397,24 +374,19 @@ void OwncloudSetupPage::slotStyleChanged() void OwncloudSetupPage::customizeStyle() { -#ifdef WITH_PROVIDERS - Theme *theme = Theme::instance(); - - bool widgetHasDarkBg = Theme::isDarkColor(QGuiApplication::palette().base().color()); - _ui.nextButton->setIcon(theme->uiThemeIcon(QString("control-next.svg"), widgetHasDarkBg)); - _ui.prevButton->setIcon(theme->uiThemeIcon(QString("control-prev.svg"), widgetHasDarkBg)); - - // QPushButtons are a mess when it comes to consistent background coloring without stylesheets, - // so we do it here even though this is an exceptional styling method here - _ui.createAccountButton->setStyleSheet("QPushButton {background-color: #0082C9; color: white}"); + setLogo(); + + if (_progressIndi) { + const auto isDarkBackground = Theme::isDarkColor(palette().window().color()); + if (isDarkBackground) { + _progressIndi->setColor(Qt::white); + } else { + _progressIndi->setColor(Qt::black); + } + } - QPalette pal = _ui.slideShow->palette(); - pal.setColor(QPalette::WindowText, theme->wizardHeaderBackgroundColor()); - _ui.slideShow->setPalette(pal); -#endif - if(_progressIndi) - _progressIndi->setColor(QGuiApplication::palette().color(QPalette::Text)); + WizardCommon::customizeHintLabel(_ui.serverAddressDescriptionLabel); } } // namespace OCC diff --git a/src/gui/wizard/owncloudsetuppage.h b/src/gui/wizard/owncloudsetuppage.h index 18b9c0135dc0..485a2bd62203 100644 --- a/src/gui/wizard/owncloudsetuppage.h +++ b/src/gui/wizard/owncloudsetuppage.h @@ -78,7 +78,9 @@ protected slots: void determineAuthType(const QString &); private: + void setLogo(); void customizeStyle(); + void setupServerAddressDescriptionLabel(); Ui_OwncloudSetupPage _ui; diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 92a7bcf6557b..4a8e3866204d 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -52,7 +52,7 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) , _httpCredsPage(new OwncloudHttpCredsPage(this)) , _browserCredsPage(new OwncloudOAuthCredsPage) , _flow2CredsPage(new Flow2AuthCredsPage) - , _advancedSetupPage(new OwncloudAdvancedSetupPage) + , _advancedSetupPage(new OwncloudAdvancedSetupPage(this)) , _resultPage(new OwncloudWizardResultPage) , _webViewPage(new WebViewPage(this)) { @@ -270,7 +270,6 @@ void OwncloudWizard::slotCurrentPageChanged(int id) auto nextButton = qobject_cast(button(QWizard::NextButton)); if (nextButton) { nextButton->setDefault(true); - nextButton->setFocus(); } }; diff --git a/src/gui/wizard/owncloudwizardcommon.h b/src/gui/wizard/owncloudwizardcommon.h index eb68c9279ab2..5ebcca01fc95 100644 --- a/src/gui/wizard/owncloudwizardcommon.h +++ b/src/gui/wizard/owncloudwizardcommon.h @@ -16,6 +16,8 @@ #ifndef MIRALL_OWNCLOUD_WIZARD_COMMON_H #define MIRALL_OWNCLOUD_WIZARD_COMMON_H +#include + class QVariant; class QLabel; class QRadioButton; diff --git a/src/gui/wizard/webview.ui b/src/gui/wizard/webview.ui index ba3588ca8776..8ab0665b7871 100644 --- a/src/gui/wizard/webview.ui +++ b/src/gui/wizard/webview.ui @@ -11,15 +11,15 @@ - + 0 0 - 800 - 650 + 0 + 0 diff --git a/src/gui/wizard/webviewpage.cpp b/src/gui/wizard/webviewpage.cpp index 01311e839bf6..7aae73fc8866 100644 --- a/src/gui/wizard/webviewpage.cpp +++ b/src/gui/wizard/webviewpage.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "owncloudwizard.h" #include "creds/webflowcredentials.h" @@ -24,6 +25,7 @@ WebViewPage::WebViewPage(QWidget *parent) _webView = new WebView(this); auto *layout = new QVBoxLayout(this); + layout->setMargin(0); layout->addWidget(_webView); setLayout(layout); @@ -52,6 +54,44 @@ void WebViewPage::initializePage() { } qCInfo(lcWizardWebiewPage()) << "Url to auth at: " << url; _webView->setUrl(QUrl(url)); + + _originalWizardSize = _ocWizard->size(); + resizeWizard(); +} + +void WebViewPage::resizeWizard() +{ + // The webview needs a little bit more space + auto wizardSizeChanged = tryToSetWizardSize(_originalWizardSize.width() * 2, _originalWizardSize.height() * 2); + + if (!wizardSizeChanged) { + wizardSizeChanged = tryToSetWizardSize(static_cast(_originalWizardSize.width() * 1.5), static_cast(_originalWizardSize.height() * 1.5)); + } + + if (wizardSizeChanged) { + _ocWizard->centerWindow(); + } +} + +bool WebViewPage::tryToSetWizardSize(int width, int height) +{ + const auto window = _ocWizard->window(); + const auto screenGeometry = QGuiApplication::screenAt(window->pos())->geometry(); + const auto windowWidth = screenGeometry.width(); + const auto windowHeight = screenGeometry.height(); + + if (width < windowWidth && height < windowHeight) { + _ocWizard->resize(width, height); + return true; + } + + return false; +} + +void WebViewPage::cleanupPage() +{ + _ocWizard->resize(_originalWizardSize); + _ocWizard->centerWindow(); } int WebViewPage::nextId() const { diff --git a/src/gui/wizard/webviewpage.h b/src/gui/wizard/webviewpage.h index 65f00c33bb96..c621e99f1e26 100644 --- a/src/gui/wizard/webviewpage.h +++ b/src/gui/wizard/webviewpage.h @@ -17,6 +17,7 @@ class WebViewPage : public AbstractCredentialsWizardPage ~WebViewPage(); void initializePage() override; + void cleanupPage() override; int nextId() const override; bool isComplete() const override; @@ -30,6 +31,9 @@ private slots: void urlCatched(QString user, QString pass, QString host); private: + void resizeWizard(); + bool tryToSetWizardSize(int width, int height); + OwncloudWizard *_ocWizard; WebView *_webView; @@ -37,6 +41,8 @@ private slots: QString _pass; bool _useSystemProxy; + + QSize _originalWizardSize; }; } diff --git a/src/libsync/nextcloudtheme.cpp b/src/libsync/nextcloudtheme.cpp index 0ec3f2d27398..2a709564c6e4 100644 --- a/src/libsync/nextcloudtheme.cpp +++ b/src/libsync/nextcloudtheme.cpp @@ -35,7 +35,7 @@ NextcloudTheme::NextcloudTheme() QString NextcloudTheme::wizardUrlHint() const { - return QString("https://host:port"); + return QString("https://try.nextcloud.com"); } }