wxruby3 0.9.2 → 0.9.4

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 (379) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +35 -29
  3. data/README.md +24 -15
  4. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  5. data/ext/wxruby3/include/wxruby-Config.h +23 -5
  6. data/ext/wxruby3/include/wxruby-Persistence.h +79 -0
  7. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  8. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  9. data/ext/wxruby3/swig/custom/director.swg +8 -0
  10. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  11. data/ext/wxruby3/swig/memory_management.i +6 -0
  12. data/lib/wx/core/bitmap_combobox.rb +17 -21
  13. data/lib/wx/core/book_ctrl_base.rb +16 -0
  14. data/lib/wx/core/combobox.rb +13 -3
  15. data/lib/wx/core/config.rb +454 -83
  16. data/lib/wx/core/controlwithitems.rb +40 -130
  17. data/lib/wx/core/enum.rb +17 -1
  18. data/lib/wx/core/event.rb +6 -1
  19. data/lib/wx/core/evthandler.rb +8 -2
  20. data/lib/wx/core/generic_validator.rb +312 -0
  21. data/lib/wx/core/listbox.rb +2 -2
  22. data/lib/wx/core/log.rb +1 -1
  23. data/lib/wx/core/notebook.rb +10 -8
  24. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  25. data/lib/wx/core/peristent_object.rb +15 -0
  26. data/lib/wx/core/persistence_manager.rb +39 -0
  27. data/lib/wx/core/persistent_window.rb +16 -0
  28. data/lib/wx/core/size.rb +4 -0
  29. data/lib/wx/core/sizer.rb +1 -2
  30. data/lib/wx/core/standard_paths.rb +22 -0
  31. data/lib/wx/core/text_entry.rb +4 -1
  32. data/lib/wx/core/top_level_window.rb +16 -0
  33. data/lib/wx/core/treebook.rb +18 -0
  34. data/lib/wx/core/validator.rb +70 -5
  35. data/lib/wx/core/window.rb +3 -7
  36. data/lib/wx/core.rb +4 -0
  37. data/lib/wx/doc/art_locator.rb +1 -0
  38. data/lib/wx/doc/book_ctrl_base.rb +19 -0
  39. data/lib/wx/doc/comboctrl.rb +18 -0
  40. data/lib/wx/doc/config.rb +101 -41
  41. data/lib/wx/doc/controlwithitems.rb +16 -0
  42. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  43. data/lib/wx/doc/editable_listbox.rb +44 -0
  44. data/lib/wx/doc/enum.rb +15 -0
  45. data/lib/wx/doc/event.rb +12 -0
  46. data/lib/wx/doc/extra/12_client_data.md +89 -0
  47. data/lib/wx/doc/extra/13_validators.md +139 -0
  48. data/lib/wx/doc/extra/14_config.md +101 -0
  49. data/lib/wx/doc/extra/15_persistence.md +148 -0
  50. data/lib/wx/doc/gdi_common.rb +4 -0
  51. data/lib/wx/doc/generic_validator.rb +95 -0
  52. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  53. data/lib/wx/doc/num_validator.rb +387 -0
  54. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  55. data/lib/wx/doc/persistence_manager.rb +36 -0
  56. data/lib/wx/doc/persistent_object.rb +27 -0
  57. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  58. data/lib/wx/doc/static_bitmap.rb +25 -0
  59. data/lib/wx/doc/text_validator.rb +10 -0
  60. data/lib/wx/doc/top_level_window.rb +19 -0
  61. data/lib/wx/doc/treebook.rb +6 -1
  62. data/lib/wx/doc/validator.rb +113 -0
  63. data/lib/wx/doc/window.rb +30 -0
  64. data/lib/wx/html/simple_html_listbox.rb +24 -91
  65. data/lib/wx/keyword_defs.rb +34 -2
  66. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  67. data/lib/wx/version.rb +1 -1
  68. data/rakelib/build.rb +1 -1
  69. data/rakelib/lib/config/mingw.rb +12 -0
  70. data/rakelib/lib/core/include/client_data.inc +65 -0
  71. data/rakelib/lib/core/include/funcall.inc +1 -1
  72. data/rakelib/lib/core/package.rb +39 -3
  73. data/rakelib/lib/core/parameter.rb +1 -1
  74. data/rakelib/lib/core/spec.rb +10 -0
  75. data/rakelib/lib/core/spec_helper.rb +8 -2
  76. data/rakelib/lib/director/app.rb +18 -0
  77. data/rakelib/lib/director/app_traits.rb +3 -1
  78. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  79. data/rakelib/lib/director/combobox.rb +22 -0
  80. data/rakelib/lib/director/comboctrl.rb +1 -55
  81. data/rakelib/lib/director/config_base.rb +490 -19
  82. data/rakelib/lib/director/ctrl_with_items.rb +88 -21
  83. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  84. data/rakelib/lib/director/editable_listbox.rb +30 -0
  85. data/rakelib/lib/director/event.rb +102 -12
  86. data/rakelib/lib/director/event_filter.rb +1 -1
  87. data/rakelib/lib/director/event_handler.rb +3 -2
  88. data/rakelib/lib/director/event_loop.rb +1 -1
  89. data/rakelib/lib/director/file_dialog_customize_hook.rb +2 -2
  90. data/rakelib/lib/director/functions.rb +4 -2
  91. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  92. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  93. data/rakelib/lib/director/grid_cell_editor.rb +1 -3
  94. data/rakelib/lib/director/grid_cell_renderer.rb +1 -3
  95. data/rakelib/lib/director/header_ctrl.rb +9 -1
  96. data/rakelib/lib/director/html_listbox.rb +97 -22
  97. data/rakelib/lib/director/num_validator.rb +495 -0
  98. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  99. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  100. data/rakelib/lib/director/persistence_manager.rb +410 -0
  101. data/rakelib/lib/director/persistent_object.rb +70 -0
  102. data/rakelib/lib/director/persistent_window.rb +73 -0
  103. data/rakelib/lib/director/pgproperty.rb +3 -29
  104. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  105. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  106. data/rakelib/lib/director/sizer.rb +15 -4
  107. data/rakelib/lib/director/sizer_item.rb +13 -0
  108. data/rakelib/lib/director/static_bitmap.rb +32 -0
  109. data/rakelib/lib/director/text_entry.rb +5 -1
  110. data/rakelib/lib/director/text_validator.rb +124 -13
  111. data/rakelib/lib/director/toggle_button.rb +1 -0
  112. data/rakelib/lib/director/top_level_window.rb +0 -2
  113. data/rakelib/lib/director/tree_ctrl.rb +35 -0
  114. data/rakelib/lib/director/utils.rb +16 -2
  115. data/rakelib/lib/director/validator.rb +196 -21
  116. data/rakelib/lib/director/window.rb +16 -2
  117. data/rakelib/lib/extractor/function.rb +2 -1
  118. data/rakelib/lib/generate/analyzer.rb +44 -44
  119. data/rakelib/lib/generate/doc.rb +11 -5
  120. data/rakelib/lib/specs/interfaces.rb +5 -0
  121. data/rakelib/lib/swig_runner.rb +55 -9
  122. data/rakelib/lib/typemap/client_data.rb +67 -0
  123. data/rakelib/lib/typemap/common.rb +3 -3
  124. data/rakelib/lib/typemap/config.rb +8 -0
  125. data/rakelib/lib/typemap/datetime.rb +1 -1
  126. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  127. data/samples/aui/aui.rb +1237 -1233
  128. data/samples/calendar/calendar.rb +293 -289
  129. data/samples/controls/get_item_sample.rb +83 -79
  130. data/samples/controls/htlbox.rb +331 -327
  131. data/samples/dialogs/dialogs.rb +682 -694
  132. data/samples/dialogs/wizard.rb +52 -55
  133. data/samples/dragdrop/dragdrop.rb +146 -142
  134. data/samples/drawing/bitmap.rb +29 -26
  135. data/samples/drawing/bitmap_image.rb +84 -80
  136. data/samples/drawing/graphics_drawing.rb +209 -205
  137. data/samples/drawing/image_prt.rb +344 -340
  138. data/samples/drawing/maths_images.rb +18 -1
  139. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  140. data/samples/etc/caret.rb +306 -0
  141. data/samples/etc/miniframe.rb +65 -60
  142. data/samples/etc/sash.rb +109 -105
  143. data/samples/etc/scrollwin.rb +86 -80
  144. data/samples/etc/system_settings.rb +216 -209
  145. data/samples/event/activation.rb +72 -67
  146. data/samples/event/event.rb +160 -153
  147. data/samples/event/threaded.rb +8 -1
  148. data/samples/event/update_ui_event.rb +67 -60
  149. data/samples/grid/grid.rb +188 -181
  150. data/samples/grid/gridtablebase.rb +136 -129
  151. data/samples/html/html.rb +208 -204
  152. data/samples/mdi/mdi.rb +59 -54
  153. data/samples/minimal/minimal.rb +54 -51
  154. data/samples/minimal/nothing.rb +1 -0
  155. data/samples/printing/printing.rb +367 -377
  156. data/samples/printing/printing2.rb +203 -198
  157. data/samples/propgrid/propgrid.rb +2312 -2308
  158. data/samples/propgrid/propgrid_minimal.rb +57 -50
  159. data/samples/ribbon/ribbon.rb +780 -774
  160. data/samples/sampler/ext.rb +0 -33
  161. data/samples/sampler/sample.rb +4 -9
  162. data/samples/sampler.rb +1 -1
  163. data/samples/splash/splash.rb +118 -116
  164. data/samples/text/rich_textctrl.rb +207 -201
  165. data/samples/text/richtext.rb +1409 -1405
  166. data/samples/text/scintilla.rb +137 -128
  167. data/samples/text/textctrl.rb +89 -83
  168. data/samples/text/unicode.rb +175 -168
  169. data/samples/treectrl/treectrl.rb +1430 -1426
  170. data/samples/widgets/activityindicator.rb +95 -0
  171. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  172. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  173. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  174. data/samples/widgets/art/widgets/button.xpm +54 -0
  175. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  176. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  177. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  178. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  179. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  180. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  181. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  182. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  183. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  184. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  185. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  186. data/samples/widgets/art/widgets/header.xpm +54 -0
  187. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  188. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  189. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  190. data/samples/widgets/art/widgets/native.xpm +81 -0
  191. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  192. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  193. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  194. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  195. data/samples/widgets/art/widgets/slider.xpm +54 -0
  196. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  197. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  198. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  199. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  200. data/samples/widgets/art/widgets/text.xpm +54 -0
  201. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  202. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  203. data/samples/widgets/art/widgets/toucan.png +0 -0
  204. data/samples/widgets/bmpcombobox.rb +651 -0
  205. data/samples/widgets/button.rb +462 -0
  206. data/samples/widgets/checkbox.rb +211 -0
  207. data/samples/widgets/choice.rb +287 -0
  208. data/samples/widgets/clrpicker.rb +156 -0
  209. data/samples/widgets/combobox.rb +516 -0
  210. data/samples/widgets/datepick.rb +215 -0
  211. data/samples/widgets/dirctrl.rb +265 -0
  212. data/samples/widgets/dirpicker.rb +158 -0
  213. data/samples/widgets/editlbox.rb +122 -0
  214. data/samples/widgets/filectrl.rb +216 -0
  215. data/samples/widgets/filepicker.rb +214 -0
  216. data/samples/widgets/fontpicker.rb +135 -0
  217. data/samples/widgets/gauge.rb +311 -0
  218. data/samples/widgets/headerctrl.rb +236 -0
  219. data/samples/widgets/hyperlink.rb +203 -0
  220. data/samples/widgets/itemcontainer.rb +185 -0
  221. data/samples/widgets/listbox.rb +473 -0
  222. data/samples/widgets/notebook.rb +488 -0
  223. data/samples/widgets/odcombobox.rb +608 -0
  224. data/samples/widgets/radiobox.rb +328 -0
  225. data/samples/widgets/searchctrl.rb +159 -0
  226. data/samples/widgets/slider.rb +594 -0
  227. data/samples/widgets/spinbtn.rb +443 -0
  228. data/samples/widgets/statbmp.rb +130 -0
  229. data/samples/widgets/static.rb +436 -0
  230. data/samples/widgets/textctrl.rb +700 -0
  231. data/samples/widgets/timepick.rb +148 -0
  232. data/samples/widgets/tn_widgets.png +0 -0
  233. data/samples/widgets/toggle.rb +385 -0
  234. data/samples/widgets/widgets.rb +1229 -0
  235. data/samples/xrc/custom_xrc_sample.rb +47 -41
  236. data/samples/xrc/xrc_sample.rb +53 -47
  237. data/tests/test_config.rb +207 -42
  238. data/tests/test_event_handling.rb +52 -34
  239. data/tests/test_events.rb +7 -0
  240. data/tests/test_item_data.rb +24 -0
  241. data/tests/test_persistence.rb +142 -0
  242. data/tests/test_sizer.rb +44 -1
  243. data/tests/test_validators.rb +805 -0
  244. metadata +109 -138
  245. data/lib/wx/core/choice.rb +0 -14
  246. data/lib/wx/core/combo_ctrl.rb +0 -110
  247. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  248. data/samples/bigdemo/About.rbw +0 -39
  249. data/samples/bigdemo/ColorPanel.rbw +0 -23
  250. data/samples/bigdemo/GridSimple.rbw +0 -78
  251. data/samples/bigdemo/MDIDemo.rbw +0 -57
  252. data/samples/bigdemo/PopupMenu.rbw +0 -146
  253. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  254. data/samples/bigdemo/Sizers.rbw +0 -541
  255. data/samples/bigdemo/bigdemo.rb +0 -817
  256. data/samples/bigdemo/demoTemplate.rbw +0 -33
  257. data/samples/bigdemo/helpfile.htb +0 -0
  258. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  259. data/samples/bigdemo/icons/Test 015.png +0 -0
  260. data/samples/bigdemo/icons/choice.bmp +0 -0
  261. data/samples/bigdemo/icons/combo.bmp +0 -0
  262. data/samples/bigdemo/icons/combo.xpm +0 -27
  263. data/samples/bigdemo/icons/copy.xpm +0 -25
  264. data/samples/bigdemo/icons/cut.xpm +0 -24
  265. data/samples/bigdemo/icons/gauge.bmp +0 -0
  266. data/samples/bigdemo/icons/gauge.xpm +0 -27
  267. data/samples/bigdemo/icons/help.xpm +0 -25
  268. data/samples/bigdemo/icons/list.bmp +0 -0
  269. data/samples/bigdemo/icons/list.xpm +0 -27
  270. data/samples/bigdemo/icons/mondrian.ico +0 -0
  271. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  272. data/samples/bigdemo/icons/new.xpm +0 -24
  273. data/samples/bigdemo/icons/ogl.ico +0 -0
  274. data/samples/bigdemo/icons/ogl.xpm +0 -45
  275. data/samples/bigdemo/icons/open.xpm +0 -26
  276. data/samples/bigdemo/icons/paste.bmp +0 -0
  277. data/samples/bigdemo/icons/paste.xpm +0 -38
  278. data/samples/bigdemo/icons/pointy.png +0 -0
  279. data/samples/bigdemo/icons/preview.xpm +0 -26
  280. data/samples/bigdemo/icons/print.xpm +0 -26
  281. data/samples/bigdemo/icons/radio.bmp +0 -0
  282. data/samples/bigdemo/icons/radio.xpm +0 -27
  283. data/samples/bigdemo/icons/robert.xpm +0 -415
  284. data/samples/bigdemo/icons/sashtest.ico +0 -0
  285. data/samples/bigdemo/icons/save.xpm +0 -25
  286. data/samples/bigdemo/icons/smiles.bmp +0 -0
  287. data/samples/bigdemo/icons/smiles.xpm +0 -39
  288. data/samples/bigdemo/icons/smiley.ico +0 -0
  289. data/samples/bigdemo/icons/smiley.xpm +0 -42
  290. data/samples/bigdemo/icons/stattext.xpm +0 -24
  291. data/samples/bigdemo/icons/test2.bmp +0 -0
  292. data/samples/bigdemo/icons/test2.png +0 -0
  293. data/samples/bigdemo/icons/test2.xpm +0 -79
  294. data/samples/bigdemo/icons/text.bmp +0 -0
  295. data/samples/bigdemo/icons/text.xpm +0 -27
  296. data/samples/bigdemo/icons/tog1.bmp +0 -0
  297. data/samples/bigdemo/icons/tog1.xpm +0 -38
  298. data/samples/bigdemo/icons/tog2.bmp +0 -0
  299. data/samples/bigdemo/icons/tog2.xpm +0 -38
  300. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  301. data/samples/bigdemo/icons/wxwin.ico +0 -0
  302. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  303. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  304. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  305. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  306. data/samples/bigdemo/run.rb +0 -98
  307. data/samples/bigdemo/tips.txt +0 -7
  308. data/samples/bigdemo/utils.rb +0 -20
  309. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  310. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  311. data/samples/bigdemo/wxButton.rbw +0 -64
  312. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  313. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  314. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  315. data/samples/bigdemo/wxChoice.rbw +0 -47
  316. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  317. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  318. data/samples/bigdemo/wxComboBox.rbw +0 -77
  319. data/samples/bigdemo/wxCursor.rbw +0 -136
  320. data/samples/bigdemo/wxDialog.rbw +0 -74
  321. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  322. data/samples/bigdemo/wxDragImage.rbw +0 -70
  323. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  324. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  325. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  326. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  327. data/samples/bigdemo/wxFrame.rbw +0 -53
  328. data/samples/bigdemo/wxGauge.rbw +0 -65
  329. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  330. data/samples/bigdemo/wxGrid.rbw +0 -66
  331. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  332. data/samples/bigdemo/wxListBox.rbw +0 -140
  333. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  334. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  335. data/samples/bigdemo/wxMenu.rbw +0 -247
  336. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  337. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  338. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  339. data/samples/bigdemo/wxNotebook.rbw +0 -136
  340. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  341. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  342. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  343. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  344. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  345. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  346. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  347. data/samples/bigdemo/wxSlider.rbw +0 -42
  348. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  349. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  350. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  351. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  352. data/samples/bigdemo/wxStaticText.rbw +0 -55
  353. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  354. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  355. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  356. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  357. data/samples/bigdemo/wxToolBar.rbw +0 -131
  358. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  359. data/samples/caret/caret.rb +0 -298
  360. data/samples/caret/mondrian.xpm +0 -44
  361. data/samples/controls/books.rb +0 -189
  362. data/samples/controls/choice.xpm +0 -27
  363. data/samples/controls/combo.xpm +0 -27
  364. data/samples/controls/controls.rb +0 -1099
  365. data/samples/controls/gauge.xpm +0 -27
  366. data/samples/controls/list.xpm +0 -27
  367. data/samples/controls/mondrian.ico +0 -0
  368. data/samples/controls/mondrian.xpm +0 -44
  369. data/samples/controls/radio.xpm +0 -27
  370. data/samples/controls/stattext.xpm +0 -24
  371. data/samples/controls/test2.bmp +0 -0
  372. data/samples/controls/text.xpm +0 -27
  373. data/samples/controls/tn_books.png +0 -0
  374. data/samples/controls/tn_controls.png +0 -0
  375. data/samples/etc/choice.rb +0 -87
  376. data/samples/etc/tn_choice.png +0 -0
  377. data/samples/text/mondrian.ico +0 -0
  378. data/samples/text/mondrian.xpm +0 -44
  379. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -0,0 +1,473 @@
