wxruby3 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. checksums.yaml +4 -4
  2. data/CREDITS.md +32 -25
  3. data/INSTALL.md +21 -6
  4. data/README.md +5 -5
  5. data/assets/repo-social-preview.odg +0 -0
  6. data/assets/repo-social-preview.xcf +0 -0
  7. data/ext/wxruby3/include/wxRubyApp.h +58 -45
  8. data/ext/wxruby3/include/wxruby-runtime.h +78 -1
  9. data/ext/wxruby3/swig/common.i +2 -2
  10. data/ext/wxruby3/swig/custom/director.swg +2 -2
  11. data/ext/wxruby3/swig/custom/rubyprimtypes.swg +59 -15
  12. data/ext/wxruby3/swig/custom/rubyrun.swg +4 -0
  13. data/ext/wxruby3/swig/custom/rubytracking.swg +4 -0
  14. data/ext/wxruby3/swig/custom/swiglabels.swg +129 -0
  15. data/ext/wxruby3/swig/custom/swigrun.swg +15 -0
  16. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +20 -0
  17. data/ext/wxruby3/swig/mark_free_impl.i +154 -88
  18. data/ext/wxruby3/swig/memory_management.i +1 -0
  19. data/ext/wxruby3/swig/wx.i +73 -44
  20. data/lib/wx/aui/events/evt_list.rb +148 -0
  21. data/lib/wx/aui/require.rb +0 -1
  22. data/lib/wx/core/calendar_ctrl.rb +15 -0
  23. data/lib/wx/core/clipboard.rb +9 -13
  24. data/lib/wx/core/config.rb +1 -1
  25. data/lib/wx/core/events/evt_list.rb +1458 -0
  26. data/lib/wx/core/font/encoding.rb +113 -0
  27. data/lib/wx/core/generic_validator.rb +83 -31
  28. data/lib/wx/core/tipwindow.rb +16 -0
  29. data/lib/wx/core/variant.rb +6 -0
  30. data/lib/wx/doc/aui/auitabctrl.rb +35 -0
  31. data/lib/wx/doc/config.rb +2 -2
  32. data/lib/wx/doc/functions.rb +1 -1
  33. data/lib/wx/doc/gen/about_dialog_info.rb +330 -0
  34. data/lib/wx/doc/gen/accelerator.rb +178 -0
  35. data/lib/wx/doc/gen/activity_indicator.rb +83 -0
  36. data/lib/wx/doc/gen/affine_matrix2d.rb +284 -0
  37. data/lib/wx/doc/gen/animation.rb +275 -0
  38. data/lib/wx/doc/gen/animation_ctrl.rb +300 -0
  39. data/lib/wx/doc/gen/any_button.rb +191 -0
  40. data/lib/wx/doc/gen/app.rb +463 -0
  41. data/lib/wx/doc/gen/app_traits.rb +396 -0
  42. data/lib/wx/doc/gen/art_provider.rb +605 -0
  43. data/lib/wx/doc/gen/aui/aui_dock_art.rb +455 -0
  44. data/lib/wx/doc/gen/aui/aui_floating_frame.rb +54 -0
  45. data/lib/wx/doc/gen/aui/aui_manager.rb +847 -0
  46. data/lib/wx/doc/gen/aui/aui_manager_event.rb +131 -0
  47. data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +180 -0
  48. data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +59 -0
  49. data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +130 -0
  50. data/lib/wx/doc/gen/aui/aui_notebook.rb +631 -0
  51. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +233 -0
  52. data/lib/wx/doc/gen/aui/aui_pane_info.rb +769 -0
  53. data/lib/wx/doc/gen/aui/aui_tab_art.rb +352 -0
  54. data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +14 -0
  55. data/lib/wx/doc/gen/aui/aui_tool_bar.rb +510 -0
  56. data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +340 -0
  57. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +244 -0
  58. data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +257 -0
  59. data/lib/wx/doc/gen/aui/event_list.rb +179 -0
  60. data/lib/wx/doc/gen/banner_window.rb +124 -0
  61. data/lib/wx/doc/gen/bitmap.rb +731 -0
  62. data/lib/wx/doc/gen/bitmap_button.rb +123 -0
  63. data/lib/wx/doc/gen/bitmap_combo_box.rb +221 -0
  64. data/lib/wx/doc/gen/book_ctrl_base.rb +273 -0
  65. data/lib/wx/doc/gen/book_ctrl_event.rb +66 -0
  66. data/lib/wx/doc/gen/box_sizer.rb +85 -0
  67. data/lib/wx/doc/gen/brush.rb +251 -0
  68. data/lib/wx/doc/gen/busy_info.rb +157 -0
  69. data/lib/wx/doc/gen/button.rb +182 -0
  70. data/lib/wx/doc/gen/calculate_layout_event.rb +62 -0
  71. data/lib/wx/doc/gen/calendar_ctrl.rb +505 -0
  72. data/lib/wx/doc/gen/calendar_date_attr.rb +138 -0
  73. data/lib/wx/doc/gen/calendar_event.rb +147 -0
  74. data/lib/wx/doc/gen/caret.rb +97 -0
  75. data/lib/wx/doc/gen/check_box.rb +175 -0
  76. data/lib/wx/doc/gen/check_list_box.rb +121 -0
  77. data/lib/wx/doc/gen/choice.rb +175 -0
  78. data/lib/wx/doc/gen/choicebook.rb +116 -0
  79. data/lib/wx/doc/gen/client_dc.rb +43 -0
  80. data/lib/wx/doc/gen/clipboard.rb +144 -0
  81. data/lib/wx/doc/gen/collapsible_pane.rb +138 -0
  82. data/lib/wx/doc/gen/collapsible_pane_event.rb +46 -0
  83. data/lib/wx/doc/gen/colour.rb +333 -0
  84. data/lib/wx/doc/gen/colour_dialog.rb +190 -0
  85. data/lib/wx/doc/gen/colour_picker_ctrl.rb +110 -0
  86. data/lib/wx/doc/gen/colour_picker_event.rb +77 -0
  87. data/lib/wx/doc/gen/combo_box.rb +292 -0
  88. data/lib/wx/doc/gen/combo_ctrl.rb +662 -0
  89. data/lib/wx/doc/gen/command_link_button.rb +134 -0
  90. data/lib/wx/doc/gen/config_base.rb +10 -0
  91. data/lib/wx/doc/gen/context_help_button.rb +109 -0
  92. data/lib/wx/doc/gen/control.rb +277 -0
  93. data/lib/wx/doc/gen/control_with_items.rb +253 -0
  94. data/lib/wx/doc/gen/core.rb +45 -0
  95. data/lib/wx/doc/gen/credential_entry_dialog.rb +137 -0
  96. data/lib/wx/doc/gen/cursor.rb +193 -0
  97. data/lib/wx/doc/gen/data_format.rb +85 -0
  98. data/lib/wx/doc/gen/data_object.rb +436 -0
  99. data/lib/wx/doc/gen/data_object_simple_base.rb +10 -0
  100. data/lib/wx/doc/gen/date_event.rb +49 -0
  101. data/lib/wx/doc/gen/date_picker_ctrl.rb +161 -0
  102. data/lib/wx/doc/gen/dc.rb +1631 -0
  103. data/lib/wx/doc/gen/dc_overlay.rb +102 -0
  104. data/lib/wx/doc/gen/defs.rb +2802 -0
  105. data/lib/wx/doc/gen/dial_up_event.rb +45 -0
  106. data/lib/wx/doc/gen/dial_up_manager.rb +149 -0
  107. data/lib/wx/doc/gen/dialog.rb +541 -0
  108. data/lib/wx/doc/gen/dir_dialog.rb +164 -0
  109. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +90 -0
  110. data/lib/wx/doc/gen/dir_picker_ctrl.rb +125 -0
  111. data/lib/wx/doc/gen/display.rb +238 -0
  112. data/lib/wx/doc/gen/drag_drop.rb +299 -0
  113. data/lib/wx/doc/gen/drag_image.rb +116 -0
  114. data/lib/wx/doc/gen/editable_list_box.rb +109 -0
  115. data/lib/wx/doc/gen/event.rb +990 -0
  116. data/lib/wx/doc/gen/event_blocker.rb +50 -0
  117. data/lib/wx/doc/gen/event_filter.rb +92 -0
  118. data/lib/wx/doc/gen/event_list.rb +1644 -0
  119. data/lib/wx/doc/gen/events.rb +2809 -0
  120. data/lib/wx/doc/gen/evt_handler.rb +229 -0
  121. data/lib/wx/doc/gen/ext_help_controller.rb +109 -0
  122. data/lib/wx/doc/gen/file_ctrl.rb +231 -0
  123. data/lib/wx/doc/gen/file_ctrl_event.rb +83 -0
  124. data/lib/wx/doc/gen/file_dialog.rb +353 -0
  125. data/lib/wx/doc/gen/file_dialog_custom_control.rb +165 -0
  126. data/lib/wx/doc/gen/file_dialog_customize_hook.rb +158 -0
  127. data/lib/wx/doc/gen/file_dir_picker_event.rb +100 -0
  128. data/lib/wx/doc/gen/file_picker_ctrl.rb +132 -0
  129. data/lib/wx/doc/gen/file_system.rb +232 -0
  130. data/lib/wx/doc/gen/find_dialog_event.rb +126 -0
  131. data/lib/wx/doc/gen/find_replace_data.rb +60 -0
  132. data/lib/wx/doc/gen/find_replace_dialog.rb +58 -0
  133. data/lib/wx/doc/gen/flex_grid_sizer.rb +199 -0
  134. data/lib/wx/doc/gen/font.rb +1379 -0
  135. data/lib/wx/doc/gen/font_data.rb +151 -0
  136. data/lib/wx/doc/gen/font_dialog.rb +88 -0
  137. data/lib/wx/doc/gen/font_picker_ctrl.rb +143 -0
  138. data/lib/wx/doc/gen/font_picker_event.rb +65 -0
  139. data/lib/wx/doc/gen/frame.rb +352 -0
  140. data/lib/wx/doc/gen/fs_file.rb +337 -0
  141. data/lib/wx/doc/gen/functions.rb +10 -0
  142. data/lib/wx/doc/gen/gauge.rb +157 -0
  143. data/lib/wx/doc/gen/gb_sizer_item.rb +68 -0
  144. data/lib/wx/doc/gen/gcdc.rb +46 -0
  145. data/lib/wx/doc/gen/gdi_common.rb +1271 -0
  146. data/lib/wx/doc/gen/gdi_object.rb +31 -0
  147. data/lib/wx/doc/gen/generic_about_dialog.rb +140 -0
  148. data/lib/wx/doc/gen/generic_dir_ctrl.rb +223 -0
  149. data/lib/wx/doc/gen/geometry.rb +661 -0
  150. data/lib/wx/doc/gen/graphics_context.rb +1184 -0
  151. data/lib/wx/doc/gen/graphics_object.rb +750 -0
  152. data/lib/wx/doc/gen/grid/event_list.rb +191 -0
  153. data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +40 -0
  154. data/lib/wx/doc/gen/grid/grid_cell_attr.rb +280 -0
  155. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +35 -0
  156. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +37 -0
  157. data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +49 -0
  158. data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +35 -0
  159. data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +46 -0
  160. data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +38 -0
  161. data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +45 -0
  162. data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +40 -0
  163. data/lib/wx/doc/gen/grid/grid_cell_editor.rb +197 -0
  164. data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +39 -0
  165. data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +44 -0
  166. data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +45 -0
  167. data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +79 -0
  168. data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +46 -0
  169. data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +35 -0
  170. data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +108 -0
  171. data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +35 -0
  172. data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +49 -0
  173. data/lib/wx/doc/gen/grid/grid_ctrl.rb +3002 -0
  174. data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +95 -0
  175. data/lib/wx/doc/gen/grid/grid_event.rb +129 -0
  176. data/lib/wx/doc/gen/grid/grid_range_select_event.rb +104 -0
  177. data/lib/wx/doc/gen/grid/grid_size_event.rb +85 -0
  178. data/lib/wx/doc/gen/grid/grid_string_table.rb +142 -0
  179. data/lib/wx/doc/gen/grid/grid_table_base.rb +317 -0
  180. data/lib/wx/doc/gen/grid/grid_table_message.rb +81 -0
  181. data/lib/wx/doc/gen/grid_bag_sizer.rb +323 -0
  182. data/lib/wx/doc/gen/grid_sizer.rb +195 -0
  183. data/lib/wx/doc/gen/gui_event_loop.rb +159 -0
  184. data/lib/wx/doc/gen/h_scrolled_window.rb +562 -0
  185. data/lib/wx/doc/gen/header_ctrl.rb +880 -0
  186. data/lib/wx/doc/gen/header_ctrl_event.rb +133 -0
  187. data/lib/wx/doc/gen/help_controller.rb +195 -0
  188. data/lib/wx/doc/gen/help_provider.rb +98 -0
  189. data/lib/wx/doc/gen/html/event_list.rb +38 -0
  190. data/lib/wx/doc/gen/html/html_cell.rb +536 -0
  191. data/lib/wx/doc/gen/html/html_cell_event.rb +69 -0
  192. data/lib/wx/doc/gen/html/html_data_object.rb +42 -0
  193. data/lib/wx/doc/gen/html/html_easy_printing.rb +203 -0
  194. data/lib/wx/doc/gen/html/html_help_controller.rb +340 -0
  195. data/lib/wx/doc/gen/html/html_help_data.rb +159 -0
  196. data/lib/wx/doc/gen/html/html_help_window.rb +258 -0
  197. data/lib/wx/doc/gen/html/html_link_event.rb +41 -0
  198. data/lib/wx/doc/gen/html/html_list_box.rb +346 -0
  199. data/lib/wx/doc/gen/html/html_printout.rb +109 -0
  200. data/lib/wx/doc/gen/html/html_window.rb +461 -0
  201. data/lib/wx/doc/gen/hyperlink_ctrl.rb +311 -0
  202. data/lib/wx/doc/gen/hyperlink_event.rb +44 -0
  203. data/lib/wx/doc/gen/icon.rb +267 -0
  204. data/lib/wx/doc/gen/icon_location.rb +40 -0
  205. data/lib/wx/doc/gen/image.rb +1371 -0
  206. data/lib/wx/doc/gen/image_list.rb +168 -0
  207. data/lib/wx/doc/gen/info_bar.rb +195 -0
  208. data/lib/wx/doc/gen/keyboard_state.rb +140 -0
  209. data/lib/wx/doc/gen/list_box.rb +304 -0
  210. data/lib/wx/doc/gen/list_ctrl.rb +1774 -0
  211. data/lib/wx/doc/gen/list_event.rb +208 -0
  212. data/lib/wx/doc/gen/listbook.rb +116 -0
  213. data/lib/wx/doc/gen/locale.rb +4293 -0
  214. data/lib/wx/doc/gen/log.rb +603 -0
  215. data/lib/wx/doc/gen/mdi_client_window.rb +47 -0
  216. data/lib/wx/doc/gen/mdi_frame.rb +324 -0
  217. data/lib/wx/doc/gen/media_ctrl.rb +269 -0
  218. data/lib/wx/doc/gen/media_event.rb +117 -0
  219. data/lib/wx/doc/gen/memory_dc.rb +174 -0
  220. data/lib/wx/doc/gen/menu.rb +509 -0
  221. data/lib/wx/doc/gen/menu_bar.rb +287 -0
  222. data/lib/wx/doc/gen/menu_item.rb +362 -0
  223. data/lib/wx/doc/gen/message_dialog.rb +238 -0
  224. data/lib/wx/doc/gen/mini_frame.rb +108 -0
  225. data/lib/wx/doc/gen/mirror_dc.rb +22 -0
  226. data/lib/wx/doc/gen/mouse_state.rb +150 -0
  227. data/lib/wx/doc/gen/multi_choice_dialog.rb +80 -0
  228. data/lib/wx/doc/gen/non_owned_window.rb +49 -0
  229. data/lib/wx/doc/gen/notebook.rb +278 -0
  230. data/lib/wx/doc/gen/num_validator.rb +37 -0
  231. data/lib/wx/doc/gen/number_entry_dialog.rb +93 -0
  232. data/lib/wx/doc/gen/object.rb +59 -0
  233. data/lib/wx/doc/gen/owner_drawn_combo_box.rb +395 -0
  234. data/lib/wx/doc/gen/paint_dc.rb +27 -0
  235. data/lib/wx/doc/gen/palette.rb +92 -0
  236. data/lib/wx/doc/gen/panel.rb +127 -0
  237. data/lib/wx/doc/gen/pen.rb +511 -0
  238. data/lib/wx/doc/gen/persistence_manager.rb +135 -0
  239. data/lib/wx/doc/gen/persistent_object.rb +52 -0
  240. data/lib/wx/doc/gen/persistent_window.rb +241 -0
  241. data/lib/wx/doc/gen/pg/event_list.rb +106 -0
  242. data/lib/wx/doc/gen/pg/numeric_property_validator.rb +54 -0
  243. data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +292 -0
  244. data/lib/wx/doc/gen/pg/pg_cell.rb +177 -0
  245. data/lib/wx/doc/gen/pg/pg_editor.rb +721 -0
  246. data/lib/wx/doc/gen/pg/pg_multi_button.rb +152 -0
  247. data/lib/wx/doc/gen/pg/pg_properties.rb +2829 -0
  248. data/lib/wx/doc/gen/pg/pg_property.rb +2078 -0
  249. data/lib/wx/doc/gen/pg/pg_validation_info.rb +344 -0
  250. data/lib/wx/doc/gen/pg/property_grid.rb +740 -0
  251. data/lib/wx/doc/gen/pg/property_grid_event.rb +184 -0
  252. data/lib/wx/doc/gen/pg/property_grid_interface.rb +1098 -0
  253. data/lib/wx/doc/gen/pg/property_grid_manager.rb +415 -0
  254. data/lib/wx/doc/gen/pg/property_grid_page.rb +354 -0
  255. data/lib/wx/doc/gen/pg/property_grid_page_state.rb +165 -0
  256. data/lib/wx/doc/gen/picker_base.rb +152 -0
  257. data/lib/wx/doc/gen/platform_info.rb +622 -0
  258. data/lib/wx/doc/gen/popup_window.rb +107 -0
  259. data/lib/wx/doc/gen/progress_dialog.rb +100 -0
  260. data/lib/wx/doc/gen/property_sheet_dialog.rb +216 -0
  261. data/lib/wx/doc/gen/prt/event_list.rb +17 -0
  262. data/lib/wx/doc/gen/prt/page_setup_dialog.rb +44 -0
  263. data/lib/wx/doc/gen/prt/post_script_dc.rb +30 -0
  264. data/lib/wx/doc/gen/prt/preview_frame.rb +78 -0
  265. data/lib/wx/doc/gen/prt/print_abort_dialog.rb +151 -0
  266. data/lib/wx/doc/gen/prt/print_data.rb +804 -0
  267. data/lib/wx/doc/gen/prt/print_dialog.rb +55 -0
  268. data/lib/wx/doc/gen/prt/printer.rb +518 -0
  269. data/lib/wx/doc/gen/prt/printer_dc.rb +37 -0
  270. data/lib/wx/doc/gen/query_layout_info_event.rb +106 -0
  271. data/lib/wx/doc/gen/radio_box.rb +306 -0
  272. data/lib/wx/doc/gen/radio_button.rb +159 -0
  273. data/lib/wx/doc/gen/rbn/event_list.rb +136 -0
  274. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +1132 -0
  275. data/lib/wx/doc/gen/rbn/ribbon_bar.rb +308 -0
  276. data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +45 -0
  277. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +458 -0
  278. data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +63 -0
  279. data/lib/wx/doc/gen/rbn/ribbon_control.rb +143 -0
  280. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +229 -0
  281. data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +55 -0
  282. data/lib/wx/doc/gen/rbn/ribbon_page.rb +174 -0
  283. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +270 -0
  284. data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +45 -0
  285. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +360 -0
  286. data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +42 -0
  287. data/lib/wx/doc/gen/rearrange_ctrl.rb +78 -0
  288. data/lib/wx/doc/gen/rearrange_list.rb +123 -0
  289. data/lib/wx/doc/gen/region.rb +380 -0
  290. data/lib/wx/doc/gen/region_iterator.rb +76 -0
  291. data/lib/wx/doc/gen/rich_tool_tip.rb +154 -0
  292. data/lib/wx/doc/gen/rtc/event_list.rb +125 -0
  293. data/lib/wx/doc/gen/rtc/rich_text_box.rb +445 -0
  294. data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +1188 -0
  295. data/lib/wx/doc/gen/rtc/rich_text_buffer_data_object.rb +41 -0
  296. data/lib/wx/doc/gen/rtc/rich_text_composite_object.rb +538 -0
  297. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +2103 -0
  298. data/lib/wx/doc/gen/rtc/rich_text_event.rb +173 -0
  299. data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +181 -0
  300. data/lib/wx/doc/gen/rtc/rich_text_formatting_dialog.rb +319 -0
  301. data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +193 -0
  302. data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +102 -0
  303. data/lib/wx/doc/gen/rtc/rich_text_image.rb +337 -0
  304. data/lib/wx/doc/gen/rtc/rich_text_object.rb +2922 -0
  305. data/lib/wx/doc/gen/rtc/rich_text_paragraph_layout_box.rb +1240 -0
  306. data/lib/wx/doc/gen/rtc/rich_text_printing.rb +258 -0
  307. data/lib/wx/doc/gen/rtc/rich_text_style_list_box.rb +344 -0
  308. data/lib/wx/doc/gen/rtc/rich_text_style_organiser_dialog.rb +227 -0
  309. data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +59 -0
  310. data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +169 -0
  311. data/lib/wx/doc/gen/sash_event.rb +147 -0
  312. data/lib/wx/doc/gen/sash_layout_window.rb +232 -0
  313. data/lib/wx/doc/gen/sash_window.rb +171 -0
  314. data/lib/wx/doc/gen/scaled_dc.rb +10 -0
  315. data/lib/wx/doc/gen/screen_dc.rb +30 -0
  316. data/lib/wx/doc/gen/scroll_bar.rb +204 -0
  317. data/lib/wx/doc/gen/scrolled_canvas.rb +410 -0
  318. data/lib/wx/doc/gen/scrolled_control.rb +410 -0
  319. data/lib/wx/doc/gen/scrolled_window.rb +430 -0
  320. data/lib/wx/doc/gen/search_ctrl.rb +159 -0
  321. data/lib/wx/doc/gen/secret_store.rb +116 -0
  322. data/lib/wx/doc/gen/simplebook.rb +110 -0
  323. data/lib/wx/doc/gen/single_choice_dialog.rb +89 -0
  324. data/lib/wx/doc/gen/sizer.rb +945 -0
  325. data/lib/wx/doc/gen/sizer_item.rb +244 -0
  326. data/lib/wx/doc/gen/slider.rb +342 -0
  327. data/lib/wx/doc/gen/spin_button.rb +157 -0
  328. data/lib/wx/doc/gen/spin_ctrl.rb +231 -0
  329. data/lib/wx/doc/gen/spin_ctrl_double.rb +192 -0
  330. data/lib/wx/doc/gen/spin_double_event.rb +55 -0
  331. data/lib/wx/doc/gen/spin_event.rb +51 -0
  332. data/lib/wx/doc/gen/splash_screen.rb +113 -0
  333. data/lib/wx/doc/gen/splitter_event.rb +99 -0
  334. data/lib/wx/doc/gen/splitter_window.rb +498 -0
  335. data/lib/wx/doc/gen/static_bitmap.rb +256 -0
  336. data/lib/wx/doc/gen/static_box.rb +180 -0
  337. data/lib/wx/doc/gen/static_box_sizer.rb +85 -0
  338. data/lib/wx/doc/gen/static_line.rb +83 -0
  339. data/lib/wx/doc/gen/static_text.rb +127 -0
  340. data/lib/wx/doc/gen/status_bar.rb +290 -0
  341. data/lib/wx/doc/gen/stc/event_list.rb +221 -0
  342. data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +4474 -0
  343. data/lib/wx/doc/gen/stc/styled_text_event.rb +8762 -0
  344. data/lib/wx/doc/gen/std_dialog_button_sizer.rb +129 -0
  345. data/lib/wx/doc/gen/svg_file_dc.rb +164 -0
  346. data/lib/wx/doc/gen/system_options.rb +129 -0
  347. data/lib/wx/doc/gen/system_settings.rb +507 -0
  348. data/lib/wx/doc/gen/task_bar_icon.rb +127 -0
  349. data/lib/wx/doc/gen/task_bar_icon_event.rb +88 -0
  350. data/lib/wx/doc/gen/text_attr.rb +756 -0
  351. data/lib/wx/doc/gen/text_ctrl.rb +1033 -0
  352. data/lib/wx/doc/gen/text_entry.rb +441 -0
  353. data/lib/wx/doc/gen/text_entry_dialog.rb +220 -0
  354. data/lib/wx/doc/gen/text_validator.rb +245 -0
  355. data/lib/wx/doc/gen/time_picker_ctrl.rb +128 -0
  356. data/lib/wx/doc/gen/timer.rb +119 -0
  357. data/lib/wx/doc/gen/timer_event.rb +68 -0
  358. data/lib/wx/doc/gen/tip_provider.rb +63 -0
  359. data/lib/wx/doc/gen/tip_window.rb +51 -0
  360. data/lib/wx/doc/gen/toggle_button.rb +182 -0
  361. data/lib/wx/doc/gen/tool_bar.rb +890 -0
  362. data/lib/wx/doc/gen/tool_tip.rb +86 -0
  363. data/lib/wx/doc/gen/toolbook.rb +118 -0
  364. data/lib/wx/doc/gen/top_level_window.rb +497 -0
  365. data/lib/wx/doc/gen/tree_ctrl.rb +1052 -0
  366. data/lib/wx/doc/gen/tree_event.rb +127 -0
  367. data/lib/wx/doc/gen/treebook.rb +180 -0
  368. data/lib/wx/doc/gen/ui_action_simulator.rb +109 -0
  369. data/lib/wx/doc/gen/utils.rb +273 -0
  370. data/lib/wx/doc/gen/v_list_box.rb +272 -0
  371. data/lib/wx/doc/gen/v_scrolled_canvas.rb +195 -0
  372. data/lib/wx/doc/gen/v_scrolled_window.rb +191 -0
  373. data/lib/wx/doc/gen/validator.rb +68 -0
  374. data/lib/wx/doc/gen/variant.rb +294 -0
  375. data/lib/wx/doc/gen/window.rb +2917 -0
  376. data/lib/wx/doc/gen/window_dc.rb +38 -0
  377. data/lib/wx/doc/gen/window_disabler.rb +30 -0
  378. data/lib/wx/doc/gen/with_images.rb +84 -0
  379. data/lib/wx/doc/gen/wizard.rb +257 -0
  380. data/lib/wx/doc/gen/wizard_event.rb +113 -0
  381. data/lib/wx/doc/gen/wizard_page.rb +65 -0
  382. data/lib/wx/doc/gen/wizard_page_simple.rb +88 -0
  383. data/lib/wx/doc/gen/wrap_sizer.rb +79 -0
  384. data/lib/wx/doc/gen/xml_node.rb +316 -0
  385. data/lib/wx/doc/gen/xml_resource.rb +320 -0
  386. data/lib/wx/doc/generic_validator.rb +5 -0
  387. data/lib/wx/doc/pg/pg_property.rb +5 -0
  388. data/lib/wx/doc/tip_window.rb +18 -6
  389. data/lib/wx/doc/variant.rb +30 -0
  390. data/lib/wx/grid/events/evt_list.rb +166 -0
  391. data/lib/wx/html/events/evt_list.rb +27 -0
  392. data/lib/wx/html/simple_html_listbox.rb +46 -33
  393. data/lib/wx/keyword_defs.rb +9 -0
  394. data/lib/wx/pg/events/evt_list.rb +73 -0
  395. data/lib/wx/pg/pg_property.rb +85 -52
  396. data/lib/wx/pg/property_grid_interface.rb +12 -2
  397. data/lib/wx/rbn/events/evt_list.rb +102 -0
  398. data/lib/wx/rtc/events/evt_list.rb +98 -0
  399. data/lib/wx/rtc/ext/rich_text_ctrl.rb +24 -0
  400. data/lib/wx/stc/events/evt_list.rb +178 -0
  401. data/lib/wx/version.rb +1 -1
  402. data/lib/wx/wxruby/cmd/setup.rb +6 -0
  403. data/rakelib/configure.rb +9 -0
  404. data/rakelib/gem.rake +84 -66
  405. data/rakelib/gem.rb +4 -20
  406. data/rakelib/lib/config/linux.rb +1 -1
  407. data/rakelib/lib/config/macosx.rb +15 -1
  408. data/rakelib/lib/config/pkgman/linux.rb +7 -2
  409. data/rakelib/lib/config/unixish.rb +3 -3
  410. data/rakelib/lib/config.rb +19 -8
  411. data/rakelib/lib/core/include/swigdirector.inc +3 -3
  412. data/rakelib/lib/core/include/swigrubyerrors.inc +4 -8
  413. data/rakelib/lib/core/include/swigrubyrun.inc +20 -4
  414. data/rakelib/lib/core/include/swigrun.inc +189 -0
  415. data/rakelib/lib/core/package.rb +3 -1
  416. data/rakelib/lib/core/spec.rb +1 -1
  417. data/rakelib/lib/director/accelerator.rb +1 -1
  418. data/rakelib/lib/director/animation.rb +1 -0
  419. data/rakelib/lib/director/app_traits.rb +1 -1
  420. data/rakelib/lib/director/aui_manager.rb +21 -14
  421. data/rakelib/lib/director/aui_mdi_child_frame.rb +2 -0
  422. data/rakelib/lib/director/aui_mdi_parent_frame.rb +4 -0
  423. data/rakelib/lib/director/aui_notebook.rb +20 -3
  424. data/rakelib/lib/director/aui_tab_ctrl.rb +64 -106
  425. data/rakelib/lib/director/bitmap_combobox.rb +4 -2
  426. data/rakelib/lib/director/calendar_ctrl.rb +72 -14
  427. data/rakelib/lib/director/clipboard.rb +2 -0
  428. data/rakelib/lib/director/data_object.rb +15 -7
  429. data/rakelib/lib/director/date_picker_ctrl.rb +4 -1
  430. data/rakelib/lib/director/display.rb +81 -0
  431. data/rakelib/lib/director/event.rb +33 -16
  432. data/rakelib/lib/director/event_handler.rb +27 -2
  433. data/rakelib/lib/director/functions.rb +9 -0
  434. data/rakelib/lib/director/geometry.rb +5 -0
  435. data/rakelib/lib/director/grid_ctrl.rb +123 -28
  436. data/rakelib/lib/director/help_provider.rb +1 -1
  437. data/rakelib/lib/director/html_listbox.rb +30 -4
  438. data/rakelib/lib/director/hvscrolled.rb +154 -0
  439. data/rakelib/lib/director/image_list.rb +1 -0
  440. data/rakelib/lib/director/mdi_frame.rb +4 -0
  441. data/rakelib/lib/director/menu.rb +56 -15
  442. data/rakelib/lib/director/menu_bar.rb +62 -0
  443. data/rakelib/lib/director/menu_item.rb +7 -1
  444. data/rakelib/lib/director/num_validator.rb +27 -0
  445. data/rakelib/lib/director/numeric_property_validator.rb +9 -0
  446. data/rakelib/lib/director/persistent_window.rb +16 -0
  447. data/rakelib/lib/director/pgproperty.rb +3 -2
  448. data/rakelib/lib/director/popup_window.rb +2 -0
  449. data/rakelib/lib/director/preview_frame.rb +29 -6
  450. data/rakelib/lib/director/printer.rb +59 -5
  451. data/rakelib/lib/director/property_grid.rb +37 -18
  452. data/rakelib/lib/director/property_grid_interface.rb +10 -8
  453. data/rakelib/lib/director/property_grid_manager.rb +99 -39
  454. data/rakelib/lib/director/property_grid_page.rb +60 -0
  455. data/rakelib/lib/director/rich_tooltip.rb +22 -0
  456. data/rakelib/lib/director/richtext_ctrl.rb +5 -0
  457. data/rakelib/lib/director/richtext_object.rb +13 -4
  458. data/rakelib/lib/director/richtext_style_listbox.rb +11 -2
  459. data/rakelib/lib/director/scrolled_t.rb +3 -0
  460. data/rakelib/lib/director/searchctrl.rb +1 -0
  461. data/rakelib/lib/director/task_bar_icon.rb +14 -8
  462. data/rakelib/lib/director/text_validator.rb +9 -0
  463. data/rakelib/lib/director/tip_window.rb +117 -6
  464. data/rakelib/lib/director/tool_bar.rb +6 -0
  465. data/rakelib/lib/director/top_level_window.rb +0 -1
  466. data/rakelib/lib/director/utils.rb +3 -1
  467. data/rakelib/lib/director/validator.rb +12 -0
  468. data/rakelib/lib/director/variant.rb +64 -20
  469. data/rakelib/lib/director/vlistbox.rb +29 -22
  470. data/rakelib/lib/director/window.rb +12 -2
  471. data/rakelib/lib/director/xml_resource.rb +6 -0
  472. data/rakelib/lib/generate/doc/aui_manager.yaml +1 -1
  473. data/rakelib/lib/generate/doc/rich_tool_tip.yaml +26 -0
  474. data/rakelib/lib/generate/doc.rb +12 -7
  475. data/rakelib/lib/generate/interface.rb +16 -1
  476. data/rakelib/lib/specs/interfaces.rb +6 -2
  477. data/rakelib/lib/swig_runner.rb +12 -12
  478. data/rakelib/lib/typemap/aui_tabctrl.rb +46 -0
  479. data/rakelib/lib/typemap/common.rb +3 -3
  480. data/rakelib/lib/typemap/print_page_range.rb +32 -8
  481. data/samples/art/wxruby-512x512.png +0 -0
  482. data/samples/calendar/calendar.rb +64 -1
  483. data/samples/dialogs/dialogs.rb +172 -0
  484. data/samples/dialogs/tip.xpm +157 -0
  485. data/samples/drawing/maths_images.rb +1 -1
  486. data/samples/event/event.rb +1 -1
  487. data/samples/printing/printing2.rb +1 -1
  488. data/samples/sampler.rb +26 -8
  489. data/samples/text/textctrl.rb +2 -2
  490. data/samples/treectrl/treectrl.rb +2 -2
  491. data/tests/lib/leaked_process_event_exception_test.rb +1 -1
  492. data/tests/lib/leaked_queued_event_exception_test.rb +1 -1
  493. data/tests/lib/wxapp_runner.rb +31 -41
  494. data/tests/lib/wxframe_runner.rb +23 -11
  495. data/tests/lib/wxrb_test.rb +58 -0
  496. data/tests/test_app_event_filter.rb +1 -1
  497. data/tests/test_app_exit_exception.rb +3 -3
  498. data/tests/test_app_init_exception.rb +3 -3
  499. data/tests/test_app_traits.rb +24 -21
  500. data/tests/test_art.rb +7 -7
  501. data/tests/test_art_provider.rb +1 -1
  502. data/tests/test_basic.rb +2 -2
  503. data/tests/test_book_controls.rb +1 -1
  504. data/tests/test_box_sizer.rb +1 -1
  505. data/tests/test_clipboard.rb +5 -5
  506. data/tests/test_combo_ctrl.rb +2 -2
  507. data/tests/test_config.rb +11 -1
  508. data/tests/test_dc.rb +1 -1
  509. data/tests/test_dialog.rb +1 -1
  510. data/tests/test_event_handling.rb +1 -1
  511. data/tests/test_events.rb +1 -1
  512. data/tests/test_exceptions.rb +2 -2
  513. data/tests/test_ext_controls.rb +10 -10
  514. data/tests/test_file_dialog.rb +1 -1
  515. data/tests/test_font.rb +1 -1
  516. data/tests/test_gdi_object.rb +1 -1
  517. data/tests/test_geometry.rb +2 -2
  518. data/tests/test_grid_sizer.rb +2 -2
  519. data/tests/test_intl.rb +1 -1
  520. data/tests/test_item_data.rb +12 -12
  521. data/tests/test_list_ctrl.rb +1 -1
  522. data/tests/test_log.rb +2 -2
  523. data/tests/test_media_ctrl.rb +1 -1
  524. data/tests/test_menu.rb +114 -43
  525. data/tests/test_proof_check.rb +1 -1
  526. data/tests/test_propgrid.rb +857 -0
  527. data/tests/test_richtext.rb +10 -24
  528. data/tests/test_secret_store.rb +1 -1
  529. data/tests/test_sizer.rb +1 -1
  530. data/tests/test_std_controls.rb +8 -8
  531. data/tests/test_styled_text_ctrl.rb +1 -1
  532. data/tests/test_timer.rb +1 -1
  533. data/tests/test_tree_ctrl.rb +1 -1
  534. data/tests/test_validators.rb +79 -36
  535. data/tests/test_variant.rb +1 -1
  536. data/tests/test_window.rb +11 -11
  537. data/tests/testapp.rb +2 -2
  538. data/tests/testapp_noframe.rb +2 -2
  539. metadata +402 -12
  540. data/lib/wx/aui/aui_tab_ctrl.rb +0 -18
  541. data/rakelib/lib/director/hvscrolled_window.rb +0 -140
