Interface.nsh 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. /*
  2. NSIS Modern User Interface
  3. Interface code for all pages
  4. */
  5. ;--------------------------------
  6. ;Variables
  7. Var mui.Header.Text
  8. Var mui.Header.Text.Font
  9. Var mui.Header.SubText
  10. Var mui.Header.Background
  11. Var mui.Header.Image
  12. Var mui.Branding.Text
  13. Var mui.Branding.Background
  14. Var mui.Line.Standard
  15. Var mui.Line.FullWindow
  16. Var mui.Button.Next
  17. Var mui.Button.Cancel
  18. Var mui.Button.Back
  19. ;--------------------------------
  20. ;General interface settings
  21. !macro MUI_INTERFACE
  22. !ifndef MUI_INTERFACE
  23. !define MUI_INTERFACE
  24. ;These values are set after the interface settings in the script,
  25. ;so the script itself can override all values.
  26. ;Default interface settings in nsisconf.nsh
  27. !ifdef MUI_INSERT_NSISCONF
  28. !insertmacro MUI_NSISCONF
  29. !endif
  30. ;Default interface settings
  31. !insertmacro MUI_DEFAULT MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe"
  32. !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE "${NSISDIR}\Contrib\UIs\modern_headerbmp.exe"
  33. !insertmacro MUI_DEFAULT MUI_UI_HEADERIMAGE_RIGHT "${NSISDIR}\Contrib\UIs\modern_headerbmpr.exe"
  34. !insertmacro MUI_DEFAULT MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
  35. !insertmacro MUI_DEFAULT MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
  36. !insertmacro MUI_DEFAULT MUI_BGCOLOR "FFFFFF"
  37. !insertmacro MUI_DEFAULT MUI_TEXTCOLOR "000000"
  38. ;Map *_NOSTRETCH legacy define to the correct *_STRETCH value
  39. !verbose push 2
  40. !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_HEADERIMAGE_ ""
  41. !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_WELCOMEFINISHPAGE_ ""
  42. !insertmacro MUI_LEGACY_MAP_NOSTRETCH MUI_UNWELCOMEFINISHPAGE_ ""
  43. !verbose pop
  44. ;Default header images
  45. !ifdef MUI_HEADERIMAGE
  46. !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis.bmp"
  47. !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP_STRETCH "FitControl"
  48. !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_BITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH}
  49. !ifndef MUI_HEADERIMAGE_UNBITMAP
  50. !define MUI_HEADERIMAGE_UNBITMAP "${MUI_HEADERIMAGE_BITMAP}"
  51. !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH}
  52. !endif
  53. !if "${MUI_HEADERIMAGE_BITMAP}" == ""
  54. !error "Invalid MUI_HEADERIMAGE_BITMAP"
  55. !endif
  56. !if "${MUI_HEADERIMAGE_UNBITMAP}" == ""
  57. !error "Invalid MUI_HEADERIMAGE_UNBITMAP"
  58. !endif
  59. !ifdef MUI_HEADERIMAGE_BITMAP_RTL
  60. !ifndef MUI_HEADERIMAGE_UNBITMAP_RTL
  61. !define MUI_HEADERIMAGE_UNBITMAP_RTL "${MUI_HEADERIMAGE_BITMAP_RTL}"
  62. !insertmacro MUI_SET MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_RTL_STRETCH}
  63. !endif
  64. !if "${MUI_HEADERIMAGE_BITMAP_RTL}" == ""
  65. !error "Invalid MUI_HEADERIMAGE_BITMAP_RTL"
  66. !endif
  67. !if "${MUI_HEADERIMAGE_UNBITMAP_RTL}" == ""
  68. !error "Invalid MUI_HEADERIMAGE_UNBITMAP_RTL"
  69. !endif
  70. !endif
  71. !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_UNBITMAP_STRETCH ${MUI_HEADERIMAGE_BITMAP_STRETCH}
  72. !insertmacro MUI_DEFAULT MUI_HEADERIMAGE_UNBITMAP_RTL_STRETCH ${MUI_HEADERIMAGE_BITMAP_RTL_STRETCH}
  73. !endif
  74. ;Default texts
  75. !insertmacro MUI_DEFAULT MUI_ABORTWARNING_TEXT "$(MUI_TEXT_ABORTWARNING)"
  76. !insertmacro MUI_DEFAULT MUI_UNABORTWARNING_TEXT "$(MUI_UNTEXT_ABORTWARNING)"
  77. ;Apply settings
  78. XPStyle On ;XP style setting in manifest resource
  79. ;Dialog resources
  80. ChangeUI all "${MUI_UI}"
  81. !ifdef MUI_HEADERIMAGE
  82. !ifndef MUI_HEADERIMAGE_RIGHT
  83. ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE}"
  84. !else
  85. ChangeUI IDD_INST "${MUI_UI_HEADERIMAGE_RIGHT}"
  86. !endif
  87. !endif
  88. ;Icons
  89. Icon "${MUI_ICON}"
  90. UninstallIcon "${MUI_UNICON}"
  91. !endif
  92. !macroend
  93. ;--------------------------------
  94. ;Abort warning message box
  95. !macro MUI_ABORTWARNING
  96. !ifdef MUI_ABORTWARNING_CANCEL_DEFAULT
  97. MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit
  98. !else
  99. MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_ABORTWARNING_TEXT}" IDYES mui.Quit
  100. !endif
  101. Abort
  102. mui.Quit:
  103. !macroend
  104. !macro MUI_UNABORTWARNING
  105. !ifdef MUI_UNABORTWARNING_CANCEL_DEFAULT
  106. MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit
  107. !else
  108. MessageBox MB_YESNO|MB_ICONEXCLAMATION "${MUI_UNABORTWARNING_TEXT}" IDYES mui.Quit
  109. !endif
  110. Abort
  111. mui.Quit:
  112. !macroend
  113. ;--------------------------------
  114. ;Initialization of GUI
  115. !macro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO MACRO
  116. !ifdef MUI_HEADERIMAGE_RIGHT
  117. !ifndef MUI_OPTIMIZE_ALWAYSLTR ; Undocumented
  118. ${if} $(^RTL) == 1
  119. !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Left Leak
  120. ${Else}
  121. !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Right Leak
  122. ${EndIf}
  123. !else
  124. !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Right Leak
  125. !endif
  126. !else
  127. !insertmacro ${MACRO} $mui.Header.Image "${PATH}" Auto Leak
  128. !endif
  129. !macroend
  130. !macro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE UN RTL IMGRESID PATH
  131. GetDlgItem $mui.Header.Image $HWNDPARENT ${IMGRESID} ; This variable is not used by every mode but we have to reference it to avoid a compiler warning.
  132. !if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "NoStretchNoCropNoAlign"
  133. SetBrandingImage /IMGID=${IMGRESID} "${PATH}"
  134. !else if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "NoStretchNoCrop"
  135. !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO \
  136. MUI_LOADANDXALIGNIMAGE
  137. !else if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" == "AspectFitHeight"
  138. !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGEWITHMACRO \
  139. MUI_LOADANDASPECTSTRETCHIMAGETOCONTROLHEIGHT
  140. !else
  141. !if "${MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH}" != "FitControl"
  142. !warning 'MUI_HEADERIMAGE_${UN}BITMAP${RTL}_STRETCH set to unknown value, defaulting to FitControl'
  143. !endif
  144. SetBrandingImage /IMGID=${IMGRESID} /RESIZETOFIT "${PATH}"
  145. !endif
  146. !macroend
  147. !macro MUI_HEADERIMAGE_INIT UN IMGRESID
  148. ;Load and display header image
  149. !ifdef MUI_HEADERIMAGE
  150. InitPluginsDir
  151. !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL
  152. ${if} $(^RTL) == 1
  153. File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}"
  154. !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "_RTL" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp"
  155. ${else}
  156. !endif
  157. File "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP}"
  158. !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp"
  159. !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL
  160. ${endif}
  161. !endif
  162. !endif
  163. !macroend
  164. !macro MUI_GUIINIT_OUTERDIALOG UNINSTALLER
  165. ;Initialize outer dialog (fonts & colors)
  166. ;Header
  167. GetDlgItem $mui.Header.Text $HWNDPARENT 1037
  168. CreateFont $mui.Header.Text.Font "$(^Font)" "$(^FontSize)" "700"
  169. SendMessage $mui.Header.Text ${WM_SETFONT} $mui.Header.Text.Font 0
  170. GetDlgItem $mui.Header.SubText $HWNDPARENT 1038
  171. !ifndef MUI_HEADER_TRANSPARENT_TEXT
  172. SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
  173. SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
  174. !else
  175. SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "transparent"
  176. SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "transparent"
  177. !endif
  178. ;Header image
  179. !insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}" 1046
  180. ;Header background
  181. GetDlgItem $mui.Header.Background $HWNDPARENT 1034
  182. SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}"
  183. ;Header icon image background
  184. !ifndef MUI_HEADERIMAGE
  185. GetDlgItem $mui.Header.Image $HWNDPARENT 1039
  186. SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}"
  187. !endif
  188. ;Branding text
  189. GetDlgItem $mui.Branding.Background $HWNDPARENT 1028
  190. SetCtlColors $mui.Branding.Background /BRANDING
  191. GetDlgItem $mui.Branding.Text $HWNDPARENT 1256
  192. SetCtlColors $mui.Branding.Text /BRANDING
  193. SendMessage $mui.Branding.Text ${WM_SETTEXT} 0 "STR:$(^Branding) "
  194. ;Lines
  195. GetDlgItem $mui.Line.Standard $HWNDPARENT 1035
  196. GetDlgItem $mui.Line.FullWindow $HWNDPARENT 1045
  197. ;Buttons
  198. GetDlgItem $mui.Button.Next $HWNDPARENT 1
  199. GetDlgItem $mui.Button.Cancel $HWNDPARENT 2
  200. GetDlgItem $mui.Button.Back $HWNDPARENT 3
  201. !macroend
  202. ;--------------------------------
  203. ;Interface functions
  204. !macro MUI_FUNCTION_GUIINIT
  205. Function .onGUIInit
  206. !insertmacro MUI_GUIINIT_OUTERDIALOG ""
  207. !ifdef MUI_PAGE_FUNCTION_GUIINIT
  208. Call "${MUI_PAGE_FUNCTION_GUIINIT}"
  209. !endif
  210. !ifdef MUI_CUSTOMFUNCTION_GUIINIT
  211. Call "${MUI_CUSTOMFUNCTION_GUIINIT}"
  212. !endif
  213. FunctionEnd
  214. !macroend
  215. !macro MUI_UNFUNCTION_GUIINIT
  216. Function un.onGUIInit
  217. !insertmacro MUI_GUIINIT_OUTERDIALOG UN
  218. !ifdef MUI_UNPAGE_FUNCTION_GUIINIT
  219. Call "${MUI_UNPAGE_FUNCTION_GUIINIT}"
  220. !endif
  221. !ifdef MUI_CUSTOMFUNCTION_UNGUIINIT
  222. Call "${MUI_CUSTOMFUNCTION_UNGUIINIT}"
  223. !endif
  224. FunctionEnd
  225. !macroend
  226. !macro MUI_FUNCTION_ABORTWARNING
  227. Function .onUserAbort
  228. !ifdef MUI_PAGE_FUNCTION_ABORTWARNING
  229. Call ${MUI_PAGE_FUNCTION_ABORTWARNING}
  230. !endif
  231. !ifdef MUI_ABORTWARNING
  232. !insertmacro MUI_ABORTWARNING
  233. !endif
  234. !ifdef MUI_CUSTOMFUNCTION_ABORT
  235. Call "${MUI_CUSTOMFUNCTION_ABORT}"
  236. !endif
  237. FunctionEnd
  238. !macroend
  239. !macro MUI_FUNCTION_UNABORTWARNING
  240. Function un.onUserAbort
  241. !ifdef MUI_UNPAGE_FUNCTION_ABORTWARNING
  242. Call ${MUI_UNPAGE_FUNCTION_ABORTWARNING}
  243. !endif
  244. !ifdef MUI_UNABORTWARNING
  245. !insertmacro MUI_UNABORTWARNING
  246. !endif
  247. !ifdef MUI_CUSTOMFUNCTION_UNABORT
  248. Call "${MUI_CUSTOMFUNCTION_UNABORT}"
  249. !endif
  250. FunctionEnd
  251. !macroend