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
@@ -9,149 +9,59 @@
9
9
  # Superclass of a variety of controls that display lists of items (eg
10
10
  # Choice, ListBox, CheckListBox)
11
11
 
12
- class Wx::ControlWithItems
12
+ module Wx
13
13
 
14
- # Overload to provide Enumerator without block
15
- wx_each_string = instance_method :each_string
16
- define_method :each_string do |&block|
17
- if block
18
- wx_each_string.bind(self).call(&block)
19
- else
20
- ::Enumerator.new { |y| wx_each_string.bind(self).call { |ln| y << ln } }
21
- end
22
- end
23
-
24
- # We need to cache client data in Ruby variables as we cannot access items
25
- # during the GC mark phase as for some platforms (WXMSW at least) that would
26
- # involve calling methods that would break in that phase.
27
-
28
- def client_data_store
29
- @client_data ||= []
30
- end
31
- private :client_data_store
32
-
33
- wx_set_client_data = instance_method :set_client_data
34
- define_method :set_client_data do |item, data|
35
- item = item.to_i
36
- wx_set_client_data.bind(self).call(item, data)
37
- client_data_store[item] = data
38
- end
39
-
40
- def get_client_data(item)
41
- client_data_store[item.to_i]
42
- end
14
+ class ControlWithItems
43
15
 
44
- wx_append = instance_method :append
45
- define_method :append do |item, data=nil|
46
- itm_pos = -1
47
- if data
48
- if ::Array === item
49
- if !(::Array === data)
50
- ::Kernel.raise ::TypeError.new("Expected Array for argument 3")
51
- elsif data.size != item.size
52
- ::Kernel.raise ::ArgumentError.new("item and data array must be equal size")
53
- end
54
- if sorted?
55
- item.each_with_index do |itm, ix|
56
- itm_pos = wx_append.bind(self).call(itm, data[ix])
57
- client_data_store.insert(itm_pos, data[ix])
58
- end
59
- else
60
- offs = get_count
61
- itm_pos = wx_append.bind(self).call(item)
62
- item.size.times { |ix| set_client_data(offs+ix, data[ix]) }
63
- end
16
+ # make sure to honor the inherited common overloads
17
+ wx_get_client_object = instance_method :get_client_object
18
+ define_method :get_client_object do |*args|
19
+ if args.empty?
20
+ super()
64
21
  else
65
- itm_pos = wx_append.bind(self).call(item, data)
66
- client_data_store.insert(itm_pos, data)
22
+ wx_get_client_object.bind(self).call(*args)
67
23
  end
68
- else
69
- if ::Array === item
70
- if sorted?
71
- item.each_with_index do |itm, ix|
72
- itm_pos = wx_append.bind(self).call(itm, data[ix])
73
- client_data_store.insert(itm_pos, nil)
74
- end
75
- else
76
- itm_pos = wx_append.bind(self).call(item)
77
- client_data_store.concat(::Array.new(item.size))
78
- end
24
+ end
25
+ wx_set_client_object = instance_method :set_client_object
26
+ define_method :set_client_object do |*args|
27
+ if args.size < 2
28
+ super(*args)
79
29
  else
80
- itm_pos = wx_append.bind(self).call(item)
81
- client_data_store.insert(itm_pos, nil)
30
+ wx_set_client_object.bind(self).call(*args)
82
31
  end
83
32
  end
84
- itm_pos
85
- end
33
+ # redefine aliases
34
+ alias :client_object :get_client_object
35
+ alias :client_object= :set_client_object
86
36
 
87
- wx_insert = instance_method :insert
88
- define_method :insert do |item, pos, data=nil|
89
- itm_pos = -1
90
- if data
91
- if ::Array === item
92
- if !(::Array === data)
93
- ::Kernel.raise ::TypeError.new("Expected Array for argument 3")
94
- elsif data.size != item.size
95
- ::Kernel.raise ::ArgumentError.new("item and data array must be equal size")
96
- end
97
- if sorted?
98
- item.each_with_index do |itm, ix|
99
- itm_pos = wx_insert.bind(self).call(itm, data[ix])
100
- client_data_store.insert(itm_pos, data[ix])
101
- end
102
- else
103
- itm_pos = wx_insert.bind(self).call(item, pos)
104
- client_data_store.insert(pos, *::Array.new(item.size))
105
- item.size.times { |ix| set_client_data(pos+ix, data[ix]) }
106
- end
107
- else
108
- itm_pos = wx_insert.bind(self).call(item, pos, data)
109
- client_data_store.insert(itm_pos, data)
110
- end
111
- else
112
- if ::Array === item
113
- if sorted?
114
- item.each_with_index do |itm, ix|
115
- itm_pos = wx_insert.bind(self).call(itm)
116
- client_data_store.insert(itm_pos, nil)
117
- end
118
- else
119
- itm_pos = wx_insert.bind(self).call(item, pos)
120
- client_data_store.insert(pos, *::Array.new(item.size))
121
- end
37
+ alias :get_client_data :get_client_object
38
+ alias :set_client_data :set_client_object
39
+
40
+ alias :has_client_data :has_client_object_data
41
+ alias :has_client_data? :has_client_object_data
42
+
43
+ alias :get_item_data :get_client_object
44
+ alias :set_item_data :set_client_object
45
+
46
+ # Overload to provide Enumerator without block
47
+ wx_each_string = instance_method :each_string
48
+ define_method :each_string do |&block|
49
+ if block
50
+ wx_each_string.bind(self).call(&block)
122
51
  else
