Interface.nsh 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  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. StubFile "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}"
  154. !pragma verifyloadimage "${MUI_HEADERIMAGE_${UN}BITMAP_RTL}"
  155. !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "_RTL" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp"
  156. ${else}
  157. !endif
  158. StubFile "/oname=$PLUGINSDIR\modern-header.bmp" "${MUI_HEADERIMAGE_${UN}BITMAP}"
  159. !pragma verifyloadimage "${MUI_HEADERIMAGE_${UN}BITMAP}"
  160. !insertmacro MUI_HEADERIMAGE_INITHELPER_LOADIMAGE "${UN}" "" ${IMGRESID} "$PLUGINSDIR\modern-header.bmp"
  161. !ifdef MUI_HEADERIMAGE_${UN}BITMAP_RTL
  162. ${endif}
  163. !endif
  164. !endif
  165. !macroend
  166. !macro MUI_GUIINIT_OUTERDIALOG UNINSTALLER
  167. ;Initialize outer dialog (fonts & colors)
  168. ;Header
  169. GetDlgItem $mui.Header.Text $HWNDPARENT 1037
  170. CreateFont $mui.Header.Text.Font "$(^Font)" "$(^FontSize)" "700"
  171. SendMessage $mui.Header.Text ${WM_SETFONT} $mui.Header.Text.Font 0
  172. GetDlgItem $mui.Header.SubText $HWNDPARENT 1038
  173. !ifndef MUI_HEADER_TRANSPARENT_TEXT
  174. SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
  175. SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
  176. !else
  177. SetCtlColors $mui.Header.Text "${MUI_TEXTCOLOR}" "transparent"
  178. SetCtlColors $mui.Header.SubText "${MUI_TEXTCOLOR}" "transparent"
  179. !endif
  180. ;Header image
  181. !insertmacro MUI_HEADERIMAGE_INIT "${UNINSTALLER}" 1046
  182. ;Header background
  183. GetDlgItem $mui.Header.Background $HWNDPARENT 1034
  184. SetCtlColors $mui.Header.Background "" "${MUI_BGCOLOR}"
  185. ;Header icon image background
  186. !ifndef MUI_HEADERIMAGE
  187. GetDlgItem $mui.Header.Image $HWNDPARENT 1039
  188. SetCtlColors $mui.Header.Image "" "${MUI_BGCOLOR}"
  189. !endif
  190. ;Branding text
  191. GetDlgItem $mui.Branding.Background $HWNDPARENT 1028
  192. SetCtlColors $mui.Branding.Background /BRANDING
  193. GetDlgItem $mui.Branding.Text $HWNDPARENT 1256
  194. SetCtlColors $mui.Branding.Text /BRANDING
  195. SendMessage $mui.Branding.Text ${WM_SETTEXT} 0 "STR:$(^Branding) "
  196. ;Lines
  197. GetDlgItem $mui.Line.Standard $HWNDPARENT 1035
  198. GetDlgItem $mui.Line.FullWindow $HWNDPARENT 1045
  199. ;Buttons
  200. GetDlgItem $mui.Button.Next $HWNDPARENT 1
  201. GetDlgItem $mui.Button.Cancel $HWNDPARENT 2
  202. GetDlgItem $mui.Button.Back $HWNDPARENT 3
  203. !macroend
  204. ;--------------------------------
  205. ;Interface functions
  206. !macro MUI_FUNCTION_GUIINIT
  207. Function .onGUIInit
  208. !insertmacro MUI_GUIINIT_OUTERDIALOG ""
  209. !ifdef MUI_PAGE_FUNCTION_GUIINIT
  210. Call "${MUI_PAGE_FUNCTION_GUIINIT}"
  211. !endif
  212. !ifdef MUI_CUSTOMFUNCTION_GUIINIT
  213. Call "${MUI_CUSTOMFUNCTION_GUIINIT}"
  214. !endif
  215. FunctionEnd
  216. !macroend
  217. !macro MUI_UNFUNCTION_GUIINIT
  218. Function un.onGUIInit
  219. !insertmacro MUI_GUIINIT_OUTERDIALOG UN
  220. !ifdef MUI_UNPAGE_FUNCTION_GUIINIT
  221. Call "${MUI_UNPAGE_FUNCTION_GUIINIT}"
  222. !endif
  223. !ifdef MUI_CUSTOMFUNCTION_UNGUIINIT
  224. Call "${MUI_CUSTOMFUNCTION_UNGUIINIT}"
  225. !endif
  226. FunctionEnd
  227. !macroend
  228. !macro MUI_FUNCTION_ABORTWARNING
  229. Function .onUserAbort
  230. !ifdef MUI_PAGE_FUNCTION_ABORTWARNING
  231. Call ${MUI_PAGE_FUNCTION_ABORTWARNING}
  232. !endif
  233. !ifdef MUI_ABORTWARNING
  234. !insertmacro MUI_ABORTWARNING
  235. !endif
  236. !ifdef MUI_CUSTOMFUNCTION_ABORT
  237. Call "${MUI_CUSTOMFUNCTION_ABORT}"
  238. !endif
  239. FunctionEnd
  240. !macroend
  241. !macro MUI_FUNCTION_UNABORTWARNING
  242. Function un.onUserAbort
  243. !ifdef MUI_UNPAGE_FUNCTION_ABORTWARNING
  244. Call ${MUI_UNPAGE_FUNCTION_ABORTWARNING}
  245. !endif
  246. !ifdef MUI_UNABORTWARNING
  247. !insertmacro MUI_UNABORTWARNING
  248. !endif
  249. !ifdef MUI_CUSTOMFUNCTION_UNABORT
  250. Call "${MUI_CUSTOMFUNCTION_UNABORT}"
  251. !endif
  252. FunctionEnd
  253. !macroend