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
@@ -8,47 +8,353 @@
8
8
 
9
9
  module Wx
10
10
 
11
- class Config < Wx::ConfigBase
11
+ class ConfigBase
12
12
 
13
13
  SEPARATOR = '/'.freeze
14
14
 
15
15
  module Interface
16
16
 
17
- def each(&block)
17
+ # provide auto-magic accessor support for config objects
18
+ def method_missing(sym, *args, &block)
19
+ unless block_given? || args.size>1
20
+ setter = false
21
+ key = sym.to_s.sub(/=\z/) { |_| setter = true; '' }
22
+ if (!setter && args.empty?) || (!has_group?(key) && setter && args.size==1)
23
+ if setter
24
+ return set(key, args.shift)
25
+ else
26
+ return get(key)
27
+ end
28
+ elsif setter && args.size == 1 && args.first.is_a?(::Hash) && has_group?(key)
29
+ return set(key, args.shift)
30
+ end
31
+ end
32
+ super
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ class ConfigWx < ConfigBase
40
+
41
+ include ConfigBase::Interface
42
+
43
+ # add protection against exceptions raised in blocks
44
+ wx_for_path = instance_method :for_path
45
+ define_method :for_path do |path, &block|
46
+ if block
47
+ ex = nil
48
+ rc = wx_for_path.bind(self).call(path) do |cfg, key|
49
+ begin
50
+ block.call(cfg, key)
51
+ rescue Exception
52
+ ex = $!
53
+ nil
54
+ end
55
+ end
56
+ raise ex if ex
57
+ rc
58
+ else
59
+ nil
60
+ end
61
+ end
62
+ private :for_path # make this method private (internal use only)
63
+
64
+ # add Enumerator support
65
+
66
+ wx_each_entry = instance_method :each_entry
67
+ define_method :each_entry do |&block|
68
+ if block_given?
69
+ wx_each_entry.bind(self).call { |k| block.call(k, read(k)) }
70
+ else
71
+ ::Enumerator.new { |y| wx_each_entry.bind(self).call { |k| y << [k, read_entry(k)] } }
72
+ end
73
+ end
74
+
75
+ wx_each_group = instance_method :each_group
76
+ define_method :each_group do |&block|
77
+ if block_given?
78
+ wx_each_group.bind(self).call { |k| block.call(k, Group.new(self, self.path.dup.push(k))) }
79
+ else
80
+ ::Enumerator.new { |y| wx_each_group.bind(self).call { |k| y << [k, Group.new(self, self.path.dup.push(k))] } }
81
+ end
82
+ end
83
+
84
+ # make this return a path array
85
+ wx_path = instance_method :path
86
+ define_method :path do
87
+ wx_path.bind(self).call.split(ConfigBase::SEPARATOR)
88
+ end
89
+
90
+ # protect against attempts to rename complete paths
91
+ wx_rename = instance_method :rename
92
+ define_method :rename do |old_key, new_key|
93
+ raise ArgumentError, 'No paths allowed' if old_key.index(ConfigBase::SEPARATOR) || new_key.index(ConfigBase::SEPARATOR)
94
+ wx_rename.bind(self).call(old_key, new_key)
95
+ end
96
+
97
+ # fix recursive number_of_xxx methods as wxRegConfig does not support this currently
98
+ wx_number_of_entries = instance_method :number_of_entries
99
+ define_method :number_of_entries do |recurse=false|
100
+ if recurse
101
+ each_group.inject(wx_number_of_entries.bind(self).call) { |c, (_, g)| c + g.number_of_entries(true) }
102
+ else
103
+ wx_number_of_entries.bind(self).call
104
+ end
105
+ end
106
+
107
+ wx_number_of_groups = instance_method :number_of_groups
108
+ define_method :number_of_groups do |recurse=false|
109
+ if recurse
110
+ each_group.inject(wx_number_of_groups.bind(self).call) { |c, (_, g)| c + g.number_of_groups(true) }
111
+ else
112
+ wx_number_of_groups.bind(self).call
113
+ end
114
+ end
115
+
116
+ def root?
117
+ true
118
+ end
119
+
120
+ def root
121
+ self
122
+ end
123
+
124
+ def parent
125
+ nil
126
+ end
127
+
128
+ def read(path_str, output=nil)
129
+ if has_group?(path_str)
130
+ raise TypeError, "Cannot convert group" unless output.nil?
131
+ Group.new(self, get_path(path_str))
132
+ else
133
+ val = read_entry(path_str)
134
+ return val unless val && output
135
+ case
136
+ when ::String == output || ::String === output
137
+ val.to_s
138
+ when ::Integer == output || ::Integer === output
139
+ Kernel.Integer(val)
140
+ when ::Float == output || ::Float === output
141
+ Kernel.Float(val)
142
+ when ::TrueClass == output || ::FalseClass == output || output == true || output == false
143
+ val.is_a?(Integer) ? val != 0 : !!val
144
+ else
145
+ raise ArgumentError, "Unknown coercion type #{output.is_a?(::Class) ? output : output.class}" unless output.nil? || output.is_a?(::Proc)
146
+ output ? output.call(val) : val
147
+ end
148
+ end
149
+ end
150
+ alias :[] :read
151
+
152
+ def write(path_str, val)
153
+ if val.nil?
154
+ delete(path_str)
155
+ nil
156
+ elsif val.is_a?(::Hash)
157
+ raise ArgumentError, 'Cannot change existing value entry to group.' if has_entry?(path_str)
158
+ group = Group.new(self, get_path(path_str))
159
+ val.each_pair { |k, v| group.set(k, v) }
160
+ group
161
+ else
162
+ raise ArgumentError, 'Cannot change existing group to value entry.' if has_group?(path_str)
163
+ write_entry(path_str, val)
164
+ read_entry(path_str)
165
+ end
166
+ end
167
+ alias :[]= :write
168
+
169
+ def get_path(path_str)
170
+ path_str = path_str.to_s
171
+ abs = path_str.start_with?(ConfigBase::SEPARATOR)
172
+ segs = path_str.split(ConfigBase::SEPARATOR)
173
+ segs.shift if abs
174
+ abs ? segs : (self.path+segs)
175
+ end
176
+ protected :get_path
177
+
178
+ def get(key)
179
+ raise ArgumentError, 'No paths allowed' if key.index(ConfigBase::SEPARATOR)
180
+ if has_entry?(key)
181
+ read_entry(key)
182
+ elsif has_group?(key)
183
+ Group.new(self, self.path.dup.push(key))
184
+ else
185
+ nil
186
+ end
187
+ end
188
+
189
+ def set(key, val)
190
+ raise ArgumentError, 'No paths allowed' if key.index(ConfigBase::SEPARATOR)
191
+ if val.nil?
192
+ delete(key)
193
+ nil
194
+ else
195
+ if (!val.is_a?(::Hash) && !has_group?(key)) || has_entry?(key)
196
+ raise ArgumentError, 'Cannot change existing value entry to group.' if val.is_a?(::Hash)
197
+ write_entry(key, val)
198
+ read_entry(key)
199
+ else
200
+ raise ArgumentError, 'Cannot change existing group to value entry.' if has_group?(key) && !val.is_a?(::Hash)
201
+ delete(key)
202
+ group = Group.new(self, self.path.dup.push(key))
203
+ val.each_pair { |k, v| group.set(k, v) }
204
+ group
205
+ end
206
+ end
207
+ end
208
+
209
+ def to_s
210
+ ConfigBase::SEPARATOR
211
+ end
212
+
213
+ def to_h
214
+ data = each_entry.inject({}) { |hash, pair| hash[pair.first] = pair.last; hash }
215
+ each_group.inject(data) { |hash, pair| hash[pair.first] = pair.last.to_h; hash }
216
+ end
217
+
218
+ def replace(hash)
219
+ raise ArgumentError, 'Expected Hash' unless hash.is_a?(::Hash)
220
+ clear
221
+ hash.each_pair { |k,v| self.set(k, v) }
222
+ self
223
+ end
224
+
225
+ class Group
226
+
227
+ include ConfigBase::Interface
228
+
229
+ def initialize(parent, path)
230
+ @parent = parent
231
+ @path = path.freeze
232
+ @path_str = ConfigBase::SEPARATOR + @path.join(ConfigBase::SEPARATOR) + ConfigBase::SEPARATOR
233
+ end
234
+
235
+ def root?
236
+ false
237
+ end
238
+
239
+ def root
240
+ @parent.root
241
+ end
242
+
243
+ def path
244
+ @path
245
+ end
246
+
247
+ def parent
248
+ @parent
249
+ end
250
+
251
+ def each_entry(&block)
252
+ if block_given?
253
+ root.__send__(:for_path, @path_str) do |cfg, _|
254
+ cfg.each_entry(&block)
255
+ end
256
+ else
257
+ ::Enumerator.new { |y| root.__send__(:for_path, @path_str) { |cfg,_| cfg.each_entry { |k,v| y << [k, v] } } }
258
+ end
259
+ end
260
+
261
+ def each_group(&block)
18
262
  if block_given?