123
- itm_pos = wx_insert.bind(self).call(item, pos)
124
- client_data_store.insert(pos, nil)
52
+ ::Enumerator.new { |y| wx_each_string.bind(self).call { |ln| y << ln } }
125
53
  end
126
54
  end
127
- itm_pos
128
- end
129
55
 
130
- wx_set = instance_method :set
131
- define_method :set do |items, data=nil|
132
- if data
133
- if !(::Array === data)
134
- ::Kernel.raise ::TypeError.new("Expected Array for argument 2")
135
- elsif data.size != items.size
136
- ::Kernel.raise ::ArgumentError.new("items and data array must be equal size")
137
- end
138
- end
139
- wx_set.bind(self).call(items)
140
- client_data_store.clear
141
- if data
142
- items.each_with_index { |item, ix| set_client_data(item, data[ix]) }
143
- end
144
- end
56
+ # define these aliases so controls like ComboBox and OwnerDrawnComboBox and the like all end up with
57
+ # similar methods
145
58
 
146
- wx_clear = instance_method :clear
147
- define_method :clear do
148
- wx_clear.bind(self).call
149
- client_data_store.clear
150
- end
59
+ alias :get_list_selection :get_selection
60
+ alias :set_list_selection :set_selection
61
+
62
+ alias :get_list_string_selection :get_string_selection
63
+ alias :set_list_string_selection :set_string_selection
151
64
 
152
- wx_delete = instance_method :delete
153
- define_method :delete do |item|
154
- wx_delete.bind(self).call(item.to_i)
155
- client_data_store.slice!(item.to_i)
156
65
  end
66
+
157
67
  end
data/lib/wx/core/enum.rb CHANGED
@@ -29,11 +29,27 @@ class Wx::Enum
29
29
  end
30
30
 
31
31
  def !
32
- self.to_i == 0
32
+ to_i == 0
33
+ end
34
+
35
+ def allbits?(mask)
36
+ to_i.allbits?(mask)
37
+ end
38
+
39
+ def anybits?(mask)
40
+ to_i.anybits?(mask)
41
+ end
42
+
43
+ def nobits?(mask)
44
+ to_i.nobits?(mask)
33
45
  end
34
46
 
35
47
  def hash
36
48
  @value.hash
37
49
  end
38
50
 
51
+ def to_s
52
+ to_i.to_s
53
+ end
54
+
39
55
  end
data/lib/wx/core/event.rb CHANGED
@@ -29,7 +29,7 @@ module Wx
29
29
  alias :id :get_id
30
30
  end
31
31
 
32
- class Wx::CommandEvent
32
+ class CommandEvent
33
33
 
34
34
  # overload the #initialize method to add a check on a
35
35
  # correct match between EventType and event class
@@ -43,6 +43,11 @@ module Wx
43
43
  end
44
44
  end
45
45
 
46
+ alias :set_client_data :set_client_object
47
+ alias :client_data= :set_client_object
48
+ alias :get_client_data :get_client_object
49
+ alias :client_data :get_client_object
50
+
46
51
  end
47
52
 
48
53
  # reduce mapping warnings for this unpublished event class
@@ -10,6 +10,12 @@
10
10
  # EvtHandler. This includes all Wx::Window subclasses and Wx::App.
11
11
 
12
12
  class Wx::EvtHandler
13
+
14
+ alias :set_client_data :set_client_object
15
+ alias :client_data= :set_client_object
16
+ alias :get_client_data :get_client_object
17
+ alias :client_data :get_client_object
18
+
13
19
  # EventType is an internal class that's used to set up event handlers
14
20
  # and mappings.
