home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Programming / nsis-2.46-setup.exe / Include / nsDialogs.nsh < prev    next >
Encoding:
Text File  |  2009-01-24  |  22.8 KB  |  861 lines

  1. /*
  2.  
  3. nsDialogs.nsh
  4. Header file for creating custom installer pages with nsDialogs
  5.  
  6. */
  7.  
  8. !ifndef NSDIALOGS_INCLUDED
  9. !define NSDIALOGS_INCLUDED
  10. !verbose push
  11. !verbose 3
  12.  
  13. !include LogicLib.nsh
  14. !include WinMessages.nsh
  15.  
  16. !define WS_EX_DLGMODALFRAME  0x00000001
  17. !define WS_EX_NOPARENTNOTIFY 0x00000004
  18. !define WS_EX_TOPMOST        0x00000008
  19. !define WS_EX_ACCEPTFILES    0x00000010
  20. !define WS_EX_TRANSPARENT    0x00000020
  21. !define WS_EX_MDICHILD       0x00000040
  22. !define WS_EX_TOOLWINDOW     0x00000080
  23. !define WS_EX_WINDOWEDGE     0x00000100
  24. !define WS_EX_CLIENTEDGE     0x00000200
  25. !define WS_EX_CONTEXTHELP    0x00000400
  26. !define WS_EX_RIGHT          0x00001000
  27. !define WS_EX_LEFT           0x00000000
  28. !define WS_EX_RTLREADING     0x00002000
  29. !define WS_EX_LTRREADING     0x00000000
  30. !define WS_EX_LEFTSCROLLBAR  0x00004000
  31. !define WS_EX_RIGHTSCROLLBAR 0x00000000
  32. !define WS_EX_CONTROLPARENT  0x00010000
  33. !define WS_EX_STATICEDGE     0x00020000
  34. !define WS_EX_APPWINDOW      0x00040000
  35.  
  36. !define WS_CHILD             0x40000000
  37. !define WS_VISIBLE           0x10000000
  38. !define WS_DISABLED          0x08000000
  39. !define WS_CLIPSIBLINGS      0x04000000
  40. !define WS_CLIPCHILDREN      0x02000000
  41. !define WS_MAXIMIZE          0x01000000
  42. !define WS_VSCROLL           0x00200000
  43. !define WS_HSCROLL           0x00100000
  44. !define WS_GROUP             0x00020000
  45. !define WS_TABSTOP           0x00010000
  46.  
  47. !define ES_LEFT              0x00000000
  48. !define ES_CENTER            0x00000001
  49. !define ES_RIGHT             0x00000002
  50. !define ES_MULTILINE         0x00000004
  51. !define ES_UPPERCASE         0x00000008
  52. !define ES_LOWERCASE         0x00000010
  53. !define ES_PASSWORD          0x00000020
  54. !define ES_AUTOVSCROLL       0x00000040
  55. !define ES_AUTOHSCROLL       0x00000080
  56. !define ES_NOHIDESEL         0x00000100
  57. !define ES_OEMCONVERT        0x00000400
  58. !define ES_READONLY          0x00000800
  59. !define ES_WANTRETURN        0x00001000
  60. !define ES_NUMBER            0x00002000
  61.  
  62. !define SS_LEFT              0x00000000
  63. !define SS_CENTER            0x00000001
  64. !define SS_RIGHT             0x00000002
  65. !define SS_ICON              0x00000003
  66. !define SS_BLACKRECT         0x00000004
  67. !define SS_GRAYRECT          0x00000005
  68. !define SS_WHITERECT         0x00000006
  69. !define SS_BLACKFRAME        0x00000007
  70. !define SS_GRAYFRAME         0x00000008
  71. !define SS_WHITEFRAME        0x00000009
  72. !define SS_USERITEM          0x0000000A
  73. !define SS_SIMPLE            0x0000000B
  74. !define SS_LEFTNOWORDWRAP    0x0000000C
  75. !define SS_OWNERDRAW         0x0000000D
  76. !define SS_BITMAP            0x0000000E
  77. !define SS_ENHMETAFILE       0x0000000F
  78. !define SS_ETCHEDHORZ        0x00000010
  79. !define SS_ETCHEDVERT        0x00000011
  80. !define SS_ETCHEDFRAME       0x00000012
  81. !define SS_TYPEMASK          0x0000001F
  82. !define SS_REALSIZECONTROL   0x00000040
  83. !define SS_NOPREFIX          0x00000080
  84. !define SS_NOTIFY            0x00000100
  85. !define SS_CENTERIMAGE       0x00000200
  86. !define SS_RIGHTJUST         0x00000400
  87. !define SS_REALSIZEIMAGE     0x00000800
  88. !define SS_SUNKEN            0x00001000
  89. !define SS_EDITCONTROL       0x00002000
  90. !define SS_ENDELLIPSIS       0x00004000
  91. !define SS_PATHELLIPSIS      0x00008000
  92. !define SS_WORDELLIPSIS      0x0000C000
  93. !define SS_ELLIPSISMASK      0x0000C000
  94.  
  95. !define BS_PUSHBUTTON        0x00000000
  96. !define BS_DEFPUSHBUTTON     0x00000001
  97. !define BS_CHECKBOX          0x00000002
  98. !define BS_AUTOCHECKBOX      0x00000003
  99. !define BS_RADIOBUTTON       0x00000004
  100. !define BS_3STATE            0x00000005
  101. !define BS_AUTO3STATE        0x00000006
  102. !define BS_GROUPBOX          0x00000007
  103. !define BS_USERBUTTON        0x00000008
  104. !define BS_AUTORADIOBUTTON   0x00000009
  105. !define BS_PUSHBOX           0x0000000A
  106. !define BS_OWNERDRAW         0x0000000B
  107. !define BS_TYPEMASK          0x0000000F
  108. !define BS_LEFTTEXT          0x00000020
  109. !define BS_TEXT              0x00000000
  110. !define BS_ICON              0x00000040
  111. !define BS_BITMAP            0x00000080
  112. !define BS_LEFT              0x00000100
  113. !define BS_RIGHT             0x00000200
  114. !define BS_CENTER            0x00000300
  115. !define BS_TOP               0x00000400
  116. !define BS_BOTTOM            0x00000800
  117. !define BS_VCENTER           0x00000C00
  118. !define BS_PUSHLIKE          0x00001000
  119. !define BS_MULTILINE         0x00002000
  120. !define BS_NOTIFY            0x00004000
  121. !define BS_FLAT              0x00008000
  122. !define BS_RIGHTBUTTON       ${BS_LEFTTEXT}
  123.  
  124. !define CBS_SIMPLE            0x0001
  125. !define CBS_DROPDOWN          0x0002
  126. !define CBS_DROPDOWNLIST      0x0003
  127. !define CBS_OWNERDRAWFIXED    0x0010
  128. !define CBS_OWNERDRAWVARIABLE 0x0020
  129. !define CBS_AUTOHSCROLL       0x0040
  130. !define CBS_OEMCONVERT        0x0080
  131. !define CBS_SORT              0x0100
  132. !define CBS_HASSTRINGS        0x0200
  133. !define CBS_NOINTEGRALHEIGHT  0x0400
  134. !define CBS_DISABLENOSCROLL   0x0800
  135. !define CBS_UPPERCASE         0x2000
  136. !define CBS_LOWERCASE         0x4000
  137.  
  138. !define LBS_NOTIFY            0x0001
  139. !define LBS_SORT              0x0002
  140. !define LBS_NOREDRAW          0x0004
  141. !define LBS_MULTIPLESEL       0x0008
  142. !define LBS_OWNERDRAWFIXED    0x0010
  143. !define LBS_OWNERDRAWVARIABLE 0x0020
  144. !define LBS_HASSTRINGS        0x0040
  145. !define LBS_USETABSTOPS       0x0080
  146. !define LBS_NOINTEGRALHEIGHT  0x0100
  147. !define LBS_MULTICOLUMN       0x0200
  148. !define LBS_WANTKEYBOARDINPUT 0x0400
  149. !define LBS_EXTENDEDSEL       0x0800
  150. !define LBS_DISABLENOSCROLL   0x1000
  151. !define LBS_NODATA            0x2000
  152. !define LBS_NOSEL             0x4000
  153. !define LBS_COMBOBOX          0x8000
  154.  
  155. !define LR_DEFAULTCOLOR     0x0000
  156. !define LR_MONOCHROME       0x0001
  157. !define LR_COLOR            0x0002
  158. !define LR_COPYRETURNORG    0x0004
  159. !define LR_COPYDELETEORG    0x0008
  160. !define LR_LOADFROMFILE     0x0010
  161. !define LR_LOADTRANSPARENT  0x0020
  162. !define LR_DEFAULTSIZE      0x0040
  163. !define LR_VGACOLOR         0x0080
  164. !define LR_LOADMAP3DCOLORS  0x1000
  165. !define LR_CREATEDIBSECTION 0x2000
  166. !define LR_COPYFROMRESOURCE 0x4000
  167. !define LR_SHARED           0x8000
  168.  
  169. !define IMAGE_BITMAP        0
  170. !define IMAGE_ICON          1
  171. !define IMAGE_CURSOR        2
  172. !define IMAGE_ENHMETAFILE   3
  173.  
  174. !define GWL_STYLE           -16
  175. !define GWL_EXSTYLE         -20
  176.  
  177. !define DEFAULT_STYLES ${WS_CHILD}|${WS_VISIBLE}|${WS_CLIPSIBLINGS}
  178.  
  179. !define __NSD_HLine_CLASS STATIC
  180. !define __NSD_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN}
  181. !define __NSD_HLine_EXSTYLE ${WS_EX_TRANSPARENT}
  182.  
  183. !define __NSD_VLine_CLASS STATIC
  184. !define __NSD_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN}
  185. !define __NSD_VLine_EXSTYLE ${WS_EX_TRANSPARENT}
  186.  
  187. !define __NSD_Label_CLASS STATIC
  188. !define __NSD_Label_STYLE ${DEFAULT_STYLES}|${SS_NOTIFY}
  189. !define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}
  190.  
  191. !define __NSD_Icon_CLASS STATIC
  192. !define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}|${SS_NOTIFY}
  193. !define __NSD_Icon_EXSTYLE 0
  194.  
  195. !define __NSD_Bitmap_CLASS STATIC
  196. !define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}|${SS_NOTIFY}
  197. !define __NSD_Bitmap_EXSTYLE 0
  198.  
  199. !define __NSD_BrowseButton_CLASS BUTTON
  200. !define __NSD_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
  201. !define __NSD_BrowseButton_EXSTYLE 0
  202.  
  203. !define __NSD_Link_CLASS LINK
  204. !define __NSD_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW}
  205. !define __NSD_Link_EXSTYLE 0
  206.  
  207. !define __NSD_Button_CLASS BUTTON
  208. !define __NSD_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
  209. !define __NSD_Button_EXSTYLE 0
  210.  
  211. !define __NSD_GroupBox_CLASS BUTTON
  212. !define __NSD_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX}
  213. !define __NSD_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT}
  214.  
  215. !define __NSD_CheckBox_CLASS BUTTON
  216. !define __NSD_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE}
  217. !define __NSD_CheckBox_EXSTYLE 0
  218.  
  219. !define __NSD_RadioButton_CLASS BUTTON
  220. !define __NSD_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE}
  221. !define __NSD_RadioButton_EXSTYLE 0
  222.  
  223. !define __NSD_Text_CLASS EDIT
  224. !define __NSD_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
  225. !define __NSD_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  226.  
  227. !define __NSD_Password_CLASS EDIT
  228. !define __NSD_Password_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_PASSWORD}
  229. !define __NSD_Password_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  230.  
  231. !define __NSD_Number_CLASS EDIT
  232. !define __NSD_Number_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_NUMBER}
  233. !define __NSD_Number_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  234.  
  235. !define __NSD_FileRequest_CLASS EDIT
  236. !define __NSD_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
  237. !define __NSD_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  238.  
  239. !define __NSD_DirRequest_CLASS EDIT
  240. !define __NSD_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
  241. !define __NSD_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  242.  
  243. !define __NSD_ComboBox_CLASS COMBOBOX
  244. !define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWN}
  245. !define __NSD_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  246.  
  247. !define __NSD_DropList_CLASS COMBOBOX
  248. !define __NSD_DropList_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}|${CBS_DROPDOWNLIST}
  249. !define __NSD_DropList_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  250.  
  251. !define __NSD_ListBox_CLASS LISTBOX
  252. !define __NSD_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}|${LBS_NOTIFY}
  253. !define __NSD_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  254.  
  255. !define __NSD_ProgressBar_CLASS msctls_progress32
  256. !define __NSD_ProgressBar_STYLE ${DEFAULT_STYLES}
  257. !define __NSD_ProgressBar_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  258.  
  259. !macro __NSD_DefineControl NAME
  260.  
  261.     !define NSD_Create${NAME} "nsDialogs::CreateControl ${__NSD_${Name}_CLASS} ${__NSD_${Name}_STYLE} ${__NSD_${Name}_EXSTYLE}"
  262.  
  263. !macroend
  264.  
  265. !insertmacro __NSD_DefineControl HLine
  266. !insertmacro __NSD_DefineControl VLine
  267. !insertmacro __NSD_DefineControl Label
  268. !insertmacro __NSD_DefineControl Icon
  269. !insertmacro __NSD_DefineControl Bitmap
  270. !insertmacro __NSD_DefineControl BrowseButton
  271. !insertmacro __NSD_DefineControl Link
  272. !insertmacro __NSD_DefineControl Button
  273. !insertmacro __NSD_DefineControl GroupBox
  274. !insertmacro __NSD_DefineControl CheckBox
  275. !insertmacro __NSD_DefineControl RadioButton
  276. !insertmacro __NSD_DefineControl Text
  277. !insertmacro __NSD_DefineControl Password
  278. !insertmacro __NSD_DefineControl Number
  279. !insertmacro __NSD_DefineControl FileRequest
  280. !insertmacro __NSD_DefineControl DirRequest
  281. !insertmacro __NSD_DefineControl ComboBox
  282. !insertmacro __NSD_DefineControl DropList
  283. !insertmacro __NSD_DefineControl ListBox
  284. !insertmacro __NSD_DefineControl ProgressBar
  285.  
  286. !macro __NSD_OnControlEvent EVENT HWND FUNCTION
  287.  
  288.     Push $0
  289.     Push $1
  290.  
  291.     StrCpy $1 "${HWND}"
  292.  
  293.     GetFunctionAddress $0 "${FUNCTION}"
  294.     nsDialogs::On${EVENT} $1 $0
  295.  
  296.     Pop $1
  297.     Pop $0
  298.  
  299. !macroend
  300.  
  301. !macro __NSD_DefineControlCallback EVENT
  302.  
  303.     !define NSD_On${EVENT} `!insertmacro __NSD_OnControlEvent ${EVENT}`
  304.  
  305. !macroend
  306.  
  307. !macro __NSD_OnDialogEvent EVENT FUNCTION
  308.  
  309.     Push $0
  310.  
  311.     GetFunctionAddress $0 "${FUNCTION}"
  312.     nsDialogs::On${EVENT} $0
  313.  
  314.     Pop $0
  315.  
  316. !macroend
  317.  
  318. !macro __NSD_DefineDialogCallback EVENT
  319.  
  320.     !define NSD_On${EVENT} `!insertmacro __NSD_OnDialogEvent ${EVENT}`
  321.  
  322. !macroend
  323.  
  324. !insertmacro __NSD_DefineControlCallback Click
  325. !insertmacro __NSD_DefineControlCallback Change
  326. !insertmacro __NSD_DefineControlCallback Notify
  327. !insertmacro __NSD_DefineDialogCallback Back
  328.  
  329. !macro _NSD_CreateTimer FUNCTION INTERVAL
  330.  
  331.     Push $0
  332.  
  333.     GetFunctionAddress $0 "${FUNCTION}"
  334.     nsDialogs::CreateTimer $0 "${INTERVAL}"
  335.  
  336.     Pop $0
  337.  
  338. !macroend
  339.  
  340. !define NSD_CreateTimer `!insertmacro _NSD_CreateTimer`
  341.  
  342. !macro _NSD_KillTimer FUNCTION
  343.  
  344.     Push $0
  345.  
  346.     GetFunctionAddress $0 "${FUNCTION}"
  347.     nsDialogs::KillTimer $0
  348.  
  349.     Pop $0
  350.  
  351. !macroend
  352.  
  353. !define NSD_KillTimer `!insertmacro _NSD_KillTimer`
  354.  
  355. !macro _NSD_AddStyle CONTROL STYLE
  356.  
  357.     Push $0
  358.  
  359.     System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_STYLE}) i .r0"
  360.     System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_STYLE}, i $0|${STYLE})"
  361.  
  362.     Pop $0
  363.  
  364. !macroend
  365.  
  366. !define NSD_AddStyle "!insertmacro _NSD_AddStyle"
  367.  
  368. !macro _NSD_AddExStyle CONTROL EXSTYLE
  369.  
  370.     Push $0
  371.  
  372.     System::Call "user32::GetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}) i .r0"
  373.     System::Call "user32::SetWindowLong(i ${CONTROL}, i ${GWL_EXSTYLE}, i $0|${EXSTYLE})"
  374.  
  375.     Pop $0
  376.  
  377. !macroend
  378.  
  379. !define NSD_AddExStyle "!insertmacro _NSD_AddExStyle"
  380.  
  381. !macro __NSD_GetText CONTROL VAR
  382.  
  383.     System::Call user32::GetWindowText(i${CONTROL},t.s,i${NSIS_MAX_STRLEN})
  384.     Pop ${VAR}
  385.  
  386. !macroend
  387.  
  388. !define NSD_GetText `!insertmacro __NSD_GetText`
  389.  
  390. !macro __NSD_SetText CONTROL TEXT
  391.  
  392.     SendMessage ${CONTROL} ${WM_SETTEXT} 0 `STR:${TEXT}`
  393.  
  394. !macroend
  395.  
  396. !define NSD_SetText `!insertmacro __NSD_SetText`
  397.  
  398. !macro _NSD_SetTextLimit CONTROL LIMIT
  399.  
  400.     SendMessage ${CONTROL} ${EM_SETLIMITTEXT} ${LIMIT} 0
  401.  
  402. !macroend
  403.  
  404. !define NSD_SetTextLimit "!insertmacro _NSD_SetTextLimit"
  405.  
  406. !macro __NSD_GetState CONTROL VAR
  407.  
  408.     SendMessage ${CONTROL} ${BM_GETCHECK} 0 0 ${VAR}
  409.  
  410. !macroend
  411.  
  412. !define NSD_GetState `!insertmacro __NSD_GetState`
  413.  
  414. !macro __NSD_SetState CONTROL STATE
  415.  
  416.     SendMessage ${CONTROL} ${BM_SETCHECK} ${STATE} 0
  417.  
  418. !macroend
  419.  
  420. !define NSD_SetState `!insertmacro __NSD_SetState`
  421.  
  422. !macro __NSD_Check CONTROL
  423.  
  424.     ${NSD_SetState} ${CONTROL} ${BST_CHECKED}
  425.  
  426. !macroend
  427.  
  428. !define NSD_Check `!insertmacro __NSD_Check`
  429.  
  430. !macro __NSD_Uncheck CONTROL
  431.  
  432.     ${NSD_SetState} ${CONTROL} ${BST_UNCHECKED}
  433.  
  434. !macroend
  435.  
  436. !define NSD_Uncheck `!insertmacro __NSD_Uncheck`
  437.  
  438. !macro __NSD_SetFocus HWND
  439.  
  440.     System::Call "user32::SetFocus(i${HWND})"
  441.   
  442. !macroend
  443.  
  444. !define NSD_SetFocus `!insertmacro __NSD_SetFocus`
  445.  
  446. !macro _NSD_CB_AddString CONTROL STRING
  447.  
  448.     SendMessage ${CONTROL} ${CB_ADDSTRING} 0 `STR:${STRING}`
  449.  
  450. !macroend
  451.  
  452. !define NSD_CB_AddString "!insertmacro _NSD_CB_AddString"
  453.  
  454. !macro _NSD_CB_SelectString CONTROL STRING
  455.  
  456.     SendMessage ${CONTROL} ${CB_SELECTSTRING} -1 `STR:${STRING}`
  457.  
  458. !macroend
  459.  
  460. !define NSD_CB_SelectString "!insertmacro _NSD_CB_SelectString"
  461.  
  462. !macro _NSD_LB_AddString CONTROL STRING
  463.  
  464.     SendMessage ${CONTROL} ${LB_ADDSTRING} 0 `STR:${STRING}`
  465.  
  466. !macroend
  467.  
  468. !define NSD_LB_AddString "!insertmacro _NSD_LB_AddString"
  469.  
  470. !macro __NSD_LB_DelString CONTROL STRING
  471.  
  472.     SendMessage ${CONTROL} ${LB_DELETESTRING} 0 `STR:${STRING}`
  473.  
  474. !macroend
  475.  
  476. !define NSD_LB_DelString `!insertmacro __NSD_LB_DelString`
  477.  
  478. !macro __NSD_LB_Clear CONTROL VAR
  479.  
  480.     SendMessage ${CONTROL} ${LB_RESETCONTENT} 0 0 ${VAR}
  481.  
  482. !macroend
  483.  
  484. !define NSD_LB_Clear `!insertmacro __NSD_LB_Clear`
  485.  
  486. !macro __NSD_LB_GetCount CONTROL VAR
  487.  
  488.     SendMessage ${CONTROL} ${LB_GETCOUNT} 0 0 ${VAR}
  489.  
  490. !macroend
  491.  
  492. !define NSD_LB_GetCount `!insertmacro __NSD_LB_GetCount`
  493.  
  494. !macro _NSD_LB_SelectString CONTROL STRING
  495.  
  496.     SendMessage ${CONTROL} ${LB_SELECTSTRING} -1 `STR:${STRING}`
  497.  
  498. !macroend
  499.  
  500. !define NSD_LB_SelectString "!insertmacro _NSD_LB_SelectString"
  501.  
  502. !macro __NSD_LB_GetSelection CONTROL VAR
  503.  
  504.     SendMessage ${CONTROL} ${LB_GETCURSEL} 0 0 ${VAR}
  505.     System::Call 'user32::SendMessage(i ${CONTROL}, i ${LB_GETTEXT}, i ${VAR}, t .s)'
  506.     Pop ${VAR}
  507.  
  508. !macroend
  509.  
  510. !define NSD_LB_GetSelection `!insertmacro __NSD_LB_GetSelection`
  511.  
  512.  
  513. !macro __NSD_LoadAndSetImage _LIHINSTMODE _IMGTYPE _LIHINSTSRC _LIFLAGS CONTROL IMAGE HANDLE
  514.     
  515.     Push $0
  516.     Push $R0
  517.  
  518.     StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0
  519.     
  520.     !if "${_LIHINSTMODE}" == "exeresource"
  521.         System::Call 'kernel32::GetModuleHandle(i0) i.r0'
  522.         !undef _LIHINSTSRC
  523.         !define _LIHINSTSRC r0
  524.     !endif
  525.     
  526.     System::Call 'user32::LoadImage(i ${_LIHINSTSRC}, ts, i ${_IMGTYPE}, i0, i0, i${_LIFLAGS}) i.r0' "${IMAGE}"
  527.     SendMessage $R0 ${STM_SETIMAGE} ${_IMGTYPE} $0
  528.  
  529.     Pop $R0
  530.     Exch $0
  531.  
  532.     Pop ${HANDLE}
  533.  
  534. !macroend
  535.  
  536. !macro __NSD_SetIconFromExeResource CONTROL IMAGE HANDLE
  537.     !insertmacro __NSD_LoadAndSetImage exeresource ${IMAGE_ICON} 0 ${LR_DEFAULTSIZE} "${CONTROL}" "${IMAGE}" ${HANDLE}
  538. !macroend
  539.  
  540. !macro __NSD_SetIconFromInstaller CONTROL HANDLE
  541.     !insertmacro __NSD_SetIconFromExeResource "${CONTROL}" "#103" ${HANDLE}
  542. !macroend
  543.  
  544. !define NSD_SetImage `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_BITMAP} 0 "${LR_LOADFROMFILE}"`
  545. !define NSD_SetBitmap `${NSD_SetImage}`
  546.  
  547. !define NSD_SetIcon `!insertmacro __NSD_LoadAndSetImage file ${IMAGE_ICON} 0 "${LR_LOADFROMFILE}|${LR_DEFAULTSIZE}"`
  548. !define NSD_SetIconFromExeResource `!insertmacro __NSD_SetIconFromExeResource`
  549. !define NSD_SetIconFromInstaller `!insertmacro __NSD_SetIconFromInstaller`
  550.  
  551.  
  552. !macro __NSD_SetStretchedImage CONTROL IMAGE HANDLE
  553.  
  554.     Push $0
  555.     Push $1
  556.     Push $2
  557.     Push $R0
  558.  
  559.     StrCpy $R0 ${CONTROL} # in case ${CONTROL} is $0
  560.  
  561.     StrCpy $1 ""
  562.     StrCpy $2 ""
  563.  
  564.     System::Call '*(i, i, i, i) i.s'
  565.     Pop $0
  566.  
  567.     ${If} $0 <> 0
  568.     
  569.         System::Call 'user32::GetClientRect(iR0, ir0)'
  570.         System::Call '*$0(i, i, i .s, i .s)'
  571.         System::Free $0
  572.         Pop $1
  573.         Pop $2
  574.  
  575.     ${EndIf}
  576.  
  577.     System::Call 'user32::LoadImage(i0, ts, i ${IMAGE_BITMAP}, ir1, ir2, i${LR_LOADFROMFILE}) i.s' "${IMAGE}"
  578.     Pop $0
  579.     SendMessage $R0 ${STM_SETIMAGE} ${IMAGE_BITMAP} $0
  580.  
  581.     Pop $R0
  582.     Pop $2
  583.     Pop $1
  584.     Exch $0
  585.  
  586.     Pop ${HANDLE}
  587.  
  588. !macroend
  589.  
  590. !define NSD_SetStretchedImage `!insertmacro __NSD_SetStretchedImage`
  591.  
  592. !macro __NSD_FreeImage IMAGE
  593.  
  594.     ${If} ${IMAGE} <> 0
  595.  
  596.         System::Call gdi32::DeleteObject(is) ${IMAGE}
  597.  
  598.     ${EndIf}
  599.  
  600. !macroend
  601.  
  602. !define NSD_FreeImage `!insertmacro __NSD_FreeImage`
  603. !define NSD_FreeBitmap `${NSD_FreeImage}`
  604.  
  605. !macro __NSD_FreeIcon IMAGE
  606.     System::Call user32::DestroyIcon(is) ${IMAGE}
  607. !macroend
  608.  
  609. !define NSD_FreeIcon `!insertmacro __NSD_FreeIcon`
  610.  
  611. !macro __NSD_ClearImage _IMGTYPE CONTROL
  612.  
  613.     SendMessage ${CONTROL} ${STM_SETIMAGE} ${_IMGTYPE} 0
  614.  
  615. !macroend
  616.  
  617. !define NSD_ClearImage `!insertmacro __NSD_ClearImage ${IMAGE_BITMAP}`
  618. !define NSD_ClearIcon  `!insertmacro __NSD_ClearImage ${IMAGE_ICON}`
  619.  
  620.  
  621. !define DEBUG `System::Call kernel32::OutputDebugString(ts)`
  622.  
  623. !macro __NSD_ControlCase TYPE
  624.  
  625.     ${Case} ${TYPE}
  626.         ${NSD_Create${TYPE}} $R3u $R4u $R5u $R6u $R7
  627.         Pop $R9
  628.         ${Break}
  629.  
  630. !macroend
  631.  
  632. !macro __NSD_ControlCaseEx TYPE
  633.  
  634.     ${Case} ${TYPE}
  635.         Call ${TYPE}
  636.         ${Break}
  637.  
  638. !macroend
  639.  
  640. !macro NSD_FUNCTION_INIFILE
  641.  
  642.     !insertmacro NSD_INIFILE ""
  643.  
  644. !macroend
  645.  
  646. !macro NSD_UNFUNCTION_INIFILE
  647.  
  648.     !insertmacro NSD_INIFILE un.
  649.  
  650. !macroend
  651.  
  652. !macro NSD_INIFILE UNINSTALLER_FUNCPREFIX
  653.  
  654.     ;Functions to create dialogs based on old InstallOptions INI files
  655.  
  656.     Function ${UNINSTALLER_FUNCPREFIX}CreateDialogFromINI
  657.  
  658.         # $0 = ini
  659.  
  660.         ReadINIStr $R0 $0 Settings RECT
  661.         ${If} $R0 == ""
  662.             StrCpy $R0 1018
  663.         ${EndIf}
  664.  
  665.         nsDialogs::Create $R0
  666.         Pop $R9
  667.  
  668.         ReadINIStr $R0 $0 Settings RTL
  669.         nsDialogs::SetRTL $R0
  670.  
  671.         ReadINIStr $R0 $0 Settings NumFields
  672.  
  673.         ${DEBUG} "NumFields = $R0"
  674.  
  675.         ${For} $R1 1 $R0
  676.             ${DEBUG} "Creating field $R1"
  677.             ReadINIStr $R2 $0 "Field $R1" Type
  678.             ${DEBUG} "  Type = $R2"
  679.             ReadINIStr $R3 $0 "Field $R1" Left
  680.             ${DEBUG} "  Left = $R3"
  681.             ReadINIStr $R4 $0 "Field $R1" Top
  682.             ${DEBUG} "  Top = $R4"
  683.             ReadINIStr $R5 $0 "Field $R1" Right
  684.             ${DEBUG} "  Right = $R5"
  685.             ReadINIStr $R6 $0 "Field $R1" Bottom
  686.             ${DEBUG} "  Bottom = $R6"
  687.             IntOp $R5 $R5 - $R3
  688.             ${DEBUG} "  Width = $R5"
  689.             IntOp $R6 $R6 - $R4
  690.             ${DEBUG} "  Height = $R6"
  691.             ReadINIStr $R7 $0 "Field $R1" Text
  692.             ${DEBUG} "  Text = $R7"
  693.             ${Switch} $R2
  694.                 !insertmacro __NSD_ControlCase   HLine
  695.                 !insertmacro __NSD_ControlCase   VLine
  696.                 !insertmacro __NSD_ControlCase   Label
  697.                 !insertmacro __NSD_ControlCase   Icon
  698.                 !insertmacro __NSD_ControlCase   Bitmap
  699.                 !insertmacro __NSD_ControlCaseEx Link
  700.                 !insertmacro __NSD_ControlCase   Button
  701.                 !insertmacro __NSD_ControlCase   GroupBox
  702.                 !insertmacro __NSD_ControlCase   CheckBox
  703.                 !insertmacro __NSD_ControlCase   RadioButton
  704.                 !insertmacro __NSD_ControlCase   Text
  705.                 !insertmacro __NSD_ControlCase   Password
  706.                 !insertmacro __NSD_ControlCaseEx FileRequest
  707.                 !insertmacro __NSD_ControlCaseEx DirRequest
  708.                 !insertmacro __NSD_ControlCase   ComboBox
  709.                 !insertmacro __NSD_ControlCase   DropList
  710.                 !insertmacro __NSD_ControlCase   ListBox
  711.             ${EndSwitch}
  712.  
  713.             WriteINIStr $0 "Field $R1" HWND $R9
  714.         ${Next}
  715.  
  716.         nsDialogs::Show
  717.  
  718.     FunctionEnd
  719.  
  720.     Function ${UNINSTALLER_FUNCPREFIX}UpdateINIState
  721.  
  722.         ${DEBUG} "Updating INI state"
  723.  
  724.         ReadINIStr $R0 $0 Settings NumFields
  725.  
  726.         ${DEBUG} "NumField = $R0"
  727.  
  728.         ${For} $R1 1 $R0
  729.             ReadINIStr $R2 $0 "Field $R1" HWND
  730.             ReadINIStr $R3 $0 "Field $R1" "Type"
  731.             ${Switch} $R3
  732.                 ${Case} "CheckBox"
  733.                 ${Case} "RadioButton"
  734.                     ${DEBUG} "  HWND = $R2"
  735.                     ${NSD_GetState} $R2 $R2
  736.                     ${DEBUG} "  Window selection = $R2"
  737.                 ${Break}
  738.                 ${CaseElse}
  739.                     ${DEBUG} "  HWND = $R2"
  740.                     ${NSD_GetText} $R2 $R2
  741.                     ${DEBUG} "  Window text = $R2"
  742.                 ${Break}
  743.             ${EndSwitch}
  744.             WriteINIStr $0 "Field $R1" STATE $R2
  745.         ${Next}
  746.  
  747.     FunctionEnd
  748.  
  749.     Function ${UNINSTALLER_FUNCPREFIX}FileRequest
  750.  
  751.         IntOp $R5 $R5 - 15
  752.         IntOp $R8 $R3 + $R5
  753.  
  754.         ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
  755.         Pop $R8
  756.  
  757.         nsDialogs::SetUserData $R8 $R1 # remember field id
  758.  
  759.         WriteINIStr $0 "Field $R1" HWND2 $R8
  760.  
  761.         ${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
  762.  
  763.         ReadINIStr $R9 $0 "Field $R1" State
  764.  
  765.         ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
  766.         Pop $R9
  767.  
  768.     FunctionEnd
  769.  
  770.     Function ${UNINSTALLER_FUNCPREFIX}DirRequest
  771.  
  772.         IntOp $R5 $R5 - 15
  773.         IntOp $R8 $R3 + $R5
  774.  
  775.         ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
  776.         Pop $R8
  777.  
  778.         nsDialogs::SetUserData $R8 $R1 # remember field id
  779.  
  780.         WriteINIStr $0 "Field $R1" HWND2 $R8
  781.  
  782.         ${NSD_OnClick} $R8 ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
  783.  
  784.         ReadINIStr $R9 $0 "Field $R1" State
  785.  
  786.         ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
  787.         Pop $R9
  788.  
  789.     FunctionEnd
  790.  
  791.     Function ${UNINSTALLER_FUNCPREFIX}OnFileBrowseButton
  792.  
  793.         Pop $R0
  794.  
  795.         nsDialogs::GetUserData $R0
  796.         Pop $R1
  797.  
  798.         ReadINIStr $R2 $0 "Field $R1" HWND
  799.         ReadINIStr $R4 $0 "Field $R1" Filter
  800.  
  801.         ${NSD_GetText} $R2 $R3
  802.  
  803.         nsDialogs::SelectFileDialog save $R3 $R4
  804.         Pop $R3
  805.  
  806.         ${If} $R3 != ""
  807.             SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
  808.         ${EndIf}
  809.  
  810.     FunctionEnd
  811.  
  812.     Function ${UNINSTALLER_FUNCPREFIX}OnDirBrowseButton
  813.  
  814.         Pop $R0
  815.  
  816.         nsDialogs::GetUserData $R0
  817.         Pop $R1
  818.  
  819.         ReadINIStr $R2 $0 "Field $R1" HWND
  820.         ReadINIStr $R3 $0 "Field $R1" Text
  821.  
  822.         ${NSD_GetText} $R2 $R4
  823.  
  824.         nsDialogs::SelectFolderDialog $R3 $R4
  825.         Pop $R3
  826.  
  827.         ${If} $R3 != error
  828.             SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
  829.         ${EndIf}
  830.  
  831.     FunctionEnd
  832.  
  833.     Function ${UNINSTALLER_FUNCPREFIX}Link
  834.  
  835.         ${NSD_CreateLink} $R3u $R4u $R5u $R6u $R7
  836.         Pop $R9
  837.  
  838.         nsDialogs::SetUserData $R9 $R1 # remember field id
  839.  
  840.         ${NSD_OnClick} $R9 ${UNINSTALLER_FUNCPREFIX}OnLink
  841.  
  842.     FunctionEnd
  843.  
  844.     Function ${UNINSTALLER_FUNCPREFIX}OnLink
  845.  
  846.         Pop $R0
  847.  
  848.         nsDialogs::GetUserData $R0
  849.         Pop $R1
  850.  
  851.         ReadINIStr $R1 $0 "Field $R1" STATE
  852.  
  853.         ExecShell "" $R1
  854.  
  855.     FunctionEnd
  856.  
  857. !macroend
  858.  
  859. !verbose pop
  860. !endif
  861.