19
- @data.each_pair(&block)
263
+ root.__send__(:for_path, @path_str) do |cfg, _|
264
+ cfg.each_group(&block)
265
+ end
20
266
  else
21
- @data.each_pair
267
+ ::Enumerator.new { |y| root.__send__(:for_path, @path_str) { |cfg,_| cfg.each_group { |k,g| y << [k, g] } } }
22
268
  end
23
269
  end
24
270
 
271
+ def number_of_entries(recurse=false)
272
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.number_of_entries(recurse) }
273
+ end
274
+
275
+ def number_of_groups(recurse=false)
276
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.number_of_groups(recurse) }
277
+ end
278
+
279
+ def get(key)
280
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.get(key) }
281
+ end
282
+
283
+ def set(key, val)
284
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.set(key, val) }
285
+ end
286
+
287
+ def delete(path_str)
288
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.delete(path_str) }
289
+ end
290
+
291
+ def rename(old_key, new_key)
292
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.rename(old_key, new_key) }
293
+ end
294
+
295
+ def has_entry?(path_str)
296
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.has_entry?(path_str) }
297
+ end
298
+
299
+ def has_group?(path_str)
300
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.has_group?(path_str) }
301
+ end
302
+
303
+ def read(path_str, output=nil)
304
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.read(path_str, output) }
305
+ end
306
+ alias :[] :read
307
+
308
+ def write(path_str, val)
309
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.write(path_str, val) }
310
+ end
311
+ alias :[]= :write
312
+
313
+ def to_s
314
+ @path_str
315
+ end
316
+
317
+ def to_h
318
+ root.__send__(:for_path, @path_str) { |cfg,_| cfg.to_h }
319
+ end
320
+
321
+ end
322
+
323
+ end
324
+
325
+ class Config < ConfigBase
326
+
327
+ include ConfigBase::Interface
328
+
329
+ module Interface
330
+
25
331
  def each_entry(&block)
