wrb 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. checksums.yaml +7 -0
  2. data/README +28 -0
  3. data/Rakefile +66 -0
  4. data/bin/wrb +41 -0
  5. data/bin/wrb.bat +6 -0
  6. data/ext/rwin/aatree.c +192 -0
  7. data/ext/rwin/aatree.h +55 -0
  8. data/ext/rwin/extconf.rb +47 -0
  9. data/ext/rwin/rw_api.c +2058 -0
  10. data/ext/rwin/rw_devices.c +215 -0
  11. data/ext/rwin/rw_gdiplus.h +278 -0
  12. data/ext/rwin/rw_graphics.c +1583 -0
  13. data/ext/rwin/rw_resources.c +1988 -0
  14. data/ext/rwin/rw_ubfuncs.c +281 -0
  15. data/ext/rwin/rw_windows.c +1936 -0
  16. data/ext/rwin/rwin.c +451 -0
  17. data/ext/rwin/rwin.h +442 -0
  18. data/lib/rwin.rb +820 -0
  19. data/lib/wrb.rb +20 -0
  20. data/lib/wrb/applications/frmdesigner/angle.cur +0 -0
  21. data/lib/wrb/applications/frmdesigner/angle2.cur +0 -0
  22. data/lib/wrb/applications/frmdesigner/controls/Button.bmp +0 -0
  23. data/lib/wrb/applications/frmdesigner/controls/Button.rb +34 -0
  24. data/lib/wrb/applications/frmdesigner/controls/Checkbox.bmp +0 -0
  25. data/lib/wrb/applications/frmdesigner/controls/Checkbox.rb +10 -0
  26. data/lib/wrb/applications/frmdesigner/controls/Combobox.bmp +0 -0
  27. data/lib/wrb/applications/frmdesigner/controls/Combobox.rb +88 -0
  28. data/lib/wrb/applications/frmdesigner/controls/ComboboxEx.rb +97 -0
  29. data/lib/wrb/applications/frmdesigner/controls/Comboboxex.bmp +0 -0
  30. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.bmp +0 -0
  31. data/lib/wrb/applications/frmdesigner/controls/DateTimePicker.rb +11 -0
  32. data/lib/wrb/applications/frmdesigner/controls/Edit.bmp +0 -0
  33. data/lib/wrb/applications/frmdesigner/controls/Edit.rb +8 -0
  34. data/lib/wrb/applications/frmdesigner/controls/Groupbox.bmp +0 -0
  35. data/lib/wrb/applications/frmdesigner/controls/Groupbox.rb +9 -0
  36. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.bmp +0 -0
  37. data/lib/wrb/applications/frmdesigner/controls/Hotkeyctrl.rb +9 -0
  38. data/lib/wrb/applications/frmdesigner/controls/Imagelist.bmp +0 -0
  39. data/lib/wrb/applications/frmdesigner/controls/Imagelist.rb +115 -0
  40. data/lib/wrb/applications/frmdesigner/controls/Listbox.bmp +0 -0
  41. data/lib/wrb/applications/frmdesigner/controls/Listbox.rb +77 -0
  42. data/lib/wrb/applications/frmdesigner/controls/Listview.bmp +0 -0
  43. data/lib/wrb/applications/frmdesigner/controls/Listview.rb +157 -0
  44. data/lib/wrb/applications/frmdesigner/controls/Menu.bmp +0 -0
  45. data/lib/wrb/applications/frmdesigner/controls/Menu.rb +198 -0
  46. data/lib/wrb/applications/frmdesigner/controls/Menubar.bmp +0 -0
  47. data/lib/wrb/applications/frmdesigner/controls/Menubar.rb +9 -0
  48. data/lib/wrb/applications/frmdesigner/controls/MonthCalender.bmp +0 -0
  49. data/lib/wrb/applications/frmdesigner/controls/Monthcalender.rb +9 -0
  50. data/lib/wrb/applications/frmdesigner/controls/Panel.bmp +0 -0
  51. data/lib/wrb/applications/frmdesigner/controls/Panel.rb +30 -0
  52. data/lib/wrb/applications/frmdesigner/controls/Progressbar.rb +10 -0
  53. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.bmp +0 -0
  54. data/lib/wrb/applications/frmdesigner/controls/Radiobutton.rb +13 -0
  55. data/lib/wrb/applications/frmdesigner/controls/Rebar.bmp +0 -0
  56. data/lib/wrb/applications/frmdesigner/controls/Rebar.rb +162 -0
  57. data/lib/wrb/applications/frmdesigner/controls/Splitter.bmp +0 -0
  58. data/lib/wrb/applications/frmdesigner/controls/Splitter.rb +66 -0
  59. data/lib/wrb/applications/frmdesigner/controls/Static.bmp +0 -0
  60. data/lib/wrb/applications/frmdesigner/controls/Static.rb +9 -0
  61. data/lib/wrb/applications/frmdesigner/controls/Statusbar.bmp +0 -0
  62. data/lib/wrb/applications/frmdesigner/controls/Statusbar.rb +103 -0
  63. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.bmp +0 -0
  64. data/lib/wrb/applications/frmdesigner/controls/Tabctrl.rb +136 -0
  65. data/lib/wrb/applications/frmdesigner/controls/Timer.bmp +0 -0
  66. data/lib/wrb/applications/frmdesigner/controls/Timer.rb +36 -0
  67. data/lib/wrb/applications/frmdesigner/controls/Toolbar.bmp +0 -0
  68. data/lib/wrb/applications/frmdesigner/controls/Toolbar.rb +165 -0
  69. data/lib/wrb/applications/frmdesigner/controls/Trackbar.bmp +0 -0
  70. data/lib/wrb/applications/frmdesigner/controls/Trackbar.rb +34 -0
  71. data/lib/wrb/applications/frmdesigner/controls/Treeview.bmp +0 -0
  72. data/lib/wrb/applications/frmdesigner/controls/Treeview.rb +107 -0
  73. data/lib/wrb/applications/frmdesigner/controls/Updown.bmp +0 -0
  74. data/lib/wrb/applications/frmdesigner/controls/Updown.rb +31 -0
  75. data/lib/wrb/applications/frmdesigner/controls/default.bmp +0 -0
  76. data/lib/wrb/applications/frmdesigner/controls/progressbar.bmp +0 -0
  77. data/lib/wrb/applications/frmdesigner/controls/unselect.bmp +0 -0
  78. data/lib/wrb/applications/frmdesigner/fddialogs.rb +87 -0
  79. data/lib/wrb/applications/frmdesigner/fdesign.rb +1315 -0
  80. data/lib/wrb/applications/frmdesigner/fdmodules.rb +1394 -0
  81. data/lib/wrb/applications/frmdesigner/fdparseform.rb +197 -0
  82. data/lib/wrb/applications/frmdesigner/img13.bmp +0 -0
  83. data/lib/wrb/base.rb +1294 -0
  84. data/lib/wrb/combocommon.rb +77 -0
  85. data/lib/wrb/commctrlconst.rb +139 -0
  86. data/lib/wrb/commdlg.rb +77 -0
  87. data/lib/wrb/components/animate.rb +114 -0
  88. data/lib/wrb/components/bitmap.rb +116 -0
  89. data/lib/wrb/components/button.rb +134 -0
  90. data/lib/wrb/components/canvas.rb +266 -0
  91. data/lib/wrb/components/checkbox.rb +118 -0
  92. data/lib/wrb/components/choosecolordlg.rb +87 -0
  93. data/lib/wrb/components/choosefontdlg.rb +142 -0
  94. data/lib/wrb/components/clipboard.rb +174 -0
  95. data/lib/wrb/components/combobox.rb +282 -0
  96. data/lib/wrb/components/comboboxex.rb +574 -0
  97. data/lib/wrb/components/cursor.rb +91 -0
  98. data/lib/wrb/components/datetimepicker.rb +197 -0
  99. data/lib/wrb/components/ddeclient.rb +180 -0
  100. data/lib/wrb/components/ddeserver.rb +131 -0
  101. data/lib/wrb/components/dialog.rb +228 -0
  102. data/lib/wrb/components/edit.rb +412 -0
  103. data/lib/wrb/components/font.rb +35 -0
  104. data/lib/wrb/components/form.rb +65 -0
  105. data/lib/wrb/components/groupbox.rb +122 -0
  106. data/lib/wrb/components/header.rb +479 -0
  107. data/lib/wrb/components/hotkeyctrl.rb +72 -0
  108. data/lib/wrb/components/icon.rb +109 -0
  109. data/lib/wrb/components/imagelist.rb +396 -0
  110. data/lib/wrb/components/inifile.rb +97 -0
  111. data/lib/wrb/components/listbox.rb +149 -0
  112. data/lib/wrb/components/listview.rb +1467 -0
  113. data/lib/wrb/components/menu.rb +592 -0
  114. data/lib/wrb/components/menubar.rb +84 -0
  115. data/lib/wrb/components/monthcalender.rb +164 -0
  116. data/lib/wrb/components/openfilenamedlg.rb +147 -0
  117. data/lib/wrb/components/pager.rb +199 -0
  118. data/lib/wrb/components/panel.rb +103 -0
  119. data/lib/wrb/components/picture.rb +55 -0
  120. data/lib/wrb/components/printdlg.rb +148 -0
  121. data/lib/wrb/components/printdlgex.rb +117 -0
  122. data/lib/wrb/components/printer.rb +97 -0
  123. data/lib/wrb/components/progressbar.rb +140 -0
  124. data/lib/wrb/components/radiobutton.rb +49 -0
  125. data/lib/wrb/components/rebar.rb +830 -0
  126. data/lib/wrb/components/registry.rb +408 -0
  127. data/lib/wrb/components/richedit.rb +1181 -0
  128. data/lib/wrb/components/savefilenamedlg.rb +27 -0
  129. data/lib/wrb/components/scintilla.rb +1298 -0
  130. data/lib/wrb/components/scrollbar.rb +239 -0
  131. data/lib/wrb/components/splitter.rb +494 -0
  132. data/lib/wrb/components/static.rb +198 -0
  133. data/lib/wrb/components/statusbar.rb +490 -0
  134. data/lib/wrb/components/tabctrl.rb +686 -0
  135. data/lib/wrb/components/timer.rb +117 -0
  136. data/lib/wrb/components/toolbar.rb +1107 -0
  137. data/lib/wrb/components/tooltip.rb +651 -0
  138. data/lib/wrb/components/trackbar.rb +298 -0
  139. data/lib/wrb/components/treeview.rb +845 -0
  140. data/lib/wrb/components/updown.rb +198 -0
  141. data/lib/wrb/ddeml.rb +241 -0
  142. data/lib/wrb/documents/animate.html +46 -0
  143. data/lib/wrb/documents/bitmap.html +69 -0
  144. data/lib/wrb/documents/button.html +78 -0
  145. data/lib/wrb/documents/canvas.html +137 -0
  146. data/lib/wrb/documents/checkbox.html +77 -0
  147. data/lib/wrb/documents/choosecolordlg.html +29 -0
  148. data/lib/wrb/documents/choosefontdlg.html +31 -0
  149. data/lib/wrb/documents/clipboard.html +31 -0
  150. data/lib/wrb/documents/combobox.html +117 -0
  151. data/lib/wrb/documents/comboboxex.html +139 -0
  152. data/lib/wrb/documents/control.html +53 -0
  153. data/lib/wrb/documents/cursor.html +45 -0
  154. data/lib/wrb/documents/datetimepicker.html +70 -0
  155. data/lib/wrb/documents/ddeclient.html +33 -0
  156. data/lib/wrb/documents/ddeserver.html +26 -0
  157. data/lib/wrb/documents/dialog.html +78 -0
  158. data/lib/wrb/documents/edit.html +169 -0
  159. data/lib/wrb/documents/empty.html +11 -0
  160. data/lib/wrb/documents/favicon.png +0 -0
  161. data/lib/wrb/documents/font.html +38 -0
  162. data/lib/wrb/documents/form.html +63 -0
  163. data/lib/wrb/documents/groupbox.html +57 -0
  164. data/lib/wrb/documents/header.html +85 -0
  165. data/lib/wrb/documents/hotkeyctrl.html +42 -0
  166. data/lib/wrb/documents/icon.html +45 -0
  167. data/lib/wrb/documents/imagelist.html +101 -0
  168. data/lib/wrb/documents/images/button.png +0 -0
  169. data/lib/wrb/documents/images/checkbox.png +0 -0
  170. data/lib/wrb/documents/images/combobox.png +0 -0
  171. data/lib/wrb/documents/images/comboboxex.png +0 -0
  172. data/lib/wrb/documents/images/datetimepicker.png +0 -0
  173. data/lib/wrb/documents/images/edit.png +0 -0
  174. data/lib/wrb/documents/images/groupbox.png +0 -0
  175. data/lib/wrb/documents/images/hotkeyctrl.png +0 -0
  176. data/lib/wrb/documents/images/listbox.png +0 -0
  177. data/lib/wrb/documents/images/listview.png +0 -0
  178. data/lib/wrb/documents/images/menu.png +0 -0
  179. data/lib/wrb/documents/images/menubar.png +0 -0
  180. data/lib/wrb/documents/images/monthcalender.png +0 -0
  181. data/lib/wrb/documents/images/progressbar.png +0 -0
  182. data/lib/wrb/documents/images/radiobutton.png +0 -0
  183. data/lib/wrb/documents/images/rebar.png +0 -0
  184. data/lib/wrb/documents/images/richedit.png +0 -0
  185. data/lib/wrb/documents/images/splitter.png +0 -0
  186. data/lib/wrb/documents/images/static.png +0 -0
  187. data/lib/wrb/documents/images/statusbar.png +0 -0
  188. data/lib/wrb/documents/images/tabctrl.png +0 -0
  189. data/lib/wrb/documents/images/toolbar.png +0 -0
  190. data/lib/wrb/documents/images/tooltip.png +0 -0
  191. data/lib/wrb/documents/images/trackbar.png +0 -0
  192. data/lib/wrb/documents/images/treeview.png +0 -0
  193. data/lib/wrb/documents/images/updown.png +0 -0
  194. data/lib/wrb/documents/index.html +155 -0
  195. data/lib/wrb/documents/inifile.html +36 -0
  196. data/lib/wrb/documents/license.txt +22 -0
  197. data/lib/wrb/documents/listbox.html +96 -0
  198. data/lib/wrb/documents/listview.html +277 -0
  199. data/lib/wrb/documents/make_doc.rb +596 -0
  200. data/lib/wrb/documents/menu.html +144 -0
  201. data/lib/wrb/documents/menubar.html +54 -0
  202. data/lib/wrb/documents/monthcalender.html +48 -0
  203. data/lib/wrb/documents/openfilenamedlg.html +36 -0
  204. data/lib/wrb/documents/pager.html +63 -0
  205. data/lib/wrb/documents/panel.html +32 -0
  206. data/lib/wrb/documents/picture.html +48 -0
  207. data/lib/wrb/documents/printdlg.html +35 -0
  208. data/lib/wrb/documents/printdlgex.html +35 -0
  209. data/lib/wrb/documents/printer.html +40 -0
  210. data/lib/wrb/documents/progressbar.html +69 -0
  211. data/lib/wrb/documents/radiobutton.html +51 -0
  212. data/lib/wrb/documents/rebar.html +143 -0
  213. data/lib/wrb/documents/registry.html +36 -0
  214. data/lib/wrb/documents/richedit.html +232 -0
  215. data/lib/wrb/documents/samples/editimg.bmp +0 -0
  216. data/lib/wrb/documents/samples/editimg.iml +0 -0
  217. data/lib/wrb/documents/samples/fileimg.bmp +0 -0
  218. data/lib/wrb/documents/samples/fileimg.iml +0 -0
  219. data/lib/wrb/documents/samples/sample_button.rb +21 -0
  220. data/lib/wrb/documents/samples/sample_checkbox.rb +18 -0
  221. data/lib/wrb/documents/samples/sample_combobox.rb +18 -0
  222. data/lib/wrb/documents/samples/sample_comboboxex.rb +23 -0
  223. data/lib/wrb/documents/samples/sample_datetimepicker.rb +11 -0
  224. data/lib/wrb/documents/samples/sample_edit.rb +25 -0
  225. data/lib/wrb/documents/samples/sample_groupbox.rb +19 -0
  226. data/lib/wrb/documents/samples/sample_hotkeyctrl.rb +12 -0
  227. data/lib/wrb/documents/samples/sample_listbox.rb +12 -0
  228. data/lib/wrb/documents/samples/sample_listview.rb +32 -0
  229. data/lib/wrb/documents/samples/sample_menu.rb +21 -0
  230. data/lib/wrb/documents/samples/sample_menubar.rb +23 -0
  231. data/lib/wrb/documents/samples/sample_monthcalender.rb +11 -0
  232. data/lib/wrb/documents/samples/sample_progressbar.rb +14 -0
  233. data/lib/wrb/documents/samples/sample_radiobutton.rb +14 -0
  234. data/lib/wrb/documents/samples/sample_rebar.rb +25 -0
  235. data/lib/wrb/documents/samples/sample_richedit.rb +60 -0
  236. data/lib/wrb/documents/samples/sample_splitter.rb +33 -0
  237. data/lib/wrb/documents/samples/sample_static.rb +15 -0
  238. data/lib/wrb/documents/samples/sample_statusbar.rb +17 -0
  239. data/lib/wrb/documents/samples/sample_tabctrl.rb +19 -0
  240. data/lib/wrb/documents/samples/sample_toolbar.rb +29 -0
  241. data/lib/wrb/documents/samples/sample_tooltip.rb +50 -0
  242. data/lib/wrb/documents/samples/sample_trackbar.rb +30 -0
  243. data/lib/wrb/documents/samples/sample_treeview.rb +19 -0
  244. data/lib/wrb/documents/samples/sample_updown.rb +18 -0
  245. data/lib/wrb/documents/samples/sampleimg16.iml +0 -0
  246. data/lib/wrb/documents/samples/sampleimg32.iml +0 -0
  247. data/lib/wrb/documents/samples/samplemg16.png +0 -0
  248. data/lib/wrb/documents/samples/samplemg32.png +0 -0
  249. data/lib/wrb/documents/samples/wrb.ico +0 -0
  250. data/lib/wrb/documents/savefilenamedlg.html +19 -0
  251. data/lib/wrb/documents/scrollbar.html +60 -0
  252. data/lib/wrb/documents/splitter.html +96 -0
  253. data/lib/wrb/documents/static.html +84 -0
  254. data/lib/wrb/documents/statusbar.html +110 -0
  255. data/lib/wrb/documents/tabctrl.html +151 -0
  256. data/lib/wrb/documents/timer.html +43 -0
  257. data/lib/wrb/documents/toolbar.html +181 -0
  258. data/lib/wrb/documents/tooltip.html +131 -0
  259. data/lib/wrb/documents/trackbar.html +107 -0
  260. data/lib/wrb/documents/treeview.html +210 -0
  261. data/lib/wrb/documents/updown.html +85 -0
  262. data/lib/wrb/documents/wincontrol.html +258 -0
  263. data/lib/wrb/documents/window.html +499 -0
  264. data/lib/wrb/documents/wrb.css +228 -0
  265. data/lib/wrb/gmem.rb +26 -0
  266. data/lib/wrb/imecommon.rb +59 -0
  267. data/lib/wrb/listcommon.rb +185 -0
  268. data/lib/wrb/lzss.rb +126 -0
  269. data/lib/wrb/scrollinfo.rb +142 -0
  270. data/lib/wrb/toplevelcommon.rb +634 -0
  271. metadata +315 -0
