123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- OutFile "NSIS.exe"
- Name "NSIS Menu"
- Unicode True
- RequestExecutionLevel User
- XPStyle On
- ManifestDPIAware System
- SetCompressor LZMA
- ChangeUI IDD_INST "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
- Icon "${NSISDIR}\Contrib\Graphics\Icons\nsis-menu.ico"
- BrandingText " "
- MiscButtonText " " " " " " " "
- InstallButtonText " "
- CompletedText " "
- LangString ^ClickInstall 0 " "
- Caption "$(^Name)"
- !macro UNPACKVERFIELD out in shr mask fmt
- !define /redef /math ${out} ${in} >>> ${shr}
- !define /redef /math ${out} ${${out}} & ${mask}
- !define /redef /intfmt ${out} "${fmt}" ${${out}}
- !macroend
- !ifndef VER_MAJOR & VER_MINOR
- !ifdef NSIS_PACKEDVERSION
- !insertmacro UNPACKVERFIELD VER_MAJOR ${NSIS_PACKEDVERSION} 24 0x0ff "%X"
- !insertmacro UNPACKVERFIELD VER_MINOR ${NSIS_PACKEDVERSION} 12 0xfff "%X"
- !insertmacro UNPACKVERFIELD VER_REVISION ${NSIS_PACKEDVERSION} 4 255 "%X"
- !insertmacro UNPACKVERFIELD VER_BUILD ${NSIS_PACKEDVERSION} 00 0x00f "%X"
- !endif
- !endif
- !ifdef VER_MAJOR & VER_MINOR
- !define /ifndef VER_REVISION 0
- !define /ifndef VER_BUILD 0
- !searchreplace VERSTR "${NSIS_VERSION}" "v" ""
- VIProductVersion ${VER_MAJOR}.${VER_MINOR}.${VER_REVISION}.${VER_BUILD}
- VIAddVersionKey "ProductName" "NSIS"
- VIAddVersionKey "ProductVersion" "${VERSTR}"
- VIAddVersionKey "FileVersion" "${VERSTR}"
- VIAddVersionKey "FileDescription" "NSIS Menu"
- VIAddVersionKey "LegalCopyright" "http://nsis.sf.net/License"
- !endif
- !include nsDialogs.nsh
- !include WinMessages.nsh
- !include LogicLib.nsh
- !define /IfNDef IDC_CHILDRECT 1018
- !define QUIT_ON_EXECUTE
- !define PR $ExeDir ; Local root path
- !define PD "Docs" ; Local with WWW fallback (located at the same relative path)
- !define WWW "http://nsis.sf.net"
- !define CB_HEADER '0x755585 0x222222'
- !define UY_HEADER 28
- !define CT_PAGE '0x000000 0xaaaaaa'
- !define CB_PAGE '0xffffff 0x111111'
- !define CT_SECTION '0x666666 0xeeeeee'
- !define CB_SECTION '${CB_PAGE}'
- !define UY_SECTION 11 ; Height of a section
- !define UY_SECTIONBPAD 2 ; Extra padding on the bottom of section headers
- !define UY_TXT 9 ; Height of a normal item
- !define UY_TXTBPAD 1 ; Extra padding on the bottom of normal items
- !define UX_COLPAD 7 ; Spacing between columns
- !define UY_ROW2 104 ; Absolute position of the 2nd row
- !define CT_LINK '0x0c6e97 0x0c6e97' ; SYSCLR:HOTLIGHT
- !define /Math UX_PAGE 00 + ${UX_COLPAD}
- !define /Math UY_PAGE ${UY_HEADER} + 20
- !define UX ${UX_PAGE}
- !define CB_FOOTERLINE '0xc4c4c4 0x333333'
- !define CT_FOOTER '0xbbbbbb 0x444444'
- Var UseLightTheme
- Function .onGUIInit
- ReadRegDWORD $UseLightTheme HKCU "Software\NSIS" "UseLightTheme"
- StrCmp $UseLightTheme "" 0 +2
- ReadRegDWORD $UseLightTheme HKCU "Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" "AppsUseLightTheme"
- StrCmp $UseLightTheme "" 0 +2
- StrCpy $UseLightTheme 1 ; Default
- StrCmp $UseLightTheme "0" 0 +5
- System::Call 'DWMAPI::DwmSetWindowAttribute(p$hWndParent,i20,*i1,i4)i.r0' ; 20H1
- IntCmp $0 0 +3 +3
- System::Call 'DWMAPI::DwmSetWindowAttribute(p$hWndParent,i19,*i1,i4)i.r0' ; ; 19H1
- System::Call 'USER32::SetProp(p$hWndParent,t"UseImmersiveDarkModeColors",i1)' ; 1809
- FunctionEnd
- !define SetCtlColors "!insertmacro SetCtlColors "
- !macro SetCtlColors hWnd ctlig ctdar cblig cbdar
- StrCmp $UseLightTheme "0" 0 +3
- SetCtlColors ${hWnd} "${ctdar}" ${cbdar}
- Goto +2
- SetCtlColors ${hWnd} "${ctlig}" ${cblig}
- !macroend
- Function PageLeave
- System::Call 'USER32::GetFocus()p.r0'
- System::Call 'USER32::GetDlgCtrlID(pr0)i.r1'
- System::Call 'USER32::GetParent(pr0)p.r2'
- SendMessage $2 ${WM_COMMAND} $1 $0 ; Handle <ENTER> 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 ${CT_PAGE} ${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 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_Label_CLASS} ${__NSD_Label_STYLE} ${__NSD_Label_EXSTYLE} 33u 0 -33u ${UY_HEADER}u ""
- Pop $0
- ${SetCtlColors} $0 0xffffff 0xffffff ${CB_HEADER}
- ; CCv5 does not paint the background outside of the icon correctly when SS_CENTERIMAGE is used so we have to overlay a small icon on top of the background
- nsDialogs::CreateControl ${__NSD_Icon_CLASS} ${__NSD_Icon_STYLE} ${__NSD_Icon_EXSTYLE} 4u 4u 33u ${UY_HEADER}u ""
- Pop $0
- ${SetCtlColors} $0 "" "" ${CB_HEADER}
- ${NSD_SetIconFromInstaller} $0 $1
- nsDialogs::CreateControl ${__NSD_Icon_CLASS} ${__NSD_Icon_STYLE}|${SS_CENTERIMAGE}|${SS_CENTER} ${__NSD_Icon_EXSTYLE} 0 0 33u ${UY_HEADER}u ""
- Pop $0
- ${SetCtlColors} $0 "" "" ${CB_HEADER}
- CreateFont $1 "Trebuchet MS" 17
- !searchreplace VERSTR "${NSIS_VERSION}" "v" ""
- nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_ENDELLIPSIS} ${__NSD_Label_EXSTYLE} 34u 1u -34u ${UY_HEADER}u "nullsoft scriptable install system ${VERSTR}"
- Pop $0
- SetCtlColors $0 0x3A2A42 transparent
- SendMessage $0 ${WM_SETFONT} $1 1
- nsDialogs::CreateControl ${__NSD_Label_CLASS} ${__NSD_Label_STYLE}|${SS_CENTERIMAGE}|${SS_ENDELLIPSIS} ${__NSD_Label_EXSTYLE} 33u 0 -33u ${UY_HEADER}u "nullsoft scriptable install system ${VERSTR}"
- Pop $0
- SetCtlColors $0 0xffffff transparent
- 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\Zip2Exe" ${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 ${CT_PAGE} ${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 "Chat" "${WWW}/r/Chat" ${UX_W}
- ;insertmacro CreateSimpleLink "IRC channel" "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}" "${Url}" ${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 000000 ${CB_FOOTERLINE}
- 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 ${CT_FOOTER} transparent transparent
- SendMessage $0 ${WM_SETFONT} ${HF_HEADER} 1
- nsDialogs::SetUserData $0 "https://nsis.sourceforge.io"
- ${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 ; Copy length of ${PD}
- ${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 ${CT_PAGE} ${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
|