26
332
  if block_given?
27
- @data.keys.select { |k| !@data[k].is_a?(::Hash) }.each(&block)
333
+ data.select { |_,v| !v.is_a?(::Hash) }.each(&block)
28
334
  else
29
- ::Enumerator.new { |y| @data.keys.each { |k| y << k if !@data[k].is_a?(::Hash) } }
335
+ ::Enumerator.new { |y| data.each_pair { |k,v| y << [k, expand(v)] unless v.is_a?(::Hash) } }
30
336
  end
31
337
  end
32
338
 
33
339
  def each_group(&block)
34
340
  if block_given?
35
- @data.select { |_,g| g.is_a?(::Hash) }.each { |k,g| block.call(k, Group.new(self, self.path.dup.push(k), g)) }
341
+ data.select { |_,g| g.is_a?(::Hash) }.each { |k,_| block.call(k, Group.new(self, self.path.dup.push(k))) }
36
342
  else
37
- ::Enumerator.new { |y| @data.each { |k,g| y << [k,Group.new(self, self.path.dup.push(k), g)] if g.is_a?(::Hash) } }
343
+ ::Enumerator.new { |y| data.each_pair { |k,g| y << [k,Group.new(self, self.path.dup.push(k))] if g.is_a?(::Hash) } }
38
344
  end
39
345
  end
40
346
 
41
- def number_of_entries(recurse: false)
347
+ def number_of_entries(recurse=false)
42
348
  if recurse
43
- each_group.inject(each_entry.inject(0) { |c, _| c + 1 }) { |c, (_, g)| c + g.number_of_entries(recurse: true) }
349
+ each_group.inject(each_entry.inject(0) { |c, _| c + 1 }) { |c, (_, g)| c + g.number_of_entries(true) }
44
350
  else
45
351
  each_entry.inject(0) { |c, _| c + 1 }
46
352
  end
47
353
  end
48
354
 