15
21
  # * 'name' is the name of the event handler method in ruby
@@ -182,7 +188,7 @@ class Wx::EvtHandler
182
188
  # check arity <= 1
183
189
  if h_meth.arity>1
184
190
  Kernel.raise ArgumentError,
185
- "Event handler should not accept more than at most a single argument"
191
+ "Event handler should not accept more than at most a single argument",
186
192
  caller
187
193
  end
188
194
  # wrap method without any argument in anonymous proc to prevent strict argument checking
@@ -193,7 +199,7 @@ class Wx::EvtHandler
193
199
  end
194
200
  else
195
201
  Kernel.raise ArgumentError,
196
- "Specify event handler with a method, name, proc OR block"
202
+ "Specify event handler with a method, name, proc OR block",
197
203
  caller
198
204
  end
199
205
  end
@@ -0,0 +1,312 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ module Wx
6
+
7
+ if has_feature?(:USE_VALIDATORS)
8
+
9
+ class GenericValidator < Wx::Validator
10
+
11
+ class << self
12
+ def handlers
13
+ @handlers ||= ::Hash.new(Proc.new { |win, *rest| raise NotImplementedError, "#{win.class} not supported" })
14
+ end
15
+
16
+ def define_handler(klass, meth=nil, &block)
17
+ raise ArgumentError, 'Expected a Class for arg 1' unless klass.is_a?(::Class)
18
+ h = if block and not meth
19
+ block
20
+ else
21
+ case meth
22
+ when Proc, Method
23
+ meth
24
+ else
25
+ raise ArgumentError, 'Expected a Proc or Method for arg 2'
26
+ end
27
+ end
28
+ handlers[klass] = h
29
+ end
30
+ end
31
+
32
+ def initialize(*arg)
33
+ super
34
+ @value = arg.empty? ? nil : arg.first.value
35
+ @handler = nil
36
+ @klass = nil
37
+ end
38
+
39
+ attr_accessor :value
40
+
41
+ private
42
+
43
+ def do_transfer_from_window
44
+ get_handler.call(get_window)
45
+ end
46
+
47
+ def do_transfer_to_window(val)
48
+ get_handler.call(get_window, val) unless val.nil?
49
+ true
50
+ end
51
+
52
+ def do_on_transfer_from_window(data)
53
+ super(@value = data)
54
+ end
55
+
56
+ def do_on_transfer_to_window
57
+ @value = super || @value
58
+ end
59
+
60
+ def get_handler
61
+ if @handler && @klass == get_window.class
62
+ @handler
63
+ else
64
+ @klass = get_window.class
65
+ @handler = GenericValidator.handlers[@klass] || GenericValidator.handlers.each_key.detect { |k| k > klass }
66
+ @handler || ::Kernel.raise(NotImplementedError, "#{@klass} not supported")
67
+ end
68
+ end
69
+
70
+ end # GenericValidator
71
+
72
+ # define standard handlers
73
+
74
+ # boolean controls
75
+ if Wx.has_feature?(:USE_CHECKBOX)
76
+
77
+ GenericValidator.define_handler(Wx::CheckBox) do |win, *val|
78
+ if val.empty?
79
+ !!win.get_value
80
+ else
81
+ win.set_value(!!val.shift)
82
+ end
83
+ end
84
+
85
+ end
86
+ if Wx.has_feature?(:USE_RADIOBTN)
87
+
88
+ GenericValidator.define_handler(Wx::RadioButton) do |win, *val|
89
+ if val.empty?
90
+ !!win.get_value
91
+ else
92
+ win.set_value(!!val.shift)
93
+ end
94
+ end
95
+
96
+ end
97
+ if Wx.has_feature?(:USE_TOGGLEBTN)
98
+ # also covers Wx::BitmapToggleButton
99
+ GenericValidator.define_handler(Wx::ToggleButton) do |win, *val|
100
+ if val.empty?
101
+ !!win.get_value
102
+ else
103
+ win.set_value(!!val.shift)
104
+ end
105
+ end
106
+
107
+ end
108
+
109
+ # integer controls
110
+ if Wx.has_feature?(:USE_GAUGE)
111
+
112
+ GenericValidator.define_handler(Wx::Gauge) do |win, *val|
113
+ if val.empty?
114
+ win.get_value
115
+ else
116
+ win.set_value(val.shift)
117
+ end
118
+ end
119
+
120
+ end
121
+ if Wx.has_feature?(:USE_RADIOBOX)
122
+
123
+ GenericValidator.define_handler(Wx::RadioBox) do |win, *val|
124
+ if val.empty?
125
+ win.get_selection
126
+ else
127
+ win.set_selection(val.shift)
128
+ end
129
+ end
130
+
131
+ end
132
+ if Wx.has_feature?(:USE_SCROLLBAR)
133
+
134
+ GenericValidator.define_handler(Wx::ScrollBar) do |win, *val|
135
+ if val.empty?
136
+ win.get_thumb_position
137
+ else
138
+ win.set_thumb_position(val.shift)
139
+ end
140
+ end
141
+
142
+ end
143
+ if Wx.has_feature?(:USE_SPINCTRL)
144
+
145
+ GenericValidator.define_handler(Wx::SpinCtrl) do |win, *val|
146
+ if val.empty?
147
+ win.get_value
148
+ else
149
+ win.set_value(val.shift)
150
+ end
151
+ end
152
+
153
+ end
154
+ if Wx.has_feature?(:USE_SPINBTN)
155
+
156
+ GenericValidator.define_handler(Wx::SpinButton) do |win, *val|
157
+ if val.empty?
158
+ win.get_value
159
+ else
160
+ win.set_value(val.shift)
161
+ end
162
+ end
163
+
164
+ end
165
+ if Wx.has_feature?(:USE_SLIDER)
166
+
167
+ GenericValidator.define_handler(Wx::Slider) do |win, *val|
168
+ if val.empty?
169
+ win.get_value
170
+ else
171
+ win.set_value(val.shift)
172
+ end
173
+ end
174
+
175
+ end
176
+ if Wx.has_feature?(:USE_CHOICE)
177
+
178
+ GenericValidator.define_handler(Wx::Choice) do |win, *val|
179
+ if val.empty?
180
+ win.get_selection
181
+ else
182
+ win.set_selection(val.shift)
183
+ end
184
+ end
185
+
186
+ end
187
+ if Wx.has_feature?(:USE_COMBOBOX)
188
+
189
+ GenericValidator.define_handler(Wx::ComboBox) do |win, *val|
190
+ if val.empty?
191
+ if (win.get_window_style & Wx::CB_READONLY) == Wx::CB_READONLY
192
+ win.get_selection
193
+ else
194
+ win.get_string_selection
195
+ end
196
+ else
197
+ if (win.get_window_style & Wx::CB_READONLY) == Wx::CB_READONLY
198
+ win.set_selection(val.shift)
199
+ else
200
+ win.set_string_selection(val.shift)
201
+ end
202
+ end
203
+ end
204
+
205
+ end
206
+
207
+ # date/time controls
208
+ if Wx.has_feature?(:USE_DATEPICKCTRL)
209
+
210
+ GenericValidator.define_handler(Wx::DatePickerCtrl) do |win, *val|
211
+ if val.empty?
212
+ win.get_value
213
+ else
214
+ win.set_value(val.shift)
215
+ end
216
+ end
217
+
218
+ end
219
+ if Wx.has_feature?(:USE_TIMEPICKCTRL)
220
+
221
+ GenericValidator.define_handler(Wx::TimePickerCtrl) do |win, *val|
222
+ if val.empty?
223
+ win.get_value
224
+ else
225
+ win.set_value(val.shift)
226
+ end
227
+ end
228
+
229
+ end
230
+
231
+ # string controls
232
+ if Wx.has_feature?(:USE_BUTTON)
233
+
234
+ GenericValidator.define_handler(Wx::Button) do |win, *val|
235
+ if val.empty?
236
+ win.get_label
237
+ else
238
+ win.set_label(val.shift)
239
+ end
240
+ end
241
+
242
+ end
243
+ if Wx.has_feature?(:USE_STATTEXT)
244
+
245
+ GenericValidator.define_handler(Wx::StaticText) do |win, *val|
246
+ if val.empty?
247
+ win.get_label
248
+ else
249
+ win.set_label(val.shift)
250
+ end
251
+ end
252
+
253
+ end
254
+ if Wx.has_feature?(:USE_TEXTCTRL)
255
+
256
+ GenericValidator.define_handler(Wx::TextCtrl) do |win, *val|
257
+ if val.empty?
258
+ win.get_value
259
+ else
260
+ win.set_value(val.shift)
261
+ end
262
+ end
263
+
264
+ end
265
+
266
+ # array controls
267
+ if Wx.has_feature?(:USE_CHECKLISTBOX)
268
+
269
+ GenericValidator.define_handler(Wx::CheckListBox) do |win, *val|
270
+ if val.empty?
271
+ if (win.get_window_style & Wx::LB_SINGLE) == Wx::LB_SINGLE
272
+ win.get_checked_items.first
273
+ else
274
+ win.get_checked_items
275
+ end
276
+ else
277
+ if (win.get_window_style & Wx::LB_SINGLE) == Wx::LB_SINGLE
278
+ win.check(val.shift, true)
279
+ else
280
+ win.get_count.times { |i| win.check(i, false) }
281
+ [val].flatten.each { |i| win.check(i, true) }
282
+ end
283
+ end
284
+ end
285
+
286
+ end
287
+ if Wx.has_feature?(:USE_LISTBOX)
288
+
289
+ GenericValidator.define_handler(Wx::ListBox) do |win, *val|
290
+ if val.empty?
291
+ # test this the hard since on WXOSX LB_SINGLE is default but does get set
292
+ # by default i.e. on WXOSX no selection type bit set == LB_SINGLE
293
+ if (win.get_window_style & (Wx::LB_MULTIPLE|Wx::LB_EXTENDED)) == 0
294
+ win.get_selection
295
+ else
296
+ win.get_selections
297
+ end
298
+ else
299
+ if (win.get_window_style & (Wx::LB_MULTIPLE|Wx::LB_EXTENDED)) == 0
300
+ win.set_selection(val.shift)
301
+ else
302
+ win.get_count.times { |i| win.deselect(i) }
303
+ [val].flatten.each { |i| win.set_selection(i) }
304
+ end
305
+ end
306
+ end
307
+
308
+ end
309
+
310
+ end # if USE_VALIDATORS
311
+
312
+ end
@@ -9,6 +9,6 @@
9
9
  require_relative './controlwithitems'