1
+ # Copyright (c) 2023 M.J.N. Corino = self.next_id The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+ #
5
+ # Adapted for wxRuby from wxWidgets widgets sample
6
+ # Copyright (c) 2001 Vadim Zeitlin
7
+
8
+ require_relative './itemcontainer'
9
+
10
+ module Widgets
11
+
12
+ module ListBox
13
+
14
+ class ListBoxPage < ItemContainer::Page
15
+
16
+ module ID
17
+ include Wx::IDHelper
18
+
19
+ Reset = self.next_id(Widgets::Frame::ID::Last)
20
+ Add = self.next_id
21
+ AddText = self.next_id
22
+ AddSeveral = self.next_id
23
+ AddMany = self.next_id
24
+ Clear = self.next_id
25
+ Change = self.next_id
26
+ ChangeText = self.next_id
27
+ Delete = self.next_id
28
+ DeleteText = self.next_id
29
+ DeleteSel = self.next_id
30
+ Listbox = self.next_id
31
+ EnsureVisible = self.next_id
32
+ EnsureVisibleText = self.next_id
33
+ ContainerTests = self.next_id
34
+ GetTopItem = self.next_id
35
+ GetCountPerPage = self.next_id
36
+ MoveUp = self.next_id
37
+ MoveDown = self.next_id
38
+
39
+ # the selection mode
40
+ LboxSel_Single = 0
41
+ LboxSel_Extended = 1
42
+ LboxSel_Multiple = 2
43
+
44
+ # the list type
45
+ LboxType_ListBox = 0
46
+ LboxType_CheckListBox = 1
47
+ LboxType_RearrangeList = 2
48
+ end
49
+
50
+ Info = Widgets::PageInfo.new(self, 'Listbox',
51
+ NATIVE_CTRLS |
52
+ WITH_ITEMS_CTRLS)
53
+
54
+ def initialize(book, images)
55
+ super(book, images, :listbox)
56
+
57
+ # init everything
58
+ @radioSelMode = nil
59
+ @radioListType = nil
60
+
61
+ @chkVScroll =
62
+ @chkHScroll =
63
+ @chkSort =
64
+ @chkOwnerDraw = nil
65
+
66
+ @lbox = nil
67
+ @sizerLbox = nil
68
+ end
69
+
70
+ def get_widget
71
+ @lbox
72
+ end
73
+
74
+ def get_container
75
+ @lbox
76
+ end
77
+
78
+ def recreate_widget
79
+ create_lbox
80
+ end
81
+
82
+ # lazy creation of the content
83
+ def create_content
84
+ # What we create here is a frame having 3 panes: style pane is the
85
+ # leftmost one, in the middle the pane with buttons allowing to perform
86
+ # miscellaneous listbox operations and the pane containing the listbox
87
+ # itself to the right
88
+ sizerTop = Wx::HBoxSizer.new
89
+
90
+ # left pane
91
+ sizerLeft = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&Set listbox parameters')
92
+ sizerLeftBox = sizerLeft.get_static_box
93
+
94
+ @chkVScroll = create_check_box_and_add_to_sizer(sizerLeft,
95
+ 'Always show &vertical scrollbar',
96
+ Wx::ID_ANY, sizerLeftBox)
97
+ @chkHScroll = create_check_box_and_add_to_sizer(sizerLeft,
98
+ 'Show &horizontal scrollbar',
99
+ Wx::ID_ANY, sizerLeftBox)
100
+ @chkSort = create_check_box_and_add_to_sizer(sizerLeft,'&Sort items', Wx::ID_ANY, sizerLeftBox)
101
+ @chkOwnerDraw = create_check_box_and_add_to_sizer(sizerLeft,'&Owner drawn', Wx::ID_ANY, sizerLeftBox)
102
+
103
+ modes = %w[single extended multiple]
104
+ @radioSelMode = Wx::RadioBox.new(sizerLeftBox, Wx::ID_ANY, 'Selection &mode:',
105
+ choices: modes,
106
+ major_dimension: 1,
107
+ style: Wx::RA_SPECIFY_COLS)
108
+
109
+ listTypes = ['list box']
110
+ listTypes << 'check list box' if Wx.has_feature?(:USE_CHECKLISTBOX)
111
+ listTypes << 'rearrange list' if Wx.has_feature?(:USE_REARRANGECTRL)
112
+ @radioListType = Wx::RadioBox.new(sizerLeftBox, Wx::ID_ANY, '&List type:',
113
+ choices: listTypes,
114
+ major_dimension: 1,
115
+ style: Wx::RA_SPECIFY_COLS)
116
+
117
+ sizerLeft.add(5, 5, 0, Wx::GROW | Wx::ALL, 5) # spacer
118
+ sizerLeft.add(@radioSelMode, 0, Wx::GROW | Wx::ALL, 5)
119
+
120
+ sizerLeft.add(5, 5, 0, Wx::GROW | Wx::ALL, 5) # spacer
121
+ sizerLeft.add(@radioListType, 0, Wx::GROW | Wx::ALL, 5)
122
+
123
+ btn = Wx::Button.new(sizerLeftBox, ID::Reset, '&Reset')
124
+ sizerLeft.add(btn, 0, Wx::ALIGN_CENTRE_HORIZONTAL | Wx::ALL, 15)
125
+
126
+ # middle pane
127
+ sizerMiddle = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&Change listbox contents')
128
+ sizerMiddleBox = sizerMiddle.get_static_box
129
+
130
+ sizerRow = Wx::HBoxSizer.new
131
+ btn = Wx::Button.new(sizerMiddleBox, ID::Add, '&Add this string')
132
+ @textAdd = Wx::TextCtrl.new(sizerMiddleBox, ID::AddText, "test item \t0")
133
+ sizerRow.add(btn, 0, Wx::RIGHT, 5)
134
+ sizerRow.add(@textAdd, 1, Wx::LEFT, 5)
135
+ sizerMiddle.add(sizerRow, 0, Wx::ALL | Wx::GROW, 5)
136
+
137
+ btn = Wx::Button.new(sizerMiddleBox, ID::AddSeveral, '&Insert a few strings')
138
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
139
+
140
+ btn = Wx::Button.new(sizerMiddleBox, ID::AddMany, 'Add &many strings')
141
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
142
+
143
+ sizerRow = Wx::HBoxSizer.new
144
+ btn = Wx::Button.new(sizerMiddleBox, ID::Change, 'C&hange current')
145
+ @textChange = Wx::TextCtrl.new(sizerMiddleBox, ID::ChangeText, '')
146
+ sizerRow.add(btn, 0, Wx::RIGHT, 5)
147
+ sizerRow.add(@textChange, 1, Wx::LEFT, 5)
148
+ sizerMiddle.add(sizerRow, 0, Wx::ALL | Wx::GROW, 5)
149
+
150
+ sizerRow = Wx::HBoxSizer.new
151
+ btn = Wx::Button.new(sizerMiddleBox, ID::EnsureVisible, 'Make item &visible')
152
+ @textEnsureVisible = Wx::TextCtrl.new(sizerMiddleBox, ID::EnsureVisibleText, '')
153
+ sizerRow.add(btn, 0, Wx::RIGHT, 5)
154
+ sizerRow.add(@textEnsureVisible, 1, Wx::LEFT, 5)
155
+ sizerMiddle.add(sizerRow, 0, Wx::ALL | Wx::GROW, 5)
156
+
157
+ sizerRow = Wx::HBoxSizer.new
158
+ btn = Wx::Button.new(sizerMiddleBox, ID::Delete, '&Delete this item')
159
+ @textDelete = Wx::TextCtrl.new(sizerMiddleBox, ID::DeleteText, '')
160
+ sizerRow.add(btn, 0, Wx::RIGHT, 5)
161
+ sizerRow.add(@textDelete, 1, Wx::LEFT, 5)
162
+ sizerMiddle.add(sizerRow, 0, Wx::ALL | Wx::GROW, 5)
163
+
164
+ btn = Wx::Button.new(sizerMiddleBox, ID::DeleteSel, 'Delete &selection')
165
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
166
+
167
+ btn = Wx::Button.new(sizerMiddleBox, ID::Clear, '&Clear')
168
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
169
+
170
+ btn = Wx::Button.new(sizerMiddleBox, ID::MoveUp, 'Move item &up')
171
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
172
+
173
+ btn = Wx::Button.new(sizerMiddleBox, ID::MoveDown, 'Move item &down')
174
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
175
+
176
+ btn = Wx::Button.new(sizerMiddleBox, ID::GetTopItem, 'Get top item')
177
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
178
+
179
+ btn = Wx::Button.new(sizerMiddleBox, ID::GetCountPerPage, 'Get count per page')
180
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
181
+
182
+ btn = Wx::Button.new(sizerMiddleBox, ID::ContainerTests, 'Run &tests')
183
+ sizerMiddle.add(btn, 0, Wx::ALL | Wx::GROW, 5)
184
+
185
+ # right pane
186
+ sizerRight = Wx::VBoxSizer.new
187
+ @lbox = Wx::ListBox.new(self, ID::Listbox,
188
+ choices: [],
189
+ style: Wx::LB_HSCROLL)
190
+ sizerRight.add(@lbox, 1, Wx::GROW | Wx::ALL, 5)
191
+ sizerRight.set_min_size(150, 0)
192
+ @sizerLbox = sizerRight # save it to modify it later
193
+
194
+ # the 3 panes panes compose the window
195
+ sizerTop.add(sizerLeft, 0, Wx::GROW | (Wx::ALL & ~Wx::LEFT), 10)
196
+ sizerTop.add(sizerMiddle, 1, Wx::GROW | Wx::ALL, 10)
197
+ sizerTop.add(sizerRight, 1, Wx::GROW | (Wx::ALL & ~Wx::RIGHT), 10)
198
+
199
+ # final initializations
200
+ reset
201
+
202
+ set_sizer(sizerTop)
203
+
204
+ # connect event handlers
205
+ evt_button(ID::Reset, :on_button_reset)
206
+ evt_button(ID::Change, :on_button_change)
207
+ evt_button(ID::Delete, :on_button_delete)
208
+ evt_button(ID::DeleteSel, :on_button_delete_sel)
209
+ evt_button(ID::EnsureVisible, :on_button_ensure_visible)
210
+ evt_button(ID::Clear, :on_button_clear)
211
+ evt_button(ID::Add, :on_button_add)
212
+ evt_button(ID::AddSeveral, :on_button_add_several)
213
+ evt_button(ID::AddMany, :on_button_add_many)
214
+ evt_button(ID::ContainerTests, :on_button_test_item_container)
215
+ evt_button(ID::GetTopItem, :on_button_top_item)
216
+ evt_button(ID::GetCountPerPage, :on_button_page_count)
217
+ evt_button(ID::MoveUp, :on_button_move_up)
218
+ evt_button(ID::MoveDown, :on_button_move_down)
219
+
220
+ evt_text_enter(ID::AddText, :on_button_add)
221
+ evt_text_enter(ID::DeleteText, :on_button_delete)
222
+ evt_text_enter(ID::EnsureVisibleText, :on_button_ensure_visible)
223
+
224
+ evt_update_ui(ID::Reset, :on_update_ui_reset_button)
225
+ evt_update_ui(ID::AddSeveral, :on_update_ui_add_several)
226
+ evt_update_ui(ID::Clear, :on_update_ui_clear_button)
227
+ evt_update_ui(ID::DeleteText, :on_update_ui_clear_button)
228
+ evt_update_ui(ID::Delete, :on_update_ui_delete_button)
229
+ evt_update_ui(ID::Change, :on_update_ui_delete_sel_button)
230
+ evt_update_ui(ID::ChangeText, :on_update_ui_delete_sel_button)
231
+ evt_update_ui(ID::DeleteSel, :on_update_ui_delete_sel_button)
232
+ evt_update_ui(ID::EnsureVisible, :on_update_ui_ensure_visible_button)
233
+ evt_update_ui_range(ID::MoveUp, ID::MoveDown, :on_update_ui_move_buttons)
234
+
235
+ evt_listbox(ID::Listbox, :on_listbox)
236
+ evt_listbox_dclick(ID::Listbox, :on_listbox_d_click)
237
+ evt_checklistbox(ID::Listbox, :on_check_listbox)
238
+
239
+ evt_checkbox(Wx::ID_ANY, :on_check_or_radio_box)
240
+ evt_radiobox(Wx::ID_ANY, :on_check_or_radio_box)
241
+ end
242
+
243
+ protected
244
+
245
+ # event handlers
246
+ def on_button_reset(_event)
247
+ reset
248
+
249
+ create_lbox
250
+ end
251
+
252
+ def on_button_change(_event)
253
+ selections = @lbox.get_selections
254
+ s = @textChange.value
255
+ selections.each { |sel| @lbox.set_string(sel, s) }
256
+ end
257
+
258
+ def on_button_ensure_visible(_event)
259
+ return unless (n = get_valid_index_from_text(@textEnsureVisible))
260
+ @lbox.ensure_visible(n)
261
+ end
262
+
263
+ def on_button_delete(_event)
264
+ return unless (n = get_valid_index_from_text(@textDelete))
265
+ @lbox.delete(n)
266
+ end
267
+
268
+ def on_button_delete_sel(_event)
269
+ selections = @lbox.get_selections
270
+ selections.reverse.each { |sel| @lbox.delete(sel) }
271
+ end
272
+
273
+ def on_button_clear(_event)
274
+ @lbox.clear
275
+ end
276
+
277
+ class << self
278
+ def s_item(v=nil)
279
+ @s_item = v unless v.nil?
280
+ @s_item ||= 0
281
+ end
282
+ end
283
+
284
+ def on_button_add(_event)
285
+ s = @textAdd.value
286
+ unless @textAdd.is_modified
287
+ # update the default string
288
+ i = self.class.s_item(self.class.s_item+1)
289
+ @textAdd.set_value("test item #{i}")
290
+ end
291
+
292
+ @lbox.append(s)
293
+ end
294
+
295
+ def on_button_add_several(event)
296
+ items = [
297
+ 'First',
298
+ 'another one',
299
+ 'and the last (very very very very very very very very very very long) one'
300
+ ]
301
+ @lbox.insert(items, 0)
302
+ end
303
+
304
+ def on_button_add_many(event)
305
+ # "many" means 1000 here
306
+ 1000.times { |n| @lbox.append("item ##{n}") }
307
+ end
308
+
309
+ def on_button_top_item(_event)
310
+ item = @lbox.get_top_item
311
+ Wx.log_message("Topmost visible item is: #{item}")
312
+ end
313
+
314
+ def on_button_page_count(_event)
315
+ count = @lbox.get_count_per_page
316
+ Wx.log_message("#{count} items fit into this listbox.")
317
+ end
318
+
319
+ def on_button_move_up(_evt)
320
+ if Wx.has_feature?(:USE_REARRANGECTRL)
321
+ @lbox.move_current_up
322
+ end # wxUSE_REARRANGECTRL
323
+ end
324
+
325
+ def on_button_move_down(_evt)
326
+ if Wx.has_feature?(:USE_REARRANGECTRL)
327
+ @lbox.move_current_down
328
+ end # wxUSE_REARRANGECTRL
329
+ end
330
+
331
+ def on_listbox(event)
332
+ sel = event.selection
333
+ @textDelete.set_value(sel.to_s)
334
+
335
+ if event.is_selection
336
+ Wx.log_message("Listbox item #{sel} selected")
337
+ else
338
+ Wx.log_message("Listbox item #{sel} deselected")
339
+ end
340
+ end
341
+
342
+ def on_listbox_d_click(event)
343
+ Wx.log_message('Listbox item %d double clicked', event.int)
344
+ end
345
+
346
+ def on_check_listbox(event)
347
+ Wx.log_message('Listbox item %d toggled', event.int)
348
+ end
349
+
350
+ def on_check_or_radio_box(event)
351
+ create_lbox
352
+ end
353
+
354
+ def on_update_ui_add_several(event)
355
+ event.enable(@lbox.get_window_style.nobits?(Wx::LB_SORT))
356
+ end
357
+
358
+ def on_update_ui_clear_button(event)
359
+ event.enable(@lbox.count != 0)
360
+ end
361
+
362
+ def on_update_ui_ensure_visible_button(event)
363
+ event.enable(!!get_valid_index_from_text(@textEnsureVisible))
364
+ end
365
+
366
+ def on_update_ui_delete_button(event)
367
+ event.enable(!!get_valid_index_from_text(@textDelete))
368
+ end
369
+
370
+ def on_update_ui_delete_sel_button(event)
371
+ event.enable(!@lbox.get_selections.empty?)
372
+ end
373
+
374
+ def on_update_ui_reset_button(event)
375
+ event.enable((@radioSelMode.selection != ID::LboxSel_Single) ||
376
+ @chkSort.value ||
377
+ @chkOwnerDraw.value ||
378
+ !@chkHScroll.value ||
379
+ @chkVScroll.value)
380
+ end
381
+
382
+ def on_update_ui_move_buttons(evt)
383
+ evt.enable(@radioListType.selection == ID::LboxType_RearrangeList)
384
+ end
385
+
386
+ # reset the listbox parameters
387
+ def reset
388
+ @radioSelMode.set_selection(ID::LboxSel_Single)
389
+ @radioListType.set_selection(ID::LboxType_ListBox)
390
+ @chkVScroll.set_value(false)
391
+ @chkHScroll.set_value(true)
392
+ @chkSort.set_value(false)
393
+ @chkOwnerDraw.set_value(false)
394
+ end
395
+
396
+ # (re)create the listbox
397
+ def create_lbox
398
+ flags = get_attrs.default_flags
399
+ case @radioSelMode.selection
400
+ when ID::LboxSel_Single
401
+ flags |= Wx::LB_SINGLE
402
+ when ID::LboxSel_Extended
403
+ flags |= Wx::LB_EXTENDED
404
+ when ID::LboxSel_Multiple
405
+ flags |= Wx::LB_MULTIPLE
406
+ else
407
+ ::Kernel.raise RuntimeError, 'unexpected radio box selection'
408
+ end
409
+
410
+ flags |= Wx::LB_ALWAYS_SB if @chkVScroll.value
411
+ flags |= Wx::LB_HSCROLL if @chkHScroll.value
412
+ flags |= Wx::LB_SORT if @chkSort.value
413
+ flags |= Wx::LB_OWNERDRAW if @chkOwnerDraw.value
414
+
415
+ items = []
416
+ order = []
417
+ if @lbox
418
+ items = @lbox.each_string.to_a
419
+
420
+ # order.reserve(count)
421
+ if Wx.has_feature?(:USE_CHECKLISTBOX) && @lbox.is_a?(Wx::CheckListBox)
422
+ items.size.times { |n| order << (@lbox.is_checked(n) ? n : ~n) }
423
+ else
424
+ items.size.times { |n| order << ~n }
425
+ end
426
+
427
+ @sizerLbox.detach(@lbox)
428
+ @lbox.destroy
429
+ end
430
+
431
+ case @radioListType.selection
432
+ when ID::LboxType_CheckListBox, ID::LboxType_RearrangeList
433
+ if Wx.has_feature?(:USE_CHECKLISTBOX) && @radioListType.selection == ID::LboxType_CheckListBox
434
+ @lbox = Wx::CheckListBox.new(self, ID::Listbox,
435
+ choices: items,
436
+ style: flags)
437
+ order.each_with_index { |o, n| @lbox.check(n, o >= 0) }
438
+ elsif Wx.has_feature?(:USE_REARRANGECTRL)
439
+ @lbox = Wx::RearrangeList.new(self, ID::Listbox,
440
+ order: order,
441
+ items: items,
442
+ style: flags)
443
+ end # wxUSE_REARRANGECTRL
444
+ #when ID::LboxType_ListBox
445
+ else
446
+ @lbox = Wx::ListBox.new(self, ID::Listbox,
447
+ choices: items,
448
+ style: flags)
449
+ end
450
+
451
+ @sizerLbox.add(@lbox, 1, Wx::GROW | Wx::ALL, 5)
452
+ @sizerLbox.layout
453
+ end
454
+
455
+ # read the value of a listbox item index from the given control, return
456
+ # nil if it's invalid
457
+ def get_valid_index_from_text(text)
458
+ return nil if text.value.empty?
459
+ idx = Integer(text.value) rescue -1
460
+ if idx < 0 || idx >= @lbox.count
461
+ Wx.log_warning("Invalid index \"#{text.value}\"")
462
+
463
+ return nil
464
+ end
465
+
466
+ idx
467
+ end
468
+
469
+ end
470
+
471
+ end
472
+
473
+ end