49
- def number_of_groups(recurse: false)
355
+ def number_of_groups(recurse=false)
50
356
  if recurse
51
- each_group.inject(0) { |c, (_,g)| c + 1 + g.number_of_groups(recurse: true) }
357
+ each_group.inject(0) { |c, (_,g)| c + 1 + g.number_of_groups(true) }
52
358
  else
53
359
  each_group.inject(0) { |c, _| c + 1 }
54
360
  end
@@ -59,11 +365,9 @@ module Wx
59
365
  return false if segments.empty?
60
366
  entry = segments.pop
61
367
  group_data = if segments.empty?
62
- @data
368
+ data
63
369
  else
64
- unless abs || root?
65
- segments = self.path + segments
66
- end
370
+ segments = self.path + segments unless abs || root?
67
371
  get_group_at(segments)
68
372
  end
69
373
  !!(group_data && group_data.has_key?(entry) && !group_data[entry].is_a?(::Hash))
@@ -72,87 +376,112 @@ module Wx
72
376
  def has_group?(path_str)
73
377
  segments, abs = get_path(path_str)
74
378
  return root? if segments.empty?
75
- unless abs || root?
76
- segments = self.path + segments
77
- end
379
+ segments = self.path + segments unless abs || root?
78
380
  !!get_group_at(segments)
79
381
  end
80
382
 
81
383
  def get(key)
82
384
  key = key.to_s
83
- elem = @data[key]
385
+ raise ArgumentError, 'No paths allowed' if key.index(ConfigBase::SEPARATOR)
386
+ elem = data[key]
84
387
  if elem.is_a?(::Hash)
85
- Group.new(self, self.path.dup.push(key), elem)
388
+ Group.new(self, self.path.dup.push(key))
86
389
  else
87
- elem
390
+ expand(elem)
88
391
  end
89
392
  end
90
393
 
91
394
  def set(key, val)
92
395
  key = key.to_s
93
- exist = @data.has_key?(key)
94
- elem = exist ? @data[key] : nil
396
+ raise ArgumentError, 'No paths allowed' if key.index(ConfigBase::SEPARATOR)
397
+ hsh = data
398
+ exist = hsh.has_key?(key)
399
+ elem = exist ? hsh[key] : nil
95
400
  if val.nil?
96
- @data.delete(key) if exist
401
+ hsh.delete(key) if exist
97
402
  nil
98
403
  elsif val.is_a?(::Hash)
99
404
  raise ArgumentError, 'Cannot change existing value entry to group.' if exist && !elem.is_a?(::Hash)
100
- elem = @data[key] = {} unless elem
101
- group = Group.new(self, self.path.dup.push(key), elem)
405
+ hsh[key] = {} unless elem
406
+ group = Group.new(self, self.path.dup.push(key))
102
407
  val.each_pair { |k, v| group.set(k, v) }
103
408
  group
104
409
  else
105
410
  raise ArgumentError, 'Cannot change existing group to value entry.' if exist && elem.is_a?(::Hash)
106
- @data[key] = sanitize_value(val)
411
+ hsh[key] = val
107
412
  end
108
413
  end
109
414
 
110
- def delete(key)
111
- @data.delete(key.to_s)
415
+ def delete(path_str)
416
+ segments, abs = get_path(path_str)
417
+ return nil if segments.empty?
418
+ last = segments.pop
419
+ group_data = if segments.empty?
420
+ data
421
+ else
422
+ segments = self.path + segments unless abs || root?
423
+ get_group_at(segments, create_missing_groups: false)
424
+ end
425
+ group_data ? group_data.delete(last) : nil
112
426
  end
113
427
 
114
428
  def rename(old_key, new_key)
115
429
  old_key = old_key.to_s
116
430
  new_key = new_key.to_s
117
- if @data.has_key?(old_key) && !@data.has_key?(new_key)
118
- @data[new_key] = @data.delete(old_key)
431
+ raise ArgumentError, 'No paths allowed' if old_key.index(ConfigBase::SEPARATOR) || new_key.index(ConfigBase::SEPARATOR)
432
+ hsh = data
433
+ if hsh.has_key?(old_key) && !hsh.has_key?(new_key)
434
+ hsh[new_key] = hsh.delete(old_key)
119
435
  true
120
436
  else
121
437
  false
122
438
  end
123
439
  end
124
440
 
