StartMenu.nsh 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /*
  2. NSIS Modern User Interface
  3. Start Menu folder page
  4. */
  5. ;--------------------------------
  6. ;Page interface settings and variables
  7. !macro MUI_STARTMENUPAGE_INTERFACE
  8. !ifndef MUI_STARTMENUPAGE_INTERFACE
  9. !define MUI_STARTMENUPAGE_INTERFACE
  10. Var mui.StartMenuPage
  11. Var mui.StartMenuPage.Location
  12. Var mui.StartMenuPage.FolderList
  13. Var mui.StartMenuPage.Temp
  14. !endif
  15. !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  16. !ifndef MUI_STARTMENUPAGE_REGISTRY_VARIABLES
  17. !define MUI_STARTMENUPAGE_REGISTRY_VARIABLES
  18. Var mui.StartMenuPage.RegistryLocation
  19. !endif
  20. !endif
  21. !macroend
  22. ;--------------------------------
  23. ;Page declaration
  24. !macro MUI_PAGEDECLARATION_STARTMENU ID VAR
  25. !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}STARTMENUPAGE ""
  26. !insertmacro MUI_STARTMENUPAGE_INTERFACE
  27. !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
  28. !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_TOP "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_TOP)"
  29. !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_CHECKBOX "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_CHECKBOX)"
  30. !define MUI_STARTMENUPAGE_VARIABLE "${VAR}"
  31. !define "MUI_STARTMENUPAGE_${ID}_VARIABLE" "${MUI_STARTMENUPAGE_VARIABLE}"
  32. !define "MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  33. !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT
  34. !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}"
  35. !endif
  36. !ifdef MUI_STARTMENUPAGE_REGISTRY_KEY
  37. !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}"
  38. !endif
  39. !ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  40. !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
  41. !endif
  42. PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom
  43. PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
  44. Caption " "
  45. PageExEnd
  46. !insertmacro MUI_FUNCTION_STARTMENUPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
  47. !undef MUI_STARTMENUPAGE_VARIABLE
  48. !undef MUI_STARTMENUPAGE_TEXT_TOP
  49. !undef MUI_STARTMENUPAGE_TEXT_CHECKBOX
  50. !undef MUI_STARTMENUPAGE_DEFAULTFOLDER
  51. !insertmacro MUI_UNSET MUI_STARTMENUPAGE_NODISABLE
  52. !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_ROOT
  53. !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_KEY
  54. !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  55. !macroend
  56. !macro MUI_PAGE_STARTMENU ID VAR
  57. !verbose push
  58. !verbose ${MUI_VERBOSE}
  59. !insertmacro MUI_PAGE_INIT
  60. !insertmacro MUI_PAGEDECLARATION_STARTMENU "${ID}" "${VAR}"
  61. !verbose pop
  62. !macroend
  63. ;--------------------------------
  64. ;Page functions
  65. !macro MUI_FUNCTION_STARTMENUPAGE PRE LEAVE
  66. Function "${PRE}"
  67. !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
  68. !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  69. ;Get Start Menu location from registry
  70. ${if} "${MUI_STARTMENUPAGE_VARIABLE}" == ""
  71. ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
  72. ${if} $mui.StartMenuPage.RegistryLocation != ""
  73. StrCpy "${MUI_STARTMENUPAGE_VARIABLE}" $mui.StartMenuPage.RegistryLocation
  74. ${endif}
  75. ClearErrors
  76. ${endif}
  77. !endif
  78. !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE)
  79. ${if} $(^RTL) == "0"
  80. !ifndef MUI_STARTMENUPAGE_NODISABLE
  81. StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  82. !else
  83. StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  84. !endif
  85. ${else}
  86. !ifndef MUI_STARTMENUPAGE_NODISABLE
  87. StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  88. !else
  89. StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  90. !endif
  91. ${endif}
  92. Pop $mui.StartMenuPage
  93. ;Get control handles
  94. GetDlgItem $mui.StartMenuPage.Location $mui.StartMenuPage 1002
  95. GetDlgItem $mui.StartMenuPage.FolderList $mui.StartMenuPage 1004
  96. !ifdef MUI_STARTMENUPAGE_BGCOLOR
  97. SetCtlColors $mui.StartMenuPage.Location "" "${MUI_STARTMENUPAGE_BGCOLOR}"
  98. SetCtlColors $mui.StartMenuMenu.FolderList "" "${MUI_STARTMENUPAGE_BGCOLOR}"
  99. !endif
  100. !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
  101. StartMenu::Show
  102. Pop $mui.StartMenuPage.Temp
  103. ${if} $mui.StartMenuPage.Temp == "success"
  104. Pop "${MUI_STARTMENUPAGE_VARIABLE}"
  105. ${endif}
  106. FunctionEnd
  107. Function "${LEAVE}"
  108. !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
  109. FunctionEnd
  110. !macroend
  111. ;--------------------------------
  112. ;Script macros to get Start Menu folder
  113. !macro MUI_STARTMENU_GETFOLDER ID VAR
  114. !verbose push
  115. !verbose ${MUI_VERBOSE}
  116. ;Get Start Menu folder from registry
  117. ;Can be called from the script in the uninstaller
  118. !ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME
  119. ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}"
  120. ${if} $mui.StartMenuPage.RegistryLocation != ""
  121. StrCpy "${VAR}" $mui.StartMenuPage.RegistryLocation
  122. ${else}
  123. StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
  124. ${endif}
  125. !else
  126. StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
  127. !endif
  128. !verbose pop
  129. !macroend
  130. !macro MUI_STARTMENU_WRITE_BEGIN ID
  131. ;The code in the script to write the shortcuts should be put between the
  132. ;MUI_STARTMENU_WRITE_BEGIN and MUI_STARTMENU_WRITE_END macros
  133. !verbose push
  134. !verbose ${MUI_VERBOSE}
  135. !define MUI_STARTMENUPAGE_CURRENT_ID "${ID}"
  136. StrCpy $mui.StartMenuPage.Temp "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1
  137. ;If the folder start with >, the user has chosen not to create a shortcut
  138. ${if} $mui.StartMenuPage.Temp != ">"
  139. ${if} "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" == ""
  140. ;Get folder from registry if the variable doesn't contain anything
  141. !insertmacro MUI_STARTMENU_GETFOLDER "${MUI_STARTMENUPAGE_CURRENT_ID}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
  142. ${endif}
  143. !verbose pop
  144. !macroend
  145. !macro MUI_STARTMENU_WRITE_END
  146. !verbose push
  147. !verbose ${MUI_VERBOSE}
  148. !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
  149. ;Write folder to registry
  150. 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}"
  151. !endif
  152. ${endif}
  153. !undef MUI_STARTMENUPAGE_CURRENT_ID
  154. !verbose pop
  155. !macroend