10
10
 
11
11
  class Wx::ListBox
12
- alias :get_item_data :get_client_data
13
- alias :set_item_data :set_client_data
12
+ alias :get_item_data :get_client_object
13
+ alias :set_item_data :set_client_object
14
14
  end
data/lib/wx/core/log.rb CHANGED
@@ -71,7 +71,7 @@ module Wx
71
71
  # first log info instance of a repeating message sequence
72
72
 
73
73
  # format message
74
- msg = fmt % args
74
+ msg = args.empty? ? fmt : fmt % args
75
75
  log_info = {
76
76
  filename: if filename
77
77
  filename.to_s
@@ -8,15 +8,17 @@
8
8
 
9
9
  # Displays a set of pages in parallel using tabs
10
10
 
11
- class Wx::Notebook
12
- # Convenience method for iterating pages
13
- def each_page
14
- if block_given?
15
- 0.upto(get_page_count - 1) do | i |
16
- yield get_page(i)
11
+ module Wx
12
+ class Notebook
13
+ # Convenience method for iterating pages
14
+ def each_page
15
+ if block_given?
16
+ 0.upto(get_page_count - 1) do | i |
17
+ yield get_page(i)
18
+ end
19
+ else
20
+ ::Enumerator.new { |y| each_page { |pg| y << pg } }
17
21
  end
18
- else
19
- ::Enumerator.new { |y| each_page { |pg| y << pg } }
20
22
  end
21
23
  end
22
24
  end
@@ -0,0 +1,45 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ module Wx
6
+
7
+ class OwnerDrawnComboBox
8
+
9
+ # make sure to honor the inherited common overloads
10
+ wx_get_client_object = instance_method :get_client_object
11
+ define_method :get_client_object do |*args|
12
+ if args.empty?
13
+ super()
14
+ else
15
+ wx_get_client_object.bind(self).call(*args)
16
+ end
17
+ end
18
+ wx_set_client_object = instance_method :set_client_object
19
+ define_method :set_client_object do |*args|
20
+ if args.size < 2
21
+ super(*args)
22
+ else
23
+ wx_set_client_object.bind(self).call(*args)
24
+ end
25
+ end
26
+ # redefine aliases
27
+ alias :client_object :get_client_object
28
+ alias :client_object= :set_client_object
29
+
30
+ alias :get_client_data :get_client_object
31
+ alias :set_client_data :set_client_object
32
+
33
+ # Overload to provide Enumerator without block
34
+ wx_each_string = instance_method :each_string
35
+ define_method :each_string do |&block|
36
+ if block
37
+ wx_each_string.bind(self).call(&block)
38
+ else
39
+ ::Enumerator.new { |y| wx_each_string.bind(self).call { |ln| y << ln } }
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1,15 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ module Wx
6
+
7
+ class PersistentObject
8
+
9
+ # make these protected
10
+ protected :save_value
11
+ protected :restore_value
12
+
13
+ end
14
+
15
+ end