home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 November / PCWNOV07.iso / Software / Freeware / NSIS 2.29 / nsis-2.29-setup.exe / Include / nsDialogs.nsh < prev    next >
Encoding:
Text File  |  2007-07-14  |  12.9 KB  |  414 lines

  1. !include LogicLib.nsh
  2. !include WinMessages.nsh
  3.  
  4. !define WS_EX_DLGMODALFRAME  0x00000001
  5. !define WS_EX_NOPARENTNOTIFY 0x00000004
  6. !define WS_EX_TOPMOST        0x00000008
  7. !define WS_EX_ACCEPTFILES    0x00000010
  8. !define WS_EX_TRANSPARENT    0x00000020
  9. !define WS_EX_MDICHILD       0x00000040
  10. !define WS_EX_TOOLWINDOW     0x00000080
  11. !define WS_EX_WINDOWEDGE     0x00000100
  12. !define WS_EX_CLIENTEDGE     0x00000200
  13. !define WS_EX_CONTEXTHELP    0x00000400
  14. !define WS_EX_RIGHT          0x00001000
  15. !define WS_EX_LEFT           0x00000000
  16. !define WS_EX_RTLREADING     0x00002000
  17. !define WS_EX_LTRREADING     0x00000000
  18. !define WS_EX_LEFTSCROLLBAR  0x00004000
  19. !define WS_EX_RIGHTSCROLLBAR 0x00000000
  20. !define WS_EX_CONTROLPARENT  0x00010000
  21. !define WS_EX_STATICEDGE     0x00020000
  22. !define WS_EX_APPWINDOW      0x00040000
  23.  
  24. !define WS_CHILD             0x40000000
  25. !define WS_VISIBLE           0x10000000
  26. !define WS_DISABLED          0x08000000
  27. !define WS_CLIPSIBLINGS      0x04000000
  28. !define WS_CLIPCHILDREN      0x02000000
  29. !define WS_MAXIMIZE          0x01000000
  30. !define WS_VSCROLL           0x00200000
  31. !define WS_HSCROLL           0x00100000
  32. !define WS_GROUP             0x00020000
  33. !define WS_TABSTOP           0x00010000
  34.  
  35. !define ES_LEFT              0x00000000
  36. !define ES_CENTER            0x00000001
  37. !define ES_RIGHT             0x00000002
  38. !define ES_MULTILINE         0x00000004
  39. !define ES_UPPERCASE         0x00000008
  40. !define ES_LOWERCASE         0x00000010
  41. !define ES_PASSWORD          0x00000020
  42. !define ES_AUTOVSCROLL       0x00000040
  43. !define ES_AUTOHSCROLL       0x00000080
  44. !define ES_NOHIDESEL         0x00000100
  45. !define ES_OEMCONVERT        0x00000400
  46. !define ES_READONLY          0x00000800
  47. !define ES_WANTRETURN        0x00001000
  48. !define ES_NUMBER            0x00002000
  49.  
  50. !define SS_LEFT              0x00000000
  51. !define SS_CENTER            0x00000001
  52. !define SS_RIGHT             0x00000002
  53. !define SS_ICON              0x00000003
  54. !define SS_BLACKRECT         0x00000004
  55. !define SS_GRAYRECT          0x00000005
  56. !define SS_WHITERECT         0x00000006
  57. !define SS_BLACKFRAME        0x00000007
  58. !define SS_GRAYFRAME         0x00000008
  59. !define SS_WHITEFRAME        0x00000009
  60. !define SS_USERITEM          0x0000000A
  61. !define SS_SIMPLE            0x0000000B
  62. !define SS_LEFTNOWORDWRAP    0x0000000C
  63. !define SS_OWNERDRAW         0x0000000D
  64. !define SS_BITMAP            0x0000000E
  65. !define SS_ENHMETAFILE       0x0000000F
  66. !define SS_ETCHEDHORZ        0x00000010
  67. !define SS_ETCHEDVERT        0x00000011
  68. !define SS_ETCHEDFRAME       0x00000012
  69. !define SS_TYPEMASK          0x0000001F
  70. !define SS_REALSIZECONTROL   0x00000040
  71. !define SS_NOPREFIX          0x00000080
  72. !define SS_NOTIFY            0x00000100
  73. !define SS_CENTERIMAGE       0x00000200
  74. !define SS_RIGHTJUST         0x00000400
  75. !define SS_REALSIZEIMAGE     0x00000800
  76. !define SS_SUNKEN            0x00001000
  77. !define SS_EDITCONTROL       0x00002000
  78. !define SS_ENDELLIPSIS       0x00004000
  79. !define SS_PATHELLIPSIS      0x00008000
  80. !define SS_WORDELLIPSIS      0x0000C000
  81. !define SS_ELLIPSISMASK      0x0000C000
  82.  
  83. !define BS_PUSHBUTTON        0x00000000
  84. !define BS_DEFPUSHBUTTON     0x00000001
  85. !define BS_CHECKBOX          0x00000002
  86. !define BS_AUTOCHECKBOX      0x00000003
  87. !define BS_RADIOBUTTON       0x00000004
  88. !define BS_3STATE            0x00000005
  89. !define BS_AUTO3STATE        0x00000006
  90. !define BS_GROUPBOX          0x00000007
  91. !define BS_USERBUTTON        0x00000008
  92. !define BS_AUTORADIOBUTTON   0x00000009
  93. !define BS_PUSHBOX           0x0000000A
  94. !define BS_OWNERDRAW         0x0000000B
  95. !define BS_TYPEMASK          0x0000000F
  96. !define BS_LEFTTEXT          0x00000020
  97. !define BS_TEXT              0x00000000
  98. !define BS_ICON              0x00000040
  99. !define BS_BITMAP            0x00000080
  100. !define BS_LEFT              0x00000100
  101. !define BS_RIGHT             0x00000200
  102. !define BS_CENTER            0x00000300
  103. !define BS_TOP               0x00000400
  104. !define BS_BOTTOM            0x00000800
  105. !define BS_VCENTER           0x00000C00
  106. !define BS_PUSHLIKE          0x00001000
  107. !define BS_MULTILINE         0x00002000
  108. !define BS_NOTIFY            0x00004000
  109. !define BS_FLAT              0x00008000
  110. !define BS_RIGHTBUTTON       ${BS_LEFTTEXT}
  111.  
  112. !define CBS_SIMPLE            0x0001
  113. !define CBS_DROPDOWN          0x0002
  114. !define CBS_DROPDOWNLIST      0x0003
  115. !define CBS_OWNERDRAWFIXED    0x0010
  116. !define CBS_OWNERDRAWVARIABLE 0x0020
  117. !define CBS_AUTOHSCROLL       0x0040
  118. !define CBS_OEMCONVERT        0x0080
  119. !define CBS_SORT              0x0100
  120. !define CBS_HASSTRINGS        0x0200
  121. !define CBS_NOINTEGRALHEIGHT  0x0400
  122. !define CBS_DISABLENOSCROLL   0x0800
  123. !define CBS_UPPERCASE         0x2000
  124. !define CBS_LOWERCASE         0x4000
  125.  
  126. !define LBS_NOTIFY            0x0001
  127. !define LBS_SORT              0x0002
  128. !define LBS_NOREDRAW          0x0004
  129. !define LBS_MULTIPLESEL       0x0008
  130. !define LBS_OWNERDRAWFIXED    0x0010
  131. !define LBS_OWNERDRAWVARIABLE 0x0020
  132. !define LBS_HASSTRINGS        0x0040
  133. !define LBS_USETABSTOPS       0x0080
  134. !define LBS_NOINTEGRALHEIGHT  0x0100
  135. !define LBS_MULTICOLUMN       0x0200
  136. !define LBS_WANTKEYBOARDINPUT 0x0400
  137. !define LBS_EXTENDEDSEL       0x0800
  138. !define LBS_DISABLENOSCROLL   0x1000
  139. !define LBS_NODATA            0x2000
  140. !define LBS_NOSEL             0x4000
  141. !define LBS_COMBOBOX          0x8000
  142.  
  143. !define LR_DEFAULTCOLOR     0x0000
  144. !define LR_MONOCHROME       0x0001
  145. !define LR_COLOR            0x0002
  146. !define LR_COPYRETURNORG    0x0004
  147. !define LR_COPYDELETEORG    0x0008
  148. !define LR_LOADFROMFILE     0x0010
  149. !define LR_LOADTRANSPARENT  0x0020
  150. !define LR_DEFAULTSIZE      0x0040
  151. !define LR_VGACOLOR         0x0080
  152. !define LR_LOADMAP3DCOLORS  0x1000
  153. !define LR_CREATEDIBSECTION 0x2000
  154. !define LR_COPYFROMRESOURCE 0x4000
  155. !define LR_SHARED           0x8000
  156.  
  157. !define IMAGE_BITMAP        0
  158. !define IMAGE_ICON          1
  159. !define IMAGE_CURSOR        2
  160. !define IMAGE_ENHMETAFILE   3
  161.  
  162. !define DEFAULT_STYLES ${WS_CHILD}|${WS_VISIBLE}|${WS_CLIPSIBLINGS}
  163.  
  164. !define __NSD_HLine_CLASS STATIC
  165. !define __NSD_HLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDHORZ}|${SS_SUNKEN}
  166. !define __NSD_HLine_EXSTYLE ${WS_EX_TRANSPARENT}
  167.  
  168. !define __NSD_VLine_CLASS STATIC
  169. !define __NSD_VLine_STYLE ${DEFAULT_STYLES}|${SS_ETCHEDVERT}|${SS_SUNKEN}
  170. !define __NSD_VLine_EXSTYLE ${WS_EX_TRANSPARENT}
  171.  
  172. !define __NSD_Label_CLASS STATIC
  173. !define __NSD_Label_STYLE ${DEFAULT_STYLES}
  174. !define __NSD_Label_EXSTYLE ${WS_EX_TRANSPARENT}
  175.  
  176. !define __NSD_Icon_CLASS STATIC
  177. !define __NSD_Icon_STYLE ${DEFAULT_STYLES}|${SS_ICON}
  178. !define __NSD_Icon_EXSTYLE 0
  179.  
  180. !define __NSD_Bitmap_CLASS STATIC
  181. !define __NSD_Bitmap_STYLE ${DEFAULT_STYLES}|${SS_BITMAP}
  182. !define __NSD_Bitmap_EXSTYLE 0
  183.  
  184. !define __NSD_BrowseButton_CLASS BUTTON
  185. !define __NSD_BrowseButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
  186. !define __NSD_BrowseButton_EXSTYLE 0
  187.  
  188. !define __NSD_Link_CLASS BUTTON
  189. !define __NSD_Link_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_OWNERDRAW}
  190. !define __NSD_Link_EXSTYLE 0
  191.  
  192. !define __NSD_Button_CLASS BUTTON
  193. !define __NSD_Button_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}
  194. !define __NSD_Button_EXSTYLE 0
  195.  
  196. !define __NSD_GroupBox_CLASS BUTTON
  197. !define __NSD_GroupBox_STYLE ${DEFAULT_STYLES}|${BS_GROUPBOX}
  198. !define __NSD_GroupBox_EXSTYLE ${WS_EX_TRANSPARENT}
  199.  
  200. !define __NSD_CheckBox_CLASS BUTTON
  201. !define __NSD_CheckBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTOCHECKBOX}|${BS_MULTILINE}
  202. !define __NSD_CheckBox_EXSTYLE 0
  203.  
  204. !define __NSD_RadioButton_CLASS BUTTON
  205. !define __NSD_RadioButton_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${BS_TEXT}|${BS_VCENTER}|${BS_AUTORADIOBUTTON}|${BS_MULTILINE}
  206. !define __NSD_RadioButton_EXSTYLE 0
  207.  
  208. !define __NSD_Text_CLASS EDIT
  209. !define __NSD_Text_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
  210. !define __NSD_Text_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  211.  
  212. !define __NSD_FileRequest_CLASS EDIT
  213. !define __NSD_FileRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
  214. !define __NSD_FileRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  215.  
  216. !define __NSD_DirRequest_CLASS EDIT
  217. !define __NSD_DirRequest_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}
  218. !define __NSD_DirRequest_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  219.  
  220. !define __NSD_ComboBox_CLASS COMBOBOX
  221. !define __NSD_ComboBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${WS_CLIPCHILDREN}|${CBS_AUTOHSCROLL}|${CBS_HASSTRINGS}
  222. !define __NSD_ComboBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  223.  
  224. !define __NSD_ListBox_CLASS LISTBOX
  225. !define __NSD_ListBox_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${WS_VSCROLL}|${LBS_DISABLENOSCROLL}|${LBS_HASSTRINGS}|${LBS_NOINTEGRALHEIGHT}
  226. !define __NSD_ListBox_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
  227.  
  228. !macro __NSD_DefineControl NAME
  229.  
  230.     !define NSD_Create${NAME} "nsDialogs::CreateItem /NOUNLOAD ${__NSD_${Name}_CLASS} ${__NSD_${Name}_STYLE} ${__NSD_${Name}_EXSTYLE}"
  231.  
  232. !macroend
  233.  
  234. !insertmacro __NSD_DefineControl HLine
  235. !insertmacro __NSD_DefineControl VLine
  236. !insertmacro __NSD_DefineControl Label
  237. !insertmacro __NSD_DefineControl Icon
  238. !insertmacro __NSD_DefineControl Bitmap
  239. !insertmacro __NSD_DefineControl BrowseButton
  240. !insertmacro __NSD_DefineControl Link
  241. !insertmacro __NSD_DefineControl Button
  242. !insertmacro __NSD_DefineControl GroupBox
  243. !insertmacro __NSD_DefineControl CheckBox
  244. !insertmacro __NSD_DefineControl RadioButton
  245. !insertmacro __NSD_DefineControl Text
  246. !insertmacro __NSD_DefineControl FileRequest
  247. !insertmacro __NSD_DefineControl DirRequest
  248. !insertmacro __NSD_DefineControl ComboBox
  249. !insertmacro __NSD_DefineControl ListBox
  250.  
  251. !define DEBUG `System::Call kernel32::OutputDebugString(ts)`
  252.  
  253. !macro __NSD_ControlCase TYPE
  254.  
  255.     ${Case} ${TYPE}
  256.         ${NSD_Create${TYPE}} $R3u $R4u $R5u $R6u $R7
  257.         Pop $R9
  258.         ${Break}
  259.  
  260. !macroend
  261.  
  262. !macro __NSD_ControlCaseEx TYPE
  263.  
  264.     ${Case} ${TYPE}
  265.         Call ${TYPE}
  266.         ${Break}
  267.  
  268. !macroend
  269.  
  270. Function CreateDialogFromINI
  271.  
  272.     # $0 = ini
  273.  
  274.     ReadINIStr $R0 $0 Settings RECT
  275.     ${If} $R0 == ""
  276.         StrCpy $R0 1018
  277.     ${EndIf}
  278.  
  279.     nsDialogs::Create /NOUNLOAD $R0
  280.     Pop $R9
  281.  
  282.     ReadINIStr $R0 $0 Settings NumFields
  283.  
  284.     ${DEBUG} "NumFields = $R0"
  285.  
  286.     ${For} $R1 1 $R0
  287.         ${DEBUG} "Creating field $R1"
  288.         ReadINIStr $R2 $0 "Field $R1" Type
  289.         ${DEBUG} "  Type = $R2"
  290.         ReadINIStr $R3 $0 "Field $R1" Left
  291.         ${DEBUG} "  Left = $R3"
  292.         ReadINIStr $R4 $0 "Field $R1" Top
  293.         ${DEBUG} "  Top = $R4"
  294.         ReadINIStr $R5 $0 "Field $R1" Right
  295.         ${DEBUG} "  Right = $R5"
  296.         ReadINIStr $R6 $0 "Field $R1" Bottom
  297.         ${DEBUG} "  Bottom = $R6"
  298.         IntOp $R5 $R5 - $R3
  299.         ${DEBUG} "  Width = $R5"
  300.         IntOp $R6 $R6 - $R4
  301.         ${DEBUG} "  Height = $R6"
  302.         ReadINIStr $R7 $0 "Field $R1" Text
  303.         ${DEBUG} "  Text = $R7"
  304.         ${Switch} $R2
  305.             !insertmacro __NSD_ControlCase   HLine
  306.             !insertmacro __NSD_ControlCase   VLine
  307.             !insertmacro __NSD_ControlCase   Label
  308.             !insertmacro __NSD_ControlCase   Icon
  309.             !insertmacro __NSD_ControlCase   Bitmap
  310.             !insertmacro __NSD_ControlCase   Link
  311.             !insertmacro __NSD_ControlCase   Button
  312.             !insertmacro __NSD_ControlCase   GroupBox
  313.             !insertmacro __NSD_ControlCase   CheckBox
  314.             !insertmacro __NSD_ControlCase   RadioButton
  315.             !insertmacro __NSD_ControlCase   Text
  316.             !insertmacro __NSD_ControlCaseEx FileRequest
  317.             !insertmacro __NSD_ControlCaseEx DirRequest
  318.             !insertmacro __NSD_ControlCase   ComboBox
  319.             !insertmacro __NSD_ControlCase   ListBox
  320.         ${EndSwitch}
  321.  
  322.         WriteINIStr $0 "Field $R1" HWND $R9
  323.     ${Next}
  324.  
  325.     nsDialogs::Show
  326.  
  327. FunctionEnd
  328.  
  329. Function FileRequest
  330.  
  331.     IntOp $R5 $R5 - 15
  332.     IntOp $R8 $R3 + $R5
  333.  
  334.     ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
  335.     Pop $R8
  336.  
  337.     nsDialogs::SetUserData /NOUNLOAD $R8 $R1 # remember field id
  338.  
  339.     WriteINIStr $0 "Field $R1" HWND2 $R8
  340.  
  341.     GetFunctionAddress $R9 OnFileBrowseButton
  342.     nsDialogs::OnClick /NOUNLOAD $R8 $R9
  343.  
  344.     ReadINIStr $R9 $0 "Field $R1" State
  345.  
  346.     ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
  347.     Pop $R9
  348.  
  349. FunctionEnd
  350.  
  351. Function DirRequest
  352.  
  353.     IntOp $R5 $R5 - 15
  354.     IntOp $R8 $R3 + $R5
  355.  
  356.     ${NSD_CreateBrowseButton} $R8u $R4u 15u $R6u ...
  357.     Pop $R8
  358.  
  359.     nsDialogs::SetUserData /NOUNLOAD $R8 $R1 # remember field id
  360.  
  361.     WriteINIStr $0 "Field $R1" HWND2 $R8
  362.  
  363.     GetFunctionAddress $R9 OnDirBrowseButton
  364.     nsDialogs::OnClick /NOUNLOAD $R8 $R9
  365.  
  366.     ReadINIStr $R9 $0 "Field $R1" State
  367.  
  368.     ${NSD_CreateFileRequest} $R3u $R4u $R5u $R6u $R9
  369.     Pop $R9
  370.  
  371. FunctionEnd
  372.  
  373. Function OnFileBrowseButton
  374.  
  375.     Pop $R0
  376.  
  377.     nsDialogs::GetUserData /NOUNLOAD $R0
  378.     Pop $R1
  379.  
  380.     ReadINIStr $R2 $0 "Field $R1" HWND
  381.     ReadINIStr $R4 $0 "Field $R1" Filter
  382.  
  383.     System::Call user32::GetWindowText(iR2,t.R3,i${NSIS_MAX_STRLEN})
  384.  
  385.     nsDialogs::SelectFileDialog /NOUNLOAD save $R3 $R4
  386.     Pop $R3
  387.  
  388.     ${If} $R3 != ""
  389.         SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
  390.     ${EndIf}
  391.  
  392. FunctionEnd
  393.  
  394. Function OnDirBrowseButton
  395.  
  396.     Pop $R0
  397.  
  398.     nsDialogs::GetUserData /NOUNLOAD $R0
  399.     Pop $R1
  400.  
  401.     ReadINIStr $R2 $0 "Field $R1" HWND
  402.     ReadINIStr $R3 $0 "Field $R1" Text
  403.  
  404.     System::Call user32::GetWindowText(iR2,t.R4,i${NSIS_MAX_STRLEN})
  405.  
  406.     nsDialogs::SelectFolderDialog /NOUNLOAD $R3 $R4
  407.     Pop $R3
  408.  
  409.     ${If} $R3 != error
  410.         SendMessage $R2 ${WM_SETTEXT} 0 STR:$R3
  411.     ${EndIf}
  412.  
  413. FunctionEnd
  414.