wxruby3 0.9.2-x64-mingw-ucrt → 0.9.4-x64-mingw-ucrt

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 (668) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +35 -29
  3. data/README.md +24 -15
  4. data/ext/wxbase32u_gcc_custom.dll +0 -0
  5. data/ext/wxbase32u_net_gcc_custom.dll +0 -0
  6. data/ext/wxbase32u_xml_gcc_custom.dll +0 -0
  7. data/ext/wxmsw32u_aui_gcc_custom.dll +0 -0
  8. data/ext/wxmsw32u_core_gcc_custom.dll +0 -0
  9. data/ext/wxmsw32u_gl_gcc_custom.dll +0 -0
  10. data/ext/wxmsw32u_html_gcc_custom.dll +0 -0
  11. data/ext/wxmsw32u_media_gcc_custom.dll +0 -0
  12. data/ext/wxmsw32u_propgrid_gcc_custom.dll +0 -0
  13. data/ext/wxmsw32u_qa_gcc_custom.dll +0 -0
  14. data/ext/wxmsw32u_ribbon_gcc_custom.dll +0 -0
  15. data/ext/wxmsw32u_richtext_gcc_custom.dll +0 -0
  16. data/ext/wxmsw32u_stc_gcc_custom.dll +0 -0
  17. data/ext/wxmsw32u_webview_gcc_custom.dll +0 -0
  18. data/ext/wxmsw32u_xrc_gcc_custom.dll +0 -0
  19. data/lib/wx/core/bitmap_combobox.rb +17 -21
  20. data/lib/wx/core/book_ctrl_base.rb +16 -0
  21. data/lib/wx/core/combobox.rb +13 -3
  22. data/lib/wx/core/config.rb +454 -83
  23. data/lib/wx/core/controlwithitems.rb +40 -130
  24. data/lib/wx/core/enum.rb +17 -1
  25. data/lib/wx/core/event.rb +6 -1
  26. data/lib/wx/core/events/evt_list.rb +5 -4
  27. data/lib/wx/core/evthandler.rb +8 -2
  28. data/lib/wx/core/generic_validator.rb +312 -0
  29. data/lib/wx/core/listbox.rb +2 -2
  30. data/lib/wx/core/log.rb +1 -1
  31. data/lib/wx/core/notebook.rb +10 -8
  32. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  33. data/lib/wx/core/peristent_object.rb +15 -0
  34. data/lib/wx/core/persistence_manager.rb +39 -0
  35. data/lib/wx/core/persistent_window.rb +16 -0
  36. data/lib/wx/core/size.rb +4 -0
  37. data/lib/wx/core/sizer.rb +1 -2
  38. data/lib/wx/core/standard_paths.rb +22 -0
  39. data/lib/wx/core/text_entry.rb +4 -1
  40. data/lib/wx/core/top_level_window.rb +16 -0
  41. data/lib/wx/core/treebook.rb +18 -0
  42. data/lib/wx/core/validator.rb +70 -5
  43. data/lib/wx/core/window.rb +3 -7
  44. data/lib/wx/core.rb +4 -0
  45. data/lib/wx/doc/art_locator.rb +1 -0
  46. data/lib/wx/doc/book_ctrl_base.rb +19 -0
  47. data/lib/wx/doc/comboctrl.rb +18 -0
  48. data/lib/wx/doc/config.rb +101 -41
  49. data/lib/wx/doc/controlwithitems.rb +16 -0
  50. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  51. data/lib/wx/doc/editable_listbox.rb +44 -0
  52. data/lib/wx/doc/enum.rb +15 -0
  53. data/lib/wx/doc/event.rb +12 -0
  54. data/lib/wx/doc/extra/12_client_data.md +89 -0
  55. data/lib/wx/doc/extra/13_validators.md +139 -0
  56. data/lib/wx/doc/extra/14_config.md +101 -0
  57. data/lib/wx/doc/extra/15_persistence.md +148 -0
  58. data/lib/wx/doc/gdi_common.rb +4 -0
  59. data/lib/wx/doc/gen/about_dialog_info.rb +25 -0
  60. data/lib/wx/doc/gen/accelerator.rb +7 -1
  61. data/lib/wx/doc/gen/accessible.rb +13 -0
  62. data/lib/wx/doc/gen/activity_indicator.rb +7 -0
  63. data/lib/wx/doc/gen/animation.rb +12 -0
  64. data/lib/wx/doc/gen/animation_ctrl.rb +10 -0
  65. data/lib/wx/doc/gen/any_button.rb +17 -1
  66. data/lib/wx/doc/gen/app.rb +35 -1
  67. data/lib/wx/doc/gen/app_traits.rb +38 -5
  68. data/lib/wx/doc/gen/art_provider.rb +14 -0
  69. data/lib/wx/doc/gen/aui/aui_dock_art.rb +12 -0
  70. data/lib/wx/doc/gen/aui/aui_floating_frame.rb +1 -0
  71. data/lib/wx/doc/gen/aui/aui_manager.rb +24 -1
  72. data/lib/wx/doc/gen/aui/aui_manager_event.rb +9 -1
  73. data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +3 -0
  74. data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +2 -0
  75. data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +3 -1
  76. data/lib/wx/doc/gen/aui/aui_notebook.rb +20 -2
  77. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +2 -1
  78. data/lib/wx/doc/gen/aui/aui_pane_info.rb +30 -1
  79. data/lib/wx/doc/gen/aui/aui_tab_art.rb +6 -0
  80. data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +1 -0
  81. data/lib/wx/doc/gen/aui/aui_tool_bar.rb +11 -0
  82. data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +2 -0
  83. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +2 -1
  84. data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +4 -0
  85. data/lib/wx/doc/gen/banner_window.rb +7 -0
  86. data/lib/wx/doc/gen/bitmap.rb +64 -3
  87. data/lib/wx/doc/gen/bitmap_button.rb +6 -1
  88. data/lib/wx/doc/gen/bitmap_combo_box.rb +9 -3
  89. data/lib/wx/doc/gen/book_ctrl_base.rb +17 -2
  90. data/lib/wx/doc/gen/book_ctrl_event.rb +3 -1
  91. data/lib/wx/doc/gen/box_sizer.rb +5 -0
  92. data/lib/wx/doc/gen/brush.rb +16 -1
  93. data/lib/wx/doc/gen/busy_info.rb +8 -0
  94. data/lib/wx/doc/gen/button.rb +11 -3
  95. data/lib/wx/doc/gen/calculate_layout_event.rb +4 -0
  96. data/lib/wx/doc/gen/calendar_ctrl.rb +22 -0
  97. data/lib/wx/doc/gen/calendar_date_attr.rb +1 -0
  98. data/lib/wx/doc/gen/calendar_event.rb +3 -1
  99. data/lib/wx/doc/gen/caret.rb +3 -0
  100. data/lib/wx/doc/gen/check_box.rb +10 -0
  101. data/lib/wx/doc/gen/check_list_box.rb +3 -0
  102. data/lib/wx/doc/gen/choice.rb +14 -2
  103. data/lib/wx/doc/gen/choicebook.rb +1 -0
  104. data/lib/wx/doc/gen/client_dc.rb +1 -0
  105. data/lib/wx/doc/gen/clipboard.rb +9 -0
  106. data/lib/wx/doc/gen/collapsible_pane.rb +3 -0
  107. data/lib/wx/doc/gen/collapsible_pane_event.rb +1 -0
  108. data/lib/wx/doc/gen/colour.rb +20 -0
  109. data/lib/wx/doc/gen/colour_dialog.rb +10 -0
  110. data/lib/wx/doc/gen/colour_picker_ctrl.rb +4 -0
  111. data/lib/wx/doc/gen/colour_picker_event.rb +1 -0
  112. data/lib/wx/doc/gen/combo_box.rb +20 -1
  113. data/lib/wx/doc/gen/combo_ctrl.rb +54 -295
  114. data/lib/wx/doc/gen/command_link_button.rb +8 -0
  115. data/lib/wx/doc/gen/context_help_button.rb +7 -1
  116. data/lib/wx/doc/gen/control.rb +12 -0
  117. data/lib/wx/doc/gen/control_with_items.rb +45 -9
  118. data/lib/wx/doc/gen/core.rb +2 -2
  119. data/lib/wx/doc/gen/cursor.rb +4 -0
  120. data/lib/wx/doc/gen/data_format.rb +1 -0
  121. data/lib/wx/doc/gen/data_object.rb +27 -5
  122. data/lib/wx/doc/gen/date_event.rb +2 -1
  123. data/lib/wx/doc/gen/date_picker_ctrl.rb +7 -1
  124. data/lib/wx/doc/gen/dc.rb +87 -3
  125. data/lib/wx/doc/gen/dial_up_event.rb +2 -0
  126. data/lib/wx/doc/gen/dial_up_manager.rb +12 -0
  127. data/lib/wx/doc/gen/dialog.rb +42 -3
  128. data/lib/wx/doc/gen/dir_dialog.rb +6 -1
  129. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +1 -0
  130. data/lib/wx/doc/gen/dir_picker_ctrl.rb +5 -0
  131. data/lib/wx/doc/gen/drag_drop.rb +20 -0
  132. data/lib/wx/doc/gen/drag_image.rb +7 -0
  133. data/lib/wx/doc/gen/editable_list_box.rb +5 -3
  134. data/lib/wx/doc/gen/event.rb +26 -11
  135. data/lib/wx/doc/gen/event_blocker.rb +2 -1
  136. data/lib/wx/doc/gen/event_filter.rb +3 -2
  137. data/lib/wx/doc/gen/event_list.rb +4 -4
  138. data/lib/wx/doc/gen/events.rb +165 -26
  139. data/lib/wx/doc/gen/evt_handler.rb +40 -2
  140. data/lib/wx/doc/gen/ext_help_controller.rb +9 -0
  141. data/lib/wx/doc/gen/file_ctrl.rb +11 -2
  142. data/lib/wx/doc/gen/file_ctrl_event.rb +5 -1
  143. data/lib/wx/doc/gen/file_dialog.rb +13 -0
  144. data/lib/wx/doc/gen/file_dialog_custom_control.rb +12 -0
  145. data/lib/wx/doc/gen/file_dialog_customize_hook.rb +11 -2
  146. data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -1
  147. data/lib/wx/doc/gen/file_picker_ctrl.rb +4 -0
  148. data/lib/wx/doc/gen/file_system.rb +17 -1
  149. data/lib/wx/doc/gen/find_dialog_event.rb +2 -1
  150. data/lib/wx/doc/gen/find_replace_data.rb +1 -0
  151. data/lib/wx/doc/gen/find_replace_dialog.rb +3 -0
  152. data/lib/wx/doc/gen/flex_grid_sizer.rb +13 -0
  153. data/lib/wx/doc/gen/font.rb +75 -3
  154. data/lib/wx/doc/gen/font_data.rb +14 -0
  155. data/lib/wx/doc/gen/font_dialog.rb +6 -0
  156. data/lib/wx/doc/gen/font_picker_ctrl.rb +8 -0
  157. data/lib/wx/doc/gen/font_picker_event.rb +1 -0
  158. data/lib/wx/doc/gen/frame.rb +24 -7
  159. data/lib/wx/doc/gen/fs_file.rb +22 -0
  160. data/lib/wx/doc/gen/gauge.rb +8 -0
  161. data/lib/wx/doc/gen/gb_sizer_item.rb +5 -0
  162. data/lib/wx/doc/gen/gcdc.rb +2 -0
  163. data/lib/wx/doc/gen/gdi_common.rb +50 -8
  164. data/lib/wx/doc/gen/gdi_object.rb +1 -0
  165. data/lib/wx/doc/gen/generic_dir_ctrl.rb +7 -0
  166. data/lib/wx/doc/gen/graphics_context.rb +36 -7
  167. data/lib/wx/doc/gen/graphics_object.rb +24 -0
  168. data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +2 -2
  169. data/lib/wx/doc/gen/grid/grid_cell_attr.rb +14 -4
  170. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +1 -2
  171. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +1 -2
  172. data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +2 -2
  173. data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +1 -2
  174. data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +2 -2
  175. data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +1 -2
  176. data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +1 -2
  177. data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +1 -2
  178. data/lib/wx/doc/gen/grid/grid_cell_editor.rb +9 -2
  179. data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +1 -2
  180. data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +1 -2
  181. data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +1 -2
  182. data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +2 -2
  183. data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +2 -2
  184. data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +1 -2
  185. data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +6 -2
  186. data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +1 -2
  187. data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +1 -2
  188. data/lib/wx/doc/gen/grid/grid_ctrl.rb +229 -7
  189. data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +4 -1
  190. data/lib/wx/doc/gen/grid/grid_event.rb +4 -1
  191. data/lib/wx/doc/gen/grid/grid_range_select_event.rb +2 -1
  192. data/lib/wx/doc/gen/grid/grid_size_event.rb +2 -1
  193. data/lib/wx/doc/gen/grid/grid_string_table.rb +7 -0
  194. data/lib/wx/doc/gen/grid/grid_table_base.rb +27 -1
  195. data/lib/wx/doc/gen/grid/grid_table_message.rb +1 -0
  196. data/lib/wx/doc/gen/grid_bag_sizer.rb +24 -4
  197. data/lib/wx/doc/gen/grid_sizer.rb +11 -0
  198. data/lib/wx/doc/gen/gui_event_loop.rb +12 -2
  199. data/lib/wx/doc/gen/header_ctrl.rb +106 -6
  200. data/lib/wx/doc/gen/header_ctrl_event.rb +5 -1
  201. data/lib/wx/doc/gen/help_controller.rb +11 -0
  202. data/lib/wx/doc/gen/help_provider.rb +12 -3
  203. data/lib/wx/doc/gen/html/html_cell.rb +25 -0
  204. data/lib/wx/doc/gen/html/html_cell_event.rb +3 -1
  205. data/lib/wx/doc/gen/html/html_easy_printing.rb +13 -1
  206. data/lib/wx/doc/gen/html/html_help_controller.rb +18 -0
  207. data/lib/wx/doc/gen/html/html_help_data.rb +5 -0
  208. data/lib/wx/doc/gen/html/html_help_window.rb +8 -0
  209. data/lib/wx/doc/gen/html/html_link_event.rb +1 -0
  210. data/lib/wx/doc/gen/html/html_list_box.rb +49 -9
  211. data/lib/wx/doc/gen/html/html_printout.rb +7 -0
  212. data/lib/wx/doc/gen/html/html_window.rb +31 -0
  213. data/lib/wx/doc/gen/hyperlink_ctrl.rb +2 -1
  214. data/lib/wx/doc/gen/hyperlink_event.rb +1 -0
  215. data/lib/wx/doc/gen/icon.rb +19 -1
  216. data/lib/wx/doc/gen/icon_location.rb +1 -0
  217. data/lib/wx/doc/gen/image.rb +67 -10
  218. data/lib/wx/doc/gen/image_list.rb +12 -2
  219. data/lib/wx/doc/gen/info_bar.rb +12 -0
  220. data/lib/wx/doc/gen/keyboard_state.rb +11 -0
  221. data/lib/wx/doc/gen/list_box.rb +20 -3
  222. data/lib/wx/doc/gen/list_ctrl.rb +89 -0
  223. data/lib/wx/doc/gen/list_event.rb +11 -1
  224. data/lib/wx/doc/gen/listbook.rb +1 -0
  225. data/lib/wx/doc/gen/locale.rb +22 -0
  226. data/lib/wx/doc/gen/log.rb +42 -0
  227. data/lib/wx/doc/gen/mdi_client_window.rb +4 -1
  228. data/lib/wx/doc/gen/mdi_frame.rb +27 -4
  229. data/lib/wx/doc/gen/media_ctrl.rb +17 -0
  230. data/lib/wx/doc/gen/media_event.rb +2 -1
  231. data/lib/wx/doc/gen/memory_dc.rb +10 -0
  232. data/lib/wx/doc/gen/menu.rb +48 -7
  233. data/lib/wx/doc/gen/menu_bar.rb +32 -13
  234. data/lib/wx/doc/gen/menu_item.rb +26 -0
  235. data/lib/wx/doc/gen/message_dialog.rb +10 -0
  236. data/lib/wx/doc/gen/mini_frame.rb +5 -2
  237. data/lib/wx/doc/gen/mirror_dc.rb +1 -0
  238. data/lib/wx/doc/gen/mouse_state.rb +1 -0
  239. data/lib/wx/doc/gen/multi_choice_dialog.rb +3 -1
  240. data/lib/wx/doc/gen/non_owned_window.rb +3 -0
  241. data/lib/wx/doc/gen/notebook.rb +11 -1
  242. data/lib/wx/doc/gen/num_validator.rb +37 -0
  243. data/lib/wx/doc/gen/number_entry_dialog.rb +4 -0
  244. data/lib/wx/doc/gen/object.rb +3 -0
  245. data/lib/wx/doc/gen/owner_drawn_combo_box.rb +340 -0
  246. data/lib/wx/doc/gen/paint_dc.rb +1 -0
  247. data/lib/wx/doc/gen/palette.rb +5 -0
  248. data/lib/wx/doc/gen/panel.rb +10 -2
  249. data/lib/wx/doc/gen/pen.rb +30 -1
  250. data/lib/wx/doc/gen/persistence_manager.rb +135 -0
  251. data/lib/wx/doc/gen/persistent_object.rb +52 -0
  252. data/lib/wx/doc/gen/persistent_window.rb +116 -0
  253. data/lib/wx/doc/gen/pg/numeric_property_validator.rb +2 -1
  254. data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +4 -1
  255. data/lib/wx/doc/gen/pg/pg_cell.rb +6 -1
  256. data/lib/wx/doc/gen/pg/pg_editor.rb +61 -15
  257. data/lib/wx/doc/gen/pg/pg_multi_button.rb +2 -0
  258. data/lib/wx/doc/gen/pg/pg_properties.rb +198 -81
  259. data/lib/wx/doc/gen/pg/pg_property.rb +129 -52
  260. data/lib/wx/doc/gen/pg/pg_validation_info.rb +2 -0
  261. data/lib/wx/doc/gen/pg/property_grid.rb +56 -14
  262. data/lib/wx/doc/gen/pg/property_grid_event.rb +16 -6
  263. data/lib/wx/doc/gen/pg/property_grid_interface.rb +98 -37
  264. data/lib/wx/doc/gen/pg/property_grid_manager.rb +29 -7
  265. data/lib/wx/doc/gen/pg/property_grid_page.rb +11 -4
  266. data/lib/wx/doc/gen/pg/property_grid_page_state.rb +7 -2
  267. data/lib/wx/doc/gen/picker_base.rb +11 -1
  268. data/lib/wx/doc/gen/platform_info.rb +31 -0
  269. data/lib/wx/doc/gen/popup_window.rb +5 -0
  270. data/lib/wx/doc/gen/progress_dialog.rb +4 -0
  271. data/lib/wx/doc/gen/property_sheet_dialog.rb +7 -1
  272. data/lib/wx/doc/gen/prt/page_setup_dialog.rb +2 -0
  273. data/lib/wx/doc/gen/prt/post_script_dc.rb +1 -0
  274. data/lib/wx/doc/gen/prt/preview_frame.rb +4 -0
  275. data/lib/wx/doc/gen/prt/print_abort_dialog.rb +1 -0
  276. data/lib/wx/doc/gen/prt/print_data.rb +27 -0
  277. data/lib/wx/doc/gen/prt/print_dialog.rb +4 -0
  278. data/lib/wx/doc/gen/prt/printer.rb +42 -5
  279. data/lib/wx/doc/gen/prt/printer_dc.rb +2 -0
  280. data/lib/wx/doc/gen/query_layout_info_event.rb +9 -0
  281. data/lib/wx/doc/gen/radio_box.rb +19 -0
  282. data/lib/wx/doc/gen/radio_button.rb +9 -0
  283. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +63 -0
  284. data/lib/wx/doc/gen/rbn/ribbon_bar.rb +23 -0
  285. data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +2 -1
  286. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +35 -9
  287. data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +2 -1
  288. data/lib/wx/doc/gen/rbn/ribbon_control.rb +10 -0
  289. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +17 -7
  290. data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +2 -1
  291. data/lib/wx/doc/gen/rbn/ribbon_page.rb +12 -0
  292. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +11 -0
  293. data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +2 -1
  294. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +25 -0
  295. data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +2 -1
  296. data/lib/wx/doc/gen/rearrange_ctrl.rb +4 -0
  297. data/lib/wx/doc/gen/rearrange_list.rb +9 -0
  298. data/lib/wx/doc/gen/region.rb +42 -13
  299. data/lib/wx/doc/gen/region_iterator.rb +1 -0
  300. data/lib/wx/doc/gen/rtc/rich_text_box.rb +25 -8
  301. data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +41 -4
  302. data/lib/wx/doc/gen/rtc/rich_text_buffer_data_object.rb +1 -0
  303. data/lib/wx/doc/gen/rtc/rich_text_composite_object.rb +23 -11
  304. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +74 -0
  305. data/lib/wx/doc/gen/rtc/rich_text_event.rb +6 -1
  306. data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +8 -0
  307. data/lib/wx/doc/gen/rtc/rich_text_formatting_dialog.rb +6 -0
  308. data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +1 -0
  309. data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +4 -0
  310. data/lib/wx/doc/gen/rtc/rich_text_image.rb +7 -0
  311. data/lib/wx/doc/gen/rtc/rich_text_object.rb +64 -4
  312. data/lib/wx/doc/gen/rtc/rich_text_paragraph_layout_box.rb +51 -4
  313. data/lib/wx/doc/gen/rtc/rich_text_printing.rb +13 -0
  314. data/lib/wx/doc/gen/rtc/rich_text_style_list_box.rb +9 -4
  315. data/lib/wx/doc/gen/rtc/rich_text_style_organiser_dialog.rb +3 -0
  316. data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +2 -0
  317. data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +1 -0
  318. data/lib/wx/doc/gen/sash_event.rb +5 -1
  319. data/lib/wx/doc/gen/sash_layout_window.rb +10 -0
  320. data/lib/wx/doc/gen/sash_window.rb +3 -0
  321. data/lib/wx/doc/gen/screen_dc.rb +1 -0
  322. data/lib/wx/doc/gen/scroll_bar.rb +11 -2
  323. data/lib/wx/doc/gen/scrolled_canvas.rb +20 -4
  324. data/lib/wx/doc/gen/scrolled_control.rb +20 -4
  325. data/lib/wx/doc/gen/scrolled_window.rb +20 -4
  326. data/lib/wx/doc/gen/search_ctrl.rb +6 -0
  327. data/lib/wx/doc/gen/simplebook.rb +7 -0
  328. data/lib/wx/doc/gen/single_choice_dialog.rb +3 -1
  329. data/lib/wx/doc/gen/sizer.rb +79 -9
  330. data/lib/wx/doc/gen/sizer_item.rb +16 -2
  331. data/lib/wx/doc/gen/slider.rb +23 -0
  332. data/lib/wx/doc/gen/spin_button.rb +9 -0
  333. data/lib/wx/doc/gen/spin_ctrl.rb +11 -0
  334. data/lib/wx/doc/gen/spin_ctrl_double.rb +7 -0
  335. data/lib/wx/doc/gen/spin_double_event.rb +4 -1
  336. data/lib/wx/doc/gen/spin_event.rb +2 -1
  337. data/lib/wx/doc/gen/splash_screen.rb +2 -0
  338. data/lib/wx/doc/gen/splitter_event.rb +10 -1
  339. data/lib/wx/doc/gen/splitter_window.rb +38 -14
  340. data/lib/wx/doc/gen/static_bitmap.rb +99 -2
  341. data/lib/wx/doc/gen/static_box.rb +6 -0
  342. data/lib/wx/doc/gen/static_box_sizer.rb +3 -0
  343. data/lib/wx/doc/gen/static_line.rb +4 -0
  344. data/lib/wx/doc/gen/static_text.rb +5 -0
  345. data/lib/wx/doc/gen/status_bar.rb +17 -3
  346. data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +174 -6
  347. data/lib/wx/doc/gen/stc/styled_text_event.rb +27 -1
  348. data/lib/wx/doc/gen/std_dialog_button_sizer.rb +7 -0
  349. data/lib/wx/doc/gen/svg_file_dc.rb +9 -0
  350. data/lib/wx/doc/gen/system_options.rb +8 -0
  351. data/lib/wx/doc/gen/system_settings.rb +7 -0
  352. data/lib/wx/doc/gen/task_bar_button.rb +12 -0
  353. data/lib/wx/doc/gen/task_bar_icon.rb +5 -0
  354. data/lib/wx/doc/gen/task_bar_icon_event.rb +2 -1
  355. data/lib/wx/doc/gen/text_attr.rb +27 -0
  356. data/lib/wx/doc/gen/text_ctrl.rb +27 -3
  357. data/lib/wx/doc/gen/text_entry.rb +43 -9
  358. data/lib/wx/doc/gen/text_entry_dialog.rb +12 -0
  359. data/lib/wx/doc/gen/text_validator.rb +16 -0
  360. data/lib/wx/doc/gen/time_picker_ctrl.rb +6 -0
  361. data/lib/wx/doc/gen/timer.rb +8 -0
  362. data/lib/wx/doc/gen/timer_event.rb +1 -0
  363. data/lib/wx/doc/gen/tip_provider.rb +5 -0
  364. data/lib/wx/doc/gen/toggle_button.rb +68 -0
  365. data/lib/wx/doc/gen/tool_bar.rb +57 -14
  366. data/lib/wx/doc/gen/tool_tip.rb +6 -0
  367. data/lib/wx/doc/gen/toolbook.rb +3 -0
  368. data/lib/wx/doc/gen/top_level_window.rb +34 -3
  369. data/lib/wx/doc/gen/tree_ctrl.rb +49 -0
  370. data/lib/wx/doc/gen/tree_event.rb +7 -1
  371. data/lib/wx/doc/gen/treebook.rb +9 -0
  372. data/lib/wx/doc/gen/ui_action_simulator.rb +4 -0
  373. data/lib/wx/doc/gen/utils.rb +55 -16
  374. data/lib/wx/doc/gen/v_list_box.rb +21 -0
  375. data/lib/wx/doc/gen/v_scrolled_window.rb +15 -0
  376. data/lib/wx/doc/gen/validator.rb +9 -13
  377. data/lib/wx/doc/gen/variant.rb +6 -0
  378. data/lib/wx/doc/gen/window.rb +260 -52
  379. data/lib/wx/doc/gen/window_dc.rb +2 -0
  380. data/lib/wx/doc/gen/window_disabler.rb +1 -0
  381. data/lib/wx/doc/gen/with_images.rb +7 -1
  382. data/lib/wx/doc/gen/wizard.rb +18 -0
  383. data/lib/wx/doc/gen/wizard_event.rb +3 -1
  384. data/lib/wx/doc/gen/wizard_page.rb +5 -0
  385. data/lib/wx/doc/gen/wizard_page_simple.rb +4 -0
  386. data/lib/wx/doc/gen/wrap_sizer.rb +5 -0
  387. data/lib/wx/doc/gen/xml_node.rb +14 -0
  388. data/lib/wx/doc/gen/xml_resource.rb +22 -0
  389. data/lib/wx/doc/generic_validator.rb +95 -0
  390. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  391. data/lib/wx/doc/num_validator.rb +387 -0
  392. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  393. data/lib/wx/doc/persistence_manager.rb +36 -0
  394. data/lib/wx/doc/persistent_object.rb +27 -0
  395. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  396. data/lib/wx/doc/static_bitmap.rb +25 -0
  397. data/lib/wx/doc/text_validator.rb +10 -0
  398. data/lib/wx/doc/top_level_window.rb +19 -0
  399. data/lib/wx/doc/treebook.rb +6 -1
  400. data/lib/wx/doc/validator.rb +113 -0
  401. data/lib/wx/doc/window.rb +30 -0
  402. data/lib/wx/html/events/evt_list.rb +0 -10
  403. data/lib/wx/html/simple_html_listbox.rb +24 -91
  404. data/lib/wx/keyword_defs.rb +34 -2
  405. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  406. data/lib/wx/version.rb +1 -1
  407. data/lib/wxruby_aui.so +0 -0
  408. data/lib/wxruby_core.so +0 -0
  409. data/lib/wxruby_grid.so +0 -0
  410. data/lib/wxruby_html.so +0 -0
  411. data/lib/wxruby_pg.so +0 -0
  412. data/lib/wxruby_prt.so +0 -0
  413. data/lib/wxruby_rbn.so +0 -0
  414. data/lib/wxruby_rtc.so +0 -0
  415. data/lib/wxruby_stc.so +0 -0
  416. data/rakelib/lib/config/mingw.rb +12 -0
  417. data/samples/aui/aui.rb +1237 -1233
  418. data/samples/calendar/calendar.rb +293 -289
  419. data/samples/controls/get_item_sample.rb +83 -79
  420. data/samples/controls/htlbox.rb +331 -327
  421. data/samples/dialogs/dialogs.rb +682 -694
  422. data/samples/dialogs/wizard.rb +52 -55
  423. data/samples/dragdrop/dragdrop.rb +146 -142
  424. data/samples/drawing/bitmap.rb +29 -26
  425. data/samples/drawing/bitmap_image.rb +84 -80
  426. data/samples/drawing/graphics_drawing.rb +209 -205
  427. data/samples/drawing/image_prt.rb +344 -340
  428. data/samples/drawing/maths_images.rb +18 -1
  429. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  430. data/samples/etc/caret.rb +306 -0
  431. data/samples/etc/miniframe.rb +65 -60
  432. data/samples/etc/sash.rb +109 -105
  433. data/samples/etc/scrollwin.rb +86 -80
  434. data/samples/etc/system_settings.rb +216 -209
  435. data/samples/event/activation.rb +72 -67
  436. data/samples/event/event.rb +160 -153
  437. data/samples/event/threaded.rb +8 -1
  438. data/samples/event/update_ui_event.rb +67 -60
  439. data/samples/grid/grid.rb +188 -181
  440. data/samples/grid/gridtablebase.rb +136 -129
  441. data/samples/html/html.rb +208 -204
  442. data/samples/mdi/mdi.rb +59 -54
  443. data/samples/minimal/minimal.rb +54 -51
  444. data/samples/minimal/nothing.rb +1 -0
  445. data/samples/printing/printing.rb +367 -377
  446. data/samples/printing/printing2.rb +203 -198
  447. data/samples/propgrid/propgrid.rb +2312 -2308
  448. data/samples/propgrid/propgrid_minimal.rb +57 -50
  449. data/samples/ribbon/ribbon.rb +780 -774
  450. data/samples/sampler/ext.rb +0 -33
  451. data/samples/sampler/sample.rb +4 -9
  452. data/samples/sampler.rb +1 -1
  453. data/samples/splash/splash.rb +118 -116
  454. data/samples/text/rich_textctrl.rb +207 -201
  455. data/samples/text/richtext.rb +1409 -1405
  456. data/samples/text/scintilla.rb +137 -128
  457. data/samples/text/textctrl.rb +89 -83
  458. data/samples/text/unicode.rb +175 -168
  459. data/samples/treectrl/treectrl.rb +1430 -1426
  460. data/samples/widgets/activityindicator.rb +95 -0
  461. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  462. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  463. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  464. data/samples/widgets/art/widgets/button.xpm +54 -0
  465. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  466. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  467. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  468. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  469. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  470. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  471. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  472. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  473. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  474. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  475. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  476. data/samples/widgets/art/widgets/header.xpm +54 -0
  477. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  478. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  479. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  480. data/samples/widgets/art/widgets/native.xpm +81 -0
  481. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  482. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  483. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  484. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  485. data/samples/widgets/art/widgets/slider.xpm +54 -0
  486. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  487. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  488. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  489. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  490. data/samples/widgets/art/widgets/text.xpm +54 -0
  491. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  492. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  493. data/samples/widgets/art/widgets/toucan.png +0 -0
  494. data/samples/widgets/bmpcombobox.rb +651 -0
  495. data/samples/widgets/button.rb +462 -0
  496. data/samples/widgets/checkbox.rb +211 -0
  497. data/samples/widgets/choice.rb +287 -0
  498. data/samples/widgets/clrpicker.rb +156 -0
  499. data/samples/widgets/combobox.rb +516 -0
  500. data/samples/widgets/datepick.rb +215 -0
  501. data/samples/widgets/dirctrl.rb +265 -0
  502. data/samples/widgets/dirpicker.rb +158 -0
  503. data/samples/widgets/editlbox.rb +122 -0
  504. data/samples/widgets/filectrl.rb +216 -0
  505. data/samples/widgets/filepicker.rb +214 -0
  506. data/samples/widgets/fontpicker.rb +135 -0
  507. data/samples/widgets/gauge.rb +311 -0
  508. data/samples/widgets/headerctrl.rb +236 -0
  509. data/samples/widgets/hyperlink.rb +203 -0
  510. data/samples/widgets/itemcontainer.rb +185 -0
  511. data/samples/widgets/listbox.rb +473 -0
  512. data/samples/widgets/notebook.rb +488 -0
  513. data/samples/widgets/odcombobox.rb +608 -0
  514. data/samples/widgets/radiobox.rb +328 -0
  515. data/samples/widgets/searchctrl.rb +159 -0
  516. data/samples/widgets/slider.rb +594 -0
  517. data/samples/widgets/spinbtn.rb +443 -0
  518. data/samples/widgets/statbmp.rb +130 -0
  519. data/samples/widgets/static.rb +436 -0
  520. data/samples/widgets/textctrl.rb +700 -0
  521. data/samples/widgets/timepick.rb +148 -0
  522. data/samples/widgets/tn_widgets.png +0 -0
  523. data/samples/widgets/toggle.rb +385 -0
  524. data/samples/widgets/widgets.rb +1229 -0
  525. data/samples/xrc/custom_xrc_sample.rb +47 -41
  526. data/samples/xrc/xrc_sample.rb +53 -47
  527. data/tests/test_config.rb +207 -42
  528. data/tests/test_event_handling.rb +52 -34
  529. data/tests/test_events.rb +7 -0
  530. data/tests/test_item_data.rb +24 -0
  531. data/tests/test_persistence.rb +142 -0
  532. data/tests/test_sizer.rb +44 -1
  533. data/tests/test_validators.rb +805 -0
  534. metadata +103 -137
  535. data/lib/wx/core/choice.rb +0 -14
  536. data/lib/wx/core/combo_ctrl.rb +0 -110
  537. data/samples/bigdemo/About.rbw +0 -39
  538. data/samples/bigdemo/ColorPanel.rbw +0 -23
  539. data/samples/bigdemo/GridSimple.rbw +0 -78
  540. data/samples/bigdemo/MDIDemo.rbw +0 -57
  541. data/samples/bigdemo/PopupMenu.rbw +0 -146
  542. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  543. data/samples/bigdemo/Sizers.rbw +0 -541
  544. data/samples/bigdemo/bigdemo.rb +0 -817
  545. data/samples/bigdemo/demoTemplate.rbw +0 -33
  546. data/samples/bigdemo/helpfile.htb +0 -0
  547. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  548. data/samples/bigdemo/icons/Test 015.png +0 -0
  549. data/samples/bigdemo/icons/choice.bmp +0 -0
  550. data/samples/bigdemo/icons/combo.bmp +0 -0
  551. data/samples/bigdemo/icons/combo.xpm +0 -27
  552. data/samples/bigdemo/icons/copy.xpm +0 -25
  553. data/samples/bigdemo/icons/cut.xpm +0 -24
  554. data/samples/bigdemo/icons/gauge.bmp +0 -0
  555. data/samples/bigdemo/icons/gauge.xpm +0 -27
  556. data/samples/bigdemo/icons/help.xpm +0 -25
  557. data/samples/bigdemo/icons/list.bmp +0 -0
  558. data/samples/bigdemo/icons/list.xpm +0 -27
  559. data/samples/bigdemo/icons/mondrian.ico +0 -0
  560. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  561. data/samples/bigdemo/icons/new.xpm +0 -24
  562. data/samples/bigdemo/icons/ogl.ico +0 -0
  563. data/samples/bigdemo/icons/ogl.xpm +0 -45
  564. data/samples/bigdemo/icons/open.xpm +0 -26
  565. data/samples/bigdemo/icons/paste.bmp +0 -0
  566. data/samples/bigdemo/icons/paste.xpm +0 -38
  567. data/samples/bigdemo/icons/pointy.png +0 -0
  568. data/samples/bigdemo/icons/preview.xpm +0 -26
  569. data/samples/bigdemo/icons/print.xpm +0 -26
  570. data/samples/bigdemo/icons/radio.bmp +0 -0
  571. data/samples/bigdemo/icons/radio.xpm +0 -27
  572. data/samples/bigdemo/icons/robert.xpm +0 -415
  573. data/samples/bigdemo/icons/sashtest.ico +0 -0
  574. data/samples/bigdemo/icons/save.xpm +0 -25
  575. data/samples/bigdemo/icons/smiles.bmp +0 -0
  576. data/samples/bigdemo/icons/smiles.xpm +0 -39
  577. data/samples/bigdemo/icons/smiley.ico +0 -0
  578. data/samples/bigdemo/icons/smiley.xpm +0 -42
  579. data/samples/bigdemo/icons/stattext.xpm +0 -24
  580. data/samples/bigdemo/icons/test2.bmp +0 -0
  581. data/samples/bigdemo/icons/test2.png +0 -0
  582. data/samples/bigdemo/icons/test2.xpm +0 -79
  583. data/samples/bigdemo/icons/text.bmp +0 -0
  584. data/samples/bigdemo/icons/text.xpm +0 -27
  585. data/samples/bigdemo/icons/tog1.bmp +0 -0
  586. data/samples/bigdemo/icons/tog1.xpm +0 -38
  587. data/samples/bigdemo/icons/tog2.bmp +0 -0
  588. data/samples/bigdemo/icons/tog2.xpm +0 -38
  589. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  590. data/samples/bigdemo/icons/wxwin.ico +0 -0
  591. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  592. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  593. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  594. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  595. data/samples/bigdemo/run.rb +0 -98
  596. data/samples/bigdemo/tips.txt +0 -7
  597. data/samples/bigdemo/utils.rb +0 -20
  598. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  599. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  600. data/samples/bigdemo/wxButton.rbw +0 -64
  601. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  602. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  603. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  604. data/samples/bigdemo/wxChoice.rbw +0 -47
  605. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  606. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  607. data/samples/bigdemo/wxComboBox.rbw +0 -77
  608. data/samples/bigdemo/wxCursor.rbw +0 -136
  609. data/samples/bigdemo/wxDialog.rbw +0 -74
  610. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  611. data/samples/bigdemo/wxDragImage.rbw +0 -70
  612. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  613. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  614. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  615. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  616. data/samples/bigdemo/wxFrame.rbw +0 -53
  617. data/samples/bigdemo/wxGauge.rbw +0 -65
  618. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  619. data/samples/bigdemo/wxGrid.rbw +0 -66
  620. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  621. data/samples/bigdemo/wxListBox.rbw +0 -140
  622. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  623. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  624. data/samples/bigdemo/wxMenu.rbw +0 -247
  625. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  626. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  627. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  628. data/samples/bigdemo/wxNotebook.rbw +0 -136
  629. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  630. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  631. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  632. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  633. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  634. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  635. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  636. data/samples/bigdemo/wxSlider.rbw +0 -42
  637. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  638. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  639. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  640. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  641. data/samples/bigdemo/wxStaticText.rbw +0 -55
  642. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  643. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  644. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  645. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  646. data/samples/bigdemo/wxToolBar.rbw +0 -131
  647. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  648. data/samples/caret/caret.rb +0 -298
  649. data/samples/caret/mondrian.xpm +0 -44
  650. data/samples/controls/books.rb +0 -189
  651. data/samples/controls/choice.xpm +0 -27
  652. data/samples/controls/combo.xpm +0 -27
  653. data/samples/controls/controls.rb +0 -1099
  654. data/samples/controls/gauge.xpm +0 -27
  655. data/samples/controls/list.xpm +0 -27
  656. data/samples/controls/mondrian.ico +0 -0
  657. data/samples/controls/mondrian.xpm +0 -44
  658. data/samples/controls/radio.xpm +0 -27
  659. data/samples/controls/stattext.xpm +0 -24
  660. data/samples/controls/test2.bmp +0 -0
  661. data/samples/controls/text.xpm +0 -27
  662. data/samples/controls/tn_books.png +0 -0
  663. data/samples/controls/tn_controls.png +0 -0
  664. data/samples/etc/choice.rb +0 -87
  665. data/samples/etc/tn_choice.png +0 -0
  666. data/samples/text/mondrian.ico +0 -0
  667. data/samples/text/mondrian.xpm +0 -44
  668. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -0,0 +1,1229 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, 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 'wx'