@@ -0,0 +1,36 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html lang="en">
3
+ <head>
4
+ <meta content="text/html; charset=utf-8" http-equiv="content-type">
5
+ <title>Inifile</title>
6
+ <link href="wrb.css" type="text/css" rel="stylesheet">
7
+ <link rel="shortcut icon" href="favicon.png">
8
+ </head>
9
+ <body>
10
+ <h3> Inifile &lt; <a href="hash.html">Hash</a> <span class=gohome> <a href="index.html">Home </a></span></h3>
11
+ <p>Handles a Inifile (*.ini) like a Hash. (WRB orignal)<br>
12
+ Inifile formats are following.<pre>
13
+ [section]
14
+ key=value
15
+ ...</pre>
16
+ </p>
17
+ <h4> Singleton methods </h4>
18
+ <dl>
19
+ <dt><code>self.new(path, &block)</code></dt>
20
+ <dd></dd>
21
+ <dt><code>self.open(path, &block)</code></dt>
22
+ <dd>Opens a file specified <i>path</i>.<br>If <i>block</i> is given, opens for writing and closes automaticaly.</dd>
23
+ </dl>
24
+ <h4> Instance methods </h4>
25
+ <dl>
26
+ <dt><code>close()</code></dt>
27
+ <dt><code>flash()</code></dt>
28
+ <dd>Closes and writes out to the file.</dd>
29
+ <dt><code>open(path)</code></dt>
30
+ <dd>Opens a file specified <i>path</i>.<br>If block is given, opens for writing and closes automaticaly.</dd>
31
+ <dt><code>path()</code></dt>
32
+ <dd>Gets an absolute path to this inifile.</dd>
33
+ </dl>
34
+
35
+ </body>
36
+ </html>
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015-2018, BANJO Koyu <banjokoyu at gmail.com>
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
17
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,96 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html lang="en">
3
+ <head>
4
+ <meta content="text/html; charset=utf-8" http-equiv="content-type">
5
+ <title>Listbox</title>
6
+ <link href="wrb.css" type="text/css" rel="stylesheet">
7
+ <link rel="shortcut icon" href="favicon.png">
8
+ </head>
9
+ <body>
10
+ <h3> Listbox &lt; <a href="wincontrol.html">WinControl</a> <span class=gohome> <a href="index.html">Home </a> <div class=imgright><img src="images/listbox.png"></div>
11
+ </span></h3>
12
+ <p class=fixedh>This control contains a simple list from which the user can generally select one or more items.<br>
13
+ See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
14
+ window-controls"> Windows Control section of Microsoft Docs.</a>
15
+ </p>
16
+ <h4> Instance methods </h4>
17
+ <dl>
18
+ <dt><code><<(args)</code></dt>
19
+ <dd>Adds the args at last of the items.<br>Give a String or a Array of [String, Object] as args.</dd>
20
+ <dt><code>count()</code></dt>
21
+ <dd>Retreives count of items.</dd>
22
+ <dt><code>cursel()</code></dt>
23
+ <dd>Retrieves the index of the currently selected item.</dd>
24
+ <dt><code>cursel=(idx)</code></dt>
25
+ <dd>Changes the currently selected item to specified index.</dd>
26
+ <dt><code>delete(index=nil, number=1)</code></dt>
27
+ <dd>Deletes items at specified <i>index</i> and <i>number</i> from this control.<br>If no arguments given, deletes self.</dd>
28
+ <dt><code>delete_item(index)</code></dt>
29
+ <dd>Deletes item of specified <i>index</i> from this control.</dd>
30
+ <dt><code>each(){|item| ... }</code></dt>
31
+ <dd>Performs the block for each item in this list as a block parameter.</dd>
32
+ <dt><code>fetch(idx)</code></dt>
33
+ <dd>Retreives an item at the specified index.</dd>
34
+ <dt><code>index(arg)</code></dt>
35
+ <dd>Retreives index of given text.<br>Give a String or a Symbol as arg.</dd>
36
+ <dt><code>insert(index, length=1, items)</code></dt>
37
+ <dt><code>[]=(index, length=1, items)</code></dt>
38
+ <dd>Inserts and replaces at the specified <i>index</i> and <i>length</i> by the <i>items</i>.</dd>
39
+ <dt><code>insert_item(index, text, data=nil)</code></dt>
40
+ <dd>Inserts a <i>text</i> and a <i>data</i> at the specified <i>index</i>.</dd>
41
+ <dt><code>itemdata(idx)</code></dt>
42
+ <dd>Gets an any object as data of specified index of items.</dd>
43
+ <dt><code>itemdata=(idx, data)</code></dt>
44
+ <dd>Sets an any object as data to specified index of items.</dd>
45
+ <dt><code>selection()</code></dt>
46
+ <dd>Retrieves the currently selected item as String.</dd>
47
+ <dt><code>slice(idx, len=1)</code></dt>
48
+ <dt><code>[](idx, len=1)</code></dt>
49
+ <dd>Retreives the items at the specified index and length.</dd>
50
+ </dl>
51
+ <h4> Listbox styles <span class=spl>( both the symbols and the integers can be used )</span></h4>
52
+ <p></p>
53
+ <table>
54
+ <tr><th>Symbol</th><th>Integer value</th><th>Symbol</th><th>Integer value</th></tr>
55
+ <tr><td class=name1><code>:combobox</code></td><td class=type><code>LBS_COMBOBOX</code></td><td class=name1><code>:default</code></td><td class=type><code>LBS_DEFAULT</code></td></tr>
56
+ <tr><td class=name1><code>:disablenoscroll</code></td><td class=type><code>LBS_DISABLENOSCROLL</code></td><td class=name1><code>:extendedsel</code></td><td class=type><code>LBS_EXTENDEDSEL</code></td></tr>
57
+ <tr><td class=name1><code>:hasstrings</code></td><td class=type><code>LBS_HASSTRINGS</code></td><td class=name1><code>:multicolumn</code></td><td class=type><code>LBS_MULTICOLUMN</code></td></tr>
58
+ <tr><td class=name1><code>:multiplesel</code></td><td class=type><code>LBS_MULTIPLESEL</code></td><td class=name1><code>:nodata</code></td><td class=type><code>LBS_NODATA</code></td></tr>
59
+ <tr><td class=name1><code>:nointegralheight</code></td><td class=type><code>LBS_NOINTEGRALHEIGHT</code></td><td class=name1><code>:noredraw</code></td><td class=type><code>LBS_NOREDRAW</code></td></tr>
60
+ <tr><td class=name1><code>:nosel</code></td><td class=type><code>LBS_NOSEL</code></td><td class=name1><code>:notify</code></td><td class=type><code>LBS_NOTIFY</code></td></tr>
61
+ <tr><td class=name1><code>:ownerdrawfixed</code></td><td class=type><code>LBS_OWNERDRAWFIXED</code></td><td class=name1><code>:ownerdrawvariable</code></td><td class=type><code>LBS_OWNERDRAWVARIABLE</code></td></tr>
62
+ <tr><td class=name1><code>:sort</code></td><td class=type><code>LBS_SORT</code></td><td class=name1><code>:standard</code></td><td class=type><code>LBS_STANDARD</code></td></tr>
63
+ <tr><td class=name1><code>:usetabstops</code></td><td class=type><code>LBS_USETABSTOPS</code></td><td class=name1><code>:wantkeyboardinput</code></td><td class=type><code>LBS_WANTKEYBOARDINPUT</code></td></tr>
64
+ </table>
65
+ <h4> Pre-defined events <span class=spl> ( can be added by `events=` method )</span></h4>
66
+ <p></p>
67
+ <table>
68
+ <tr><th width=20%>Symbol</th><th width=20%>Notification code</th><th>Definition <span class=spl>( `???' is name of the control )</span></th></tr>
69
+ <tr><td class=name1><code>:dblclk</code></td><td class=type><code>LBN_DBLCLK</code></td><td class=desc><code>???_dblclk(idcmd, code, hwnd)</code></td></code></tr>
70
+ <tr><td class=name1><code>:killfocus</code></td><td class=type><code>LBN_KILLFOCUS</code></td><td class=desc><code>???_killfocus(idcmd, code, hwnd)</code></td></code></tr>
71
+ <tr><td class=name1><code>:selcancel</code></td><td class=type><code>LBN_SELCANCEL</code></td><td class=desc><code>???_selcancel(idcmd, code, hwnd)</code></td></code></tr>
72
+ <tr><td class=name1><code>:selchange</code></td><td class=type><code>LBN_SELCHANGE</code></td><td class=desc><code>???_selchange(idcmd, code, hwnd)</code></td></code></tr>
73
+ <tr><td class=name1><code>:setfocus</code></td><td class=type><code>LBN_SETFOCUS</code></td><td class=desc><code>???_setfocus(idcmd, code, hwnd)</code></td></code></tr>
74
+ </table>
75
+ <h4> Default events <span class=spl>( can be defined without using `events=' method )</h4>
76
+ <p></p>
77
+ <dl>
78
+ <dt><code>???_selchange(idcmd, code, hwnd)</code></dt>
79
+ </dl>
80
+ <h4> Sample script </h4>
81
+ <pre class=cd>
82
+ require <span class="str">'wrb'</span>
83
+ <span class="kwd">module</span> WR
84
+ <span class="kwd">class</span> Myform < Form
85
+ <span class="kwd">def</span> initialize
86
+ <span class="kwd">self</span>.size = 268, 201
87
+ <span class="kwd">self</span>.inheritfont = [<span class="str">"Meiryo"</span>, -12]
88
+ @lbox1 = _<< Listbox[<span class="sym">:lbox1</span>, <span class="str">""</span>, 4, 4, 200, 160]
89
+ (1..10).each{|i| @lbox1 << <span class="str">"item#{i}"</span>}
90
+ <span class="kwd">end</span>
91
+ <span class="kwd">self</span>.start
92
+ <span class="kwd">end</span>
93
+ <span class="kwd">end</span> </pre>
94
+
95
+ </body>
96
+ </html>
@@ -0,0 +1,277 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html lang="en">
3
+ <head>
4
+ <meta content="text/html; charset=utf-8" http-equiv="content-type">
5
+ <title>Listview</title>
6
+ <link href="wrb.css" type="text/css" rel="stylesheet">
7
+ <link rel="shortcut icon" href="favicon.png">
8
+ </head>
9
+ <body>
10
+ <h3> Listview &lt; <a href="wincontrol.html">WinControl</a> <span class=gohome> <a href="index.html">Home </a> <div class=imgright><img src="images/listview.png"></div>
11
+ </span></h3>
12
+ <p class=fixedh>A window that displays a collection of items. This provides several ways to arrange and display items.
13
+ <br>See also <a href="https://docs.microsoft.com/en-us/windows/desktop/Controls/
14
+ window-controls"> Windows Control section of Microsoft Docs.</a>
15
+ </p>
16
+ <h4> Instance methods </h4>
17
+ <dl>
18
+ <dt><code><<(arg)</code></dt>
19
+ <dd>Adds the args at last of the items.<br>Give a String or a Array of [String, Object] as args.</dd>
20
+ <dt><code>bkcolor()</code></dt>
21
+ <dd>Gets the background color of this control.</dd>
22
+ <dt><code>bkcolor=(clr)</code></dt>
23
+ <dd>Sets the background color of this control.</dd>
24
+ <dt><code>checkboxes()</code></dt>
25
+ <dd>Retreives whether check boxes for items is enabled in this list-view control.</dd>
26
+ <dt><code>checkboxes=(f)</code></dt>
27
+ <dd>Sets whether check boxes for items is enabled in this list-view control.</dd>
28
+ <dt><code>clear()</code></dt>
29
+ <dd>Clears all items in this list-view control.</dd>
30
+ <dt><code>columns()</code></dt>
31
+ <dd>Gets the columns of a listview.Returns a instance of Listview::Columns.</dd>
32
+ <dt><code>columns=(args)</code></dt>
33
+ <dd>Sets the collumns of header of a Listview</dd>
34
+ <dt><code>count()</code></dt>
35
+ <dd>Retreives count of items.</dd>
36
+ <dt><code>delete(index=nil, number=1)</code></dt>
37
+ <dd>Deletes items at specified <i>index</i> and <i>number</i> from this control.<br>If no arguments given, deletes self.</dd>
38
+ <dt><code>delete_item(index)</code></dt>
39
+ <dd>Deletes item of specified <i>index</i> from this control.</dd>
40
+ <dt><code>each(){|item| ... }</code></dt>
41
+ <dd>Performs the block for each <i>item</i> in this listview as a block parameter.</dd>
42
+ <dt><code>editlabel(idx)</code></dt>
43
+ <dd>Begins in-place editing of the specified list-view item's text.</dd>
44
+ <dt><code>ensurevisible(i, partial=true)</code></dt>
45
+ <dd>Ensures that specified list-view item is either entirely or partially visible, scrolling the list-view control if necessary.</dd>
46
+ <dt><code>fetch(idx)</code></dt>
47
+ <dd>Gets an image-list item specified index.</dd>
48
+ <dt><code>find(start=-1, param: nil, string: nil, substring: nil, wrap: nil, nearestxy: nil, direction: nil)</code></dt>
49
+ <dd>Searches for a list-view item with the specified characteristics.</dd>
50
+ <dt><code>focused()</code></dt>
51
+ <dd>Searches the index of focused item.</dd>
52
+ <dt><code>focused=(idx)</code></dt>
53
+ <dd>Sets the specified item to focused.</dd>
54
+ <dt><code>fullrowselect()</code></dt>
55
+ <dd>Retreives whether full-row selection is enabled in this list-view control.</dd>
56
+ <dt><code>fullrowselect=(f)</code></dt>
57
+ <dd>Sets whether full-row selection is enabled in this list-view control.</dd>
58
+ <dt><code>get_extendedstyle(xstyle)</code></dt>
59
+ <dd>Gets the extended styles that are currently in use for this list-view control.</dd>
60
+ <dt><code>getnextitem(start, flag)</code></dt>
61
+ <dd>Searches for a list-view item that has the specified properties and bears the specified relationship to a specified item.</dd>
62
+ <dt><code>gridlines()</code></dt>
63
+ <dd>Retreives whether displays gridlines around items and subitems.</dd>
64
+ <dt><code>gridlines=(f)</code></dt>
65
+ <dd>Sets whether displays gridlines around items and subitems.</dd>
66
+ <dt><code>groupheaderimagelist()</code></dt>
67
+ <dd>Gets a group-header imagelist assigned to this control.</dd>
68
+ <dt><code>groupheaderimagelist=(il)</code></dt>
69
+ <dd>Assignes a group-header imagelist to this control.</dd>
70
+ <dt><code>headerdragdrop()</code></dt>
71
+ <dd>Retreives whether drag-and-drop reordering of columns is enabled in this list-view control.</dd>
72
+ <dt><code>headerdragdrop=(f)</code></dt>
73
+ <dd>Sets whether drag-and-drop reordering of columns is enabled in this list-view control.</dd>
74
+ <dt><code>hittest(x, y)</code></dt>
75
+ <dd>Determines which list-view item, if any, is at a specified position.</dd>
76
+ <dt><code>imagelist()</code></dt>
77
+ <dd>Gets a normal and a small imagelist assigned to this Listview control.</dd>
78
+ <dt><code>imagelist=([normaliamge,] smallimage)</code></dt>
79
+ <dd>Assignes a normal and a small imagelist to this Listview control.</dd>
80
+ <dt><code>insert(index, length=1, *args)</code></dt>
81
+ <dt><code>[]=(index, length=1, *args)</code></dt>
82
+ <dd>Inserts and replaces at the specified <i>index</i> and <i>length</i> by the <i>items</i>.<br>Give the arrays of [[<i>text</i>, <i>image</i>, <i>indent</i>, <i>data</i>], ... ] as <i>args</i>.</dd>
83
+ <dt><code>insert_item(idx, lvitem, arg)</code></dt>
84
+ <dd>Inserts an item into the Listview.This is low level method, so shuld be used `[]=' or `insert'.</dd>
85
+ <dt><code>last()</code></dt>
86
+ <dd>Gets the last of item in this list-view control.</dd>
87
+ <dt><code>multiselect()</code></dt>
88
+ <dd>Gets wheter the multiple items may be selected.</dd>
89
+ <dt><code>multiselect=(f)</code></dt>
90
+ <dd>Sets wheter the multiple items may be selected. By default, multiple items may be selected.</dd>
91
+ <dt><code>normalimagelist()</code></dt>
92
+ <dd>Gets a normal imagelist assigned to this control.</dd>
93
+ <dt><code>normalimagelist=(il)</code></dt>
94
+ <dd>Assignes a normal imagelist to this control.</dd>
95
+ <dt><code>selections()</code></dt>
96
+ <dd>Retreives the list of selected items in this list-view control.</dd>
97
+ <dt><code>set_extendedstyle(xstyle, f=true)</code></dt>
98
+ <dt><code>extendedstyle=(xstyle, f=true)</code></dt>
99
+ <dd>Sets extended styles in this list-view control.</dd>
100
+ <dt><code>showselalways()</code></dt>
101
+ <dd>Gets whether selection is shown always, if any.</dd>
102
+ <dt><code>showselalways=(f)</code></dt>
103
+ <dd>The selection, if any, is always shown, even if the control does not have the focus.</dd>
104
+ <dt><code>slice(idx, num=1)</code></dt>
105
+ <dt><code>[](idx, num=1)</code></dt>
106
+ <dd>Retreives the array of Listview::Item at the specified index and length.</dd>
107
+ <dt><code>smallimagelist()</code></dt>
108
+ <dd>Gets a small imagelist assigned to this control.</dd>
109
+ <dt><code>smallimagelist=(il)</code></dt>
110
+ <dd>Assignes a small imagelist to this control.</dd>
111
+ <dt><code>stateimagelist()</code></dt>
112
+ <dd>Gets a state imagelist assigned to this control.</dd>
113
+ <dt><code>stateimagelist=(il)</code></dt>
114
+ <dd>Assignes a state imagelist to this control.</dd>
115
+ <dt><code>stringwidth(txt)</code></dt>
116
+ <dd>Determines the width of a specified string using this list-view control's current font.</dd>
117
+ <dt><code>textbkcolor()</code></dt>
118
+ <dd>Gets the text background color of this list-view control.</dd>
119
+ <dt><code>textbkcolor=(clr)</code></dt>
120
+ <dd>Sets the background color of text in this list-view control.</dd>
121
+ <dt><code>textcolor()</code></dt>
122
+ <dd>Gets the text color of this list-view control.</dd>
123
+ <dt><code>textcolor=(clr)</code></dt>
124
+ <dd>Sets the text color of a list-view control.</dd>
125
+ <dt><code>tooltip()</code></dt>
126
+ <dd>Retrieves the tooltip control that the list-view control uses to display tooltips.</dd>
127
+ <dt><code>tooltip=(tt)</code></dt>
128
+ <dd>Sets the tooltip control that the list-view control will use to display tooltips.</dd>
129
+ <dt><code>trackselect()</code></dt>
130
+ <dd>Retreives whether hot-track selection is enabled in this list-view control.</dd>
131
+ <dt><code>trackselect=(f)</code></dt>
132
+ <dd>Sets whether hot-track selection is enabled in this list-view control.</dd>
133
+ <dt><code>viewmode()</code></dt>
134
+ <dd>Gets a view-mode of this list-vew control.</dd>
135
+ <dt><code>viewmode=(mode)</code></dt>
136
+ <dd>Sets a view-mode of this lis-view control. You can use following symbols instead of integer value.<br>:reportview, :iconview, :smalliconview, :listview</dd>
137
+ <dt><code>viewmode_to_sym()</code></dt>
138
+ <dd>Converts a integer value of view-mode to symbol.</dd>
139
+ </dl>
140
+ <h4> Listview styles <span class=spl>( both the symbols and the integers can be used )</span></h4>
141
+ <p></p>
142
+ <table>
143
+ <tr><th>Symbol</th><th>Integer value</th><th>Symbol</th><th>Integer value</th></tr>
144
+ <tr><td class=name1><code>:alignleft</code></td><td class=type><code>LVS_ALIGNLEFT</code></td><td class=name1><code>:alingtop</code></td><td class=type><code>LVS_ALIGNTOP</code></td></tr>
145
+ <tr><td class=name1><code>:autoarrange</code></td><td class=type><code>LVS_AUTOARRANGE</code></td><td class=name1><code>:editlabels</code></td><td class=type><code>LVS_EDITLABELS</code></td></tr>
146
+ <tr><td class=name1><code>:iconview</code></td><td class=type><code>LVS_ICON</code></td><td class=name1><code>:listview</code></td><td class=type><code>LVS_LIST</code></td></tr>
147
+ <tr><td class=name1><code>:nocolumnheader</code></td><td class=type><code>LVS_NOCOLUMNHEADER</code></td><td class=name1><code>:nolabelwrap</code></td><td class=type><code>LVS_NOLABELWRAP</code></td></tr>
148
+ <tr><td class=name1><code>:noscroll</code></td><td class=type><code>LVS_NOSCROLL</code></td><td class=name1><code>:nosortheader</code></td><td class=type><code>LVS_NOSORTHEADER</code></td></tr>
149
+ <tr><td class=name1><code>:ownerdata</code></td><td class=type><code>LVS_OWNERDATA</code></td><td class=name1><code>:ownerdrawfixed</code></td><td class=type><code>LVS_OWNERDRAWFIXED</code></td></tr>
150
+ <tr><td class=name1><code>:reportview</code></td><td class=type><code>LVS_REPORT</code></td><td class=name1><code>:shareimagelists</code></td><td class=type><code>LVS_SHAREIMAGELISTS</code></td></tr>
151
+ <tr><td class=name1><code>:showselalways</code></td><td class=type><code>LVS_SHOWSELALWAYS</code></td><td class=name1><code>:singlesel</code></td><td class=type><code>LVS_SINGLESEL</code></td></tr>
152
+ <tr><td class=name1><code>:smalliconview</code></td><td class=type><code>LVS_SMALLICON</code></td><td class=name1><code>:sortascending</code></td><td class=type><code>LVS_SORTASCENDING</code></td></tr>
153
+ <tr><td class=name1><code>:sortdescending</code></td><td class=type><code>LVS_SORTDESCENDING</code></td></tr>
154
+ </table>
155
+ <h4> Pre-defined events <span class=spl> ( can be added by `events=` method )</span></h4>
156
+ <p></p>
157
+ <table>
158
+ <tr><th width=20%>Symbol</th><th width=20%>Notification code</th><th>Definition <span class=spl>( `???' is name of the control )</span></th></tr>
159
+ <tr><td class=name1><code>:begindrag</code></td><td class=type><code>LVN_BEGINDRAG</code></td><td class=desc><code>???_begindrag(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
160
+ <tr><td class=name1><code>:beginlabeledit</code></td><td class=type><code>LVN_BEGINLABELEDIT</code></td><td class=desc><code>???_beginlabeledit(arg)<span class=ralign>arg is a NMLVDISPINFO</span></code></td></code></tr>
161
+ <tr><td class=name1><code>:beginrdrag</code></td><td class=type><code>LVN_BEGINRDRAG</code></td><td class=desc><code>???_beginrdrag(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
162
+ <tr><td class=name1><code>:click</code></td><td class=type><code>NM_CLICK</code></td><td class=desc><code>???_click(arg)<span class=ralign>arg is a NMITEMACTIVATE</span></code></td></code></tr>
163
+ <tr><td class=name1><code>:columnclick</code></td><td class=type><code>LVN_COLUMNCLICK</code></td><td class=desc><code>???_columnclick(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
164
+ <tr><td class=name1><code>:customdraw</code></td><td class=type><code>NM_CUSTOMDRAW</code></td><td class=desc><code>???_customdraw(arg)<span class=ralign>arg is a NMLVCUSTOMDRAW</span></code></td></code></tr>
165
+ <tr><td class=name1><code>:dblclk</code></td><td class=type><code>NM_DBLCLK</code></td><td class=desc><code>???_dblclk(arg)<span class=ralign>arg is a NMITEMACTIVATE</span></code></td></code></tr>
166
+ <tr><td class=name1><code>:deleteitem</code></td><td class=type><code>LVN_DELETEITEM</code></td><td class=desc><code>???_deleteitem(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
167
+ <tr><td class=name1><code>:endlabeledit</code></td><td class=type><code>LVN_ENDLABELEDIT</code></td><td class=desc><code>???_endlabeledit(arg)<span class=ralign>arg is a NMLVDISPINFO</span></code></td></code></tr>
168
+ <tr><td class=name1><code>:hover</code></td><td class=type><code>NM_HOVER</code></td><td class=desc><code>???_hover(arg)<span class=ralign>arg is a NMHDR</span></code></td></code></tr>
169
+ <tr><td class=name1><code>:insertitem</code></td><td class=type><code>LVN_INSERTITEM</code></td><td class=desc><code>???_insertitem(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
170
+ <tr><td class=name1><code>:itemactivate</code></td><td class=type><code>LVN_ITEMACTIVATE</code></td><td class=desc><code>???_itemactivate(arg)<span class=ralign>arg is a NMITEMACTIVATE</span></code></td></code></tr>
171
+ <tr><td class=name1><code>:itemchanged</code></td><td class=type><code>LVN_ITEMCHANGED</code></td><td class=desc><code>???_itemchanged(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
172
+ <tr><td class=name1><code>:itemchanging</code></td><td class=type><code>LVN_ITEMCHANGING</code></td><td class=desc><code>???_itemchanging(arg)<span class=ralign>arg is a NMLISTVIEW</span></code></td></code></tr>
173
+ <tr><td class=name1><code>:keydown</code></td><td class=type><code>LVN_KEYDOWN</code></td><td class=desc><code>???_keydown(arg)<span class=ralign>arg is a LVKEYDOWN</span></code></td></code></tr>
174
+ <tr><td class=name1><code>:killfocus</code></td><td class=type><code>NM_KILLFOCUS</code></td><td class=desc><code>???_killfocus(arg)<span class=ralign>arg is a NMHDR</span></code></td></code></tr>
175
+ <tr><td class=name1><code>:rclick</code></td><td class=type><code>NM_RCLICK</code></td><td class=desc><code>???_rclick(arg)<span class=ralign>arg is a NMITEMACTIVATE</span></code></td></code></tr>
176
+ <tr><td class=name1><code>:rdblclk</code></td><td class=type><code>NM_RDBLCLK</code></td><td class=desc><code>???_rdblclk(arg)<span class=ralign>arg is a NMITEMACTIVATE</span></code></td></code></tr>
177
+ <tr><td class=name1><code>:releasedcapture</code></td><td class=type><code>NM_RELEASEDCAPTURE</code></td><td class=desc><code>???_releasedcapture(arg)<span class=ralign>arg is a NMHDR</span></code></td></code></tr>
178
+ <tr><td class=name1><code>:return</code></td><td class=type><code>NM_RETURN</code></td><td class=desc><code>???_return(arg)<span class=ralign>arg is a NMHDR</span></code></td></code></tr>
179
+ <tr><td class=name1><code>:setfocus</code></td><td class=type><code>NM_SETFOCUS</code></td><td class=desc><code>???_setfocus(arg)<span class=ralign>arg is a NMHDR</span></code></td></code></tr>
180
+ </table>
181
+ <h4> Default events <span class=spl>( can be defined without using `events=' method )</h4>
182
+ <p></p>
183
+ <dl>
184
+ <dt><code>???_click(NMITEMACTIVATE)</code></dt>
185
+ <dt><code>???_itemchanged(NMLISTVIEW)</code></dt>
186
+ </dl>
187
+ <h3> Listview::Column </h3>
188
+ <h4> Instance methods </h4>
189
+ <dl>
190
+ <dt><code>delete()</code></dt>
191
+ <dt><code>format()</code></dt>
192
+ <dt><code>format=(fmt)</code></dt>
193
+ <dt><code>format_to_sym()</code></dt>
194
+ <dt><code>image()</code></dt>
195
+ <dt><code>image=(i)</code></dt>
196
+ <dt><code>lvcolumn()</code></dt>
197
+ <dt><code>owner=(owner)</code></dt>
198
+ <dt><code>text()</code></dt>
199
+ <dt><code>text=(txt)</code></dt>
200
+ <dt><code>width()</code></dt>
201
+ <dt><code>width=(w)</code></dt>
202
+ </dl>
203
+ <h3> Listview::Columns </h3>
204
+ <h4> Instance methods </h4>
205
+ <dl>
206
+ <dt><code><<(arg)</code></dt>
207
+ <dt><code>[](idx)</code></dt>
208
+ <dt><code>[]=(idx, *args)</code></dt>
209
+ <dt><code>clear()</code></dt>
210
+ <dt><code>each()</code></dt>
211
+ <dt><code>size()</code></dt>
212
+ <dt><code>count()</code></dt>
213
+ </dl>
214
+ <h3> Listview::Item </h3>
215
+ <h4> Instance methods </h4>
216
+ <dl>
217
+ <dt><code>[](idx)</code></dt>
218
+ <dt><code>[]=(idx, txt)</code></dt>
219
+ <dt><code>checked()</code></dt>
220
+ <dt><code>cheched?()</code></dt>
221
+ <dt><code>checked=(f)</code></dt>
222
+ <dt><code>columns()</code></dt>
223
+ <dt><code>data=(data)</code></dt>
224
+ <dt><code>delete()</code></dt>
225
+ <dt><code>editlabel()</code></dt>
226
+ <dt><code>focused()</code></dt>
227
+ <dt><code>focused=(f)</code></dt>
228
+ <dt><code>getstate(mask)</code></dt>
229
+ <dt><code>image()</code></dt>
230
+ <dt><code>image=(idx)</code></dt>
231
+ <dt><code>indent()</code></dt>
232
+ <dt><code>indent=(idt)</code></dt>
233
+ <dt><code>rect()</code></dt>
234
+ <dt><code>selected()</code></dt>
235
+ <dt><code>selected=(f)</code></dt>
236
+ <dt><code>setstate(mask, state)</code></dt>
237
+ <dt><code>text()</code></dt>
238
+ <dt><code>text=(txt)</code></dt>
239
+ </dl>
240
+ <h4> Sample script </h4>
241
+ <pre class=cd>
242
+ require <span class="str">'wrb'</span>
243
+ <span class="kwd">module</span> WR
244
+ <span class="kwd">class</span> MyForm < Form
245
+ <span class="kwd">def</span> initialize() <span class="cmt"># Generated by FormDesigner, and modified.
246
+ </span> <span class="kwd">self</span>.size = [268, 201]
247
+ <span class="kwd">self</span>.inheritfont = [<span class="str">'Meiryo'</span>, -12]
248
+ _<< Imagelist.fromfile(<span class="sym">:fileimg32</span>, <span class="str">"./sampleimg32.iml"</span>)
249
+ _<< Imagelist.fromfile(<span class="sym">:fileimg16</span>, <span class="str">"./sampleimg16.iml"</span>)
250
+ _<< Listview[<span class="sym">:listview1</span>, <span class="str">""</span>, 0, 0, 100, 200, <span class="sym">:margin</span>=>[0, 24, <span class="kwd">nil</span>, 0], <span class="sym">:smallimagelist</span>=>_fileimg16, <span class="sym">:normalimagelist</span>=>_fileimg32]
251
+ _<< Listview[<span class="sym">:listview2</span>, <span class="str">""</span>, 112, 0, 176, 200, 0x1, <span class="sym">:margin</span>=>[100, 0, 0, 0], <span class="sym">:gridlines</span>=><span class="kwd">true</span>, <span class="sym">:fullrowselect</span>=><span class="kwd">true</span>]
252
+ _listview2.columns << [<span class="str">"Name"</span>, 64, 0]
253
+ _listview2.columns << [<span class="str">"Size"</span>, 32, 3]
254
+ _listview2.columns << [<span class="str">"Value"</span>, 52, 1]
255
+ _<< Radiobutton[<span class="sym">:smallbtn</span>, <span class="str">"List"</span>, 4, 4, 44, 20, 0x9,<span class="sym">:font</span>=><span class="sym">:parent</span>]
256
+ _<< Radiobutton[<span class="sym">:normalbtn</span>, <span class="str">"Icon"</span>, 48, 4, 52, 18, 0x9, <span class="sym">:checked</span>=><span class="kwd">true</span>, <span class="sym">:font</span>=><span class="sym">:parent</span>]
257
+ <span class="kwd">end</span>
258
+
259
+ <span class="kwd">def</span> created()
260
+ _listview1 << [[<span class="str">"closed"</span>, 0], [<span class="str">'opend'</span>, 1], [<span class="str">'empty'</span>, 2], [<span class="str">'document'</span>, 3], [<span class="str">'Ruby!!'</span>, 4]]
261
+ _listview2 << [[<span class="str">"closed\t0\t100"</span>], [<span class="str">"opend\t1\t200"</span>], [<span class="str">"empty\t2\t300"</span>], [<span class="str">"document\t3\t400"</span>], [<span class="str">"Ruby!!\tinf\tInfinity"</span>]]
262
+ <span class="kwd">end</span>
263
+
264
+ <span class="kwd">def</span> normalbtn_clicked(*)
265
+ _listview1.viewmode = <span class="sym">:iconview</span>
266
+ <span class="kwd">end</span>
267
+ <span class="kwd">def</span> smallbtn_clicked(*)
268
+ _listview1.viewmode = <span class="sym">:listview</span>
269
+ <span class="kwd">end</span>
270
+
271
+ <span class="kwd">self</span>.start
272
+ <span class="kwd">end</span>
273
+ <span class="kwd">end</span>
274
+ </pre>
275
+
276
+ </body>
277
+ </html>
@@ -0,0 +1,596 @@
1
+ require 'pp'
2
+ require 'wrb'
3
+
4
+ module WR
5
+ class ParseScript < Ripper::Filter
6
+ # Ripper::SCANNER_EVENTS -> [:CHAR, :__end__, :backref, :backtick, :comma, :comment, :const, :cvar, :embdoc, :embdoc_beg, :embdoc_end, :embexpr_beg, :embexpr_end, :embvar, :float, :gvar, :heredoc_beg, :heredoc_end, :ident, :ignored_nl, :imaginary, :int, :ivar, :kw, :label, :label_end, :lbrace, :lbracket, :lparen, :nl, :op, :period, :qsymbols_beg, :qwords_beg, :rational, :rbrace, :rbracket, :regexp_beg, :regexp_end, :rparen, :semicolon, :sp, :symbeg, :symbols_beg, :tlambda, :tlambeg, :tstring_beg, :tstring_content, :tstring_end, :words_beg, :words_sep]
7
+
8
+ attr_reader :result, :modules
9
+ def initialize(src, fname=nil, lnno=1)
10
+ super(src, fname, lnno)
11
+ @result = []
12
+ @depth = 0
13
+ @comments = []
14
+ @modules = {:depth=>0}
15
+ @current = @modules
16
+ @methods = {}
17
+ @required = {}
18
+ @lines = src.lines
19
+ end
20
+
21
+ ############## event handers ##############
22
+
23
+ def perform_require(feature)
24
+ if feature =~ /wrb\/([\w_]+)/
25
+ s = open("../#{$1}.rb"){|f| f.read}
26
+ ps = ParseScript.new(s)
27
+ ps.parse
28
+ ps.modules
29
+ end
30
+ end
31
+
32
+ def perform_nl(token, pd) #dpp lineno, pd
33
+ if @getting_hash_data && pd=~/\A\s*\:?\w+\s*=>\s*(\:?\w+|\[.+\])/
34
+ if pd
35
+ k, v = pd.split('=>')
36
+ @getting_hash_data[k.strip] = v.strip
37
+ @getting_hash_data = nil
38
+ end
39
+ return nil
40
+ elsif @getting_array_data #; dpp pd, token, @getting_array_data
41
+ if pd
42
+ @getting_array_data[pd.strip] = token.strip
43
+ @getting_array_data = nil
44
+ end
45
+ return nil
46
+ end
47
+ case pd
48
+ when /\A\s*(module|class)\s+([A-Z]\w*.*)/ #@comments
49
+ nm = $2.strip
50
+ k = nm.split('<')[0].strip
51
+ @current[k] ||= {:type=>$1, :fullname=>nm, :parent=>@current, :depth=>@depth,
52
+ :comments=>@comments.dup, :singletons=>{}, :methods=>{}, :aliases=>{},
53
+ :styles=>{}, :predefinedevents=>{}, :defaultevents=>{}}
54
+ @current = @current[k]
55
+ when /\A\s*def\s+(self.[A-Za-z_]\w*[?\=]?|self\.\[\]=?)(.+)/ # singleton method
56
+ return nil if @depth>4
57
+ @current[:singletons][$1.strip] = [$2, @comments.dup]
58
+ when /\A\s*def\s+([A-Za-z_]\w*[?\=!]?|\[\]=?|[+-<>|&]+)(.+)/ # instance method
59
+ return nil if @depth>4 #; dpp @current[:fullname], $1
60
+ @current[:methods][$1.strip] = [$2, @comments.dup]
61
+ when /\A\s*alias\s+(\:?[\w_]+[=?]?|[\[\]+-<>=|]+)\s+(\:?[\w_]+[=?]?|[\[\]+-<>=|]+)/
62
+ # dpp lineno, $1, $2.tr(':',''), @current[:methods][$2.tr(':','')]
63
+ if @current[:methods][$2.tr(': ','')]
64
+ if @current[:aliases][$2]
65
+ @current[:aliases][$2] << $1
66
+ else
67
+ @current[:aliases][$2] = [$1]
68
+ end
69
+ end
70
+ when /\A\s*require\W+['"]([\w\/]+)/
71
+ mod=perform_require($1);#dpp mod['WR'].keys if mod && mod['WR']
72
+ if @required.empty?
73
+ @required.update mod if mod
74
+ else
75
+ @required['WR'].update(mod['WR']) if mod && mod['WR']
76
+ end
77
+ when /\A\s*include\W+([A-Z][\w_]*)/
78
+ if (mod1=@required['WR']) && (h=mod1[$1])
79
+ @current[:methods].update(h[:methods])
80
+ @current[:aliases].update(h[:aliases])
81
+ end
82
+ end
83
+ @comments.clear
84
+ nil
85
+ end
86
+
87
+ def on_default(event, token, pd) # ; dpp lineno, event, token, pd
88
+ case event
89
+ when :on_nl, :on_semicolon #; dpp lineno, pd
90
+ perform_nl(token, pd)
91
+ when :on_ignored_nl #; dpp lineno, pd
92
+ perform_nl(token, pd)
93
+ else
94
+ pd.to_s + token
95
+ end
96
+ end
97
+
98
+ def on_embdoc(token, pd)
99
+ return @_current_rd=nil if token.empty?
100
+ case token
101
+ when /^\s*(self\.\s*[\w_]+[=?]?|\[\]=?|<<)(\(.*\))/ #; dpp token
102
+ @_current_rd = (@current[:singletons][$1.strip] = [$2.strip, []])
103
+ when /^\s*([\w_]+[=?]?|\[\]=?|<<)(\(.*\)(:?\{.+\})?)/
104
+ @_current_rd = (@current[:methods][$1.strip] = [$2.strip, []])
105
+ when /^\s*$/
106
+ @_current_rd = nil
107
+ else
108
+ @_current_rd[1] << token if @_current_rd
109
+ end
110
+ nil
111
+ end
112
+
113
+ def on_rparen(token, pd)
114
+ # if pd=~/def (:?self\.)?[\w_]+[=?]?\s*\(.*/ #; dpp pd
115
+ if pd=~/\A\s*def\s+/ #; dpp pd
116
+ perform_nl(token, pd+token)
117
+ return nil
118
+ end
119
+ pd.to_s + token
120
+ end
121
+
122
+ def on_lbrace(token, pd)
123
+ case pd
124
+ when /\A\s*PreDefinedEvents\s*=\s*/
125
+ @getting_hash_data = @current[:predefinedevents]
126
+ @getting_hash_data[:__COMMENTS__] = @comments.dup
127
+ @comments.clear
128
+ nil
129
+ when /\A\s*WinStyles\s*=\s*/
130
+ @getting_hash_data = @current[:styles]
131
+ @getting_hash_data[:__COMMENTS__] = @comments.dup
132
+ @comments.clear
133
+ nil
134
+ else
135
+ pd + token
136
+ end
137
+ end
138
+ def on_rbrace(token, pd) #pp @getting_hash_data
139
+ if @getting_hash_data
140
+ return @getting_hash_data = nil
141
+ end
142
+ pd + token
143
+ end
144
+
145
+ def on_lbracket(token, pd)
146
+ case pd
147
+ when /\A\s*DefaultEvents\s*=\s*/#; dpp pd
148
+ @getting_array_data = @current[:defaultevents]
149
+ @getting_array_data[:__COMMENTS__] = @comments.dup
150
+ @comments.clear
151
+ return nil
152
+ end
153
+ pd + token
154
+ end
155
+ def on_rbracket(token, pd)
156
+ if @getting_array_data
157
+ return @getting_array_data = nil
158
+ end
159
+ pd + token
160
+ end
161
+
162
+ def on_comma(token, pd) #dpp @getting_array_data, lineno, pd
163
+ if @getting_hash_data && pd=~/\A\s*\:?\w+\s*=>\s*(\:?\w+|\[.+\])/
164
+ k, v =pd.split('=>') #; dpp k.strip, v.strip
165
+ @getting_hash_data[k.strip] = v.strip
166
+ nil
167
+ elsif @getting_array_data && pd=~/\A\s*:?[\w_]+/
168
+ @getting_array_data[pd.strip] = ""
169
+ nil
170
+ else
171
+ pd.to_s + token
172
+ end
173
+ end
174
+
175
+ def on_comment(token, pd) #; dpp lineno, pd, token #if @getting_array_data
176
+ if pd=~/(\w+|[\)'"`])\s*\Z/
177
+ perform_nl(token, pd)
178
+ elsif @getting_hash_data
179
+ if pd=~/\A\s*\:?\w+\s*=>\s*(\:?\w+|\[.+\])/
180
+ k, v =pd.split('=>') #; dpp k.strip, v.strip
181
+ @getting_hash_data[k.strip] = v.strip
182
+ end
183
+ s = @getting_hash_data[@getting_hash_data.keys.last] #; dpp s, s=~/.+#/
184
+ s << token unless s=~/.+\#/
185
+ return nil
186
+ elsif @getting_array_data
187
+ @getting_array_data[@getting_array_data.keys.last] = token.strip
188
+ return nil
189
+ end
190
+ @comments << token
191
+ nil
192
+ end
193
+
194
+ def on_kw(token, pd)
195
+ case token
196
+ when 'module', 'class';# dpp lineno, @depth, token
197
+ @depth += 1
198
+ when 'begin', 'case', 'def', 'do', 'while';# dpp lineno, @depth, token
199
+ @depth += 1
200
+ when 'if', 'unless', 'until', 'while' #;dpp lineno, token, pd #, pd=~/\A\s+\z/
201
+ @depth += 1 if pd =~ /\A\s+\z/ || pd=~/\n\s*\z/ || pd.empty? || pd=~/[\=\+\-\*\/]\s*\z/
202
+ when 'end'# dpp lineno, @depth, @current[:depth]
203
+ @current = @current[:parent] if @depth == @current[:depth]
204
+ @depth -= 1
205
+ end
206
+ pd.to_s + token
207
+ end
208
+
209
+ def on_ident(token, pd) #
210
+ case pd
211
+ when /\s*def\s+/
212
+ # dpp lineno, pd, token
213
+ end
214
+ pd.to_s + token
215
+ end
216
+
217
+ end
218
+
219
+ class Parse4Color < Ripper::Filter
220
+ def on_default(event, token, pd) #
221
+ case event
222
+ when :on_kw
223
+ pd << '<span class="kwd">' + token + '</span>'
224
+ when :on_comment
225
+ pd << '<span class="cmt">' + token + '</span>'
226
+ when :on_tstring_beg
227
+ pd << '<span class="str">' + token
228
+ when :on_tstring_end
229
+ pd << token + '</span>'
230
+ when :on_symbeg
231
+ @symbeg = true
232
+ pd << '<span class="sym">' + token
233
+ when :on_ident
234
+ if @symbeg
235
+ @symbeg = nil
236
+ pd << token + '</span>'
237
+ else
238
+ pd << token
239
+ end
240
+ else
241
+ pd << token
242
+ end
243
+ end
244
+ end
245
+ end
246
+
247
+
248
+ module WR
249
+ class WRBDoc
250
+ include ModAutoloading
251
+ def initialize(fname)
252
+ @fname = fname
253
+ @hsh = {}
254
+ end
255
+
256
+ def get_sampleimage()
257
+ simg = 'images/' + @bname + '.png'
258
+ path = File.dirname(__FILE__) + '/' + simg
259
+ File.exists?(path) ? " <div class=imgright><img src=\"#{simg}\"></div>\n" : ''
260
+ end
261
+
262
+ def get_class_description(klass, hsh)
263
+ si = get_sampleimage()
264
+ s = hsh[:fullname]
265
+ if (a=s.split('<'))[1]
266
+ a[1].strip!
267
+ s = "#{a[0]} &lt; <a href=\"#{a[1].downcase}.html\">#{a[1]}</a>"
268
+ end
269
+ c = hsh[:comments].map{|i| i.sub /^\s*# ?/, ''}.join
270
+ " <h3> #{s} <span class=gohome> <a href=\"index.html\">Home </a>#{si}</span></h3>\n" +
271
+ (c.empty? ? "" : " <p#{si.empty? ? '' : ' class=fixedh'}>#{c}</p>\n")
272
+ end
273
+
274
+ def _get_methods(hsh, h, m)
275
+ r = ""
276
+ h.keys.sort.each{|s|
277
+ i = s.intern
278
+ j = s.dup
279
+ next unless m.index(i)
280
+ d, c = h[j]
281
+ jr = j.gsub(/([\[\]\=\?])/, '\\\\\1') # add escape charactor for regexp.
282
+ if d
283
+ if c.size==1 && c[0] =~ /\s*\#$/ # Don't output.
284
+ next
285
+ elsif c[0] =~ /#\s*#{jr}(.+)/
286
+ r << " <dt><code>#{j}#{d=$1}</code></dt>\n"
287
+ c.shift
288
+ else
289
+ r << " <dt><code>#{i}#{d}</code></dt>\n"
290
+ end
291
+ if a=hsh[:aliases]
292
+ if ar=a[j]
293
+ ar.each{|i|
294
+ r << " <dt><code>#{i}#{d}</code></dt>\n"
295
+ }
296
+ end
297
+ end
298
+ if c
299
+ s = ""
300
+ t = []
301
+ c.each{|i|
302
+ if i=~/#\s*\w+:/
303
+ t << i.sub(/#/, '').strip
304
+ else
305
+ s << i.sub(/#/, '').strip
306
+ end
307
+ }
308
+ if s.empty?
309
+ elsif t.empty?
310
+ r << " <dd>#{s}</dd>\n"
311
+ else
312
+ r << " <dd>#{s}\n <table>\n"
313
+ t.each{|i|
314
+ nam, typ, dsc = i.split(":").map{|j| j.split(';')}.flatten
315
+ r << " <tr><td class=name1> #{nam} </td> <td class=type> #{typ} </td>" +
316
+ "<td class=desc> #{dsc} </td></tr>\n"
317
+ }
318
+ r << " </table>\n </dd>\n"
319
+ end
320
+ end
321
+ else
322
+ # r << " <dt>#{j}</dt>\n"
323
+ end
324
+ }
325
+ r
326
+ end
327
+
328
+ def get_singleton_methods(klass, hsh)
329
+ return if !(h=hsh[:singletons]) || h.empty?
330
+ ancestor = hsh[:fullname].split('<')[1]
331
+ ancestor = ancestor ? eval(ancestor) : Object
332
+ m = klass.singleton_methods.map{|i| "self.#{i}".intern}
333
+ # m << "self.new".intern
334
+ # dpp h.keys
335
+ if v=h.delete("self.new")#; dpp v
336
+ s = v[1].map{|i| i.sub(/^\s*#/, '').strip}.join
337
+ r = " <dt><code>self.new#{v[0].strip}</code></dt>\n <dd>#{s}</dd>\n"
338
+ else
339
+ r = ''
340
+ end
341
+ r << _get_methods(hsh, h, m)
342
+ r.empty? ? "" : " <h4> Singleton methods </h4>\n <dl>\n#{r} </dl>\n"
343
+ end
344
+
345
+ def get_instance_methods(klass, hsh) #; dpp hsh[:methods]
346
+ return if !(h=hsh[:methods]) || h.empty?
347
+ ancestor = hsh[:fullname].split('<')[1]
348
+ ancestor = ancestor ? eval(ancestor) : Object
349
+ m = klass.public_instance_methods
350
+ r = _get_methods(hsh, h, m)
351
+ r.empty? ? "" : " <h4> Instance methods </h4>\n <dl>\n#{r} </dl>\n"
352
+ end
353
+
354
+ def get_styles(klass, hsh)
355
+ return if (!h=hsh[:styles]) || h.empty?
356
+ k = hsh[:fullname].split('<')[0].strip
357
+ r = " <h4> #{k} styles <span class=spl>( both the symbols and the integers can be used )</span></h4>\n"
358
+ if c=h.delete(:__COMMENTS__)
359
+ r << " <p>" + c.map{|i| i.sub(/#\s*/, '').strip}.join + "</p>\n"
360
+ end
361
+ r << " <table>\n"
362
+ r << "<tr><th>Symbol</th><th>Integer value</th><th>Symbol</th><th>Integer value</th></tr>\n"
363
+ h.keys.sort.each_with_index{|k, i|
364
+ if i%2==0
365
+ r << " <tr><td class=name1><code>#{k}</code></td><td class=type><code>#{h[k]}</code></td>"
366
+ else
367
+ r << "<td class=name1><code>#{k}</code></td><td class=type><code>#{h[k]}</code></td></tr>\n"
368
+ end
369
+ }
370
+ r << "</tr>\n" if h.keys.size%2==1
371
+ r << " </table>\n"
372
+ end
373
+
374
+
375
+ def get_predefinedevents(klass, hsh)
376
+ return if !(h=hsh[:predefinedevents]) || h.empty?
377
+ r = " <h4> Pre-defined events <span class=spl> ( can be added by `events=` method )</span></h4>\n"
378
+ if c=h.delete(:__COMMENTS__)
379
+ r << " <p>" + c.map{|i| i.sub(/#\s*/, '').strip}.join + "</p>\n"
380
+ end
381
+ r << " <table>\n"
382
+ r << "<tr><th width=20%>Symbol</th><th width=20%>Notification code</th><th>Definition <span class=spl>( `???' is name of the control )</span></th></tr>\n"
383
+ h.keys.sort.each{|k| #dpp k, h[k]
384
+ if h[k].match(/\[(.+)\].*#(.+)/) #; dpp k, h[k]
385
+ d = $1.split(',')
386
+ f = $2.strip
387
+ else
388
+ d = h[k].sub(/\[(.+)\]/, '\1').split(',') #; dpp d
389
+ if d[0]=~/WM_COMMAND/ && d[-1]=~/hi/
390
+ f = "???_#{k.tr(':', '')}(idcmd, code, hwnd)"
391
+ elsif d[0]=~/WM_NOTIFY/ && d[-2]=~/xs/
392
+ c = "<span class=ralign>arg is a #{d[-1].strip}</span>"
393
+ f = "???_#{k.tr(':', '')}(arg)#{c}"
394
+ else
395
+ f = "???_#{k.tr(':', '')}(*args)"
396
+ end
397
+ end
398
+ d = d.size>=3 ? d[1].strip : d[0].strip
399
+ r << " <tr><td class=name1><code>#{k}</code></td><td class=type><code>#{d}</code></td><td class=desc><code>#{f}</code></td></code></tr>\n"
400
+ }
401
+ r << " </table>\n"
402
+ end
403
+
404
+ def get_defaultevents(klass, hsh)
405
+ return if !(h=hsh[:defaultevents]) || h.empty?
406
+ r = " <h4> Default events <span class=spl>( can be defined without using `events=' method )</h4>\n"
407
+ if c=h.delete(:__COMMENTS__)
408
+ r << " <p>" + c.map{|i| i.sub(/#\s*/, '').strip}.join + "</p>\n"
409
+ end
410
+ r << " <dl>\n"
411
+ h.keys.sort.each{|k|
412
+ r << " <dt><code>#{h[k].sub(/#\s*/, '')}</code></dt>\n"
413
+ }
414
+ r << " </dl>\n"
415
+ end
416
+
417
+ def get_nested_class_description(klass, hsh)
418
+ s = klass.to_s.sub('WR::', '')
419
+ c = hsh[:comments].map{|i| i.strip.sub /^#\s*/, ''}.join
420
+ " <h3> #{s} </h3>\n" +
421
+ (c.empty? ? "" : " <p>#{c}</p>\n")
422
+ end
423
+
424
+ def get_nested_class(klass, hsh)
425
+ h = hsh.select{|k,v| k.is_a?(String) && v[:type]=="class"}
426
+ s = ''
427
+ h.keys.each{|k| #; dpp k #hsh[k]
428
+ s << get_nested_class_description(klass.module_eval(k), hsh[k])#; dpp hsh[k][:methods]
429
+ s << get_instance_methods(klass.module_eval(k), hsh[k])
430
+ }
431
+ s
432
+ end
433
+
434
+ def get_samplescript(klass, hsh)
435
+ dir = File.dirname(__FILE__)
436
+ fname = dir + '/samples/sample_' + hsh[:fullname].split('<')[0].strip.downcase + '.rb'
437
+ s = (open(fname){|f| f.read} rescue nil)
438
+ if s
439
+ s = Parse4Color.new(s).parse('')
440
+ r = " <h4> Sample script </h4>\n"
441
+ r << " <pre class=cd>\n" + s + " </pre>\n"
442
+ end
443
+ end
444
+
445
+ def output(*r)
446
+ title = r.shift
447
+ res = <<EEOOSS
448
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
449
+ <html lang="en">
450
+ <head>
451
+ <meta content="text/html; charset=utf-8" http-equiv="content-type">
452
+ <title>#{title}</title>
453
+ <link href="wrb.css" type="text/css" rel="stylesheet">
454
+ <link rel="shortcut icon" href="favicon.png">
455
+ </head>
456
+ <body>
457
+ #{r.join}
458
+ </body>
459
+ </html>
460
+ EEOOSS
461
+ end
462
+
463
+ def parse()
464
+ s = open(@fname){|f| f.read}
465
+ @parsedata = ParseScript.new(s)
466
+ @parsedata.parse
467
+ @bname = File.basename(@fname, ".rb")
468
+ @cname = @parsedata.modules['WR'].select{|k, v| k.is_a?(String) && k=~/#{@bname}/i}.keys[0]
469
+ @klass = WR.module_eval(@cname)
470
+ self
471
+ end
472
+
473
+ def get_header()
474
+ h= @parsedata.modules["WR"][@cname]
475
+ if @klass < WinControl
476
+ cls = "Controls"
477
+ elsif (@klass < CommonDialog rescue nil)
478
+ cls = "Common dialogs"
479
+ elsif @klass == Dialog || @klass==Form
480
+ else
481
+ cls = "Other resources"
482
+ end
483
+ [cls, h[:fullname].split('<')[0].strip, h[:comments][0].to_s.sub(/\s*#/, '').strip]
484
+ end
485
+
486
+ def to_html()
487
+ klass = @klass
488
+ title = @cname
489
+ hsh = @parsedata.modules["WR"][@cname]
490
+ class_description = get_class_description(klass, hsh)
491
+ output title, class_description, get_singleton_methods(klass, hsh),
492
+ get_instance_methods(klass, hsh), get_styles(klass, hsh),
493
+ get_predefinedevents(klass, hsh), get_defaultevents(klass, hsh),
494
+ get_nested_class(klass, hsh), get_samplescript(klass, hsh)
495
+ end
496
+
497
+ def self.wrb_show_doc(htm)
498
+ pid = Registry.open(RC::HKCU,
499
+ 'Software\Microsoft\Windows\Shell\Associations\UrlAssociations\HTTP\UserChoice'){|r|
500
+ r.read('Progid')
501
+ }
502
+ path = Registry.open(RC::HKCR, pid+'\shell\open\command'){|r| r.read}.match(/^\".+?\"/)[0]
503
+ doc = WR_INSTALLED_DIR + "/wrb/documents/#{htm}"
504
+ if RbConfig::CONFIG['arch'] =~ /cygwin/
505
+ s = `cygpath -a #{path}`
506
+ s.gsub!(/[ ()]/){'\\' + $&}
507
+ d = `cygpath -aw #{doc}`
508
+ exec s.chomp + ' "' + d.chomp + '"' + " &"
509
+ else
510
+ exec "start " + path + ' "' + doc.tr('/', '\\') + '"'
511
+ end
512
+ end
513
+ end
514
+
515
+ if ARGV.empty?
516
+ dir = File.dirname(__FILE__)
517
+ exit unless fname = WR::OpenFileNameDlg.show(initialdir: dir)
518
+ wrdoc = WRBDoc.new(fname).parse
519
+ exit unless s = wrdoc.to_html
520
+ htname = File.basename(fname, '.rb') + '.html'
521
+ open(File.dirname(__FILE__)+'/'+htname, 'w'){|f| f.write(s)}
522
+ WRBDoc.wrb_show_doc(htname)
523
+ else
524
+ dir = File.dirname(__FILE__)
525
+ if ARGV[0]=='rd'
526
+ fname = WR::OpenFileNameDlg.show(initialdir: dir)
527
+ exit -1 unless fname
528
+ if File.extname(fname)=='.rb'
529
+ require fname
530
+ cls = WR.module_eval 'RWin::' + WR.constants.select{|i| i=~/#{File.basename(fname, '.rb')}/i}[0].to_s
531
+ s = "=begin\nFollowing methods are defined at the super class.\n"
532
+ s << ":singleton_methods\n"
533
+ s << cls.singleton_methods(false).sort.map{|i|" self.#{i}()\n"}.join
534
+ s << "\n:instance_methods\n"
535
+ s << cls.public_instance_methods(false).sort.map{|i| " #{i}()\n"}.join
536
+ s << "\n=end\n"
537
+ STDERR.puts s
538
+ Clipboard.open(){|cl| cl.text = s}
539
+ end
540
+ elsif ARGV[0] == 'all'
541
+ srcdir = dir.sub(/\/\w+$/, '/components/')
542
+ h = {}
543
+ Dir.chdir(srcdir){Dir.glob('*.rb'){|rb|
544
+ begin
545
+ wrdoc = WRBDoc.new(rb).parse
546
+ cls, name, desc = wrdoc.get_header
547
+ h[cls] ||= []
548
+ h[cls] << [name, desc]
549
+ s = wrdoc.to_html
550
+ open("#{dir}/#{rb.sub('.rb', '.html')}", 'w'){|f| f.write(s)} if s
551
+ rescue
552
+ end
553
+ }
554
+ }
555
+ cs = ""
556
+ h["Controls"].sort.each{|k, v|
557
+ cs << %Q' <tr><td class="sign"><a href="#{k.downcase}.html">#{k}</td><td class="desc">#{v}</td></tr>\n'
558
+ }
559
+
560
+ ds = ""
561
+ h["Common dialogs"].sort.each{|k, v|
562
+ ds << %Q' <tr><td class="sign"><a href="#{k.downcase}.html">#{k}</td><td class="desc">#{v}</td></tr>\n'
563
+ }
564
+
565
+ os = ""
566
+ h["Other resources"].sort.each{|k, v|
567
+ os << %Q' <tr><td class="sign"><a href="#{k.downcase}.html">#{k}</td><td class="desc">#{v}</td></tr>\n'
568
+ }
569
+
570
+ s = <<EEOOSS
571
+ <h2><a name="controls"> Controls </a></h2>
572
+ <p>The child windows of Form or Dialog. They are typically inherited from <a href=\"wincontrol.html\"> WinControl </a>.</p>
573
+ <table>\n#{cs} </table>
574
+
575
+ <h2><a name="commondialogs"> Common dialogs </a></h2>
576
+ <p>These common dialogs are all inherited from CommonDialog.</p>
577
+ <table>\n#{ds} </table>
578
+
579
+ <h2><a name="otherresources"> Other resources </a></h2>
580
+ <table>\n#{os} </table>
581
+
582
+ EEOOSS
583
+
584
+ idxhtm = open("#{dir}/index.html"){|f| f.read}
585
+ idxhtm =~ /([ \t]*<h2>\s*<a name="applications">\s*Applications.*<\/html>\s*)/m
586
+ ap = $1 || "</body>\n</html>\n"
587
+ r = idxhtm.sub(/[ \t]*<h2>\s*<a name="controls">\s*Controls.*<\/html>\s*/m, '')
588
+ open(File.dirname(__FILE__)+'/index.html', 'w'){|f| f.write(r+s+ap)}
589
+ WRBDoc.wrb_show_doc('index.html')
590
+ else
591
+ idxhtm = open("#{dir}/index.html"){|f| f.read}
592
+ r = idxhtm.sub(/<h2>\s*<a name="controls">\s*Controls.*<\/html>/m, '')
593
+ STDERR.puts r + s
594
+ end
595
+ end
596
+ end if __FILE__==$0