/* 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 /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" !else StartMenu::Init /NOUNLOAD /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" !endif ${else} !ifndef MUI_STARTMENUPAGE_NODISABLE StartMenu::Init /NOUNLOAD /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}" !else StartMenu::Init /NOUNLOAD /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