125
- def [](path_str)
441
+ def read(path_str, output=nil)
126
442
  segments, abs = get_path(path_str)
127
443
  return nil if segments.empty?
128
444
  last = segments.pop
129
445
  group_data = if segments.empty?
130
- @data
446
+ segments = self.path.dup unless abs || root?
447
+ data
131
448
  else
132
- unless abs || root?
133
- segments = self.path + segments
134
- end
135
- get_group_at(segments, create_missing_groups: true)
449
+ segments = self.path + segments unless abs || root?
450
+ get_group_at(segments)
136
451
  end
137
- raise ArgumentError, "Unable to resolve path #{segments+[last]}" unless group_data
138
- elem = group_data[last]
139
- if elem.is_a?(::Hash)
140
- Group.new(self, segments.dup.push(last), elem)
452
+ val = group_data ? group_data[last] : nil
453
+ if val.is_a?(::Hash)
454
+ raise TypeError, "Cannot convert group" unless output.nil?
455
+ Group.new(self, segments.dup.push(last))
141
456
  else
142
- elem
457
+ val = expand(val)
458
+ return val unless val && output
459
+ case
460
+ when ::String == output || ::String === output
461
+ val.to_s
462
+ when ::Integer == output || ::Integer === output
463
+ Kernel.Integer(val)
464
+ when ::Float == output || ::Float === output
465
+ Kernel.Float(val)
466
+ when ::TrueClass == output || ::FalseClass == output || output == true || output == false
467
+ val.is_a?(::Integer) ? val != 0 : !!val
468
+ else
469
+ raise ArgumentError, "Unknown coercion type #{output.is_a?(::Class) ? output : output.class}" unless output.nil? || output.is_a?(::Proc)
470
+ output ? output.call(val) : val
471
+ end
143
472
  end
144
473
  end
474
+ alias :[] :read
145
475
 
146
- def []=(path_str, val)
476
+ def write(path_str, val)
147
477
  segments, abs = get_path(path_str)
148
478
  return false if segments.empty?
149
479
  last = segments.pop
150
480
  group_data = if segments.empty?
151
- @data
481
+ segments = self.path.dup unless abs || root?
482
+ data
152
483
  else
153
- unless abs || root?
154
- segments = self.path + segments
155
- end
484
+ segments = self.path + segments unless abs || root?
156
485
  get_group_at(segments, create_missing_groups: true)
157
486
  end
158
487
  raise ArgumentError, "Unable to resolve path #{segments+[last]}" unless group_data
@@ -163,61 +492,80 @@ module Wx
163
492
  nil
164
493
  elsif val.is_a?(::Hash)
165
494
  raise ArgumentError, 'Cannot change existing value entry to group.' if exist && !elem.is_a?(::Hash)
166
- elem = group_data[last] = {} unless elem
167
- group = Group.new(self, segments.dup.push(last), elem)
168
- val.each_pair { |key, val| group.set(key, val) }
495
+ group_data[last] = {} unless elem
496
+ group = Group.new(self, segments.dup.push(last))
497
+ val.each_pair { |k, v| group.set(k, v) }
169
498
  group
170
499
  else
171
500
  raise ArgumentError, 'Cannot change existing group to value entry.' if exist && elem.is_a?(::Hash)
172
- group_data[last] = sanitize_value(val)
501
+ group_data[last] = val
173
502
  end
174
503
  end
504
+ alias :[]= :write
175
505
 
176
506
  def to_s
177
- SEPARATOR+self.path.join(SEPARATOR)
507
+ ConfigBase::SEPARATOR+self.path.join(ConfigBase::SEPARATOR)
178
508
  end
179
509
 
180
510
  def to_h
181
- @data
511
+ data
182
512
  end
183
513
 
184
514
  def get_path(path_str)
185
515
  path_str = path_str.to_s
186
- abs = path_str.start_with?(SEPARATOR)
187
- segs = path_str.split(SEPARATOR)
516
+ abs = path_str.start_with?(ConfigBase::SEPARATOR)
517
+ segs = path_str.split(ConfigBase::SEPARATOR)
188
518
  segs.shift if abs
189
519
  [segs, abs]
190
520
  end
191
521
  protected :get_path
192
522
 