9
+
10
+ module Widgets
11
+
12
+ if Wx.has_feature?(:USE_TREEBOOK)
13
+ BookCtrl = Wx::Treebook
14
+ elsif Wx.has_feature?(:USE_NOTEBOOK)
15
+ BookCtrl = Wx::Notebook
16
+ else
17
+ BookCtrl = Wx::Choicebook
18
+ end
19
+
20
+ ICON_SIZE = 16
21
+
22
+ NATIVE_PAGE = 0
23
+ GENERIC_PAGE = 1
24
+ PICKER_PAGE = 2
25
+ COMBO_PAGE = 3
26
+ WITH_ITEMS_PAGE = 4
27
+ EDITABLE_PAGE = 5
28
+ BOOK_PAGE = 6
29
+ ALL_PAGE = 7
30
+ MAX_PAGES = 8
31
+
32
+ NATIVE_CTRLS = 1 << NATIVE_PAGE
33
+ GENERIC_CTRLS = 1 << GENERIC_PAGE
34
+ PICKER_CTRLS = 1 << PICKER_PAGE
35
+ COMBO_CTRLS = 1 << COMBO_PAGE
36
+ WITH_ITEMS_CTRLS = 1 << WITH_ITEMS_PAGE
37
+ EDITABLE_CTRLS = 1 << EDITABLE_PAGE
38
+ BOOK_CTRLS = 1 << BOOK_PAGE
39
+ ALL_CTRLS = 1 << ALL_PAGE
40
+
41
+ class Attributes
42
+
43
+ attr_accessor :tool_tip if Wx.has_feature?(:USE_TOOLTIPS)
44
+ attr_accessor :font if Wx.has_feature?(:USE_FONTDLG)
45
+ attr_accessor :col_fg, :col_bg, :col_page_bg
46
+ attr_accessor :enabled, :show, :dir, :variant, :cursor, :default_flags
47
+
48
+ def initialize
49
+ @tool_tip = 'This is a tooltip'
50
+ @enabled = true
51
+ @show = true
52
+ @dir = Wx::LayoutDirection::Layout_Default
53
+ @variant = Wx::WindowVariant::WINDOW_VARIANT_NORMAL
54
+ @cursor = Wx::NULL_CURSOR
55
+ @default_flags = Wx::Border::BORDER_DEFAULT
56
+ end
57
+
58
+ end
59
+
60
+ class Page < Wx::Panel
61
+
62
+ ATTRS = Attributes.new
63
+
64
+ def initialize(book, images, icon)
65
+ super(book, Wx::ID_ANY, style: Wx::CLIP_CHILDREN | Wx::TAB_TRAVERSAL)
66
+ images << Wx.Image(icon).scale(ICON_SIZE, ICON_SIZE).to_bitmap
67
+ end
68
+
69
+ # return the control shown by this page
70
+ def get_widget
71
+ nil
72
+ end
73
+
74
+ # return the control shown by this page, if it supports text entry interface
75
+ def get_text_entry
76
+ nil
77
+ end
78
+
79
+ # lazy creation of the content
80
+ def create_content
81
+ ::Kernel.raise NotImplementedError
82
+ end
83
+
84
+ # some pages show additional controls, in this case override this one to
85
+ # return all of them (including the one returned by GetWidget())
86
+ def get_widgets
87
+ [get_widget]
88
+ end
89
+
90
+ # recreate the control shown by this page
91
+ #
92
+ # this is currently used only to take into account the border flags
93
+ def recreate_widget
94
+ ::Kernel.raise NotImplementedError
95
+ end
96
+
97
+ # apply current attributes to the widget(s)
98
+ def set_up_widget
99
+ widgets = get_widgets
100
+
101
+ widgets.each do |widget|
102
+ ::Kernel.raise 'nil widget' if widget.nil?
103
+
104
+ if Wx.has_feature?(:USE_TOOLTIPS)
105
+ widget.set_tool_tip(get_attrs.tool_tip)
106
+ end # wxUSE_TOOLTIPS
107
+ if Wx.has_feature?(:USE_FONTDLG)
108
+ widget.set_font(get_attrs.font) if get_attrs.font&.ok?
109
+ end # wxUSE_FONTDLG
110
+
111
+ widget.set_foreground_colour(get_attrs.col_fg) if get_attrs.col_fg&.ok?
112
+ widget.set_background_colour(get_attrs.col_bg) if get_attrs.col_bg&.ok?
113
+
114
+ widget.set_layout_direction(get_attrs.dir) if get_attrs.dir != Wx::LayoutDirection::Layout_Default
115
+
116
+ widget.enable(get_attrs.enabled)
117
+ widget.show(get_attrs.show)
118
+
119
+ widget.set_cursor(get_attrs.cursor)
120
+
121
+ widget.set_window_variant(get_attrs.variant)
122
+
123
+ widget.refresh
124
+ end
125
+
126
+ if get_attrs.col_page_bg&.ok?
127
+ set_background_colour(get_attrs.col_page_bg)
128
+ refresh
129
+ end
130
+ end
131
+
132
+ # the default attributes for the widget
133
+ def get_attrs
134
+ Page::ATTRS
135
+ end
136
+
137
+ # return true if we're showing logs in the log window (always the case
138
+ # except during startup and shutdown)
139
+ def self.is_using_log_window
140
+ Wx.get_app.is_using_log_window
141
+ end
142
+
143
+ protected
144
+
145
+ # several helper functions for page creation
146
+
147
+ # create a horz sizer containing the given control and the text ctrl
148
+ # (pointer to which will be returned next to sizer)
149
+ # with the specified id
150
+ def create_sizer_with_text(control, id = Wx::ID_ANY)
151
+ sizerRow = Wx::HBoxSizer.new
152
+ text = Wx::TextCtrl.new(control.parent, id, style: Wx::TE_PROCESS_ENTER)
153
+
154
+ sizerRow.add(control, Wx::SizerFlags.new(0).border(Wx::RIGHT).centre_vertical)
155
+ sizerRow.add(text, Wx::SizerFlags.new(1).border(Wx::LEFT).centre_vertical)
156
+
157
+ [sizerRow, text]
158
+ end
159
+
160
+ # create a sizer containing a label and a text ctrl
161
+ def create_sizer_with_text_and_label(label, id = Wx::ID_ANY, statBoxParent = nil)
162
+ create_sizer_with_text(Wx::StaticText.new(statBoxParent ? statBoxParent: self, Wx::ID_ANY, label), id)
163
+ end
164
+
165
+ # create a sizer containing a button and a text ctrl
166
+ def create_sizer_with_text_and_button(idBtn, labelBtn, id = Wx::ID_ANY, statBoxParent = nil)
167
+ create_sizer_with_text(Wx::Button.new(statBoxParent ? statBoxParent: self, idBtn, labelBtn), id)
168
+ end
169
+
170
+ # create a checkbox and add it to the sizer
171
+ def create_check_box_and_add_to_sizer(sizer, label, id = Wx::ID_ANY, statBoxParent = nil)
172
+ checkbox = Wx::CheckBox.new(statBoxParent ? statBoxParent: self, id, label)
173
+ sizer.add(checkbox, Wx::SizerFlags.new.horz_border)
174
+ sizer.add_spacer(2)
175
+
176
+ checkbox
177
+ end
178
+
179
+ class << self
180
+ # the list containing info about all pages
181
+ def widget_pages
182
+ @widget_pages ||= []
183
+ end
184
+ end
185
+ end
186
+
187
+ class PageInfo
188
+
189
+ # our ctor
190
+ def initialize(klass, label, categories = 0)
191
+ @klass = klass
192
+ @label = label
193
+ @categories = Widgets::ALL_CTRLS | categories
194
+ # dummy sorting: add and immediately sort in the list according to label
195
+ if Page.widget_pages.empty? || (pg_gt = Page.widget_pages.bsearch_index { |p| p.label > @label }).nil?
196
+ # add when first (or 'largest' label)
197
+ Page.widget_pages << self
198
+ else
199
+ Page.widget_pages.insert(pg_gt, self)
200
+ end
201
+ end
202
+
203
+ def create(book, images)
204
+ @klass.new(book, images)
205
+ end
206
+
207
+ # the label of the page
208
+ attr_reader :label
209
+
210
+ # the list (flags) for sharing page between categories
211
+ attr_reader :categories
212
+
213
+ # the class of this page
214
+ attr_reader :klass
215
+ end
216
+
217
+ if Wx.has_feature?(:USE_LOG)
218
+ # A log target which just redirects the messages to a listbox
219
+ class LboxLogger < Wx::Log
220
+
221
+ def initialize(lbox, logOld)
222
+ super()
223
+ @lbox = lbox
224
+ #@lbox->Disable() -- looks ugly under MSW
225
+ @logOld = logOld
226
+ end
227
+
228
+ def reset
229
+ Wx::Log.set_active_target(@logOld)
230
+ end
231
+
232
+ protected
233
+
234
+ # implement sink functions
235
+
236
+ def do_log_record(level, msg, info)
237
+ if level == Wx::LOG_Trace
238
+ @logOld.log_record(level, msg, info) if @logOld
239
+ else
240
+ super
241
+ end
242
+ end
243
+
244
+ def do_log_text_at_level(level, msg)
245
+ # if Wx.has_feature?(:WXUNIVERSAL)
246
+ # @lbox.append_and_ensure_visible(msg)
247
+ # else # other ports don't have this method yet
248
+ @lbox.append(msg)
249
+ @lbox.set_first_item(@lbox.count - 1)
250
+ # end
251
+ end
252
+
253
+ end
254
+ end # USE_LOG
255
+
256
+ Categories = [
257
+ # if Wx.has_feature?(:WXUNIVERSAL)
258
+ # 'Universal'
259
+ # else
260
+ 'Native',
261
+ # end,
262
+ 'Generic',
263
+ 'Pickers',
264
+ 'Comboboxes',
265
+ 'With items',
266
+ 'Editable',
267
+ 'Books',
268
+ 'All controls'
269
+ ]
270
+
271
+ class Frame < Wx::Frame
272
+
273
+ module ID
274
+ include Wx::IDHelper
275
+
276
+ Widgets_ClearLog = self.next_id
277
+ Widgets_Quit = self.next_id
278
+
279
+ Widgets_BookCtrl = self.next_id
280
+
281
+ if Wx.has_feature?(:USE_TOOLTIPS)
282
+ Widgets_SetTooltip = self.next_id
283
+ end # wxUSE_TOOLTIPS
284
+ Widgets_SetFgColour = self.next_id
285
+ Widgets_SetBgColour = self.next_id
286
+ Widgets_SetPageBg = self.next_id
287
+ Widgets_SetFont = self.next_id
288
+ Widgets_Enable = self.next_id
289
+ Widgets_Show = self.next_id
290
+
291
+ Widgets_BorderNone = self.next_id
292
+ Widgets_BorderStatic = self.next_id
293
+ Widgets_BorderSimple = self.next_id
294
+ Widgets_BorderRaised = self.next_id
295
+ Widgets_BorderSunken = self.next_id
296
+ Widgets_BorderDouble = self.next_id
297
+ Widgets_BorderDefault = self.next_id
298
+
299
+ Widgets_VariantNormal = self.next_id
300
+ Widgets_VariantSmall = self.next_id
301
+ Widgets_VariantMini = self.next_id
302
+ Widgets_VariantLarge = self.next_id
303
+
304
+ Widgets_LayoutDirection = self.next_id
305
+
306
+ Widgets_GlobalBusyCursor = self.next_id
307
+ Widgets_BusyCursor = self.next_id
308
+
309
+ Widgets_GoToPage = self.next_id
310
+ Widgets_GoToPageLast = self.next_id(Widgets_GoToPage + 100)
311
+
312
+
313
+ TextEntry_Begin = self.next_id
314
+ TextEntry_DisableAutoComplete = TextEntry_Begin
315
+ TextEntry_AutoCompleteFixed = self.next_id
316
+ TextEntry_AutoCompleteFilenames = self.next_id
317
+ TextEntry_AutoCompleteDirectories = self.next_id
318
+ TextEntry_AutoCompleteCustom = self.next_id
319
+ TextEntry_AutoCompleteKeyLength = self.next_id
320
+
321
+ TextEntry_SetHint = self.next_id
322
+ TextEntry_End = self.next_id
323
+
324
+ Last = self.next_id
325
+ end
326
+
327
+ def initialize(title)
328
+ super(nil, Wx::ID_ANY, title)
329
+
330
+ set_icon(Wx.Icon(:sample, art_path: File.dirname(__dir__)))
331
+
332
+ # init everything
333
+ if Wx.has_feature?(:USE_LOG)
334
+ @lboxLog = nil
335
+ @logTarget = nil
336
+ end # USE_LOG
337
+ @book = nil
338
+
339
+ if Wx.has_feature?(:USE_MENUS)
340
+ # create the menubar
341
+ mbar = Wx::MenuBar.new
342
+ menuWidget = Wx::Menu.new
343
+ if Wx.has_feature?(:USE_TOOLTIPS)
344
+ menuWidget.append(ID::Widgets_SetTooltip, "Set &tooltip...\tCtrl-T")
345
+ menuWidget.append_separator
346
+ end # wxUSE_TOOLTIPS
347
+ menuWidget.append(ID::Widgets_SetFgColour, "Set &foreground...\tCtrl-F")
348
+ menuWidget.append(ID::Widgets_SetBgColour, "Set &background...\tCtrl-B")
349
+ menuWidget.append(ID::Widgets_SetPageBg, "Set &page background...\tShift-Ctrl-B")
350
+ menuWidget.append(ID::Widgets_SetFont, "Set f&ont...\tCtrl-O")
351
+ menuWidget.append_check_item(ID::Widgets_Enable, "&Enable/disable\tCtrl-E")
352
+ menuWidget.append_check_item(ID::Widgets_Show, "Show/Hide")
353
+
354
+ menuBorders = Wx::Menu.new
355
+ menuBorders.append_radio_item(ID::Widgets_BorderDefault, "De&fault\tCtrl-Shift-9")
356
+ menuBorders.append_radio_item(ID::Widgets_BorderNone, "&None\tCtrl-Shift-0")
357
+ menuBorders.append_radio_item(ID::Widgets_BorderSimple, "&Simple\tCtrl-Shift-1")
358
+ menuBorders.append_radio_item(ID::Widgets_BorderDouble, "&Double\tCtrl-Shift-2")
359
+ menuBorders.append_radio_item(ID::Widgets_BorderStatic, "Stati&c\tCtrl-Shift-3")
360
+ menuBorders.append_radio_item(ID::Widgets_BorderRaised, "&Raised\tCtrl-Shift-4")
361
+ menuBorders.append_radio_item(ID::Widgets_BorderSunken, "S&unken\tCtrl-Shift-5")
362
+ menuWidget.append_sub_menu(menuBorders, "Set &border")
363
+
364
+ menuVariants = Wx::Menu.new
365
+ menuVariants.append_radio_item(ID::Widgets_VariantMini, "&Mini\tCtrl-Shift-6")
366
+ menuVariants.append_radio_item(ID::Widgets_VariantSmall, "&Small\tCtrl-Shift-7")
367
+ menuVariants.append_radio_item(ID::Widgets_VariantNormal, "&Normal\tCtrl-Shift-8")
368
+ menuVariants.append_radio_item(ID::Widgets_VariantLarge, "&Large\tCtrl-Shift-9")
369
+ menuWidget.append_sub_menu(menuVariants, "Set &variant")
370
+
371
+ menuWidget.append_separator
372
+ menuWidget.append_check_item(ID::Widgets_LayoutDirection,
373
+ "Toggle &layout direction\tCtrl-L")
374
+ menuWidget.check(ID::Widgets_LayoutDirection,
375
+ get_layout_direction == Wx::LayoutDirection::Layout_RightToLeft)
376
+
377
+ menuWidget.append_separator
378
+ menuWidget.append_check_item(ID::Widgets_GlobalBusyCursor,
379
+ "Toggle &global busy cursor\tCtrl-Shift-U")
380
+ menuWidget.append_check_item(ID::Widgets_BusyCursor,
381
+ "Toggle b&usy cursor\tCtrl-U")
382
+
383
+ menuWidget.append_separator
384
+ menuWidget.append(Wx::ID_EXIT, "&Quit\tCtrl-Q")
385
+ mbar.append(menuWidget, "&Widget")
386
+
387
+ menuTextEntry = Wx::Menu.new
388
+ menuTextEntry.append_radio_item(ID::TextEntry_DisableAutoComplete,
389
+ "&Disable auto-completion")
390
+ menuTextEntry.append_radio_item(ID::TextEntry_AutoCompleteFixed,
391
+ "Fixed-&list auto-completion")
392
+ menuTextEntry.append_radio_item(ID::TextEntry_AutoCompleteFilenames,
393
+ "&Files names auto-completion")
394
+ menuTextEntry.append_radio_item(ID::TextEntry_AutoCompleteDirectories,
395
+ "&Directories names auto-completion")
396
+ menuTextEntry.append_radio_item(ID::TextEntry_AutoCompleteCustom,
397
+ "&Custom auto-completion")
398
+ menuTextEntry.append_radio_item(ID::TextEntry_AutoCompleteKeyLength,
399
+ "Custom with &min length")
400
+ menuTextEntry.append_separator
401
+ menuTextEntry.append(ID::TextEntry_SetHint, "Set help &hint")
402
+
403
+ mbar.append(menuTextEntry, "&Text")
404
+
405
+ set_menu_bar(mbar)
406
+
407
+ mbar.check(ID::Widgets_Enable, true)
408
+ mbar.check(ID::Widgets_Show, true)
409
+
410
+ mbar.check(ID::Widgets_VariantNormal, true)
411
+ end # wxUSE_MENUS
412
+
413
+ # create controls
414
+ @panel = Wx::Panel.new(self)
415
+
416
+ sizerTop = Wx::VBoxSizer.new
417
+
418
+ # we have 2 panes: book with pages demonstrating the controls in the
419
+ # upper one and the log window with some buttons in the lower
420
+
421
+ style = Wx::BK_DEFAULT
422
+ # Uncomment to suppress page theme (draw in solid colour)
423
+ #style |= Wx::NB_NOPAGETHEME
424
+
425
+ @book = Widgets::BookCtrl.new(@panel, ID::Widgets_BookCtrl,
426
+ style: style, name: 'Widgets')
427
+
428
+ init_book
429
+
430
+ # the lower one only has the log listbox and a button to clear it
431
+ if Wx.has_feature?(:USE_LOG)
432
+ sizerDown = Wx::StaticBoxSizer.new(Wx::VERTICAL, @panel, '&Log window')
433
+ sizerDownBox = sizerDown.get_static_box
434
+
435
+ @lboxLog = Wx::ListBox.new(sizerDownBox)
436
+ sizerDown.add(@lboxLog, Wx::SizerFlags.new(1).expand.border)
437
+ sizerDown.set_min_size(100, 150)
438
+ else
439
+ sizerDown = Wx::VBoxSizer.new
440
+ end # USE_LOG
441
+
442
+ sizerBtns = Wx::HBoxSizer.new
443
+ if Wx.has_feature?(:USE_LOG)
444
+ btn = Wx::Button.new(sizerDownBox, ID::Widgets_ClearLog, 'Clear &log')
445
+ sizerBtns.add(btn)
446
+ sizerBtns.add_spacer(10)
447
+ end # USE_LOG
448
+ btn = Wx::Button.new(sizerDownBox, ID::Widgets_Quit, 'E&xit')
449
+ sizerBtns.add(btn)
450
+ sizerDown.add(sizerBtns, Wx::SizerFlags.new.border.right)
451
+
452
+ # put everything together
453
+ sizerTop.add(@book, Wx::SizerFlags.new(1).expand.double_border(Wx::ALL & ~(Wx::TOP | Wx::BOTTOM)))
454
+ sizerTop.add_spacer(5)
455
+ sizerTop.add(sizerDown, Wx::SizerFlags.new(0).expand.double_border(Wx::ALL & ~Wx::TOP))
456
+
457
+ @panel.set_sizer(sizerTop)
458
+
459
+ sizeSet = Wx.persistent_register_and_restore(self, "Main")
460
+
461
+ sizeMin = @panel.get_best_size
462
+ set_client_size(sizeMin) unless sizeSet
463
+ set_min_client_size(sizeMin)
464
+
465
+ # connect the event handlers
466
+ if Wx.has_feature?(:USE_LOG)
467
+ evt_button(ID::Widgets_ClearLog, :on_button_clear_log)
468
+ end # USE_LOG
469
+ evt_button(ID::Widgets_Quit, :on_exit)
470
+
471
+ if Wx.has_feature?(:USE_TOOLTIPS)
472
+ evt_menu(ID::Widgets_SetTooltip, :on_set_tooltip)
473
+ end # wxUSE_TOOLTIPS
474
+
475
+ if Wx.has_feature?(:USE_TREEBOOK)
476
+ evt_treebook_page_changing(Wx::ID_ANY, :on_page_changing)
477
+ elsif Wx.has_feature?(:USE_NOTEBOOK)
478
+ evt_notebook_page_changing(Wx::ID_ANY, :on_page_changing)
479
+ else
480
+ evt_choicebook_page_changing(Wx::ID_ANY, :on_page_changing)
481
+ end
482
+ if Wx.has_feature?(:USE_MENUS)
483
+ evt_menu_range(ID::Widgets_GoToPage, ID::Widgets_GoToPageLast,
484
+ :on_go_to_page)
485
+
486
+ evt_menu(ID::Widgets_SetFgColour, :on_set_fg_col)
487
+ evt_menu(ID::Widgets_SetBgColour, :on_set_bg_col)
488
+ evt_menu(ID::Widgets_SetPageBg, :on_set_page_bg)
489
+ evt_menu(ID::Widgets_SetFont, :on_set_font)
490
+ evt_menu(ID::Widgets_Enable, :on_enable)
491
+ evt_menu(ID::Widgets_Show, :on_show)
492
+
493
+ evt_menu_range(ID::Widgets_BorderNone, ID::Widgets_BorderDefault,
494
+ :on_set_border)
495
+
496
+ evt_menu_range(ID::Widgets_VariantNormal, ID::Widgets_VariantLarge,
497
+ :on_set_variant)
498
+
499
+ evt_menu(ID::Widgets_LayoutDirection, :on_toggle_layout_direction)
500
+
501
+ evt_menu(ID::Widgets_GlobalBusyCursor, :on_toggle_global_busy_cursor)
502
+ evt_menu(ID::Widgets_BusyCursor, :on_toggle_busy_cursor)
503
+
504
+ evt_menu(ID::TextEntry_DisableAutoComplete, :on_disable_auto_complete)
505
+ evt_menu(ID::TextEntry_AutoCompleteFixed, :on_auto_complete_fixed)
506
+ evt_menu(ID::TextEntry_AutoCompleteFilenames, :on_auto_complete_filenames)
507
+ evt_menu(ID::TextEntry_AutoCompleteDirectories, :on_auto_complete_directories)
508
+ evt_menu(ID::TextEntry_AutoCompleteCustom, :on_auto_complete_custom)
509
+ evt_menu(ID::TextEntry_AutoCompleteKeyLength, :on_auto_complete_key_length)
510
+
511
+ evt_menu(ID::TextEntry_SetHint, :on_set_hint)
512
+
513
+ evt_update_ui_range(ID::TextEntry_Begin, ID::TextEntry_End - 1,
514
+ :on_update_text_ui)
515
+
516
+ evt_menu(Wx::ID_EXIT, :on_exit)
517
+ end # wxUSE_MENUS
518
+
519
+ if Wx.has_feature?(:USE_LOG)
520
+ # now that everything is created we can redirect the log messages to the
521
+ # listbox
522
+ @logTarget = LboxLogger.new(@lboxLog, Wx::Log.get_active_target)
523
+ Wx::Log.set_active_target(@logTarget)
524
+ end
525
+ end
526
+
527
+ protected
528
+
529
+ if Wx.has_feature?(:USE_LOG)
530
+ def on_button_clear_log(_event)
531
+ @lboxLog.clear
532
+ end
533
+ end # USE_LOG
534
+
535
+ def on_exit(_event)
536
+ @logTarget.reset if @logTarget
537
+ @logTarget = nil
538
+ close
539
+ end
540
+
541
+ if Wx.has_feature?(:USE_MENUS)
542
+
543
+ def on_page_changing(event)
544
+ if Wx.has_feature?(:USE_TREEBOOK)
545
+ # don't allow selection of entries without pages (categories)
546
+ event.veto unless @book.get_page(event.selection)
547
+ end
548
+ end
549
+
550
+ def on_page_changed(event)
551
+ sel = event.selection
552
+
553
+ # adjust "Page" menu selection
554
+ item, _ = get_menu_bar.find_item(ID::Widgets_GoToPage + sel)
555
+ item.check if item
556
+
557
+ get_menu_bar.check(ID::Widgets_BusyCursor, false)
558
+
559
+ # create the pages on demand, otherwise the sample startup is too slow as
560
+ # it creates hundreds of controls
561
+ curPage = current_page
562
+ if curPage.get_children.empty?
563
+ Wx::WindowUpdateLocker.update(curPage) do
564
+ curPage.create_content
565
+ curPage.layout
566
+
567
+ connect_to_widget_events
568
+ end
569
+ end
570
+
571
+ # re-apply the attributes to the widget(s)
572
+ curPage.set_up_widget
573
+
574
+ event.skip
575
+ end
576
+
577
+ def on_go_to_page(event)
578
+ if Wx.has_feature?(:USE_TREEBOOK)
579
+ @book.set_selection(event.id - ID::Widgets_GoToPage)
580
+ else
581
+ @book.set_selection(@book.get_page_count-1)
582
+ book = @book.get_current_page
583
+ book.set_selection(event.id - ID::Widgets_GoToPage)
584
+ end
585
+ end
586
+
587
+ if Wx.has_feature?(:USE_TOOLTIPS)
588
+ def on_set_tooltip(_event)
589
+ Wx.TextEntryDialog(self,
590
+ 'Tooltip text (may use \\n, leave empty to remove): ',
591
+ 'Widgets sample',
592
+ Page::ATTRS.tool_tip) do |dialog|
593
+ return if dialog.show_modal != Wx::ID_OK
594
+
595
+ Page::ATTRS.tool_tip = dialog.value
596
+ Page::ATTRS.tool_tip.gsub!("\\n", "\n")
597
+ end
598
+
599
+ current_page.set_up_widget
600
+ end
601
+ end # wxUSE_TOOLTIPS
602
+
603
+ # Trivial wrapper for wxGetColourFromUser() which also does something even if
604
+ # the colour dialog is not available in the current build (which may happen
605
+ # for the ports in development and it is still useful to see how colours work)
606
+ def get_colour_from_user(colDefault)
607
+ if Wx.has_feature?(:USE_COLOURDLG)
608
+ Wx.get_colour_from_user(self, colDefault)
609
+ else # !wxUSE_COLOURDLG
610
+ if colDefault == Wx::BLACK
611
+ Wx::WHITE
612
+ else
613
+ Wx::BLACK
614
+ end
615
+ end # wxUSE_COLOURDLG/!wxUSE_COLOURDLG
616
+ end
617
+
618
+ def on_set_fg_col(_event)
619
+ # allow for debugging the default colour the first time this is called
620
+ page = current_page
621
+
622
+ unless Page::ATTRS.col_fg&.ok?
623
+ Page::ATTRS.col_fg = page.get_foreground_colour
624
+ end
625
+
626
+ col = get_colour_from_user(Page::ATTRS.col_fg)
627
+ return unless col&.ok?
628
+
629
+ Page::ATTRS.col_fg = col
630
+
631
+ page.set_up_widget
632
+ end
633
+
634
+ def on_set_bg_col(_event)
635
+ # allow for debugging the default colour the first time this is called
636
+ page = current_page
637
+
638
+ unless Page::ATTRS.col_bg&.ok?
639
+ Page::ATTRS.col_bg = page.get_background_colour
640
+ end
641
+
642
+ col = get_colour_from_user(Page::ATTRS.col_bg)
643
+ return unless col&.ok?
644
+
645
+ Page::ATTRS.col_bg = col
646
+
647
+ page.set_up_widget
648
+ end
649
+
650
+ def on_set_page_bg(_event)
651
+ col = get_colour_from_user(get_background_colour)
652
+ return unless col&.ok?
653
+
654
+ Page::ATTRS.col_page_bg = col
655
+
656
+ current_page.set_up_widget
657
+ end
658
+
659
+ def on_set_font(_event)
660
+ if Wx.has_feature?(:USE_FONTDLG)
661
+ page = current_page
662
+
663
+ unless Page::ATTRS.font&.ok?
664
+ Page::ATTRS.font = page.get_font
665
+ end
666
+
667
+ font = Wx.get_font_from_user(self, Page::ATTRS.font)
668
+ return unless font&.ok?
669
+
670
+ Page::ATTRS.font = font
671
+
672
+ page.set_up_widget
673
+ # The best size of the widget could have changed after changing its font,
674
+ # so re-layout to show it correctly.
675
+ page.layout
676
+ else
677
+ Wx.log_message('Font selection dialog not available in current build.')
678
+ end
679
+ end
680
+
681
+ def on_enable(event)
682
+ Page::ATTRS.enabled = event.checked?
683
+
684
+ current_page.set_up_widget
685
+ end
686
+
687
+ def on_show(event)
688
+ Page::ATTRS.show = event.checked?
689
+
690
+ current_page.set_up_widget
691
+ end
692
+
693
+ def on_set_border(event)
694
+ case event.id
695
+ when ID::Widgets_BorderNone
696
+ border = Wx::BORDER_NONE
697
+ when ID::Widgets_BorderStatic
698
+ border = Wx::BORDER_STATIC
699
+ when ID::Widgets_BorderSimple
700
+ border = Wx::BORDER_SIMPLE
701
+ when ID::Widgets_BorderRaised
702
+ border = Wx::BORDER_RAISED
703
+ when ID::Widgets_BorderSunken
704
+ border = Wx::BORDER_SUNKEN
705
+ when ID::Widgets_BorderDouble
706
+ border = Wx::BORDER_DOUBLE
707
+ when ID::Widgets_BorderDefault
708
+ border = Wx::BORDER_DEFAULT
709
+ else
710
+ ::Kernel.raise RuntimeError, 'unknown border style'
711
+ end
712
+
713
+ Page::ATTRS.default_flags &= ~Wx::BORDER_MASK
714
+ Page::ATTRS.default_flags |= border
715
+
716
+ page = current_page
717
+
718
+ page.recreate_widget
719
+
720
+ connect_to_widget_events
721
+
722
+ # re-apply the attributes to the widget(s)
723
+ page.set_up_widget
724
+ end
725
+
726
+ def on_set_variant(event)
727
+ case event.id
728
+ when ID::Widgets_VariantSmall
729
+ v = Wx::WINDOW_VARIANT_SMALL
730
+ when ID::Widgets_VariantMini
731
+ v = Wx::WINDOW_VARIANT_MINI
732
+ when ID::Widgets_VariantLarge
733
+ v = Wx::WINDOW_VARIANT_LARGE
734
+ when ID::Widgets_VariantNormal
735
+ v = Wx::WINDOW_VARIANT_NORMAL
736
+ else
737
+ ::Kernel.raise RuntimeError, 'unknown window variant'
738
+ end
739
+
740
+ Page::ATTRS.variant = v
741
+
742
+ current_page.set_up_widget
743
+ current_page.layout
744
+ end
745
+
746
+ def on_toggle_layout_direction(_event)
747
+ dir = Page::ATTRS.dir
748
+ dir = get_layout_direction if dir == Wx::LayoutDirection::Layout_Default
749
+ Page::ATTRS.dir =
750
+ (dir == Wx::LayoutDirection::Layout_LeftToRight) ?
751
+ Wx::LayoutDirection::Layout_RightToLeft :
752
+ Wx::LayoutDirection::Layout_LeftToRight
753
+
754
+ current_page.set_up_widget
755
+ end
756
+
757
+ def on_toggle_global_busy_cursor(event)
758
+ if event.checked?
759
+ Wx.begin_busy_cursor
760
+ else
761
+ Wx.end_busy_cursor
762
+ end
763
+ end
764
+
765
+ def on_toggle_busy_cursor(event)
766
+ Page::ATTRS.cursor = event.checked? ? Wx::HOURGLASS_CURSOR : Wx::NULL_CURSOR
767
+
768
+ current_page.set_up_widget
769
+ end
770
+
771
+ # wxTextEntry-specific tests
772
+ def on_disable_auto_complete(_event)
773
+ unless (entry = current_page.get_text_entry)
774
+ Wx.log_error('menu item should be disabled')
775
+ return
776
+ end
777
+
778
+ if entry.auto_complete(nil)
779
+ Wx.log_message('Disabled auto completion.')
780
+ else
781
+ Wx.log_message('auto_complete() failed.')
782
+ end
783
+ end
784
+
785
+ def on_auto_complete_fixed(_event)
786
+ unless (entry = current_page.get_text_entry)
787
+ Wx.log_error('menu item should be disabled')
788
+ return
789
+ end
790
+
791
+ completion_choices = (?a..?z).collect { |c| c*2 }
792
+ completion_choices <<
793
+ 'is this string for test?' <<
794
+ 'this is a test string' <<
795
+ 'this is another test string' <<
796
+ 'this string is for test'
797
+
798
+ if entry.auto_complete(completion_choices)
799
+ Wx.log_message('Enabled auto completion of a set of fixed strings.')
800
+ else
801
+ Wx.log_message('auto_complete() failed.')
802
+ end
803
+ end
804
+
805
+ def on_auto_complete_filenames(_event)
806
+ unless (entry = current_page.get_text_entry)
807
+ Wx.log_error('menu item should be disabled')
808
+ return
809
+ end
810
+
811
+ if entry.auto_complete_file_names
812
+ Wx.log_message('Enabled auto completion of file names.')
813
+ else
814
+ Wx.log_message('auto_complete_file_names failed.')
815
+ end
816
+ end
817
+
818
+ def on_auto_complete_directories(_event)
819
+ unless (entry = current_page.get_text_entry)
820
+ Wx.log_error('menu item should be disabled')
821
+ return
822
+ end
823
+
824
+ if entry.auto_complete_directories
825
+ Wx.log_message('Enabled auto completion of directories.')
826
+ else
827
+ Wx.log_message('AutoCompleteDirectories() failed.')
828
+ end
829
+ end
830
+
831
+ def on_auto_complete_custom(_event)
832
+ do_use_custom_auto_complete
833
+ end
834
+
835
+ def on_auto_complete_key_length(_event)
836
+ message = "The auto-completion is triggered if and only if\n" +
837
+ "the length of the search key (prefix) is at least [LENGTH].\n" +
838
+ "Hint: 0 disables the length check completely."
839
+ prompt = 'Enter the minimum key length:'
840
+ caption = 'Minimum key length'
841
+
842
+ res = Wx.get_number_from_user(message, prompt, caption, 1, 0, 100, self)
843
+ return if res == -1
844
+
845
+ Wx.log_message("The minimum key length for autocomplete is #{res}.")
846
+
847
+ do_use_custom_auto_complete(res)
848
+ end
849
+
850
+ # This is a simple (and hence rather useless) example of a custom
851
+ # completer class that completes the first word (only) initially and only
852
+ # build the list of the possible second words once the first word is
853
+ # known. This allows to avoid building the full 676000 item list of
854
+ # possible strings all at once as the we have 1000 possibilities for the
855
+ # first word (000..999) and 676 (aa..zz) for the second one.
856
+ class CustomTextCompleter < Wx::TextCompleterSimple
857
+
858
+ def initialize(min_length)
859
+ super()
860
+ @min_length = min_length
861
+ end
862
+
863
+ def get_completions(prefix)
864
+ res = []
865
+ 1.times do
866
+ # Wait for enough text to be entered before proposing completions:
867
+ # this is done to avoid proposing too many of them when the
868
+ # control is empty, for example.
869
+ break if prefix.size < @min_length
870
+
871
+ # The only valid strings start with 3 digits so check for their
872
+ # presence proposing to complete the remaining ones.
873
+ break unless prefix.start_with?(/\d/)
874
+
875
+ if prefix.size == 1
876
+ 10.times { |i| 10.times { |j| res << "#{prefix}#{i}#{j}"} }
877
+ break
878
+ else
879
+ break unless (?0..?9).include?(prefix[1])
880
+ end
881
+
882
+ if prefix.size == 2
883
+ 10.times { |i| res << "#{prefix}#{i}" }
884
+ break
885
+ else
886
+ break unless (?0..?9).include?(prefix[2])
887
+ end
888
+
889
+ # Next we must have a space and two letters.
890
+ prefix2 = prefix.dup
891
+ if prefix.size == 3
892
+ prefix2 += ' '
893
+ elsif prefix[3] != ' '
894
+ break
895
+ end
896
+
897
+ if prefix2.size == 4
898
+ (?a..?z).each { |c| (?a..?z).each { |d| res << "#{prefix2}#{c}#{d}"} }
899
+ break
900
+ else
901
+ break unless (?a..?z).include?(prefix[4])
902
+ end
903
+
904
+ if prefix.size == 5
905
+ (?a..?z).each { |c| res << "#{prefix}#{c}" }
906
+ end
907
+ ensure
908
+ # This is used for illustrative purposes only and shows how many
909
+ # completions we return every time when we're called.
910
+ Wx.log_message("Returning #{res.size} possible completions for prefix \"#{prefix}\"")
911
+ end
912
+ res
913
+ end
914
+
915
+ end
916
+
917
+ def do_use_custom_auto_complete(min_length = 1)
918
+ unless (entry = current_page.get_text_entry)
919
+ Wx.log_error('menu item should be disabled')
920
+ return
921
+ end
922
+
923
+ if entry.auto_complete(CustomTextCompleter.new(min_length))
924
+ Wx.log_message('Enabled custom auto completer for "NNN XX" items ' +
925
+ '(where N is a digit and X is a letter).')
926
+ else
927
+ Wx.log_message('auto_complete() failed.')
928
+ end
929
+ end
930
+
931
+ class << self
932
+
933
+ def s_hint
934
+ @s_hint ||= 'Type here'
935
+ end
936
+
937
+ def s_hint=(v)
938
+ @s_hint = v
939
+ end
940
+
941
+ end
942
+
943
+ def on_set_hint(_event)
944
+ unless (entry = current_page.get_text_entry)
945
+ Wx.log_error('menu item should be disabled')
946
+ return
947
+ end
948
+
949
+ hint = Wx.get_text_from_user('Text hint:', 'Widgets sample', self.class.s_hint, self)
950
+ return if hint.empty?
951
+
952
+ self.class.s_hint = hint
953
+
954
+ if entry.set_hint(hint)
955
+ Wx.log_message("Set hint to \"#{hint}\".")
956
+ else
957
+ Wx.log_message('Text hints not supported.')
958
+ end
959
+ end
960
+
961
+ def on_update_text_ui(event)
962
+ event.enable( !current_page.get_text_entry.nil? )
963
+ end
964
+ end # wxUSE_MENUS
965
+
966
+ # initialize the book: add all pages to it
967
+ def init_book
968
+ images = []
969
+
970
+ img = Wx.Image(:sample, art_path: File.dirname(__dir__))
971
+ images << img.scale(ICON_SIZE, ICON_SIZE).to_bitmap
972
+
973
+ unless Wx.has_feature?(:USE_TREEBOOK)
974
+ books = []
975
+ end
976
+
977
+ pages = []
978
+ labels = []
979
+
980
+ menuPages = Wx::Menu.new
981
+ nPage = 0
982
+ imageId = 1
983
+
984
+ # we need to first create all pages and only then add them to the book
985
+ # as we need the image list first
986
+ #
987
+ # we also construct the pages menu during this first iteration
988
+ MAX_PAGES.times do |cat|
989
+ if Wx.has_feature?(:USE_TREEBOOK)
990
+ nPage += 1 # increase for parent page
991
+ else
992
+ books << BookCtrl.new(@book, style: Wx::BK_DEFAULT)
993
+ end
994
+
995
+ pages << []
996
+ labels << []
997
+ Page.widget_pages.each do |info|
998
+ next if info.categories.nobits?(1 << cat)
999
+
1000
+ page = info.create(
1001
+ if Wx.has_feature?(:USE_TREEBOOK)
1002
+ @book
1003
+ else
1004
+ books.last
1005
+ end,
1006
+ images)
1007
+ pages.last << page
1008
+
1009
+ labels.last << info.label
1010
+ if cat == ALL_PAGE
1011
+ menuPages.append_radio_item(
1012
+ ID::Widgets_GoToPage + nPage,
1013
+ info.label)
1014
+ unless Wx.has_feature?(:USE_TREEBOOK)
1015
+ # consider only for book in book architecture
1016
+ nPage += 1
1017
+ end
1018
+ end
1019
+
1020
+ if Wx.has_feature?(:USE_TREEBOOK)
1021
+ # consider only for treebook architecture (with subpages)
1022
+ nPage += 1
1023
+ end
1024
+ end
1025
+ end
1026
+
1027
+ self.menu_bar.append(menuPages, '&Page')
1028
+
1029
+ images.collect! { |img_| img_.is_a?(Wx::BitmapBundle) ? img_ : Wx::BitmapBundle.new(img_) }
1030
+ @book.set_images(images)
1031
+
1032
+ MAX_PAGES.times do |cat|
1033
+ if Wx.has_feature?(:USE_TREEBOOK)
1034
+ @book.add_page(nil, Categories[cat],false,0)
1035
+ else
1036
+ @book.add_page(books[cat], Categories[cat],false,0)
1037
+ books[cat].set_images(images)
1038
+ end
1039
+
1040
+ # now do add them
1041
+ pages[cat].size.times do |n|
1042
+ if Wx.has_feature?(:USE_TREEBOOK)
1043
+ @book.add_sub_page(
1044
+ pages[cat][n],
1045
+ labels[cat][n],
1046
+ false, # don't select
1047
+ imageId
1048
+ )
1049
+ else
1050
+ books[cat].add_page(
1051
+ pages[cat][n],
1052
+ labels[cat][n],
1053
+ false, # don't select
1054
+ imageId
1055
+ )
1056
+ end
1057
+ imageId += 1
1058
+ end
1059
+ end
1060
+
1061
+ if Wx.has_feature?(:USE_TREEBOOK)
1062
+ evt_treebook_page_changed(ID::Widgets_BookCtrl, :on_page_changed)
1063
+ elsif Wx.has_feature?(:USE_NOTEBOOK)
1064
+ evt_notebook_page_changed(ID::Widgets_BookCtrl, :on_page_changed)
1065
+ else
1066
+ evt_choicebook_page_changed(ID::Widgets_BookCtrl, :on_page_changed)
1067
+ end
1068
+
1069
+ pageSet = Wx.persistent_register_and_restore(@book)
1070
+
1071
+ if Wx.has_feature?(:USE_TREEBOOK)
1072
+ # for treebook page #0 is empty parent page only so select the first page
1073
+ # with some contents
1074
+ @book.set_selection(1) if !pageSet || !@book.get_current_page
1075
+
1076
+ # but ensure that the top of the tree is shown nevertheless
1077
+ tree = @book.get_tree_ctrl
1078
+
1079
+ first_child, _ = tree.get_first_child(tree.root_item)
1080
+ tree.ensure_visible(first_child)
1081
+ else
1082
+ if !pageSet || !@book.get_current_page
1083
+ # for other books set selection twice to force connected event handler
1084
+ # to force lazy creation of initial visible content
1085
+ @book.set_selection(1)
1086
+ @book.set_selection(0)
1087
+ end
1088
+ end # USE_TREEBOOK
1089
+ end
1090
+
1091
+ # return the currently selected page (never null)
1092
+ def current_page
1093
+ page = @book.get_current_page
1094
+
1095
+ unless Wx.has_feature?(:USE_TREEBOOK)
1096
+ ::Kernel.raise 'no WidgetsBookCtrl?' unless page.is_a?(Wx::Treebook)
1097
+
1098
+ page = page.get_current_page
1099
+ end # !USE_TREEBOOK
1100
+
1101
+ page
1102
+ end
1103
+
1104
+ private
1105
+
1106
+ def on_widget_focus(event)
1107
+ # Don't show annoying message boxes when starting or closing the sample,
1108
+ # only log these events in our own logger.
1109
+ if Wx.get_app.is_using_log_window
1110
+ win = event.get_event_object
1111
+ Wx.log_message("Widget '#{win.class.name}' #{event.event_type == Wx::EVT_SET_FOCUS ? "got" : "lost"} focus")
1112
+ end
1113
+
1114
+ event.skip
1115
+ end
1116
+ def on_widget_context_menu(event)
1117
+ win = event.get_event_object
1118
+ Wx.log_message("Context menu event for #{win.class.name} at #{event.position.x}x#{event.position.y}")
1119
+
1120
+ event.skip
1121
+ end
1122
+
1123
+ def connect_to_widget_events
1124
+ widgets = current_page.get_widgets
1125
+
1126
+ widgets.each do |w|
1127
+ ::Kernel.raise RuntimeError, 'nil widget' unless w
1128
+
1129
+ w.evt_set_focus self.method(:on_widget_focus)
1130
+ w.evt_kill_focus self.method(:on_widget_focus)
1131
+
1132
+ w.evt_context_menu self.method(:on_widget_context_menu)
1133
+ end
1134
+ end
1135
+
1136
+ end
1137
+
1138
+ class App < Wx::App
1139
+ def initialize
1140
+ super
1141
+ if Wx.has_feature?(:USE_LOG)
1142
+ @logTarget = nil
1143
+ end
1144
+ end
1145
+
1146
+ # this one is called on application startup and is a good place for the app
1147
+ # initialization (doing it here and not in the ctor allows to have an error
1148
+ # return: if OnInit() returns false, the application terminates)
1149
+ def on_init
1150
+ set_vendor_name('wxWidgets_Samples')
1151
+
1152
+ # when running multiple copies of this sample side by side this is useful to see which one is which
1153
+ title = ''
1154
+ # if Wx.has_feature?(:WXUNIVERSAL)
1155
+ # title << "wxUniv/"
1156
+ # end
1157
+ title << Wx::PLATFORM
1158
+
1159
+ frame = Frame.new(title + ' widgets demo')
1160
+ frame.show
1161
+
1162
+ if Wx.has_feature?(:USE_LOG)
1163
+ @logTarget = Wx::Log.get_active_target
1164
+ end # USE_LOG
1165
+
1166
+ true
1167
+ end
1168
+
1169
+ # real implementation of WidgetsPage method with the same name
1170
+ def is_using_log_window
1171
+ Wx.has_feature?(:USE_LOG) && (Wx::Log.get_active_target == @logTarget)
1172
+ end
1173
+ end
1174
+
1175
+ end # module Widgets
1176
+
1177
+ require_relative './activityindicator' if Wx.has_feature?(:USE_ACTIVITYINDICATOR)
1178
+ require_relative './bmpcombobox' if Wx.has_feature?(:USE_BITMAPCOMBOBOX)
1179
+ require_relative './button' if Wx.has_feature?(:USE_BUTTON)
1180
+ require_relative './checkbox' if Wx.has_feature?(:USE_CHECKBOX)
1181
+ require_relative './choice' if Wx.has_feature?(:USE_CHOICE)
1182
+ require_relative './clrpicker' if Wx.has_feature?(:USE_COLOURPICKERCTRL) && Wx.has_feature?(:USE_COLOURDLG)
1183
+ require_relative './combobox' if Wx.has_feature?(:USE_COMBOBOX)
1184
+ require_relative './datepick' if Wx.has_feature?(:USE_DATEPICKCTRL)
1185
+ require_relative './dirctrl' if Wx.has_feature?(:USE_FILEDLG) || Wx.has_feature?(:USE_DIRDLG)
1186
+ require_relative './dirpicker' if Wx.has_feature?(:USE_DIRPICKERCTRL) && Wx.has_feature?(:USE_DIRDLG)
1187
+ require_relative './editlbox' if Wx.has_feature?(:USE_EDITABLELISTBOX)
1188
+ require_relative './filectrl' if Wx.has_feature?(:USE_FILECTRL)
1189
+ require_relative './filepicker' if Wx.has_feature?(:USE_FILEPICKERCTRL) && Wx.has_feature?(:USE_FILEDLG)
1190
+ require_relative './fontpicker' if Wx.has_feature?(:USE_FONTPICKERCTRL) && Wx.has_feature?(:USE_FONTDLG)
1191
+ require_relative './gauge' if Wx.has_feature?(:USE_GAUGE)
1192
+ require_relative './headerctrl'
1193
+ require_relative './hyperlink' if Wx.has_feature?(:USE_HYPERLINKCTRL)
1194
+ require_relative './listbox' if Wx.has_feature?(:USE_LISTBOX)
1195
+ require_relative './notebook' if Wx.has_feature?(:USE_NOTEBOOK) || Wx.has_feature?(:USE_LISTBOOK) || Wx.has_feature?(:USE_CHOICEBOOK)
1196
+ require_relative './odcombobox' if Wx.has_feature?(:USE_ODCOMBOBOX)
1197
+ require_relative './radiobox' if Wx.has_feature?(:USE_RADIOBOX)
1198
+ require_relative './searchctrl' if Wx.has_feature?(:USE_SEARCHCTRL)
1199
+ require_relative './slider' if Wx.has_feature?(:USE_SLIDER)
1200
+ require_relative './spinbtn' if Wx.has_feature?(:USE_SPINBTN)
1201
+ require_relative './statbmp' if Wx.has_feature?(:USE_STATBMP)
1202
+ require_relative './static'
1203
+ require_relative './timepick' if Wx.has_feature?(:USE_TIMEPICKCTRL)
1204
+ require_relative './toggle' if Wx.has_feature?(:USE_TOGGLEBTN)
1205
+ require_relative './textctrl'
1206
+
1207
+ module WidgetsSample
1208
+
1209
+ include WxRuby::Sample if defined? WxRuby::Sample
1210
+
1211
+ def self.describe
1212
+ { file: __FILE__,
1213
+ summary: 'wxRuby Widgets example.',
1214
+ description: <<~__DESC
1215
+ A Ruby port of the extensive wxWidgets widgets sample which showcases
1216
+ a wide selection of widgets (controls).
1217
+ __DESC
1218
+ }
1219
+ end
1220
+
1221
+ def self.run
1222
+ execute(__FILE__)
1223
+ end
1224
+
1225
+ if $0 == __FILE__
1226
+ Widgets::App.run
1227
+ end
1228
+
1229
+ end