Interface.nsh 9.5 KB

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