193
- def sanitize_value(val)
194
- case val
195
- when TrueClass, FalseClass, Numeric, String
196
- val
197
- else
198
- if val.respond_to?(:to_int)
199
- val.to_int
200
- elsif val.respond_to?(:to_f)
201
- val.to_f
202
- else
203
- val.to_s
523
+ EXPAND_RE = if Wx::PLATFORM == 'WXMSW'
524
+ /(\\)?([$][{(]?|%)(\w+)([})%])?/
525
+ else
526
+ /(\\)?([$][{(]?)(\w+)([})])?/
527
+ end
528
+ private_constant :EXPAND_RE
529
+
530
+ def expand(val)
531
+ if root.expanding_env_vars? && ::String === val
532
+ val.gsub(EXPAND_RE) do |s|
533
+ if $1.nil? &&
534
+ (($2[0] == '$' &&
535
+ ($2.size == 1 && $4.nil?) ||
536
+ ($2[1] == '(' && $4 == ')') ||
537
+ ($2[1] == '{' && $4 == '}'))||
538
+ ($2[0] == '%' && $4 == '%')) &&
539
+ ENV[$3]
540
+ $1 ? $1+ENV[$3] : ENV[$3]
541
+ else
542
+ $1 ? s[1,s.size] : s
543
+ end
204
544
  end
545
+ else
546
+ val
205
547
  end
206
548
  end
207
- protected :sanitize_value
549
+ protected :expand
208
550
 
209
551
  end
210
552
 
211
553
  class Group
212
554
 
555
+ include ConfigBase::Interface
556
+
213
557
  include Interface
214
558
 
215
- def initialize(parent, path, data)
559
+ def initialize(parent, path)
216
560
  @parent = parent
217
561
  @path = path.freeze
218
- @data = data
219
562
  end
220
563
 
564
+ def data
565
+ self.root.__send__(:get_group_at, @path, create_missing_groups: true, is_pruned: true)
566
+ end
567
+ protected :data
568
+
221
569
  def root?
222
570
  false
223
571
  end
@@ -235,7 +583,7 @@ module Wx
235
583
  end
236
584
 
237
585
  def get_group_at(segments, create_missing_groups: false)
238
- root.__send__(:get_group_at, segments)
586
+ root.__send__(:get_group_at, segments, create_missing_groups: create_missing_groups)
239
587
  end
240
588
  protected :get_group_at
241
589
 
@@ -244,10 +592,16 @@ module Wx
244
592
  include Interface
245
593
 
246
594
  def initialize(hash = nil)
595
+ @expand_env_vars = true
247
596
  @data = {}
248
597
  replace(hash) if hash
249
598
  end
250
599
 
600
+ def data
601
+ @data
602
+ end
603
+ protected :data
604
+
251
605
  def root?
252
606
  true
253
607
  end
@@ -264,6 +618,11 @@ module Wx
264
618
  nil
265
619
  end
266
620
 
621
+ def clear
622
+ @data.clear
623
+ true
624
+ end
625
+
267
626
  def replace(hash)
268
627
  raise ArgumentError, 'Expected Hash' unless hash.is_a?(::Hash)
269
628
  @data.clear
@@ -271,19 +630,31 @@ module Wx
271
630
  self
272
631
  end
273
632
 
274
- def get_group_at(segments, create_missing_groups: false)
275
- # prune segments (process relative segments)
276
- segments = segments.inject([]) do |lst, seg|
277
- case seg
278
- when '..'
279
- lst.pop # remove previous
280
- # forget ..
281
- when '.'
282
- # forget
283
- else
284
- lst << seg
633
+ def is_expanding_env_vars
634
+ @expand_env_vars
635
+ end
636
+ alias :expanding_env_vars? :is_expanding_env_vars
637
+
638
+ def set_expand_env_vars(flag)
639
+ @expand_env_vars = !!flag
640
+ end
641
+ alias :expand_env_vars :set_expand_env_vars
642
+
643
+ def get_group_at(segments, create_missing_groups: false, is_pruned: false)
644
+ unless is_pruned
645
+ # prune segments (process relative segments)
646
+ segments = segments.inject([]) do |lst, seg|
647
+ case seg
648
+ when '..'
649
+ lst.pop # remove previous
650
+ # forget ..
651
+ when '.'
652
+ # forget
653
+ else
654
+ lst << seg
655
+ end
656
+ lst
285
657
  end
286
- lst
287
658
  end
288
659
  # find group matching segments
289
660
  segments.inject(@data) do |hsh, seg|