@@ -0,0 +1,857 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ require_relative './lib/wxframe_runner'
6
+
7
+ class PropGridTests < WxRuby::Test::GUITests
8
+
9
+ def populate_with_standard_items(pgman)
10
+ pg = pgman.get_page("Standard Items")
11
+
12
+ # Append is ideal way to add items to wxPropertyGrid.
13
+ pg.append(Wx::PG::PropertyCategory.new("Appearance", Wx::PG::PG_LABEL))
14
+
15
+ pg.append(Wx::PG::StringProperty.new("Label", Wx::PG::PG_LABEL, 'PropertyGridTest'))
16
+ pg.append(Wx::PG::FontProperty.new("Font", Wx::PG::PG_LABEL))
17
+ pg.set_property_help_string("Font", "Editing this will change font used in the property grid.")
18
+
19
+ pg.append(Wx::PG::SystemColourProperty.new("Margin Colour",Wx::PG::PG_LABEL,
20
+ Wx::PG::ColourPropertyValue.new(pg.get_grid.get_margin_colour)))
21
+
22
+ pg.append(Wx::PG::SystemColourProperty.new("Cell Colour",Wx::PG::PG_LABEL,
23
+ pg.grid.get_cell_background_colour))
24
+ pg.append(Wx::PG::SystemColourProperty.new("Cell Text Colour",Wx::PG::PG_LABEL,
25
+ pg.grid.get_cell_text_colour))
26
+ pg.append(Wx::PG::SystemColourProperty.new("Line Colour",Wx::PG::PG_LABEL,
27
+ pg.grid.get_line_colour))
28
+ combinedFlags = Wx::PG::PGChoices.new
29
+ combinedFlags.add(%w[Wx::ICONIZE, Wx::CAPTION, Wx::MINIMIZE_BOX, Wx::MAXIMIZE_BOX],
30
+ [Wx::ICONIZE, Wx::CAPTION, Wx::MINIMIZE_BOX, Wx::MAXIMIZE_BOX])
31
+ pg.append(Wx::PG::FlagsProperty.new("Window Styles",Wx::PG::PG_LABEL,
32
+ combinedFlags, frame_win.get_window_style))
33
+
34
+ pg.append(Wx::PG::CursorProperty.new("Cursor",Wx::PG::PG_LABEL))
35
+
36
+ pg.append(Wx::PG::PropertyCategory.new("Position","PositionCategory"))
37
+ pg.set_property_help_string("PositionCategory", "Change in items in this category will cause respective changes in frame.")
38
+
39
+ # Let's demonstrate 'Units' attribute here
40
+
41
+ # Note that we use many attribute constants instead of strings here
42
+ # (for instance, Wx::PG::PG_ATTR_MIN, instead of "min").
43
+ # Using constant may reduce binary size.
44
+
45
+ pg.append(Wx::PG::IntProperty.new("Height",Wx::PG::PG_LABEL,480))
46
+ pg.set_property_attribute("Height", Wx::PG::PG_ATTR_MIN, 10)
47
+ pg.set_property_attribute("Height", Wx::PG::PG_ATTR_MAX, 2048)
48
+ pg.set_property_attribute("Height", Wx::PG::PG_ATTR_UNITS, "Pixels")
49
+
50
+ # Set value to unspecified so that Hint attribute will be demonstrated
51
+ pg.set_property_value_unspecified("Height")
52
+ pg.set_property_attribute("Height", Wx::PG::PG_ATTR_HINT,
53
+ "Enter new height for window")
54
+
55
+ # Difference between hint and help string is that the hint is shown in
56
+ # an empty value cell, while help string is shown either in the
57
+ # description text box, as a tool tip, or on the status bar.
58
+ pg.set_property_help_string("Height",
59
+ "This property uses attributes \"Units\" and \"Hint\".")
60
+
61
+ pg.append(Wx::PG::IntProperty.new("Width",Wx::PG::PG_LABEL,640))
62
+ pg.set_property_attribute("Width", Wx::PG::PG_ATTR_MIN, 10)
63
+ pg.set_property_attribute("Width", Wx::PG::PG_ATTR_MAX, 2048)
64
+ pg.set_property_attribute("Width", Wx::PG::PG_ATTR_UNITS, "Pixels")
65
+
66
+ pg.set_property_value_unspecified("Width")
67
+ pg.set_property_attribute("Width", Wx::PG::PG_ATTR_HINT,
68
+ "Enter new width for window")
69
+ pg.set_property_help_string("Width",
70
+ "This property uses attributes \"Units\" and \"Hint\".")
71
+
72
+ pg.append(Wx::PG::IntProperty.new("X",Wx::PG::PG_LABEL,10))
73
+ pg.set_property_attribute("X", Wx::PG::PG_ATTR_UNITS, "Pixels")
74
+ pg.set_property_help_string("X", "This property uses \"Units\" attribute.")
75
+
76
+ pg.append Wx::PG::IntProperty.new("Y",Wx::PG::PG_LABEL,10)
77
+ pg.set_property_attribute("Y", Wx::PG::PG_ATTR_UNITS, "Pixels")
78
+ pg.set_property_help_string("Y", "This property uses \"Units\" attribute.")
79
+
80
+ disabledHelpString = "This property is simply disabled. In order to have label disabled as well, "+
81
+ "you need to set Wx::PG::PG_EX_GREY_LABEL_WHEN_DISABLED using SetExtraStyle."
82
+
83
+ pg.append(Wx::PG::PropertyCategory.new("Environment",Wx::PG::PG_LABEL))
84
+ pg.append(Wx::PG::StringProperty.new("Operating System",Wx::PG::PG_LABEL, Wx.get_os_description))
85
+
86
+ pg.append(Wx::PG::StringProperty.new("User Id",Wx::PG::PG_LABEL, Wx.get_user_id))
87
+ pg.append(Wx::PG::DirProperty.new("User Home",Wx::PG::PG_LABEL, Wx.get_user_home))
88
+ pg.append(Wx::PG::StringProperty.new("User Name",Wx::PG::PG_LABEL, Wx.get_user_name))
89
+
90
+ # Disable some of them
91
+ pg.disable_property("Operating System")
92
+ pg.disable_property("User Id")
93
+ pg.disable_property("User Name")
94
+
95
+ pg.set_property_help_string("Operating System", disabledHelpString)
96
+ pg.set_property_help_string("User Id", disabledHelpString)
97
+ pg.set_property_help_string("User Name", disabledHelpString)
98
+
99
+ pg.append(Wx::PG::PropertyCategory.new("More Examples",Wx::PG::PG_LABEL))
100
+
101
+ pg.append(Wx::PG::LongStringProperty.new("Information",Wx::PG::PG_LABEL,
102
+ "Editing properties will have immediate effect on this window, "+
103
+ "and vice versa (at least in most cases, that is)."))
104
+ pg.set_property_help_string("Information",
105
+ "This property is read-only.")
106
+
107
+ pg.set_property_read_only("Information", true)
108
+
109
+ #
110
+ # Set test information for cells in columns 3 and 4
111
+ # (reserve column 2 for displaying units)
112
+ bmp = Wx::ArtProvider.get_bitmap(Wx::ART_FOLDER)
113
+
114
+ pg.grid.each_property do |p|
115
+ continue if p.category?
116
+
117
+ pg.set_property_cell(p, 3, "Cell 3", bmp)
118
+ pg.set_property_cell(p, 4, "Cell 4", Wx::BitmapBundle.new, Wx::WHITE, Wx::BLACK)
119
+ end
120
+ end
121
+
122
+ def populate_with_examples(pgman)
123
+ pg = pgman.get_page("Examples")
124
+
125
+ pg.append(Wx::PG::IntProperty.new("IntProperty", Wx::PG::PG_LABEL, 12345678))
126
+
127
+ if Wx.has_feature?(:USE_SPINBTN)
128
+ pg.append(Wx::PG::IntProperty.new("SpinCtrl", Wx::PG::PG_LABEL, 0))
129
+
130
+ pg.set_property_editor("SpinCtrl", Wx::PG::PG_EDITOR_SPIN_CTRL)
131
+ pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_MIN, -2) # Use constants instead of string
132
+ pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_MAX, 16384) # for reduced binary size.
133
+ pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_SPINCTRL_STEP, 2)
134
+ pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_SPINCTRL_MOTION, true)
135
+ pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_SPINCTRL_WRAP, true)
136
+
137
+ pg.set_property_help_string("SpinCtrl",
138
+ "This is regular Wx::PG::IntProperty, which editor has been "+
139
+ "changed to Wx::PG::PGEditor_SpinCtrl. Note however that "+
140
+ "static wxPropertyGrid::RegisterAdditionalEditors() "+
141
+ "needs to be called prior to using it.")
142
+ end
143
+
144
+ # Add bool property
145
+ pg.append(Wx::PG::BoolProperty.new("BoolProperty", Wx::PG::PG_LABEL, false))
146
+
147
+ # Add bool property with check box
148
+ pg.append(Wx::PG::BoolProperty.new("BoolProperty with CheckBox", Wx::PG::PG_LABEL, false))
149
+ pg.set_property_attribute("BoolProperty with CheckBox",
150
+ Wx::PG::PG_BOOL_USE_CHECKBOX,
151
+ true)
152
+
153
+ pg.set_property_help_string("BoolProperty with CheckBox",
154
+ "Property attribute Wx::PG::PG_BOOL_USE_CHECKBOX has been set to true.")
155
+
156
+ prop = pg.append(Wx::PG::FloatProperty.new("FloatProperty",
157
+ Wx::PG::PG_LABEL,
158
+ 1234500.23))
159
+ prop.set_attribute(Wx::PG::PG_ATTR_MIN, -100.12)
160
+
161
+ # A string property that can be edited in a separate editor dialog.
162
+ pg.append(Wx::PG::LongStringProperty.new("LongStringProperty", "LongStringProp",
163
+ "This is much longer string than the first one. Edit it by clicking the button."))
164
+
165
+ # A property that edits a wxArrayString.
166
+ example_array = [
167
+ "String 1",
168
+ "String 2",
169
+ "String 3"
170
+ ]
171
+ pg.append(Wx::PG::ArrayStringProperty.new("ArrayStringProperty", Wx::PG::PG_LABEL,
172
+ example_array))
173
+
174
+ # A file selector property. Note that argument between name
175
+ # and initial value is wildcard (format same as in wxFileDialog).
176
+ prop = Wx::PG::FileProperty.new("FileProperty", "TextFile")
177
+ pg.append(prop)
178
+
179
+ prop.set_attribute(Wx::PG::PG_FILE_WILDCARD,"Text Files (*.txt)|*.txt")
180
+ prop.set_attribute(Wx::PG::PG_DIALOG_TITLE,"Custom File Dialog Title")
181
+ prop.set_attribute(Wx::PG::PG_FILE_SHOW_FULL_PATH,false)
182
+
183
+ if Wx::PLATFORM == 'WXMSW'
184
+ prop.set_attribute(Wx::PG::PG_FILE_SHOW_RELATIVE_PATH,"C:\\Windows")
185
+ pg.set_property_value(prop,"C:\\Windows\\System32\\msvcrt71.dll")
186
+ end
187
+
188
+ if Wx.has_feature? :USE_IMAGE
189
+ # An image file property. Arguments are just like for FileProperty, but
190
+ # wildcard is missing (it is autogenerated from supported image formats).
191
+ # If you really need to override it, create property separately, and call
192
+ # its SetWildcard method.
193
+ pg.append(Wx::PG::ImageFileProperty.new("ImageFile", Wx::PG::PG_LABEL))
194
+ end
195
+
196
+ pid = pg.append(Wx::PG::ColourProperty.new("ColourProperty",Wx::PG::PG_LABEL,Wx::RED))
197
+ pg.set_property_editor("ColourProperty", Wx::PG::PG_EDITOR_COMBO_BOX)
198
+ pg.get_property("ColourProperty").set_auto_unspecified(true)
199
+ pg.set_property_help_string("ColourProperty",
200
+ "wxPropertyGrid::SetPropertyEditor method has been used to change "+
201
+ "editor of this property to Wx::PG::PGEditor_ComboBox)")
202
+
203
+ pid = pg.append(Wx::PG::ColourProperty.new("ColourPropertyWithAlpha",
204
+ Wx::PG::PG_LABEL,
205
+ Wx::Colour.new(15, 200, 95, 128)))
206
+ pg.set_property_attribute("ColourPropertyWithAlpha", Wx::PG::PG_COLOUR_HAS_ALPHA, true)
207
+ pg.set_property_help_string("ColourPropertyWithAlpha",
208
+ "Attribute \"HasAlpha\" is set to true for this property.")
209
+
210
+ #
211
+ # This demonstrates using alternative editor for colour property
212
+ # to trigger colour dialog directly from button.
213
+ pg.append(Wx::PG::ColourProperty.new("ColourProperty2",Wx::PG::PG_LABEL,Wx::GREEN))
214
+
215
+ #
216
+ # Wx::PG::EnumProperty does not store strings or even list of strings
217
+ # (so that's why they are static in function).
218
+ enum_prop_labels = [
219
+ "One Item",
220
+ "Another Item",
221
+ "One More",
222
+ "This Is Last" ]
223
+
224
+ # this value array would be optional if values matched string indexes
225
+ enum_prop_values = [ 40, 80, 120, 160 ]
226
+
227
+ # note that the initial value (the last argument) is the actual value,
228
+ # not index or anything like that. Thus, our value selects "Another Item".
229
+ pg.append(Wx::PG::EnumProperty.new("EnumProperty",Wx::PG::PG_LABEL,
230
+ enum_prop_labels, enum_prop_values, 80))
231
+
232
+ soc = Wx::PG::PGChoices.new
233
+
234
+ # use basic table from our previous example
235
+ # can also set/add wxArrayStrings and wxArrayInts directly.
236
+ soc.set(enum_prop_labels, enum_prop_values)
237
+
238
+ # add extra items
239
+ soc.add("Look, it continues", 200)
240
+ soc.add("Even More", 240)
241
+ soc.add("And More", 280)
242
+ soc.add('', 300)
243
+ soc.add("True End of the List", 320)
244
+
245
+ # Test custom colours ([] operator of Wx::PG::PGChoices returns
246
+ # references to Wx::PG::PGChoiceEntry).
247
+ soc[1].set_fg_col(Wx::RED)
248
+ soc[1].set_bg_col(Wx::LIGHT_GREY)
249
+ soc[2].set_fg_col(Wx::GREEN)
250
+ soc[2].set_bg_col(Wx::LIGHT_GREY)
251
+ soc[3].set_fg_col(Wx::BLUE)
252
+ soc[3].set_bg_col(Wx::LIGHT_GREY)
253
+ soc[4].set_bitmap(Wx::ArtProvider.get_bitmap(Wx::ART_FOLDER))
254
+
255
+ pg.append(Wx::PG::EnumProperty.new("EnumProperty 2",
256
+ Wx::PG::PG_LABEL,
257
+ soc,
258
+ 240))
259
+ pg.get_property("EnumProperty 2").add_choice("Testing Extra", 360)
260
+
261
+ # Here we only display the original 'soc' choices
262
+ pg.append(Wx::PG::EnumProperty.new("EnumProperty 3",Wx::PG::PG_LABEL,
263
+ soc, 240))
264
+
265
+ # Test Hint attribute in EnumProperty
266
+ pg.get_property("EnumProperty 3").set_attribute(Wx::PG::PG_ATTR_HINT, "Dummy Hint")
267
+
268
+ pg.set_property_help_string("EnumProperty 3",
269
+ "This property uses \"Hint\" attribute.")
270
+
271
+ # 'soc' plus one exclusive extra choice "4th only"
272
+ pg.append(Wx::PG::EnumProperty.new("EnumProperty 4",Wx::PG::PG_LABEL,
273
+ soc, 240))
274
+ pg.get_property("EnumProperty 4").add_choice("4th only", 360)
275
+
276
+ pg.set_property_help_string("EnumProperty 4",
277
+ "Should have one extra item when compared to EnumProperty 3")
278
+
279
+ # Plus property value bitmap
280
+ pg.append(Wx::PG::EnumProperty.new("EnumProperty With Bitmap", "EnumProperty 5",
281
+ soc, 280))
282
+ pg.set_property_help_string("EnumProperty 5",
283
+ "Should have bitmap in front of the displayed value")
284
+ bmpVal = Wx::ArtProvider.get_bitmap(Wx::ART_REMOVABLE)
285
+ pg.set_property_image("EnumProperty 5", bmpVal)
286
+
287
+ # Password property example.
288
+ pg.append(Wx::PG::StringProperty.new("Password",Wx::PG::PG_LABEL, "password"))
289
+ pg.set_property_attribute("Password", Wx::PG::PG_STRING_PASSWORD, true)
290
+ pg.set_property_help_string("Password",
291
+ "Has attribute Wx::PG::PG_STRING_PASSWORD set to true")
292
+
293
+ # String editor with dir selector button. Uses wxEmptyString as name, which
294
+ # is allowed (naturally, in this case property cannot be accessed by name).
295
+ pg.append(Wx::PG::DirProperty.new("DirProperty", Wx::PG::PG_LABEL, Wx.get_user_home))
296
+ pg.set_property_attribute("DirProperty",
297
+ Wx::PG::PG_DIALOG_TITLE,
298
+ "This is a custom dir dialog title")
299
+
300
+ # Add string property - first arg is label, second name, and third initial value
301
+ pg.append(Wx::PG::StringProperty.new("StringProperty", Wx::PG::PG_LABEL))
302
+ pg.set_property_max_length("StringProperty", 6)
303
+ pg.set_property_help_string("StringProperty",
304
+ "Max length of this text has been limited to 6, using wxPropertyGrid::SetPropertyMaxLength.")
305
+
306
+ # Set value after limiting so that it will be applied
307
+ pg.set_property_value("StringProperty", "some text")
308
+
309
+ #
310
+ # Demonstrate "AutoComplete" attribute
311
+ pg.append(Wx::PG::StringProperty.new("StringProperty AutoComplete",
312
+ Wx::PG::PG_LABEL))
313
+
314
+ autoCompleteStrings = [
315
+ "One choice",
316
+ "Another choice",
317
+ "Another choice, yeah",
318
+ "Yet another choice",
319
+ "Yet another choice, bear with me"
320
+ ]
321
+ pg.set_property_attribute("StringProperty AutoComplete",
322
+ Wx::PG::PG_ATTR_AUTOCOMPLETE,
323
+ autoCompleteStrings)
324
+
325
+ pg.set_property_help_string("StringProperty AutoComplete",
326
+ "AutoComplete attribute has been set for this property "+
327
+ "(try writing something beginning with 'a', 'o' or 'y').")
328
+
329
+
330
+ # Add string property with arbitrarily wide bitmap in front of it. We
331
+ # intentionally lower-than-typical row height here so that the ugly
332
+ # scaling code won't be run.
333
+ pg.append(Wx::PG::StringProperty.new("StringPropertyWithBitmap",
334
+ Wx::PG::PG_LABEL,
335
+ "Test Text"))
336
+ myTestBitmap1x = Wx::Bitmap.new(60, 15, 32)
337
+ Wx::MemoryDC.draw_on(myTestBitmap1x) do |mdc|
338
+ mdc.set_background(Wx::WHITE_BRUSH)
339
+ mdc.clear
340
+ mdc.set_pen(Wx::BLACK_PEN)
341
+ mdc.set_brush(Wx::WHITE_BRUSH)
342
+ mdc.draw_rectangle(0, 0, 60, 15)
343
+ mdc.draw_line(0, 0, 59, 14)
344
+ mdc.set_text_foreground(Wx::BLACK)
345
+ mdc.draw_text("x1", 0, 0)
346
+ end
347
+
348
+ myTestBitmap2x = Wx::Bitmap.new(120, 30, 32)
349
+ Wx::MemoryDC.draw_on(myTestBitmap2x) do |mdc|
350
+ mdc.set_background(Wx::WHITE_BRUSH)
351
+ mdc.clear
352
+ mdc.set_pen(Wx::Pen.new(Wx::BLUE, 2))
353
+ mdc.set_brush(Wx::WHITE_BRUSH)
354
+ mdc.draw_rectangle(0, 0, 120, 30)
355
+ mdc.draw_line(0, 0, 119, 31)
356
+ mdc.set_text_foreground(Wx::BLUE)
357
+ f = mdc.font
358
+ f.set_pixel_size(f.get_pixel_size * 2)
359
+ mdc.set_font(f)
360
+ mdc.draw_text("x2", 0, 0)
361
+ end
362
+
363
+ myTestBitmap2x.set_scale_factor(2)
364
+ pg.set_property_image("StringPropertyWithBitmap", Wx::BitmapBundle.from_bitmaps(myTestBitmap1x, myTestBitmap2x))
365
+
366
+ # Multi choice dialog.
367
+ tchoices = %w[Cabbage Carrot Onion Potato Strawberry]
368
+
369
+ tchoicesValues = %w[Carrot Potato]
370
+
371
+ pg.append(Wx::PG::EnumProperty.new("EnumProperty X",Wx::PG::PG_LABEL, tchoices))
372
+
373
+ pg.append(Wx::PG::MultiChoiceProperty.new("MultiChoiceProperty", Wx::PG::PG_LABEL,
374
+ tchoices, tchoicesValues))
375
+ pg.set_property_attribute("MultiChoiceProperty", Wx::PG::PG_ATTR_MULTICHOICE_USERSTRINGMODE, 1)
376
+
377
+ # UInt samples
378
+ pg.append(Wx::PG::UIntProperty.new("UIntProperty", Wx::PG::PG_LABEL, 0xFEEEFEEEFEEE))
379
+ pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_PREFIX, Wx::PG::PG_PREFIX_NONE)
380
+ pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_BASE, Wx::PG::PG_BASE_HEX)
381
+ #pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_PREFIX, Wx::PG::PG_PREFIX_NONE)
382
+ #pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_BASE, Wx::PG::PG_BASE_OCT)
383
+
384
+ #
385
+ # Wx::PG::EditEnumProperty
386
+ eech = Wx::PG::PGChoices.new([
387
+ "Choice 1",
388
+ "Choice 2",
389
+ "Choice 3"
390
+ ])
391
+ pg.append(Wx::PG::EditEnumProperty.new("EditEnumProperty",
392
+ Wx::PG::PG_LABEL,
393
+ eech,
394
+ "Choice not in the list"))
395
+
396
+ # Test Hint attribute in EditEnumProperty
397
+ pg.get_property("EditEnumProperty").set_attribute(Wx::PG::PG_ATTR_HINT, "Dummy Hint")
398
+
399
+ #wxString v_;
400
+ #wxTextValidator validator1(wxFILTER_NUMERIC,&v_)
401
+ #pg.SetPropertyValidator("EditEnumProperty", validator1)
402
+
403
+ if Wx.has_feature? :USE_DATETIME
404
+ #
405
+ # Wx::PG::DateTimeProperty
406
+ pg.append(Wx::PG::DateProperty.new("DateProperty", Wx::PG::PG_LABEL, Time.now))
407
+
408
+ if Wx.has_feature? :USE_DATEPICKCTRL
409
+ pg.set_property_attribute("DateProperty", Wx::PG::PG_DATE_PICKER_STYLE,
410
+ Wx::DP_DROPDOWN|Wx::DP_SHOWCENTURY|Wx::DP_ALLOWNONE)
411
+
412
+ pg.set_property_help_string("DateProperty",
413
+ "Attribute Wx::PG::PG_DATE_PICKER_STYLE has been set to (long)"+
414
+ "(wxDP_DROPDOWN | wxDP_SHOWCENTURY | wxDP_ALLOWNONE).")
415
+ end
416
+
417
+ end
418
+
419
+ #
420
+ # This snippet is a doc sample test
421
+ #
422
+ carProp = pg.append(Wx::PG::StringProperty.new("Car",
423
+ Wx::PG::PG_LABEL,
424
+ '<composed>'))
425
+
426
+ pg.append_in(carProp, Wx::PG::StringProperty.new("Model",
427
+ Wx::PG::PG_LABEL,
428
+ "Lamborghini Diablo SV"))
429
+
430
+ pg.append_in(carProp, Wx::PG::IntProperty.new("Engine Size (cc)",
431
+ Wx::PG::PG_LABEL,
432
+ 5707))
433
+
434
+ speedsProp = pg.append_in(carProp,
435
+ Wx::PG::StringProperty.new("Speeds",
436
+ Wx::PG::PG_LABEL,
437
+ '<composed>'))
438
+
439
+ pg.append_in(speedsProp, Wx::PG::IntProperty.new("Max. Speed (mph)",
440
+ Wx::PG::PG_LABEL,290))
441
+ pg.append_in(speedsProp, Wx::PG::FloatProperty.new("0-100 mph (sec)",
442
+ Wx::PG::PG_LABEL,3.9))
443
+ pg.append_in(speedsProp, Wx::PG::FloatProperty.new("1/4 mile (sec)",
444
+ Wx::PG::PG_LABEL,8.6))
445
+
446
+ # This is how child property can be referred to by name
447
+ pg.set_property_value("Car.Speeds.Max. Speed (mph)", 300)
448
+
449
+ pg.append_in(carProp, Wx::PG::IntProperty.new("Price ($)",
450
+ Wx::PG::PG_LABEL,
451
+ 300000))
452
+
453
+ pg.append_in(carProp, Wx::PG::BoolProperty.new("Convertible",
454
+ Wx::PG::PG_LABEL,
455
+ false))
456
+
457
+ # Displayed value of "Car" property is now very close to this:
458
+ # "Lamborghini Diablo SV; 5707 [300; 3.9; 8.6] 300000"
459
+
460
+ #
461
+ # Test adding variable height bitmaps in Wx::PG::PGChoices
462
+ bc = Wx::PG::PGChoices.new
463
+ bc.add("Wee",
464
+ Wx::ArtProvider.get_bitmap(Wx::ART_CDROM, Wx::ART_OTHER, [16, 16]))
465
+ bc.add("Not so wee",
466
+ Wx::ArtProvider.get_bitmap(Wx::ART_FLOPPY, Wx::ART_OTHER, [32, 32]))
467
+ bc.add("Friggin' huge",
468
+ Wx::ArtProvider.get_bitmap(Wx::ART_HARDDISK, Wx::ART_OTHER, [64, 64]))
469
+
470
+ pg.append(Wx::PG::EnumProperty.new("Variable Height Bitmaps",
471
+ Wx::PG::PG_LABEL,
472
+ bc,
473
+ 0))
474
+
475
+ #
476
+ # Test how non-editable composite strings appear
477
+ pid = Wx::PG::StringProperty.new("wxRuby Traits", Wx::PG::PG_LABEL, "<composed>")
478
+ pg.set_property_read_only(pid)
479
+
480
+ #
481
+ # For testing purposes, combine two methods of adding children
482
+ #
483
+
484
+ pid.append_child(Wx::PG::StringProperty.new("Latest Release",
485
+ Wx::PG::PG_LABEL,
486
+ "3.0.0"))
487
+ pid.append_child(Wx::PG::BoolProperty.new("Win API",
488
+ Wx::PG::PG_LABEL,
489
+ true))
490
+
491
+ pg.append(pid)
492
+
493
+ pg.append_in(pid, Wx::PG::BoolProperty.new("QT", Wx::PG::PG_LABEL, true))
494
+ pg.append_in(pid, Wx::PG::BoolProperty.new("Cocoa", Wx::PG::PG_LABEL, true))
495
+ pg.append_in(pid, Wx::PG::BoolProperty.new("Haiku", Wx::PG::PG_LABEL, false))
496
+ pg.append_in(pid, Wx::PG::StringProperty.new("Trunk Version", Wx::PG::PG_LABEL, Wx::WXRUBY_VERSION))
497
+ pg.append_in(pid, Wx::PG::BoolProperty.new("GTK+", Wx::PG::PG_LABEL, true))
498
+ pg.append_in(pid, Wx::PG::BoolProperty.new("Android", Wx::PG::PG_LABEL, false))
499
+ end
500
+
501
+ def create_grid(style, extraStyle)
502
+ # This function creates the property grid in tests
503
+
504
+ style = # default style
505
+ Wx::PG::PG_BOLD_MODIFIED |
506
+ Wx::PG::PG_SPLITTER_AUTO_CENTER |
507
+ Wx::PG::PG_AUTO_SORT |
508
+ Wx::PG::PG_TOOLBAR if style == -1
509
+
510
+
511
+ # default extra style
512
+ extraStyle = Wx::PG::PG_EX_MODE_BUTTONS |
513
+ Wx::PG::PG_EX_MULTIPLE_SELECTION if extraStyle == -1
514
+
515
+ pg_manager = Wx::PG::PropertyGridManager.new(frame_win, Wx::ID_ANY, style: style)
516
+ pg_manager.set_size(frame_win.get_client_size)
517
+ pg_manager.set_extra_style(extraStyle)
518
+
519
+ # This is the default validation failure behaviour
520
+ pg_manager.set_validation_failure_behavior(Wx::PG::PG_VFB_MARK_CELL |
521
+ Wx::PG::PG_VFB_SHOW_MESSAGE)
522
+
523
+ pg = pg_manager.get_grid
524
+ # Set somewhat different unspecified value appearance
525
+ cell = Wx::PG::PGCell.new
526
+ cell.set_text("Unspecified")
527
+ cell.set_fg_col(Wx::LIGHT_GREY)
528
+ pg.set_unspecified_value_appearance(cell)
529
+
530
+ # Populate grid
531
+ pg_manager.add_page("Standard Items")
532
+ populate_with_standard_items(pg_manager)
533
+ pg_manager.add_page("Examples")
534
+ populate_with_examples(pg_manager)
535
+
536
+ pg_manager.refresh
537
+ pg_manager.update
538
+ # Wait for update to be done
539
+ yield_for_a_while(200)
540
+
541
+ pg_manager
542
+ end
543
+
544
+ def setup
545
+ super
546
+ frame_win.raise_window
547
+ @pg_manager = create_grid(-1, -1)
548
+ end
549
+
550
+ def teardown
551
+ @pg_manager.destroy
552
+ super
553
+ end
554
+
555
+ def test_iterate
556
+ @pg_manager.each_property(Wx::PG::PG_ITERATE_PROPERTIES) do |prop|
557
+ assert_false(prop.is_category, "'#{prop.get_label}' is a category (non-private child property expected)")
558
+ assert_false(prop.get_parent.has_flag(Wx::PG::PG_PROP_AGGREGATE), "'#{prop.get_label}' is a private child (non-private child property expected)")
559
+ end
560
+ @pg_manager.each_property(Wx::PG::PG_ITERATE_CATEGORIES) do |prop|
561
+ assert_true(prop.is_category, "'#{prop.get_label}' is not a category (only categories expected)")
562
+ end
563
+ @pg_manager.each_property(Wx::PG::PG_ITERATE_PROPERTIES|Wx::PG::PG_ITERATE_CATEGORIES) do |prop|
564
+ assert_false(prop.get_parent.has_flag(Wx::PG::PG_PROP_AGGREGATE), "'#{prop.get_label}' is a private child (non-private child property or category expected)")
565
+ end
566
+ @pg_manager.each_property(Wx::PG::PG_ITERATE_VISIBLE) do |prop|
567
+ assert_true(prop.parent == @pg_manager.grid.root || prop.parent.expanded?, "'#{prop.get_label}' had collapsed parent (only visible properties expected)")
568
+ assert_false(prop.has_flag(Wx::PG::PG_PROP_HIDDEN), "'#{prop.get_label}' was hidden (only visible properties expected)")
569
+ end
570
+ end
571
+
572
+ def test_iterate_delete_first_page_then_last
573
+ # Get all properties from first page
574
+ pageFirst = @pg_manager.get_page(0)
575
+ properties_page_first_init = pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).collect { |prop| prop.get_name }
576
+ # Get all properties from last page
577
+ pageLast = @pg_manager.get_page(@pg_manager.get_page_count - 1)
578
+ properties_page_last_init = pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).collect { |prop| prop.get_name }
579
+
580
+ countAllPropertiesInit = @pg_manager.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
581
+
582
+ # Delete all properties from first page
583
+ pageFirst.clear
584
+
585
+ assert_true(pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count == 0)
586
+
587
+ properties_page_last = pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).collect { |prop| prop.get_name }
588
+ assert_equal(properties_page_last_init, properties_page_last)
589
+
590
+ if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
591
+ countAllProperties = @pg_manager.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
592
+ else
593
+ # wxWidgets < 3.3.0 has a bug in the iteration implementation for PropertyGridManager
594
+ countAllProperties = pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count +
595
+ pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
596
+ end
597
+ assert_equal(countAllPropertiesInit-properties_page_first_init.size, countAllProperties)
598
+
599
+ # Delete all properties from last page
600
+ pageLast.clear
601
+
602
+ assert_true(pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count == 0)
603
+
604
+ assert_true(pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count == 0)
605
+
606
+ if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
607
+ countAllProperties = @pg_manager.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
608
+ else
609
+ # wxWidgets < 3.3.0 has a bug in the iteration implementation for PropertyGridManager
610
+ countAllProperties = pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count +
611
+ pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
612
+ end
613
+ assert_equal(countAllPropertiesInit-properties_page_first_init.size-properties_page_last_init.size, countAllProperties)
614
+ end
615
+
616
+ def test_iterate_delete_last_page_then_first
617
+ # Get all properties from first page
618
+ pageFirst = @pg_manager.get_page(0)
619
+ properties_page_first_init = pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).collect { |prop| prop.get_name }
620
+ # Get all properties from last page
621
+ pageLast = @pg_manager.get_page(@pg_manager.get_page_count - 1)
622
+ properties_page_last_init = pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).collect { |prop| prop.get_name }
623
+
624
+ countAllPropertiesInit = @pg_manager.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
625
+
626
+ # Delete all properties from last page
627
+ pageLast.clear
628
+
629
+ assert_true(pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count == 0)
630
+
631
+ properties_page_first = pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).collect { |prop| prop.get_name }
632
+ assert_equal(properties_page_first_init, properties_page_first)
633
+
634
+ countAllProperties = @pg_manager.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
635
+ assert_equal(countAllPropertiesInit-properties_page_last_init.size, countAllProperties)
636
+
637
+ # Delete all properties from first page
638
+ pageFirst.clear
639
+
640
+ assert_true(pageLast.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count == 0)
641
+
642
+ assert_true(pageFirst.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count == 0)
643
+
644
+ countAllProperties = @pg_manager.each_property(Wx::PG::PG_ITERATOR_FLAGS_ALL | Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_ITERATOR_FLAGS_ALL)).count
645
+ assert_equal(countAllPropertiesInit-properties_page_first_init.size-properties_page_last_init.size, countAllProperties)
646
+ end
647
+
648
+ def test_select_property
649
+ # Test that setting focus to properties does not crash things
650
+ @pg_manager.page_count.times do |pc|
651
+ page = @pg_manager.page(pc)
652
+ @pg_manager.select_page(page)
653
+
654
+ page.each_property(Wx::PG::PG_ITERATE_VISIBLE) do |prop|
655
+ @pg_manager.grid.select_property(prop, true)
656
+ sleep(0.150)
657
+ frame_win.update
658
+ end
659
+ end
660
+ end
661
+
662
+ def test_delete_property
663
+ # delete everything in reverse order
664
+
665
+ array = @pg_manager.each_property(Wx::PG::PG_ITERATE_ALL & ~(Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_PROP_AGGREGATE))).to_a
666
+ array.reverse_each { |prop| @pg_manager.delete_property(prop) }
667
+
668
+ assert_true(@pg_manager.each_property(Wx::PG::PG_ITERATE_ALL & ~(Wx::PG.PG_IT_CHILDREN(Wx::PG::PG_PROP_AGGREGATE))).count == 0, "Not all properties are deleted")
669
+
670
+ @pg_manager.refresh
671
+ @pg_manager.update
672
+ # Wait for update to be done
673
+ yield_for_a_while(100)
674
+ end
675
+
676
+ def test_default_values
677
+ @pg_manager.each_property(Wx::PG::PG_ITERATE_PROPERTIES) do |prop|
678
+ @pg_manager.set_property_value(prop, prop.default_value)
679
+ end
680
+ end
681
+
682
+ def test_set_get_property_values
683
+ test_arrstr_1 = %w[Apple Orange Lemon]
684
+
685
+ test_arrstr_2 = %w[Potato Cabbage Cucumber]
686
+
687
+ test_arrint_1 = [1,2,3]
688
+
689
+ test_arrint_2 = [0,1,4]
690
+
691
+ if Wx.has_feature? :USE_DATETIME
692
+ dt1 = Time.now
693
+ dt1 = Time.new(dt1.year, dt1.month, 28) if dt1.month == 2 && dt1.day == 29
694
+
695
+ dt2 = Time.new(dt1.year-10, dt1.month, dt1.day)
696
+ dt1 = Time.new(dt1.year-1, dt1.month, dt1.day)
697
+ end
698
+
699
+ @pg_manager.set_property_value("StringProperty", "Text1")
700
+ @pg_manager.set_property_value("IntProperty", 1024)
701
+ @pg_manager.set_property_value("FloatProperty", 1024.0000000001)
702
+ @pg_manager.set_property_value("BoolProperty", false)
703
+ @pg_manager.set_property_value("EnumProperty", 120)
704
+ @pg_manager.set_property_value("ArrayStringProperty", test_arrstr_1)
705
+ @pg_manager.set_property_value("ColourProperty", Wx::Colour.new)
706
+ @pg_manager.set_property_value("ColourProperty", Wx::BLACK)
707
+ @pg_manager.set_property_value("MultiChoiceProperty", test_arrint_1)
708
+ if Wx.has_feature? :USE_DATETIME
709
+ @pg_manager.set_property_value("DateProperty", dt1)
710
+ end
711
+
712
+ @pg_manager.select_page(1)
713
+ pg = @pg_manager.grid
714
+
715
+ assert_equal("Text1", pg.get_property_value_as_string("StringProperty"))
716
+ assert_equal(1024, pg.get_property_value_as_int("IntProperty"))
717
+ assert_equal(1024.0000000001, pg.get_property_value_as_double("FloatProperty"))
718
+ assert_false(pg.get_property_value_as_bool("BoolProperty"))
719
+ assert_equal(120, pg.get_property_value_as_long("EnumProperty"))
720
+ assert_equal(test_arrstr_1, pg.get_property_value_as_array_string("ArrayStringProperty"))
721
+ col = @pg_manager.get_property_value("ColourProperty").get_colour
722
+ assert_equal(Wx::BLACK, col)
723
+ assert_equal(test_arrint_1, pg.get_property_value_as_array_int("MultiChoiceProperty"))
724
+ if Wx.has_feature? :USE_DATETIME
725
+ assert_equal(dt1, pg.get_property_value_as_date_time("DateProperty"))
726
+ end
727
+
728
+ @pg_manager.set_property_value("IntProperty", 10000000000)
729
+ assert_equal(10000000000, pg.get_property_value_as_long_long("IntProperty"))
730
+
731
+ pg.set_property_value("StringProperty", "Text2")
732
+ pg.set_property_value("IntProperty", 512)
733
+ pg.set_property_value("FloatProperty", 512.0)
734
+ pg.set_property_value("BoolProperty", true)
735
+ pg.set_property_value("EnumProperty", 80)
736
+ pg.set_property_value("ArrayStringProperty", test_arrstr_2)
737
+ pg.set_property_value("ColourProperty", Wx::WHITE)
738
+ pg.set_property_value("MultiChoiceProperty", test_arrint_2)
739
+ if Wx.has_feature? :USE_DATETIME
740
+ pg.set_property_value("DateProperty", dt2)
741
+ end
742
+
743
+ @pg_manager.select_page(0)
744
+
745
+ assert_equal("Text2", @pg_manager.get_property_value_as_string("StringProperty"))
746
+ assert_equal(512, @pg_manager.get_property_value_as_int("IntProperty"))
747
+ assert_equal(512.0, @pg_manager.get_property_value_as_double("FloatProperty"))
748
+ assert_true(@pg_manager.get_property_value_as_bool("BoolProperty"))
749
+ assert_equal(80, @pg_manager.get_property_value_as_long("EnumProperty"))
750
+ assert_equal(test_arrstr_2, @pg_manager.get_property_value_as_array_string("ArrayStringProperty"))
751
+ col = @pg_manager.get_property_value("ColourProperty").colour
752
+ assert_equal(Wx::WHITE, col)
753
+ assert_equal(test_arrint_2, @pg_manager.get_property_value_as_array_int("MultiChoiceProperty"))
754
+ if Wx.has_feature? :USE_DATETIME
755
+ assert_equal(dt2, @pg_manager.get_property_value_as_date_time("DateProperty"))
756
+ end
757
+
758
+ @pg_manager.set_property_value("IntProperty", -80000000000)
759
+ assert_equal(-80000000000, @pg_manager.get_property_value_as_long_long("IntProperty"))
760
+
761
+ nvs = 'Lamborghini Diablo XYZ; 5707; [100; 3.9; 8.6] 3000002; Convertible'
762
+ @pg_manager.set_property_value("Car", nvs)
763
+ assert_equal("Lamborghini Diablo XYZ", @pg_manager.get_property_value_as_string("Car.Model"))
764
+ assert_equal(100, @pg_manager.get_property_value_as_int("Car.Speeds.Max. Speed (mph)"))
765
+ assert_equal(3000002, @pg_manager.get_property_value_as_int("Car.Price ($)"))
766
+ assert_true(@pg_manager.get_property_value_as_bool("Car.Convertible"))
767
+
768
+ # SetPropertyValueString for special cases such as wxColour
769
+ @pg_manager.set_property_value_string("ColourProperty", "(123,4,255)")
770
+ col = @pg_manager.get_property_value("ColourProperty").colour
771
+ assert_equal(Wx::Colour.new(123, 4, 255), col)
772
+ @pg_manager.set_property_value_string("ColourProperty", "#FE860B")
773
+ col = @pg_manager.get_property_value("ColourProperty").colour
774
+ assert_equal(Wx::Colour.new("#FE860B"), col)
775
+
776
+ @pg_manager.set_property_value_string("ColourPropertyWithAlpha", "(10, 20, 30, 128)")
777
+ col = @pg_manager.get_property_value("ColourPropertyWithAlpha").colour
778
+ assert_equal(Wx::Colour.new(10, 20, 30, 128), col)
779
+ assert_equal("(10,20,30,128)", @pg_manager.get_property_value_as_string("ColourPropertyWithAlpha"))
780
+ end
781
+
782
+ def test_set_property_value_unspecified
783
+ # Null variant setter tests
784
+ @pg_manager.set_property_value_unspecified("StringProperty")
785
+ @pg_manager.set_property_value_unspecified("IntProperty")
786
+ @pg_manager.set_property_value_unspecified("FloatProperty")
787
+ @pg_manager.set_property_value_unspecified("BoolProperty")
788
+ @pg_manager.set_property_value_unspecified("EnumProperty")
789
+ @pg_manager.set_property_value_unspecified("ArrayStringProperty")
790
+ @pg_manager.set_property_value_unspecified("ColourProperty")
791
+ @pg_manager.set_property_value_unspecified("MultiChoiceProperty")
792
+ if Wx.has_feature? :USE_DATETIME
793
+ @pg_manager.set_property_value_unspecified("DateProperty")
794
+ end
795
+ end
796
+
797
+ def replace_grid(style, extraStyle)
798
+ @pg_manager.destroy # First destroy previous instance
799
+ @pg_manager = create_grid(style, extraStyle)
800
+ @pg_manager.set_focus
801
+ end
802
+
803
+ def test_multiple_selection
804
+ replace_grid(-1, Wx::PG::PG_EX_MULTIPLE_SELECTION) unless @pg_manager.get_extra_style & Wx::PG::PG_EX_MULTIPLE_SELECTION
805
+
806
+ pg = @pg_manager.grid
807
+
808
+ prop1 = pg.get_property("Label")
809
+ prop2 = pg.get_property("Cell Text Colour")
810
+ prop3 = pg.get_property("Height")
811
+ catProp = pg.get_property("Appearance")
812
+
813
+ assert_not_nil(prop1)
814
+ assert_not_nil(prop2)
815
+ assert_not_nil(prop3)
816
+
817
+ pg.clear_selection
818
+ pg.add_to_selection(prop1)
819
+ pg.add_to_selection(prop2)
820
+ pg.add_to_selection(prop3)
821
+
822
+ # Adding category to selection should fail silently
823
+ pg.add_to_selection(catProp)
824
+
825
+ selectedProperties = pg.get_selected_properties
826
+
827
+ assert_equal(3, selectedProperties.size)
828
+ assert_true(pg.is_property_selected(prop1))
829
+ assert_true(pg.is_property_selected(prop2))
830
+ assert_true(pg.is_property_selected(prop3))
831
+ assert_false(pg.is_property_selected(catProp))
832
+
833
+ pg.remove_from_selection(prop1)
834
+ selectedProperties2 = pg.get_selected_properties
835
+
836
+ assert_equal(2, selectedProperties2.size)
837
+ assert_false(pg.is_property_selected(prop1))
838
+ assert_true(pg.is_property_selected(prop2))
839
+ assert_true(pg.is_property_selected(prop3))
840
+
841
+ pg.clear_selection
842
+
843
+ selectedProperties3 = pg.get_selected_properties
844
+
845
+ assert_equal(0, selectedProperties3.size)
846
+ assert_false(pg.is_property_selected(prop1))
847
+ assert_false(pg.is_property_selected(prop2))
848
+ assert_false(pg.is_property_selected(prop3))
849
+
850
+ pg.select_property(prop2)
851
+
852
+ assert_false(pg.is_property_selected(prop1))
853
+ assert_true(pg.is_property_selected(prop2))
854
+ assert_false(pg.is_property_selected(prop3))
855
+ end
856
+
857
+ end