236 lines
7.6 KiB
Plaintext
236 lines
7.6 KiB
Plaintext
/*
|
|
|
|
NSIS Modern User Interface
|
|
Start Menu folder page
|
|
|
|
*/
|
|
|
|
;--------------------------------
|
|
;Page interface settings and variables
|
|
|
|
!macro MUI_STARTMENUPAGE_INTERFACE
|
|
|
|
!ifndef MUI_STARTMENUPAGE_INTERFACE
|
|
!define MUI_STARTMENUPAGE_INTERFACE
|
|
Var mui.StartMenuPage
|
|
Var mui.StartMenuPage.Location
|
|
Var mui.StartMenuPage.FolderList
|
|
|
|
Var mui.StartMenuPage.Temp
|
|
!endif
|
|
|
|
!ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
|
|
!ifndef MUI_STARTMENUPAGE_REGISTRY_VARIABLES
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VARIABLES
|
|
Var mui.StartMenuPage.RegistryLocation
|
|
!endif
|
|
!endif
|
|
|
|
!macroend
|
|
|
|
|
|
;--------------------------------
|
|
;Page declaration
|
|
|
|
!macro MUI_PAGEDECLARATION_STARTMENU ID VAR
|
|
|
|
!insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}STARTMENUPAGE ""
|
|
!insertmacro MUI_STARTMENUPAGE_INTERFACE
|
|
|
|
!insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
|
|
!insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_TOP "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_TOP)"
|
|
!insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_CHECKBOX "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_CHECKBOX)"
|
|
|
|
!define MUI_STARTMENUPAGE_VARIABLE "${VAR}"
|
|
!define "MUI_STARTMENUPAGE_${ID}_VARIABLE" "${MUI_STARTMENUPAGE_VARIABLE}"
|
|
!define "MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
|
|
!ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT
|
|
!define "MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}"
|
|
!endif
|
|
!ifdef MUI_STARTMENUPAGE_REGISTRY_KEY
|
|
!define "MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}"
|
|
!endif
|
|
!ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME
|
|
!define "MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
|
|
!endif
|
|
|
|
PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom
|
|
|
|
PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
|
|
|
|
Caption " "
|
|
|
|
PageExEnd
|
|
|
|
!insertmacro MUI_FUNCTION_STARTMENUPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
|
|
|
|
!undef MUI_STARTMENUPAGE_VARIABLE
|
|
!undef MUI_STARTMENUPAGE_TEXT_TOP
|
|
!undef MUI_STARTMENUPAGE_TEXT_CHECKBOX
|
|
!undef MUI_STARTMENUPAGE_DEFAULTFOLDER
|
|
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_NODISABLE
|
|
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_ROOT
|
|
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_KEY
|
|
!insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_VALUENAME
|
|
|
|
!macroend
|
|
|
|
!macro MUI_PAGE_STARTMENU ID VAR
|
|
|
|
!verbose push
|
|
!verbose ${MUI_VERBOSE}
|
|
|
|
!insertmacro MUI_PAGE_INIT
|
|
!insertmacro MUI_PAGEDECLARATION_STARTMENU "${ID}" "${VAR}"
|
|
|
|
!verbose pop
|
|
|
|
!macroend
|
|
|
|
;--------------------------------
|
|
;Page functions
|
|
|
|
!macro MUI_FUNCTION_STARTMENUPAGE PRE LEAVE
|
|
|
|
Function "${PRE}"
|
|
|
|
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
|
|
|
|
!ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
|
|
|
|
;Get Start Menu location from registry
|
|
|
|
${if} "${MUI_STARTMENUPAGE_VARIABLE}" == ""
|
|
|
|
ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
|
|
${if} $mui.StartMenuPage.RegistryLocation != ""
|
|
StrCpy "${MUI_STARTMENUPAGE_VARIABLE}" $mui.StartMenuPage.RegistryLocation
|
|
${endif}
|
|
|
|
ClearErrors
|
|
|
|
${endif}
|
|
|
|
!endif
|
|
|
|
!insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE)
|
|
|
|
${if} $(^RTL) == "0"
|
|
!ifndef MUI_STARTMENUPAGE_NODISABLE
|
|
StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
|
|
!else
|
|
StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
|
|
!endif
|
|
${else}
|
|
!ifndef MUI_STARTMENUPAGE_NODISABLE
|
|
StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
|
|
!else
|
|
StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
|
|
!endif
|
|
${endif}
|
|
|
|
Pop $mui.StartMenuPage
|
|
|
|
;Get control handles
|
|
GetDlgItem $mui.StartMenuPage.Location $mui.StartMenuPage 1002
|
|
GetDlgItem $mui.StartMenuPage.FolderList $mui.StartMenuPage 1004
|
|
|
|
!ifdef MUI_STARTMENUPAGE_BGCOLOR
|
|
SetCtlColors $mui.StartMenuPage.Location "" "${MUI_STARTMENUPAGE_BGCOLOR}"
|
|
SetCtlColors $mui.StartMenuMenu.FolderList "" "${MUI_STARTMENUPAGE_BGCOLOR}"
|
|
!endif
|
|
|
|
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
|
|
|
|
StartMenu::Show
|
|
|
|
Pop $mui.StartMenuPage.Temp
|
|
${if} $mui.StartMenuPage.Temp == "success"
|
|
Pop "${MUI_STARTMENUPAGE_VARIABLE}"
|
|
${endif}
|
|
|
|
FunctionEnd
|
|
|
|
Function "${LEAVE}"
|
|
|
|
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
|
|
|
|
FunctionEnd
|
|
|
|
!macroend
|
|
|
|
|
|
;--------------------------------
|
|
;Script macros to get Start Menu folder
|
|
|
|
!macro MUI_STARTMENU_GETFOLDER ID VAR
|
|
|
|
!verbose push
|
|
!verbose ${MUI_VERBOSE}
|
|
|
|
;Get Start Menu folder from registry
|
|
;Can be called from the script in the uninstaller
|
|
|
|
!ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME
|
|
|
|
ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}"
|
|
|
|
${if} $mui.StartMenuPage.RegistryLocation != ""
|
|
StrCpy "${VAR}" $mui.StartMenuPage.RegistryLocation
|
|
${else}
|
|
StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
|
|
${endif}
|
|
|
|
!else
|
|
|
|
StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
|
|
|
|
!endif
|
|
|
|
!verbose pop
|
|
|
|
!macroend
|
|
|
|
!macro MUI_STARTMENU_WRITE_BEGIN ID
|
|
|
|
;The code in the script to write the shortcuts should be put between the
|
|
;MUI_STARTMENU_WRITE_BEGIN and MUI_STARTMENU_WRITE_END macros
|
|
|
|
!verbose push
|
|
!verbose ${MUI_VERBOSE}
|
|
|
|
!define MUI_STARTMENUPAGE_CURRENT_ID "${ID}"
|
|
|
|
StrCpy $mui.StartMenuPage.Temp "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1
|
|
|
|
;If the folder start with >, the user has chosen not to create a shortcut
|
|
${if} $mui.StartMenuPage.Temp != ">"
|
|
|
|
${if} "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" == ""
|
|
;Get folder from registry if the variable doesn't contain anything
|
|
!insertmacro MUI_STARTMENU_GETFOLDER "${MUI_STARTMENUPAGE_CURRENT_ID}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
|
|
${endif}
|
|
|
|
!verbose pop
|
|
|
|
!macroend
|
|
|
|
!macro MUI_STARTMENU_WRITE_END
|
|
|
|
!verbose push
|
|
!verbose ${MUI_VERBOSE}
|
|
|
|
!ifdef MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME
|
|
;Write folder to registry
|
|
WriteRegStr "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
|
|
!endif
|
|
|
|
${endif}
|
|
|
|
!undef MUI_STARTMENUPAGE_CURRENT_ID
|
|
|
|
!verbose pop
|
|
|
|
!macroend
|
|
|