From 81a5f785c774fd45cc31dfaabe3af0dc711142a9 Mon Sep 17 00:00:00 2001 From: anders_k Date: Tue, 30 Oct 2018 22:33:18 +0000 Subject: [PATCH] Use .nsi NSIS Menu if wxWidgets version is not found. git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7029 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Graphics/Icons/nsis-menu.ico | Bin 0 -> 39119 bytes Contrib/Graphics/SConscript | 1 + Examples/NSISMenu.nsi | 292 +++++++++++++++++++++++++++ Examples/SConscript | 1 + Examples/makensis.nsi | 27 ++- SConstruct | 3 +- 6 files changed, 312 insertions(+), 12 deletions(-) create mode 100644 Contrib/Graphics/Icons/nsis-menu.ico create mode 100644 Examples/NSISMenu.nsi diff --git a/Contrib/Graphics/Icons/nsis-menu.ico b/Contrib/Graphics/Icons/nsis-menu.ico new file mode 100644 index 0000000000000000000000000000000000000000..94396b40b02b2682986b410b441d8e16d39e893d GIT binary patch literal 39119 zcmeHw2V4`$`~GYaNkA0Bp@JyHPy`D_MG%FAlF&OU0tzY$c2E?sKu|=b2!e-QP|tcc zz!N*MoPv0wr=DG-f_i7eSTJW~e={3ak)s3%_y2tVpIe=Mv-8eQ-shQ_cgoHN05CuY z>gwuH(tt4rz&ro|iv{2{1MFe|uo=c_Y00ijl>p$Y0GM8O9oY$hu1t6XJTSllD|*8F zy92=G%C3za0Km-wFoyx@cNqfEcMbr?Fg?ry#-Ml_JOdyg&W)X*1}OysnSf{b5e5Me z3WZRC6aN8@qfaove<%u_8adXjTL(ZEP+qrgBLM3Fyu1V@JT}(JOES5!PF|8pcuB-V zfh4*_5}l!hmqMTl01^4^OOXjB@Dg#D4ue3RU;)#`!<)Xycw)hiTo_P!5C=^rh%?L& zDu{zKm;)9BQb2EZJlHe86S$V!8C32c0A3!q0q@I30VC7xz--thz~#RI<0ifZixS_< zZv5~39|Qj}@IT8yQ-1DyKy^++7Kt@DU@TTY0j7#|`F0Q*tn;@7n5t^M1hROn^VbAO z{VhRV#!z3EK&B=WV3e=-%My@kSptkwUk`KmrbY>%`a6B+2Ed^DJ3Xd?>>v+x_jh_s zMWtQ>nY!NnNc}AVMr&}tOid=hXf#;@5+A9SB|vIff;#;-HA)~;6A4KDchHEtWjT;~ zbv{Ds!0K%MyH3*EP%rzzD|36G{wy0RFHR zU=_81dO-^4XFmb@>1se1ieTWv02C2uFrTh4=)u5QCIpEW1OR^qFuVqh=im?#z+oOB z$0=M2ydVz@en0^p@go7~sT&7eI6T0&a|OHO0Qh}10B`nV;N3AJ@S)TT81&x?23lPL zwoY$ANZ4DjV9|eL6&ZW~o&RItf0F@XoKkP@f;tTH08}aoirR(RweEm%RMk2K6^=*h z6exzODpR27It7shj7JJtG@+nkb?Kp^{(;qxCq^vjM1`J~Oi%6H8D)nK6ivp%Xi`D# z^esIREmKfo?+Fz|K6TMZfufN@7XQr_A{r`W@x&Mdp1$dccnVdfpi;kffwFj+f=Z{8 z3RymIU<2=f(WHV(uS*XVM6^tSZbW>dkx*SUQlO7yJguH7M1HdLRAnmJr%}PT^i((o zs8bLb)a8Ss>l7#&exodZBAQUhqM-tQsP~OzG>n9E>1qJ-L>R~vQo%9-6)b^~f;NXG za6Wz(2&hkhfc_2uwa*RKCFU1+sOn5~Acxi!o!~MnyhI%UwW}HxUBU>Wqd;9-7oyvfbu{oA z_G>VLPOsAw9UZ)c5$Jwdzl1Ic2TP@(2xY<{Dw2`qsKZZu*6$dmevZ4uW6B1j%lt~~ zdCO0@qz)WY9=T5YHxEwagTVE}V>cXqv#1z^~ozssV98 zsHAQq?kDgLSNc0o!fBd5o#W7T>7{Y`S+U0r(}X{+ORDu?IJ-pT6Bs|!C3bDA^9 z-O8V)$x@XhUG!gman-p^;MC|vOCFbd>*LiolkQO}hAp4Jt2ET+{nklS{vJ45bZ*%x zft8)ua`pP4J!}4~5}ZpmTXLQ56=blrrrgw5)^ zwUXZJvc4b9V4J-}TbEs(#5!+yqK{vKuquPLpBeYuG|cqEw4sZcSyI(C4Czned;@F! zpakLB;VXLSn}147dzNoPxn~>^vFh{do0OcqN9sv5!AVW*R4I!idb=;#i)q|@{wlU` z#q4?AB@1TR|5@#x`wPD^!iRP)>-DS8on2tECnwKoCPl^j*Xq*;PO~qCwkEqDD}H0+ z!sdwHO`xQ5ts(j)Z1t|)BzjIi#%`^2{=gcS&!{$>F43OF&ySza{Yg?*RHC130kfSHk6ztErU`!dh%LsxNrKgIi zy+SEIw7t9f!D}C#kyUhSJ!(EjB z1Hopd`N#zRmZHx3R`+&~rN#WHr>+IUEGQA4n-5JNZ9&;lUJ)4SKBXJB31&qH;Ezl- zearYWg=4oftjjoWH&4r0mAA#67PCe#iv>W`<~^{`J^zjz-@ikJA!!)TqSe{3`i>u2Zk1K{psWJw?R45Z8y zSLBVC%rVXgz`*t8pzMv>NOstIsUR5xl`BD6s9vG7&`E;1QbDOUmR({o!bvnAo2cEN z!-@vrD4Q#$FL9^o?kUykX;iM}q6>tEl!p?Hi#h)HB3P0ozxJVk>Q@KZVaKEbxX{^) zZ7#Nfj7Mj1?akz`Kpz=UQHU>U92`YP(pZROB#q2Mel3;AH z^KAgqn1NPrQzk92g}GJbA33If1#)%SxHkaSpRXHV9yaO6KfGxhp=Wy7*R?iFxgX4b z_(fP`en0g6Yo%a=^xCX1-25Vq2a!W4^TZLuhl*}bo7q>=KavUZPr;mK`_F=RC%*pc z0K2$wpvd(GZvz0ekjbBu9x{%U<;@!N+Y~>`tNnnW7^a^3$P(tC_;@Q_WIuJn+xMb^ z!&P~AKTf7~7aNpJILP=(_rcOnyRZILHEZXB&$XJukvBRUlnf410#Pfu164NZsBc)u zec}J`iJguw=iRef?D9b+z>>UhxC_8X<}TjjbIiTNqLXV}oLpdixbj+yYdP-%jj^cg zK%}9>cIzV8kOfl=BKjWuxIHgT*HJm00k}-_jLnNU!oPRwb+b)*AGt_1zvs@0l=mNf zET2E9QNO(4Zwv3@SGQ}ZKzOxy>~C`nwp%>a24`QdA@{`_OkTaUksO7|Do9pA>dH8C6+Yx0D7Mc zUz)*LuiCPYUE)59OA3BO?n$XrK845CMFny{kKgC^<3AIODX)D%E|;mExk1`_#pKW$ zXJ%9i#itXG+snQjI_z7H*e;C6S{PRbFRrIh!l*pfh`92Ks5I`)MBF^<%Pv|cA$F7D zk*8_?<2dNf&zex4;q%On)!1r2uMJ;D5iRzoJrHjj8)#uaTI&z@TjIeR*-;O!WomcB zR0Q-tE_wCw4LLY{*2R@ivYlsbXIxK$?p-s9XADd$pD3TmzO&q6@5djnX<{X-3*O$W z>5OpX1M4%D6^7X>i?=c2wx@5tG;`zUONoJ_&gABepHDLeL#@ja$C*yM&1XhU^sW71 z_C9!&Q(1-iFp8$2r*#?r@ul*KY4bH_RRoo+-^dPIc0xQ@?AibA%c{f-$X2f9CVeip z>x^gZZ|~AV%?`&Wq_RcIlBx*J?EcmFj&o)Nz;AG`hAx}O@|zo+3LJY&v>|ib*zhjV z=!El6B_<&@wr#*K4eSZ^$}U)B z;Ov;%9`iX%C)|@9+B0CSI<}3fz8V!JT{2M_n{y-cHPd`3ki-r0k!U~Vb2$=i8)soD zsMK&(-Q4?xRP`M@AC~-B{jd-)dxb&Qy?2*8WYELa#e*-c5Y&nX-(w$qds7V2a6$@ER2!ntm+6OmEZ2L7(u95K{KbtY zTn?6J=Z)`?bne~|Q_0(XDtuvxMEjT%_cK_Yi+nY^N@FPgc;>dMi0A6qK5AIsM4E7T z(X3=6j^hW0(?!^$-!6{2oK|vZ?>ZtXQU~;vm~GPiRr2nd!&5&?ibw7Bq(!-w{#6mX zdSL^pBBR9E47K-+A8tTrar`VhYR{Z)lRTd?B71<_Fo_11{ct#BeFVN=$Kuq-h2`t_ zGOzRldrB*^Y>^8|Euf8i{$=$b<`pBbr>x@nx``<)l`rNe&M{G0X@{ns))T6 z6{5o3zEjvD1AIkM@ncEseHZcZd^g%^HNjuv!Qm^Qi!(d<YnyC_AqY^o|@(_)0-Gw$^>mM}6IbpAU#wU)^m;B1Iq5Q5S zbgeDl!H?cNUOf1(43Jauu6l5;Wp?NQwmxeTxK|mPm&Y8kuGgmw_&uBfl)nBw0{;l4 z#j(Z$mxNhyF!n&#Ujr#-80rbk?jSo)O%pq#=CBgGG-RLf z^!0e-QN5Gdk|n2Ktre~~++}T0{0>1GgLB9;bL%3p_02`ex&of$xNo{?qS#(cPxGhU z*}*qIRIA~!`Kn2z&6$jkW#eP?5;uQNa9E_w6)#J>U!D|KAV^EB@!wmvS$&B1Bd5=m z=7-hnRz&VDT@<>d6YOJ`1k>*HUDnByfBlSC?NUZw&Gcjq0EzTs-m?2-z~gE_|GR(g z4{H|9R)bv9=P{S(rfOo!Q8|f&3bM-+jw->4urr*+GAr|qyR_vkc^8{*x%G8ppM~N;kjZZfUGG8D0=w$z` z*dN`WMh`eT;r7t(NzaNylHOXrpn2|4D}+ha1*@Do^IZ}qZDG)sY?3aG>{ap0%rgNC zm;UB0=6#|sRu?;((R-eCt&Ip?kX)wb0~nb;w7<@J)=m$3Su{}vJkm}TaKhK-i5;!?!PI=z1M`v^}us#f(4K!clV;Ork9eJEW~sHYlhQ&H zGnG1f1?f!AYRw8pd-|4(l|1u@9~1P66Y!`(gJ!$lI@Faai_fQlzh`e)?qDyk6-+ zdRbd5BaZOHURv7c44arL6&Rqg&j(>8XTTPz>IKFLasQajBMc%7@2oZ8uzb4 z)xlO5yb}5U?j#%{!OAGWhjt=ATdI0nKWr;8YQLu+6hya(uBvZ+E2GVQQ;!NR#0I^xp3fx%HaeBxp|}wiTh-g`)Wri z8rcij;7EDm!~qBH`7&i=_A|Y5^z*k#RefRq;k_;0(umKEkZ6xxrSUrb*%e*oz7zv| z_Ub_?JkiC-(}g>NX&za5(Oy3#-<|mGo<3I`?0Y$vA;`R-a>VTk17g(gW-=!O`s1Pk zqY>BUB|)22lmrF-*BEP!IZH;vA@jqBhqdPvgpaNHnL0Jd&%T(kb^u5JIVuM|&mlt& z{IzS6OP81xpe%8HKI$O1rSvx4rJFQh>#a>MS&}tZB5BYom(EC03&`Mh_r14f`h^$1 zFJAb--t`ENWoZ-m?wL!%o6;$~O}n~dM!0YG!|pp7(`}_Xdw)(v)1sqr=sObTyWoN; z1w=i{hJ97-sJE$J7;k}MK+Pg*#{UcA8R zGXRhEMMn7LwR4A_(cZ~0aPM@e%82H%U6)S->OHXRJiV24rJb2!_wOlV{=1i2VBkz9 zD67Z|_$ht(gm>0yY@Z(dP9QK{c%u)T@u+1M^{b#6Q)(?t;Y@PIUP0z{b@N@Q@4aTv z+|^khF3Jtxx)4H5gHv+7iBv$-!?Ht1Xkv+4y#eb8Oep3ut5?3oK+jBJxIwCIS=a1P zwlU>FJ_y)lMM)Fqt$1SjU@l*r_Uk~(iwNgV9)>+M1%|Mj%t;)gQ7l!39v(XWjkYOW ziu5Tvvgs<^ZsTBu_<4yxZGPc}jFq5MzS2yl^*D(c>_Ih??)ZS|QK>?X)jmT>w`6wM zuYVgGJqUNM8hG}hnJGsY5o`E&g?qI0gj3@7LjQwDtB>_v&~Zbe5Vh^Vfi`=90|S zC+7}2xktOV#ne47rSpbn>PtG^yt}S?wty10Bu$EU6;ZCdNs1s@(;!?>dVi;}7M;cD&YI7?6wV3yuJ^_JzJq=KayHQLJf2n)+) z3(gnjzS^B@v~bbqPDiGF?({t9_JlDvB~_3C6*Vz#3*eIA8@R}&eXsIOq}znK?3p3t zP@A2vG!89HU@F{BC1_=4_7mrX6jwMC09yT>qpmp=%|b4E*lrkW!Zf!76RQ}f{HC9G zIr=m{VKh=5{q(kS`h7GQj(Tt@idB?)?l~}*IP0v2^NFk_Cx0l4i(GiV@P4LL6*h#8 z+Wgp$fsRF~=WhYpK^}Skc1R3ra2qvR+emdR%=38crd4A+N92>;>)_j^`Dp(f{&Ow zGE9Adm-yi?UnqOMs!Oi?$PMzP4D(rYi3DgQ8x3+Ah?iL0awX5s$qSNDW|f06H@jtub6_u zaw3+JDu@V&qx}iALn?xPs2Cpj*e9e+MT6|VnmO=0qxgmr?S4FN8c1KQe`E|?c!V`t z>H_5+C$0pf2h>*SjShe-nPJ1!(kn!tQ!m1aq)>8u8)Zk(%HOdoJfvDhKOa$@Q#Pi2 z-jA|L%5AGFgKZ7M_FOa80rz1w(8V?pGn2FTT(>ZN27zNRmsH_zXMfNVSMM9zZ!7fD zWAyVwKnxrR_ek>pRpZo%L1-B&H?Pk`8XRgbks5-$>%4@Nv9ukQX#!=`J;2d+)T+dY z$@z(yf`TL47SLW+K0Gva`#h*i6=-19EL@**UZo41Wc5v~*z@C&CtH6Dx>%8ANco*E zj3Elrwf3&r9Z2R{!R|9ld11jX`jrO-GP7&|>=^nbKA47S=FS{F5Oxz&MxC2@WNvWg zL57PC$SxTQ7oYVgw=f>+CZ?qFm-4t50bGNDtwC?eV%XcfVs^v+goC*Sj=w;6^!f-- zK=*^=%$jBWpz`DsO-$G22f>!vt1AysZ^Jx3_q_y%88AY#c)*ZV(z)!3w2R<%?+WOz zHAc~r>4Gv&m+TT|cq&(080$6p?Wf9(aP6sP??8pa>oiqnn3yxn zQ%p~Cr|nmY@;+94;B|@5c#I{HKyQ81nh&Qoa6QZp6P=!~&oTf8oKWcBr^Qj|bC%xW z+(OqO?5Kf%rE{Odd(NIVrOeqrXlCzqszWFSiPqK2xx28atP&tPYmj&_nTcg{LKd&& zMxtVHo}7*snNd0TA2VztS1NPL z_YNFD=~29I|1U3xQSK!=8kF>+X=7$$E1qk@gM$pIuk*Bhlf0Rtzk}J5s;%OhFA1Rh z(uW_Qr#F4PiZS!f{Dk{V(Z>x?X)yQ--WiPEx)M@7`*#=G5$R!AUxM70w-ZLGC5UJ#X3!xf-9a+hp~{xR^+- zqF>jC8h^G0!{Za)QOXXeqh}g$vE40hIrmh+8T}GY_sd~4v;CdSnNDZiEf24fs!WLW z5M0UiR$>a){9Kz?Ia(`K;G0fk3iPPAx`gQpUx58=$&DQvNi|s9$oB(iRx81$UC;Y4 z7OR)y)L&AhT9V?AT>(5?d0tNY9l{o)jcZ&O1TbKL1<&wskct1!O*7!(~lAAGZ-=~JG2jzULs&=PjU0f`@O(EZB6)bJUN))kVo z*2>1PH^#xd*e43B1M*;Rh+oFRRag(a@d?3`6~aMt*z0rP=^97)g}L({wVMNk9r;%` zd&d?r)GvR8Uy&Sm@%?aj-ef#@+%uxSlXx4Ip|5a7a4<1!3(?*~-SpdxUlAO%3VWSD z2x%t=B=+gv8aN7VE&uk`0|GlgQoeF0v6HeM2dH0^w_iZmUAcS$H+(TcA^5-5g8)1@ zAhgA{g#3vo&lh)ZEB1OEc)2GL4SSBo}wJcgAP>sNo1V85B|f$#(D^2ma$4tp|$5E*l?&gf-7WQ`i+< z{v;1y>p=q!ItKecIY47&(jPR3y`%8U>cKsn&mDuKaXf189gF=N2R@!@xSNA7F<%%P zl+|dRC+mJk;;+vEnp5z(E;zEy$1}6TgNwZv(YK@a9_6e0wXN63O@3B%`zPB#WB8pM zQgJ7T%nlD|T#Dv0En)A-^0#x8)qjrd4BXuM7||~{abw`P@i{Setk09;KEHz8rV@Re zJlH!5Kk5HCwzKeoRu^Hogqv9laYwr#+=)A*gE)ZL?UUp#_l~OnBzC(IF<-GG{2j}I z3_BXz%=S}hw!M?MNvX*8-yHVuIS5u@J&<8X^EhwE5%^qxrT-`R<-y(<2X;txd^4ir)T97nVk5P&yU=Sj>BrJ2=P+`%>s=W!?DZR6ktZ13^7 zr=t^r9llhJZ=XkPH3#j*FT?JQj~KD=AML#%=7!g8=Rk(t+lluTJHlU|1Jo8`{248_ zh4$cY4|bA^)^h-{!+x|e>?8-fVkvmIk2&EFTH>Is_!WV@aSk3e;}2xmeVo44c@lF& zDK7_Y!B4IM%j&$WZzHj^Rhn8|!0l}(<2+6%^aqV`@SG@jU%vf6>U=}&! zefaPtM4#SPyp7%0GzSR#4BU_Jh;NyrM6`1fV@s0cz|(=#=-8k&_{rxV9f6(X;~NL# z>gqw;v6I{&4yO7K#2e$FHTcmO1NCueJl~PQ!ul6DRt|=3VH{EJ0nYZVE_V_;DVyRz zUi{8n_kaC4B;s2U*qh@(Ui@hOj^^>htta6|12%SOFdn!LcNh_Xk94-hx5dy})!s?0 z%}LZ2JnXr|{J1sv%}m2^#}V$hjnz~f{$Ndq1fv0)ar@z;I}AI?%dAl*1P9?Bz2#c} zN9Av5G!5@#5QX#XTnG*f`)^Sw2lcU|@jNQ~jtrJ0neY$!rO|!y&RC( zX9UWy!yg30QRrw6NbKdg>iD^AjdtNj9O$uU;|{|;aob^Ga{B{>-O1JmZ-~94IS@=R z!Oh+(fW#ghJQRQNGnKG|#9d#adNA4F8lUK6gvPc0EQi=H6dO9ERoL6Z!Ic~gM}6E#7Y<&(&Xaj|6#j1_~1f@QnUV`KK7fNJ2&~AifsR68z7~u9(WOB zjP_zD`9WiZS!0GY%YnSuJF@%{2jpBqQP}0-;45}l4&Ge3lX-Pi`IFd_BL}vt&XaaF zl#SH`ggttUIX=eSRxa!)&yK)fAA3W)6?u&~m^*e59_TuPm?t3Y!5+5w{jJJPw)ckL zuW0-vb~L8WiZcFJf-BbvKJ#{JHFiapKZ)Jd9zKhN_*c!f?(mQ?+nSiaqd9YH%U+TA z4Gd=x>mu0;-0>b5HOW0e>L0j<~^_@nP`=-VJEO!z+DeKpRH^qJ1>!{>*Oz}vzBi9Nv0O)l(Y zJ%|`PmRRpl)cmI{*hvl^A88v0ZN*M<5E(kINe<*Kf7H&=^AF_fT2t;Mc2c&MgXe{^ zI^WuIC$W<BWql5iKWl1yP<7A*pWw&EM|pU(s?L*` z8%mOc%WKuX`U83KqrG)|Guw}yfce{)sX?s7tmN4jpakU z>~S=XC++M=iP{31H#PSB2ko8zx1U22bGUyAJIO10r=6TXk#R_(Kd^(2cQ6Rx^;;;R zz^ZY)7D{S$A})oJUd_QjL8(@)hr>Tr0Hqo(A|xFb5|T>Xu2zi^MXFW}(CsiCSXd{m z>m>T~h$x;o{*#UIz^LP=SDm!0lZkZ_7ZAK*xR8)kTtrAZUQI|f{1YMdaH*OI=Fh=v z)r3$c;<%asN?631P+(A2px=owhan6_)csC`0RAz{<_>3$8*DSK`Tx&dhupW{XBV^$OfWV@>a+{ZKO81CvY5)T`@{_A^L~9Q1 zdu?wDLsPc5*Z%J@xZFa06Y1YcTiPl~-x@S31@=weIBKiN-iDzq^&i0qDx9k%*7Tk{#cm*5QFdu@t$vK-pO zKWY0Q>muUa2Mg;X3c(<+?d{>eq3z`R2JOW_+8*p;@{hVsa$aAyh5x2(Z!ZSIcCI%* zJJ1Ne8)1)6@#@whhSu8OlI?B9K-#`!LQi6UeAW~VxiGZGetB(gEry1+lY7$T!62{w zt+icV3{BZCF9vz+Z>#MsVQ9&Ac`&qOe|v3j3WL11w}hcN`_cRz^-ZLICv9n~Bz>!s z{Sw?6`WdpVk~X#^8*2~E+0V1{f$vOtLJW!yKCQN$#MTf)^Y%MK+uiVi=BeN98*S^m zHUrF768W{3chYuJ*2mDC{Z6(nxQR)mLNF-G_J$amoBtyF(Z0R*Vjyit?-%$u*()^o z@i|S-e@Xk>gMqX?Zkz?~55Mcwa+PNHnacZq#?hs!M1G!*O|L)Hx4$hINZa=>(IKAi zt&K5I2nN!2l&>GZ>Gg+(_O}K@L)*!HdhNwf-*%K|Ywec@LsPc57ehna+iHJv7+SKu ztr!}!y*>6fhCyE2TZ^G7+uLh@eGG$##1s7l*;Yv#TaqochvsZog#8GExoK#dY$vfb zg`p+e6=6TIR}uDet>vAxoswio8e_U>#*a#09|dbX#a=RfWaj{D@n&>H(2+D`5nX)lI`wv*4V z~G2Twqj_>c6l(gWWT(&w-$rEwzq_#Is18baQ+MXCbF%P zHnt>NY7ecoy*Ug`*^i#Zqx}S}wVlM)6o$6i-V}z$>_@iyx$yBTdp!QJho7`h9@!8> zdu?wFLqq!&Wjl$F#Bd_Voa~zj|4!P{R!RC+)K}Nf!_9$*dpPp&k#2m21rPXp7T!Gc zyB in dialog by pretending it was a click on the active control +Abort +FunctionEnd + +Function PageCreate +GetDlgItem $0 $hWndParent 1 +ShowWindow $0 0 +GetDlgItem $0 $hWndParent 2 +ShowWindow $0 0 + +System::Call 'USER32::GetClientRect(p$hWndParent,@r0)' +System::Call '*$0(i,i,i.r3,i.r4)' +GetDlgItem $0 $hWndParent ${IDC_CHILDRECT} +System::Call 'USER32::MoveWindow(pr0,i0,i0,ir3,ir4,i0)' + +nsDialogs::Create ${IDC_CHILDRECT} +Pop $R9 +SetCtlColors $R9 000000 ${CB_PAGE} + +!macro StartColumn W +!define /ReDef UY ${UY_PAGE} +!define /ReDef UX_W ${W} +!ifdef UX_INTERNAL_PREV_W +!define /ReDef /Math UX ${UX} + ${UX_INTERNAL_PREV_W} +!define /ReDef /Math UX ${UX} + ${UX_COLPAD} +!define /ReDef UX_INTERNAL_PREV_W ${UX_W} +!else +!define /Math UX_INTERNAL_PREV_W 0 + ${UX_W} +!endif +!macroend +!macro CreateHeader Txt W +!define /ReDef /Math W ${W} + 4 ; Make it slightly wider +${NSD_CreateLabel} ${UX}u ${UY}u ${W}u ${UY_SECTION}u "${Txt}" +Pop $0 +SetCtlColors $0 ${CT_SECTION} transparent +SendMessage $0 ${WM_SETFONT} ${HF_HEADER} 1 +!define /ReDef /Math UY ${UY} + ${UY_SECTION} +!define /ReDef /Math UY ${UY} + ${UY_SECTIONBPAD} +!macroend +!macro CreateControl Class Txt W H +${NSD_Create${Class}} ${UX}u ${UY}u ${W}u ${H}u "${Txt}" +!define /ReDef /Math UY ${UY} + ${H} +!define /ReDef /Math UY ${UY} + ${UY_TXTBPAD} +!macroend +!macro CreateSimpleLinkHelper Txt Url W +!insertmacro CreateControl Link "${Txt}|${Url}" ${W} ${UY_TXT} +!macroend +!macro CreateSimpleLink Txt Url W +!insertmacro CreateSimpleLinkHelper "${Txt}" "${Url}" ${W} +Call ConfigureLink +!macroend + + +; --- Header --- +!define HF_HEADER $R8 +CreateFont ${HF_HEADER} "Arial" ${UY_SECTION} 700 + +nsDialogs::CreateControl ${__NSD_Icon_CLASS} ${__NSD_Icon_STYLE}|${SS_CENTERIMAGE}|${SS_CENTER} ${__NSD_Icon_EXSTYLE} 0 0 30u ${UY_HEADER}u "" +Pop $0 +SetCtlColors $0 "" ${CB_HEADER} +${NSD_SetIconFromInstaller} $0 $1 + +!searchreplace VERSTR "${NSIS_VERSION}" "v" "" +nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_ENDELLIPSIS} ${__NSD_Label_EXSTYLE} 30u 0 -30u ${UY_HEADER}u "nullsoft scriptable install system ${VERSTR}" +Pop $0 +SetCtlColors $0 0xffffff ${CB_HEADER} +CreateFont $1 "Trebuchet MS" 17 +SendMessage $0 ${WM_SETFONT} $1 1 + + +; --- Page --- +!insertmacro StartColumn 90 +!insertmacro CreateHeader "Compiler" ${UX_W} +!insertmacro CreateSimpleLink "Compile NSI scripts" "${PR}\MakeNSISW" ${UX_W} +!insertmacro CreateSimpleLink "Installer based on .ZIP file" "${PR}\bin\Zip2Exe2" ${UX_W} + + +!define /ReDef UY ${UY_ROW2} +!insertmacro CreateHeader "Developer Center" ${UX_W} +!define /ReDef UY_MULTILINE 42 +!insertmacro CreateControl Label "Many more examples, tutorials, plug-ins and NSIS-releted software are available at the online Developer Center." ${UX_W} ${UY_MULTILINE} +Pop $0 +SetCtlColors $0 00000000 ${CB_PAGE} + + +!insertmacro StartColumn 80 +!insertmacro CreateHeader "Documentation" ${UX_W} +!insertmacro CreateSimpleLink "NSIS Users Manual" "${PR}\NSIS.chm|${WWW}/Docs/" ${UX_W} +!insertmacro CreateSimpleLink "Example scripts" "${PR}\Examples|${WWW}/Examples" ${UX_W} +!insertmacro CreateSimpleLink "Modern UI 2" "${PD}\Modern UI 2\Readme.html" ${UX_W} + + +!define /ReDef UY ${UY_ROW2} +!insertmacro CreateHeader "Online Help" ${UX_W} +!insertmacro CreateSimpleLink "Developer Center" "${WWW}/Developer_Center" ${UX_W} +!insertmacro CreateSimpleLink "FAQ" "${WWW}/FAQ" ${UX_W} +!insertmacro CreateSimpleLink "Forum" "http://forums.winamp.com/forumdisplay.php?forumid=65" ${UX_W} +;"Project Tracker" "http://sourceforge.net/tracker/?group_id=22049" +!insertmacro CreateSimpleLink "Bug Tracker" "http://sourceforge.net/tracker/?group_id=22049&atid=373085" ${UX_W} +!insertmacro CreateSimpleLink "Stackoverflow" "http://stackoverflow.com/questions/tagged/nsis" ${UX_W} +!insertmacro CreateSimpleLink "Slack Chat" "http://nsischat.slack.com/" ${UX_W} +!insertmacro CreateSimpleLink "IRC Chat" "irc://irc.landoleet.org/nsis" ${UX_W} +;"Pastebin" "http://nsis.pastebin.com/index/1FtyKP89" +;"Search" "http://www.google.com/cse/home?cx=005317984255499820329:c_glv1-6a6a" + + +!insertmacro StartColumn 130 +!insertmacro CreateHeader "Plug-ins" ${UX_W} +!macro CreatePluginLink Name Desc Url +!define /ReDef SAVE_UY ${UY} +!insertmacro CreateSimpleLinkHelper "${Name}" "!P=${Name}" ${UX_W} ; AdjustLinkPair will configure this link +!define /ReDef UY ${SAVE_UY} +!insertmacro CreateControl Label "${Name} - ${Desc}" ${UX_W} ${UY_TXT} +Call AdjustLinkPair +!macroend +!insertmacro CreatePluginLink "AdvSplash" "splash with fade in/out" "${PD}\AdvSplash\advsplash.txt" +!insertmacro CreatePluginLink "Banner" "banner with custom text" "${PD}\Banner\Readme.txt" +!insertmacro CreatePluginLink "BgImage" "background image" "${PD}\BgImage\BgImage.txt" +!insertmacro CreatePluginLink "Dialer" "internet connection" "${PD}\Dialer\Dialer.txt" +!insertmacro CreatePluginLink "Math" "math operations" "${PD}\Math\Math.txt" +!insertmacro CreatePluginLink "nsDialogs" "custom wizard pages" "${PD}\nsDialogs\Readme.html" +!insertmacro CreatePluginLink "nsExec" "launch command line tools" "${PD}\nsExec\nsExec.txt" +!insertmacro CreatePluginLink "NSISdl" "download files" "${PD}\NSISdl\Readme.txt" +!insertmacro CreatePluginLink "Splash" "splash screen" "${PD}\Splash\splash.txt" +!insertmacro CreatePluginLink "StartMenu" "Start Menu folder selection" "${PD}\StartMenu\Readme.txt" +!insertmacro CreatePluginLink "System" "Windows API calls" "${PD}\System\System.html" +!insertmacro CreatePluginLink "VPatch" "update existing files" "${PD}\VPatch\Readme.html" + + +; --- Footer --- +${NSD_CreateLabel} 0 -22u 100% 1 "" +Pop $0 +SetCtlColors $0 000000 0xc4c4c4 + +nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_NOTIFY} ${__NSD_Label_EXSTYLE} -110u -20u 100% 20u "nsis.sourceforge.net" +Pop $0 +SetCtlColors $0 0xbbbbbb transparent +SendMessage $0 ${WM_SETFONT} ${HF_HEADER} 1 +nsDialogs::SetUserData $0 "http://nsis.sourceforge.net" +${NSD_OnClick} $0 OnLinkClick + +nsDialogs::Show +FunctionEnd + +Function OnLinkClick +Pop $1 ; HWND +nsDialogs::GetUserData $1 +Call SplitPipe +Pop $0 ; First URL in UserData from SplitPipe +StrCpy $3 "" +StrCpy $1 $0 4 +${IfThen} $1 == "${PD}" ${|} StrCpy $3 "${PR}\" ${|} +!ifdef QUIT_ON_EXECUTE +System::Call 'USER32::GetKeyState(i0x11)i.r9' ; VK_CONTROL +!endif +ClearErrors +ExecShell "" "$3$0" +Pop $1 ; ... the rest of SplitPipe ... +${If} $1 != "" ; ... might contain a fallback location + StrCpy $0 $1 + StrCpy $3 "" +${ElseIf} $3 != "" ; Local docs path failed, use WWW fallback + StrCpy $3 0 + slashconvloop: + StrCpy $2 $0 1 $3 + ${If} $2 == "\" + StrCpy $2 $0 $3 + IntOp $3 $3 + 1 + StrCpy $0 $0 "" $3 + StrCpy $0 "$2/$0" + ${Else} + IntOp $3 $3 + 1 + ${EndIf} + StrCmp $2 "" 0 slashconvloop + StrCpy $3 "${WWW}/" +${EndIf} +${If} "$3$1" != "" +${AndIf} ${Errors} + ExecShell "" "$3$0" +${EndIf} +${If} ${Errors} + !ifdef QUIT_ON_EXECUTE + StrCpy $9 0 ; Don't allow close + !endif + MessageBox MB_IconStop 'Error: Unable to open "$0"!' +${EndIf} +!ifdef QUIT_ON_EXECUTE +${IfThen} $9 < 0 ${|} SendMessage $hWndParent ${WM_CLOSE} 0 0 ${|} +!endif +FunctionEnd + +Function ConfigureLink +Pop $1 ; HWND +${NSD_OnClick} $1 OnLinkClick +SetCtlColors $1 ${CT_LINK} ${CB_PAGE} +${NSD_GetText} $1 $4 +Push $4 +Call SplitPipe +Pop $4 +Pop $2 +${NSD_SetText} $1 $4 +nsDialogs::SetUserData $1 $2 +System::Call 'USER32::GetDC(pr1)p.r3' +SendMessage $1 ${WM_GETFONT} 0 0 $5 +System::Call 'GDI32::SelectObject(pr3,pr5)p.s' +StrLen $5 $4 +System::Call 'GDI32::GetTextExtentPoint32(pr3,tr4,ir5,@r5)' +System::Call '*$5(i.r6)' +System::Call 'GDI32::SelectObject(pr3,ps)' +System::Call 'USER32::ReleaseDC(pr1,pr3)' +System::Call 'USER32::GetWindowRect(pr1,@r3)' +System::Call '*$3(i,i.r5,i,i.r7)' +IntOp $7 $7 - $5 +IntOp $6 $6 + 4 ; Padding for focus rect +System::Call 'USER32::SetWindowPos(pr1,p,i,i,ir6,ir7,i0x16)' +FunctionEnd + +Function AdjustLinkPair +Pop $2 ; Label +SetCtlColors $2 00000000 ${CB_PAGE} +Call ConfigureLink +FunctionEnd + +Function SplitPipe +Exch $0 +Push $1 +Push $2 +StrCpy $2 0 +findSep: +StrCpy $1 $0 1 $2 +IntOp $2 $2 + 1 +StrCmp $1 "" +2 +StrCmp $1 "|" "" findSep +StrCpy $1 $0 "" $2 +IntOp $2 $2 - 1 +StrCpy $0 $0 $2 +Pop $2 +Exch $1 +Exch +Exch $0 +FunctionEnd + +Section +SectionEnd + +Page Custom PageCreate PageLeave +!pragma warning disable 8000 ; Page instfiles not used \ No newline at end of file diff --git a/Examples/SConscript b/Examples/SConscript index 50f4c6aa..c9a212e3 100644 --- a/Examples/SConscript +++ b/Examples/SConscript @@ -11,6 +11,7 @@ examples = Split(""" LogicLib.nsi makensis.nsi Memento.nsi + NSISMenu.nsi one-section.nsi primes.nsi rtest.nsi diff --git a/Examples/makensis.nsi b/Examples/makensis.nsi index cab366aa..acfd9b04 100644 --- a/Examples/makensis.nsi +++ b/Examples/makensis.nsi @@ -166,10 +166,15 @@ ${MementoSection} "NSIS Core Files (required)" SecCore File ..\COPYING File ..\NSIS.chm !pragma verifychm "..\NSIS.chm" - File ..\NSIS.exe - !if /FileExists "..\NSIS.exe.manifest" - File "..\NSIS.exe.manifest" + !if /FileExists "..\NSIS.exe" + !if /FileExists "..\NSIS.exe.manifest" + File "..\NSIS.exe.manifest" + !endif + !else + !define NO_NSISMENU_HTML 1 + !makensis '-v2 "NSISMenu.nsi" "-XOutFile ..\NSIS.exe"' = 0 !endif + File ..\NSIS.exe SetOutPath $INSTDIR\Bin File ..\Bin\makensis.exe @@ -227,12 +232,14 @@ ${MementoSection} "NSIS Core Files (required)" SecCore SetOutPath $INSTDIR\Docs\makensisw File ..\Docs\makensisw\*.txt - SetOutPath $INSTDIR\Menu - File ..\Menu\*.html - SetOutPath $INSTDIR\Menu\images - File ..\Menu\images\header.gif - File ..\Menu\images\line.gif - File ..\Menu\images\site.gif + !ifndef NO_NSISMENU_HTML + SetOutPath $INSTDIR\Menu + File ..\Menu\*.html + SetOutPath $INSTDIR\Menu\images + File ..\Menu\images\header.gif + File ..\Menu\images\line.gif + File ..\Menu\images\site.gif + !endif Delete $INSTDIR\makensis.htm Delete $INSTDIR\Docs\*.html @@ -491,7 +498,7 @@ ${MementoSection} "Graphics" SecGraphics Delete $INSTDIR\Contrib\Icons\*.bmp RMDir $INSTDIR\Contrib\Icons SetOutPath $INSTDIR\Contrib\Graphics - File /r "..\Contrib\Graphics\*.ico" + File /r /x nsis-menu.ico "..\Contrib\Graphics\*.ico" File /r "..\Contrib\Graphics\*.bmp" ${MementoSectionEnd} diff --git a/SConstruct b/SConstruct index 748f6cc7..6f19a20c 100644 --- a/SConstruct +++ b/SConstruct @@ -147,7 +147,6 @@ if 'msvc' in defenv['TOOLS'] or 'mstoolkit' in defenv['TOOLS']: ignore_tests = 'none' else: ignore_tests = ','.join(Split(""" -Examples/makensis.nsi Examples/gfx.nsi""")) # version @@ -161,7 +160,7 @@ opts.Add(('VER_PACKED', 'Packed version of NSIS in 0xMMmmmrrb format, used for f opts.Add(('PREFIX', 'Installation prefix', dirs['prefix'])) opts.Add(ListVariable('SKIPSTUBS', 'A list of stubs that will not be built', 'none', stubs)) opts.Add(ListVariable('SKIPPLUGINS', 'A list of plug-ins that will not be built', 'none', plugin_libs + plugins)) -opts.Add(ListVariable('SKIPUTILS', 'A list of utilities that will not be built', 'none', utils)) +opts.Add(ListVariable('SKIPUTILS', 'A list of utilities that will not be built', 'NSIS Menu', utils)) opts.Add(ListVariable('SKIPMISC', 'A list of plug-ins that will not be built', 'none', misc)) opts.Add(ListVariable('SKIPDOC', 'A list of doc files that will not be built/installed', 'none', doc)) opts.Add(('SKIPTESTS', 'A comma-separated list of test files that will not be ran', 'none'))