wxruby3 0.9.0.pre.beta.8-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.
- checksums.yaml +7 -0
- data/.wxconfig +17 -0
- data/.yardopts +13 -0
- data/CREDITS.md +52 -0
- data/LICENSE +21 -0
- data/README.md +139 -0
- data/bin/wxruby +9 -0
- data/bin/wxruby.bat +20 -0
- data/ext/mkrf_conf_bingem.rb +18 -0
- data/ext/wxbase32u_gcc_custom.dll +0 -0
- data/ext/wxbase32u_net_gcc_custom.dll +0 -0
- data/ext/wxbase32u_xml_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_aui_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_core_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_gl_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_html_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_media_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_propgrid_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_qa_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_ribbon_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_richtext_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_stc_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_webview_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_xrc_gcc_custom.dll +0 -0
- data/lib/wx/accessors.rb +63 -0
- data/lib/wx/aui/auimanager.rb +17 -0
- data/lib/wx/aui/auinotebook.rb +9 -0
- data/lib/wx/aui/events/evt_list.rb +143 -0
- data/lib/wx/aui/require.rb +9 -0
- data/lib/wx/aui.rb +14 -0
- data/lib/wx/core/acceleratortable.rb +28 -0
- data/lib/wx/core/animation.rb +18 -0
- data/lib/wx/core/app.rb +89 -0
- data/lib/wx/core/artprovider.rb +31 -0
- data/lib/wx/core/bitmap.rb +59 -0
- data/lib/wx/core/busycursor.rb +12 -0
- data/lib/wx/core/choice.rb +4 -0
- data/lib/wx/core/choicedlg.rb +54 -0
- data/lib/wx/core/clientdc.rb +13 -0
- data/lib/wx/core/clipboard.rb +56 -0
- data/lib/wx/core/collapsible_pane.rb +12 -0
- data/lib/wx/core/colour.rb +34 -0
- data/lib/wx/core/combobox.rb +4 -0
- data/lib/wx/core/controlwithitems.rb +10 -0
- data/lib/wx/core/data_object.rb +10 -0
- data/lib/wx/core/dataformat.rb +26 -0
- data/lib/wx/core/dc.rb +68 -0
- data/lib/wx/core/dialog.rb +50 -0
- data/lib/wx/core/enum.rb +28 -0
- data/lib/wx/core/event.rb +16 -0
- data/lib/wx/core/events/evt_list.rb +1378 -0
- data/lib/wx/core/evthandler.rb +253 -0
- data/lib/wx/core/ext.rb +58 -0
- data/lib/wx/core/font/encoding.rb +113 -0
- data/lib/wx/core/font.rb +22 -0
- data/lib/wx/core/functions.rb +44 -0
- data/lib/wx/core/gauge.rb +12 -0
- data/lib/wx/core/genericdirctrl.rb +36 -0
- data/lib/wx/core/hboxsizer.rb +6 -0
- data/lib/wx/core/helpcontroller.rb +5 -0
- data/lib/wx/core/helpcontrollerhelpprovider.rb +24 -0
- data/lib/wx/core/helpprovider.rb +15 -0
- data/lib/wx/core/icon.rb +40 -0
- data/lib/wx/core/image.rb +68 -0
- data/lib/wx/core/imagelist.rb +3 -0
- data/lib/wx/core/listbox.rb +4 -0
- data/lib/wx/core/listctrl.rb +33 -0
- data/lib/wx/core/locale.rb +73 -0
- data/lib/wx/core/log.rb +20 -0
- data/lib/wx/core/menu.rb +78 -0
- data/lib/wx/core/menu_bar.rb +20 -0
- data/lib/wx/core/menuitem.rb +7 -0
- data/lib/wx/core/notebook.rb +9 -0
- data/lib/wx/core/object.rb +14 -0
- data/lib/wx/core/pen_info.rb +11 -0
- data/lib/wx/core/platform_info.rb +13 -0
- data/lib/wx/core/point.rb +92 -0
- data/lib/wx/core/real_point.rb +92 -0
- data/lib/wx/core/rect.rb +57 -0
- data/lib/wx/core/simplehelpprovider.rb +38 -0
- data/lib/wx/core/size.rb +86 -0
- data/lib/wx/core/sizer.rb +43 -0
- data/lib/wx/core/splash_screen.rb +44 -0
- data/lib/wx/core/textctrl.rb +8 -0
- data/lib/wx/core/timer.rb +104 -0
- data/lib/wx/core/toolbar.rb +37 -0
- data/lib/wx/core/toolbartool.rb +4 -0
- data/lib/wx/core/treectrl.rb +46 -0
- data/lib/wx/core/validator.rb +8 -0
- data/lib/wx/core/variant.rb +62 -0
- data/lib/wx/core/vboxsizer.rb +6 -0
- data/lib/wx/core/window.rb +95 -0
- data/lib/wx/core/window_update_locker.rb +12 -0
- data/lib/wx/core/xmlresource.rb +56 -0
- data/lib/wx/core.rb +61 -0
- data/lib/wx/doc/aui/auimanager.rb +12 -0
- data/lib/wx/doc/aui/auinotebook.rb +9 -0
- data/lib/wx/doc/colour_dialog.rb +15 -0
- data/lib/wx/doc/core.rb +11 -0
- data/lib/wx/doc/dc.rb +49 -0
- data/lib/wx/doc/enum.rb +88 -0
- data/lib/wx/doc/evthandler.rb +87 -0
- data/lib/wx/doc/extra/00_starting.md +154 -0
- data/lib/wx/doc/extra/01_packages.md +179 -0
- data/lib/wx/doc/extra/02_lifecycles.md +116 -0
- data/lib/wx/doc/extra/03_dialogs.md +57 -0
- data/lib/wx/doc/extra/04_enums.md +143 -0
- data/lib/wx/doc/extra/05_event-handling.md +166 -0
- data/lib/wx/doc/extra/06_geometry.md +56 -0
- data/lib/wx/doc/extra/07_colour_and_font.md +52 -0
- data/lib/wx/doc/extra/08_extensions.md +144 -0
- data/lib/wx/doc/extra/09_exceptions.md +54 -0
- data/lib/wx/doc/functions.rb +221 -0
- data/lib/wx/doc/gdi_common.rb +181 -0
- data/lib/wx/doc/gen/about_dialog_info.rb +315 -0
- data/lib/wx/doc/gen/accelerator.rb +172 -0
- data/lib/wx/doc/gen/accessible.rb +817 -0
- data/lib/wx/doc/gen/animation.rb +253 -0
- data/lib/wx/doc/gen/animation_ctrl.rb +129 -0
- data/lib/wx/doc/gen/any_button.rb +170 -0
- data/lib/wx/doc/gen/app.rb +363 -0
- data/lib/wx/doc/gen/art_provider.rb +497 -0
- data/lib/wx/doc/gen/aui/aui_dock_art.rb +421 -0
- data/lib/wx/doc/gen/aui/aui_floating_frame.rb +39 -0
- data/lib/wx/doc/gen/aui/aui_manager.rb +323 -0
- data/lib/wx/doc/gen/aui/aui_manager_event.rb +112 -0
- data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +163 -0
- data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +46 -0
- data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +109 -0
- data/lib/wx/doc/gen/aui/aui_notebook.rb +329 -0
- data/lib/wx/doc/gen/aui/aui_notebook_event.rb +179 -0
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +665 -0
- data/lib/wx/doc/gen/aui/aui_tab_art.rb +372 -0
- data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +147 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar.rb +437 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +272 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +195 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +224 -0
- data/lib/wx/doc/gen/aui/event_list.rb +162 -0
- data/lib/wx/doc/gen/auto_buffered_paint_dc.rb +47 -0
- data/lib/wx/doc/gen/bitmap.rb +638 -0
- data/lib/wx/doc/gen/bitmap_button.rb +91 -0
- data/lib/wx/doc/gen/book_ctrl_base.rb +240 -0
- data/lib/wx/doc/gen/book_ctrl_event.rb +60 -0
- data/lib/wx/doc/gen/box_sizer.rb +66 -0
- data/lib/wx/doc/gen/brush.rb +219 -0
- data/lib/wx/doc/gen/buffered_dc.rb +95 -0
- data/lib/wx/doc/gen/buffered_paint_dc.rb +55 -0
- data/lib/wx/doc/gen/busy_info.rb +141 -0
- data/lib/wx/doc/gen/button.rb +133 -0
- data/lib/wx/doc/gen/calculate_layout_event.rb +59 -0
- data/lib/wx/doc/gen/calendar_ctrl.rb +236 -0
- data/lib/wx/doc/gen/calendar_date_attr.rb +137 -0
- data/lib/wx/doc/gen/calendar_event.rb +150 -0
- data/lib/wx/doc/gen/caret.rb +99 -0
- data/lib/wx/doc/gen/check_box.rb +145 -0
- data/lib/wx/doc/gen/check_list_box.rb +96 -0
- data/lib/wx/doc/gen/choice.rb +143 -0
- data/lib/wx/doc/gen/choicebook.rb +100 -0
- data/lib/wx/doc/gen/client_dc.rb +49 -0
- data/lib/wx/doc/gen/clipboard.rb +128 -0
- data/lib/wx/doc/gen/collapsible_pane.rb +120 -0
- data/lib/wx/doc/gen/collapsible_pane_event.rb +45 -0
- data/lib/wx/doc/gen/colour.rb +289 -0
- data/lib/wx/doc/gen/colour_data.rb +96 -0
- data/lib/wx/doc/gen/colour_dialog.rb +84 -0
- data/lib/wx/doc/gen/colour_picker_ctrl.rb +89 -0
- data/lib/wx/doc/gen/colour_picker_event.rb +74 -0
- data/lib/wx/doc/gen/combo_box.rb +228 -0
- data/lib/wx/doc/gen/context_help_button.rb +34 -0
- data/lib/wx/doc/gen/control.rb +245 -0
- data/lib/wx/doc/gen/control_with_items.rb +339 -0
- data/lib/wx/doc/gen/core.rb +42 -0
- data/lib/wx/doc/gen/cursor.rb +127 -0
- data/lib/wx/doc/gen/data_format.rb +94 -0
- data/lib/wx/doc/gen/data_object.rb +439 -0
- data/lib/wx/doc/gen/date_event.rb +48 -0
- data/lib/wx/doc/gen/date_picker_ctrl.rb +127 -0
- data/lib/wx/doc/gen/dc.rb +1278 -0
- data/lib/wx/doc/gen/defs.rb +2832 -0
- data/lib/wx/doc/gen/dialog.rb +426 -0
- data/lib/wx/doc/gen/dir_dialog.rb +134 -0
- data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +80 -0
- data/lib/wx/doc/gen/dir_picker_ctrl.rb +103 -0
- data/lib/wx/doc/gen/drag_drop.rb +292 -0
- data/lib/wx/doc/gen/drag_image.rb +123 -0
- data/lib/wx/doc/gen/editable_list_box.rb +89 -0
- data/lib/wx/doc/gen/event.rb +911 -0
- data/lib/wx/doc/gen/event_list.rb +1512 -0
- data/lib/wx/doc/gen/events.rb +2499 -0
- data/lib/wx/doc/gen/evt_handler.rb +224 -0
- data/lib/wx/doc/gen/ext_help_controller.rb +100 -0
- data/lib/wx/doc/gen/file_dialog.rb +294 -0
- data/lib/wx/doc/gen/file_dir_picker_event.rb +98 -0
- data/lib/wx/doc/gen/file_picker_ctrl.rb +107 -0
- data/lib/wx/doc/gen/find_dialog_event.rb +119 -0
- data/lib/wx/doc/gen/find_replace_data.rb +59 -0
- data/lib/wx/doc/gen/find_replace_dialog.rb +44 -0
- data/lib/wx/doc/gen/flex_grid_sizer.rb +145 -0
- data/lib/wx/doc/gen/font.rb +1282 -0
- data/lib/wx/doc/gen/font_data.rb +132 -0
- data/lib/wx/doc/gen/font_dialog.rb +71 -0
- data/lib/wx/doc/gen/font_picker_ctrl.rb +120 -0
- data/lib/wx/doc/gen/font_picker_event.rb +64 -0
- data/lib/wx/doc/gen/frame.rb +276 -0
- data/lib/wx/doc/gen/fs_file.rb +269 -0
- data/lib/wx/doc/gen/functions.rb +10 -0
- data/lib/wx/doc/gen/gauge.rb +127 -0
- data/lib/wx/doc/gen/gb_sizer_item.rb +78 -0
- data/lib/wx/doc/gen/gcdc.rb +61 -0
- data/lib/wx/doc/gen/gdi_common.rb +1108 -0
- data/lib/wx/doc/gen/gdi_object.rb +29 -0
- data/lib/wx/doc/gen/generic_dir_ctrl.rb +198 -0
- data/lib/wx/doc/gen/graphics_context.rb +764 -0
- data/lib/wx/doc/gen/graphics_object.rb +494 -0
- data/lib/wx/doc/gen/grid/event_list.rb +173 -0
- data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +33 -0
- data/lib/wx/doc/gen/grid/grid_cell_attr.rb +279 -0
- data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +31 -0
- data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +32 -0
- data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +44 -0
- data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +31 -0
- data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +48 -0
- data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +33 -0
- data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +40 -0
- data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +35 -0
- data/lib/wx/doc/gen/grid/grid_cell_editor.rb +181 -0
- data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +34 -0
- data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +39 -0
- data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +41 -0
- data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +74 -0
- data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +41 -0
- data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +31 -0
- data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +98 -0
- data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +31 -0
- data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +45 -0
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +2381 -0
- data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +87 -0
- data/lib/wx/doc/gen/grid/grid_event.rb +96 -0
- data/lib/wx/doc/gen/grid/grid_range_select_event.rb +96 -0
- data/lib/wx/doc/gen/grid/grid_size_event.rb +71 -0
- data/lib/wx/doc/gen/grid/grid_string_table.rb +130 -0
- data/lib/wx/doc/gen/grid/grid_table_base.rb +288 -0
- data/lib/wx/doc/gen/grid/grid_table_message.rb +73 -0
- data/lib/wx/doc/gen/grid_bag_sizer.rb +298 -0
- data/lib/wx/doc/gen/grid_sizer.rb +135 -0
- data/lib/wx/doc/gen/help_controller.rb +136 -0
- data/lib/wx/doc/gen/help_provider.rb +80 -0
- data/lib/wx/doc/gen/html/event_list.rb +46 -0
- data/lib/wx/doc/gen/html/html_cell.rb +441 -0
- data/lib/wx/doc/gen/html/html_cell_event.rb +62 -0
- data/lib/wx/doc/gen/html/html_easy_printing.rb +169 -0
- data/lib/wx/doc/gen/html/html_help_controller.rb +256 -0
- data/lib/wx/doc/gen/html/html_help_data.rb +144 -0
- data/lib/wx/doc/gen/html/html_help_frame.rb +112 -0
- data/lib/wx/doc/gen/html/html_help_window.rb +230 -0
- data/lib/wx/doc/gen/html/html_link_event.rb +36 -0
- data/lib/wx/doc/gen/html/html_list_box.rb +150 -0
- data/lib/wx/doc/gen/html/html_printout.rb +87 -0
- data/lib/wx/doc/gen/html/html_window.rb +386 -0
- data/lib/wx/doc/gen/icon.rb +267 -0
- data/lib/wx/doc/gen/icon_location.rb +38 -0
- data/lib/wx/doc/gen/image.rb +1144 -0
- data/lib/wx/doc/gen/image_list.rb +181 -0
- data/lib/wx/doc/gen/keyboard_state.rb +124 -0
- data/lib/wx/doc/gen/list_box.rb +260 -0
- data/lib/wx/doc/gen/list_ctrl.rb +1542 -0
- data/lib/wx/doc/gen/list_event.rb +177 -0
- data/lib/wx/doc/gen/listbook.rb +100 -0
- data/lib/wx/doc/gen/locale.rb +4143 -0
- data/lib/wx/doc/gen/log.rb +505 -0
- data/lib/wx/doc/gen/mdi_client_window.rb +38 -0
- data/lib/wx/doc/gen/mdi_frame.rb +235 -0
- data/lib/wx/doc/gen/media_ctrl.rb +225 -0
- data/lib/wx/doc/gen/media_event.rb +109 -0
- data/lib/wx/doc/gen/memory_dc.rb +95 -0
- data/lib/wx/doc/gen/menu.rb +493 -0
- data/lib/wx/doc/gen/menu_bar.rb +247 -0
- data/lib/wx/doc/gen/menu_item.rb +333 -0
- data/lib/wx/doc/gen/message_dialog.rb +195 -0
- data/lib/wx/doc/gen/mini_frame.rb +72 -0
- data/lib/wx/doc/gen/mirror_dc.rb +29 -0
- data/lib/wx/doc/gen/mouse_state.rb +108 -0
- data/lib/wx/doc/gen/multi_choice_dialog.rb +58 -0
- data/lib/wx/doc/gen/non_owned_window.rb +46 -0
- data/lib/wx/doc/gen/notebook.rb +220 -0
- data/lib/wx/doc/gen/number_entry_dialog.rb +75 -0
- data/lib/wx/doc/gen/object.rb +69 -0
- data/lib/wx/doc/gen/paint_dc.rb +34 -0
- data/lib/wx/doc/gen/palette.rb +90 -0
- data/lib/wx/doc/gen/panel.rb +96 -0
- data/lib/wx/doc/gen/pen.rb +484 -0
- data/lib/wx/doc/gen/pg/event_list.rb +102 -0
- data/lib/wx/doc/gen/pg/numeric_property_validator.rb +47 -0
- data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +295 -0
- data/lib/wx/doc/gen/pg/pg_cell.rb +166 -0
- data/lib/wx/doc/gen/pg/pg_editor.rb +569 -0
- data/lib/wx/doc/gen/pg/pg_multi_button.rb +161 -0
- data/lib/wx/doc/gen/pg/pg_properties.rb +2193 -0
- data/lib/wx/doc/gen/pg/pg_property.rb +1852 -0
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +327 -0
- data/lib/wx/doc/gen/pg/property_grid.rb +619 -0
- data/lib/wx/doc/gen/pg/property_grid_event.rb +135 -0
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +847 -0
- data/lib/wx/doc/gen/pg/property_grid_manager.rb +349 -0
- data/lib/wx/doc/gen/pg/property_grid_page.rb +265 -0
- data/lib/wx/doc/gen/pg/property_grid_page_state.rb +155 -0
- data/lib/wx/doc/gen/picker_base.rb +143 -0
- data/lib/wx/doc/gen/platform_info.rb +379 -0
- data/lib/wx/doc/gen/popup_window.rb +93 -0
- data/lib/wx/doc/gen/progress_dialog.rb +106 -0
- data/lib/wx/doc/gen/property_sheet_dialog.rb +185 -0
- data/lib/wx/doc/gen/prt/event_list.rb +13 -0
- data/lib/wx/doc/gen/prt/page_setup_dialog.rb +38 -0
- data/lib/wx/doc/gen/prt/post_script_dc.rb +32 -0
- data/lib/wx/doc/gen/prt/preview_frame.rb +39 -0
- data/lib/wx/doc/gen/prt/print_abort_dialog.rb +127 -0
- data/lib/wx/doc/gen/prt/print_data.rb +598 -0
- data/lib/wx/doc/gen/prt/print_dialog.rb +47 -0
- data/lib/wx/doc/gen/prt/printer.rb +428 -0
- data/lib/wx/doc/gen/prt/printer_dc.rb +35 -0
- data/lib/wx/doc/gen/query_layout_info_event.rb +98 -0
- data/lib/wx/doc/gen/radio_box.rb +258 -0
- data/lib/wx/doc/gen/radio_button.rb +128 -0
- data/lib/wx/doc/gen/rbn/event_list.rb +132 -0
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +1652 -0
- data/lib/wx/doc/gen/rbn/ribbon_bar.rb +227 -0
- data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +40 -0
- data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +400 -0
- data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +58 -0
- data/lib/wx/doc/gen/rbn/ribbon_control.rb +116 -0
- data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +208 -0
- data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +51 -0
- data/lib/wx/doc/gen/rbn/ribbon_page.rb +129 -0
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +232 -0
- data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +41 -0
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +321 -0
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +36 -0
- data/lib/wx/doc/gen/region.rb +299 -0
- data/lib/wx/doc/gen/rtc/event_list.rb +121 -0
- data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +2052 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +2031 -0
- data/lib/wx/doc/gen/rtc/rich_text_event.rb +146 -0
- data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +171 -0
- data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +180 -0
- data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +104 -0
- data/lib/wx/doc/gen/rtc/rich_text_printing.rb +241 -0
- data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +55 -0
- data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +153 -0
- data/lib/wx/doc/gen/sash_event.rb +133 -0
- data/lib/wx/doc/gen/sash_layout_window.rb +203 -0
- data/lib/wx/doc/gen/sash_window.rb +154 -0
- data/lib/wx/doc/gen/screen_dc.rb +27 -0
- data/lib/wx/doc/gen/scrolled_canvas.rb +317 -0
- data/lib/wx/doc/gen/scrolled_control.rb +317 -0
- data/lib/wx/doc/gen/scrolled_window.rb +337 -0
- data/lib/wx/doc/gen/simplebook.rb +93 -0
- data/lib/wx/doc/gen/single_choice_dialog.rb +74 -0
- data/lib/wx/doc/gen/sizer.rb +847 -0
- data/lib/wx/doc/gen/sizer_item.rb +227 -0
- data/lib/wx/doc/gen/slider.rb +316 -0
- data/lib/wx/doc/gen/spin_button.rb +124 -0
- data/lib/wx/doc/gen/spin_ctrl.rb +170 -0
- data/lib/wx/doc/gen/spin_event.rb +47 -0
- data/lib/wx/doc/gen/splash_screen.rb +83 -0
- data/lib/wx/doc/gen/splitter_event.rb +87 -0
- data/lib/wx/doc/gen/splitter_window.rb +357 -0
- data/lib/wx/doc/gen/static_bitmap.rb +126 -0
- data/lib/wx/doc/gen/static_box.rb +123 -0
- data/lib/wx/doc/gen/static_box_sizer.rb +67 -0
- data/lib/wx/doc/gen/static_line.rb +66 -0
- data/lib/wx/doc/gen/static_text.rb +98 -0
- data/lib/wx/doc/gen/status_bar.rb +203 -0
- data/lib/wx/doc/gen/stc/event_list.rb +217 -0
- data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +4000 -0
- data/lib/wx/doc/gen/stc/styled_text_event.rb +7319 -0
- data/lib/wx/doc/gen/std_dialog_button_sizer.rb +74 -0
- data/lib/wx/doc/gen/svg_file_dc.rb +153 -0
- data/lib/wx/doc/gen/system_options.rb +109 -0
- data/lib/wx/doc/gen/system_settings.rb +481 -0
- data/lib/wx/doc/gen/task_bar_icon.rb +94 -0
- data/lib/wx/doc/gen/task_bar_icon_event.rb +86 -0
- data/lib/wx/doc/gen/text_attr.rb +645 -0
- data/lib/wx/doc/gen/text_ctrl.rb +841 -0
- data/lib/wx/doc/gen/text_entry.rb +389 -0
- data/lib/wx/doc/gen/text_entry_dialog.rb +170 -0
- data/lib/wx/doc/gen/text_validator.rb +212 -0
- data/lib/wx/doc/gen/time_picker_ctrl.rb +103 -0
- data/lib/wx/doc/gen/timer.rb +103 -0
- data/lib/wx/doc/gen/timer_event.rb +73 -0
- data/lib/wx/doc/gen/tip_provider.rb +60 -0
- data/lib/wx/doc/gen/toggle_button.rb +84 -0
- data/lib/wx/doc/gen/tool_bar.rb +744 -0
- data/lib/wx/doc/gen/tool_tip.rb +73 -0
- data/lib/wx/doc/gen/toolbook.rb +103 -0
- data/lib/wx/doc/gen/top_level_window.rb +462 -0
- data/lib/wx/doc/gen/tree_ctrl.rb +863 -0
- data/lib/wx/doc/gen/tree_event.rb +101 -0
- data/lib/wx/doc/gen/treebook.rb +154 -0
- data/lib/wx/doc/gen/utils.rb +257 -0
- data/lib/wx/doc/gen/v_list_box.rb +224 -0
- data/lib/wx/doc/gen/v_scrolled_window.rb +224 -0
- data/lib/wx/doc/gen/validator.rb +73 -0
- data/lib/wx/doc/gen/variant.rb +340 -0
- data/lib/wx/doc/gen/window.rb +2414 -0
- data/lib/wx/doc/gen/window_dc.rb +35 -0
- data/lib/wx/doc/gen/window_disabler.rb +24 -0
- data/lib/wx/doc/gen/with_images.rb +73 -0
- data/lib/wx/doc/gen/wizard.rb +197 -0
- data/lib/wx/doc/gen/wizard_event.rb +105 -0
- data/lib/wx/doc/gen/wizard_page.rb +61 -0
- data/lib/wx/doc/gen/wizard_page_simple.rb +72 -0
- data/lib/wx/doc/gen/xml_node.rb +282 -0
- data/lib/wx/doc/gen/xml_resource.rb +304 -0
- data/lib/wx/doc/grid/grid.rb +20 -0
- data/lib/wx/doc/help_controller.rb +14 -0
- data/lib/wx/doc/html/html_help_controller.rb +8 -0
- data/lib/wx/doc/pg/events.rb +15 -0
- data/lib/wx/doc/pg/pg_property.rb +8 -0
- data/lib/wx/doc/pg/pgeditor.rb +21 -0
- data/lib/wx/doc/pg/property_grid.rb +48 -0
- data/lib/wx/doc/pg/property_grid_interface.rb +64 -0
- data/lib/wx/doc/prt/page_setup_dialog.rb +15 -0
- data/lib/wx/doc/prt/print_data.rb +9 -0
- data/lib/wx/doc/prt/print_dialog.rb +26 -0
- data/lib/wx/doc/prt/printer.rb +15 -0
- data/lib/wx/doc/rbn/ribbon_bar.rb +9 -0
- data/lib/wx/doc/rbn/ribbon_button_bar.rb +9 -0
- data/lib/wx/doc/rbn/ribbon_gallery.rb +9 -0
- data/lib/wx/doc/rbn/ribbon_tool_bar.rb +9 -0
- data/lib/wx/doc/rtc/richtext_printing.rb +14 -0
- data/lib/wx/doc/screen_dc.rb +10 -0
- data/lib/wx/doc/stock_objects.rb +98 -0
- data/lib/wx/doc/stream.rb +38 -0
- data/lib/wx/doc/system_settings.rb +29 -0
- data/lib/wx/doc/treebook.rb +9 -0
- data/lib/wx/doc/variant.rb +163 -0
- data/lib/wx/doc/xml_resource.rb +19 -0
- data/lib/wx/global_const.rb +84 -0
- data/lib/wx/grid/events/evt_list.rb +156 -0
- data/lib/wx/grid/grid.rb +7 -0
- data/lib/wx/grid/keyword_defs.rb +10 -0
- data/lib/wx/grid/require.rb +9 -0
- data/lib/wx/grid.rb +14 -0
- data/lib/wx/helpers.rb +65 -0
- data/lib/wx/html/events/evt_list.rb +37 -0
- data/lib/wx/html/htmlhelpcontroller.rb +6 -0
- data/lib/wx/html/htmlwindow.rb +19 -0
- data/lib/wx/html/keyword_defs.rb +22 -0
- data/lib/wx/html/require.rb +10 -0
- data/lib/wx/html.rb +15 -0
- data/lib/wx/keyword_ctors.rb +226 -0
- data/lib/wx/keyword_defs.rb +487 -0
- data/lib/wx/pg/events/evt_list.rb +73 -0
- data/lib/wx/pg/events.rb +14 -0
- data/lib/wx/pg/keyword_defs.rb +15 -0
- data/lib/wx/pg/pg_editor.rb +13 -0
- data/lib/wx/pg/pg_properties.rb +24 -0
- data/lib/wx/pg/pg_property.rb +27 -0
- data/lib/wx/pg/property_grid.rb +71 -0
- data/lib/wx/pg/property_grid_interface.rb +46 -0
- data/lib/wx/pg/require.rb +12 -0
- data/lib/wx/pg.rb +14 -0
- data/lib/wx/prt/keyword_defs.rb +8 -0
- data/lib/wx/prt/page_setup_dialog.rb +15 -0
- data/lib/wx/prt/previewframe.rb +13 -0
- data/lib/wx/prt/require.rb +8 -0
- data/lib/wx/prt.rb +14 -0
- data/lib/wx/rbn/events/evt_list.rb +102 -0
- data/lib/wx/rbn/events.rb +4 -0
- data/lib/wx/rbn/keyword_defs.rb +43 -0
- data/lib/wx/rbn/require.rb +12 -0
- data/lib/wx/rbn/ribbon_art_provider.rb +10 -0
- data/lib/wx/rbn/ribbon_bar.rb +12 -0
- data/lib/wx/rbn/ribbon_button_bar.rb +26 -0
- data/lib/wx/rbn/ribbon_control.rb +25 -0
- data/lib/wx/rbn/ribbon_gallery.rb +26 -0
- data/lib/wx/rbn/ribbon_page.rb +15 -0
- data/lib/wx/rbn/ribbon_panel.rb +15 -0
- data/lib/wx/rbn/ribbon_tool_bar.rb +26 -0
- data/lib/wx/rbn.rb +14 -0
- data/lib/wx/rtc/events/evt_list.rb +98 -0
- data/lib/wx/rtc/ext/rich_text_ctrl.rb +24 -0
- data/lib/wx/rtc/ext.rb +15 -0
- data/lib/wx/rtc/keyword_defs.rb +17 -0
- data/lib/wx/rtc/require.rb +8 -0
- data/lib/wx/rtc.rb +15 -0
- data/lib/wx/stc/events/evt_list.rb +178 -0
- data/lib/wx/stc/keyword_defs.rb +8 -0
- data/lib/wx/stc/require.rb +7 -0
- data/lib/wx/stc.rb +14 -0
- data/lib/wx/version.rb +3 -0
- data/lib/wx/wxruby/base.rb +87 -0
- data/lib/wx/wxruby/cmd/sampler.rb +68 -0
- data/lib/wx/wxruby/cmd/test.rb +27 -0
- data/lib/wx.rb +14 -0
- data/lib/wxruby_aui.so +0 -0
- data/lib/wxruby_core.so +0 -0
- data/lib/wxruby_grid.so +0 -0
- data/lib/wxruby_html.so +0 -0
- data/lib/wxruby_pg.so +0 -0
- data/lib/wxruby_prt.so +0 -0
- data/lib/wxruby_rbn.so +0 -0
- data/lib/wxruby_rtc.so +0 -0
- data/lib/wxruby_stc.so +0 -0
- data/rakelib/install.rb +220 -0
- data/rakelib/lib/config/cygwin.rb +6 -0
- data/rakelib/lib/config/linux.rb +78 -0
- data/rakelib/lib/config/macosx.rb +6 -0
- data/rakelib/lib/config/mingw.rb +133 -0
- data/rakelib/lib/config/netbsd.rb +6 -0
- data/rakelib/lib/config/unixish.rb +187 -0
- data/rakelib/lib/config.rb +673 -0
- data/rakelib/lib/ext/enum_chain.rb +22 -0
- data/rakelib/prepost.rake +91 -0
- data/rakelib/prepost.rb +26 -0
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +7 -0
- data/rakelib/yard/templates/default/layout/html/setup.rb +5 -0
- data/rakelib/yard/yard/relative_markdown_links/version.rb +8 -0
- data/rakelib/yard/yard/relative_markdown_links.rb +39 -0
- data/rakelib/yard/yard-custom-templates.rb +2 -0
- data/rakelib/yard/yard-relative_markdown_links.rb +4 -0
- data/samples/art/wxruby-128x128.png +0 -0
- data/samples/art/wxruby-256x256.png +0 -0
- data/samples/art/wxruby-64x64.png +0 -0
- data/samples/art/wxruby.ico +0 -0
- data/samples/art/wxruby.png +0 -0
- data/samples/aui/aui.rb +1321 -0
- data/samples/aui/tn_aui.png +0 -0
- data/samples/bigdemo/About.rbw +39 -0
- data/samples/bigdemo/ColorPanel.rbw +23 -0
- data/samples/bigdemo/GridSimple.rbw +78 -0
- data/samples/bigdemo/MDIDemo.rbw +57 -0
- data/samples/bigdemo/PopupMenu.rbw +146 -0
- data/samples/bigdemo/ShapedWindow.rbw +128 -0
- data/samples/bigdemo/Sizers.rbw +541 -0
- data/samples/bigdemo/bigdemo.rb +810 -0
- data/samples/bigdemo/demoTemplate.rbw +33 -0
- data/samples/bigdemo/helpfile.htb +0 -0
- data/samples/bigdemo/icons/Test 015.jpg +0 -0
- data/samples/bigdemo/icons/Test 015.png +0 -0
- data/samples/bigdemo/icons/choice.bmp +0 -0
- data/samples/bigdemo/icons/choice.xpm +27 -0
- data/samples/bigdemo/icons/combo.bmp +0 -0
- data/samples/bigdemo/icons/combo.xpm +27 -0
- data/samples/bigdemo/icons/copy.xpm +25 -0
- data/samples/bigdemo/icons/cut.xpm +24 -0
- data/samples/bigdemo/icons/gauge.bmp +0 -0
- data/samples/bigdemo/icons/gauge.xpm +27 -0
- data/samples/bigdemo/icons/help.xpm +25 -0
- data/samples/bigdemo/icons/list.bmp +0 -0
- data/samples/bigdemo/icons/list.xpm +27 -0
- data/samples/bigdemo/icons/mondrian.ico +0 -0
- data/samples/bigdemo/icons/mondrian.xpm +44 -0
- data/samples/bigdemo/icons/new.xpm +24 -0
- data/samples/bigdemo/icons/ogl.ico +0 -0
- data/samples/bigdemo/icons/ogl.xpm +45 -0
- data/samples/bigdemo/icons/open.xpm +26 -0
- data/samples/bigdemo/icons/paste.bmp +0 -0
- data/samples/bigdemo/icons/paste.xpm +38 -0
- data/samples/bigdemo/icons/pointy.png +0 -0
- data/samples/bigdemo/icons/preview.xpm +26 -0
- data/samples/bigdemo/icons/print.xpm +26 -0
- data/samples/bigdemo/icons/radio.bmp +0 -0
- data/samples/bigdemo/icons/radio.xpm +27 -0
- data/samples/bigdemo/icons/robert.xpm +415 -0
- data/samples/bigdemo/icons/sashtest.ico +0 -0
- data/samples/bigdemo/icons/save.xpm +25 -0
- data/samples/bigdemo/icons/smiles.bmp +0 -0
- data/samples/bigdemo/icons/smiles.xpm +39 -0
- data/samples/bigdemo/icons/smiley.ico +0 -0
- data/samples/bigdemo/icons/smiley.xpm +42 -0
- data/samples/bigdemo/icons/stattext.xpm +24 -0
- data/samples/bigdemo/icons/test2.bmp +0 -0
- data/samples/bigdemo/icons/test2.png +0 -0
- data/samples/bigdemo/icons/test2.xpm +79 -0
- data/samples/bigdemo/icons/text.bmp +0 -0
- data/samples/bigdemo/icons/text.xpm +27 -0
- data/samples/bigdemo/icons/tog1.bmp +0 -0
- data/samples/bigdemo/icons/tog1.xpm +38 -0
- data/samples/bigdemo/icons/tog2.bmp +0 -0
- data/samples/bigdemo/icons/tog2.xpm +38 -0
- data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
- data/samples/bigdemo/icons/wxwin.ico +0 -0
- data/samples/bigdemo/icons/wxwin16x16.png +0 -0
- data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
- data/samples/bigdemo/icons/wxwin32x32.png +0 -0
- data/samples/bigdemo/icons/wxwin48x48.png +0 -0
- data/samples/bigdemo/run.rb +91 -0
- data/samples/bigdemo/tips.txt +7 -0
- data/samples/bigdemo/utils.rb +12 -0
- data/samples/bigdemo/wxArtProvider.rbw +281 -0
- data/samples/bigdemo/wxBitmapButton.rbw +65 -0
- data/samples/bigdemo/wxButton.rbw +64 -0
- data/samples/bigdemo/wxCalendarCtrl.rbw +59 -0
- data/samples/bigdemo/wxCheckBox.rbw +50 -0
- data/samples/bigdemo/wxCheckListBox.rbw +65 -0
- data/samples/bigdemo/wxChoice.rbw +47 -0
- data/samples/bigdemo/wxChoicebook.rbw +78 -0
- data/samples/bigdemo/wxColourDialog.rbw +33 -0
- data/samples/bigdemo/wxComboBox.rbw +77 -0
- data/samples/bigdemo/wxCursor.rbw +136 -0
- data/samples/bigdemo/wxDialog.rbw +74 -0
- data/samples/bigdemo/wxDirDialog.rbw +29 -0
- data/samples/bigdemo/wxDragImage.rbw +70 -0
- data/samples/bigdemo/wxFileDialog.rbw +37 -0
- data/samples/bigdemo/wxFileDialog_Save.rbw +35 -0
- data/samples/bigdemo/wxFindReplaceDialog.rbw +82 -0
- data/samples/bigdemo/wxFontDialog.rbw +200 -0
- data/samples/bigdemo/wxFrame.rbw +53 -0
- data/samples/bigdemo/wxGauge.rbw +65 -0
- data/samples/bigdemo/wxGenericDirCtrl.rbw +74 -0
- data/samples/bigdemo/wxGrid.rbw +66 -0
- data/samples/bigdemo/wxHtmlHelpController.rbw +52 -0
- data/samples/bigdemo/wxListBox.rbw +140 -0
- data/samples/bigdemo/wxListCtrl_virtual.rbw +112 -0
- data/samples/bigdemo/wxMDIWindows.rbw +50 -0
- data/samples/bigdemo/wxMenu.rbw +247 -0
- data/samples/bigdemo/wxMessageDialog.rbw +27 -0
- data/samples/bigdemo/wxMiniFrame.rbw +70 -0
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +29 -0
- data/samples/bigdemo/wxNotebook.rbw +136 -0
- data/samples/bigdemo/wxProgressDialog.rbw +43 -0
- data/samples/bigdemo/wxRadioBox.rbw +72 -0
- data/samples/bigdemo/wxRadioButton.rbw +125 -0
- data/samples/bigdemo/wxSashWindow.rbw +141 -0
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +57 -0
- data/samples/bigdemo/wxScrolledWindow.rbw +199 -0
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +33 -0
- data/samples/bigdemo/wxSlider.rbw +42 -0
- data/samples/bigdemo/wxSpinButton.rbw +50 -0
- data/samples/bigdemo/wxSpinCtrl.rbw +51 -0
- data/samples/bigdemo/wxSplitterWindow.rbw +63 -0
- data/samples/bigdemo/wxStaticBitmap.rbw +47 -0
- data/samples/bigdemo/wxStaticText.rbw +55 -0
- data/samples/bigdemo/wxStatusBar.rbw +126 -0
- data/samples/bigdemo/wxTextCtrl.rbw +149 -0
- data/samples/bigdemo/wxTextEntryDialog.rbw +31 -0
- data/samples/bigdemo/wxToggleButton.rbw +49 -0
- data/samples/bigdemo/wxToolBar.rbw +131 -0
- data/samples/bigdemo/wxTreeCtrl.rbw +191 -0
- data/samples/calendar/calendar.rb +363 -0
- data/samples/calendar/tn_calendar.png +0 -0
- data/samples/caret/caret.rb +293 -0
- data/samples/caret/mondrian.xpm +44 -0
- data/samples/caret/tn_caret.png +0 -0
- data/samples/controls/books.rb +183 -0
- data/samples/controls/choice.xpm +27 -0
- data/samples/controls/combo.xpm +27 -0
- data/samples/controls/controls.rb +1143 -0
- data/samples/controls/gauge.xpm +27 -0
- data/samples/controls/get_item_sample.rb +117 -0
- data/samples/controls/list.xpm +27 -0
- data/samples/controls/mondrian.ico +0 -0
- data/samples/controls/mondrian.xpm +44 -0
- data/samples/controls/radio.xpm +27 -0
- data/samples/controls/stattext.xpm +24 -0
- data/samples/controls/test2.bmp +0 -0
- data/samples/controls/text.xpm +27 -0
- data/samples/controls/tn_books.png +0 -0
- data/samples/controls/tn_controls.png +0 -0
- data/samples/controls/tn_get_item_sample.png +0 -0
- data/samples/dialogs/dialogs.rb +879 -0
- data/samples/dialogs/tips.txt +18 -0
- data/samples/dialogs/tn_dialogs.png +0 -0
- data/samples/dialogs/tn_wizard.png +0 -0
- data/samples/dialogs/wizard.rb +89 -0
- data/samples/dragdrop/dragdrop.rb +200 -0
- data/samples/dragdrop/tn_dragdrop.png +0 -0
- data/samples/drawing/SVGlogo24.xpm +310 -0
- data/samples/drawing/bitmap.rb +76 -0
- data/samples/drawing/bitmap_image.rb +131 -0
- data/samples/drawing/graphics_drawing.rb +257 -0
- data/samples/drawing/maths_images.rb +327 -0
- data/samples/drawing/rmagic_bitmap_image.rb +139 -0
- data/samples/drawing/ruby-logo.jpg +0 -0
- data/samples/drawing/svgtest.rb +373 -0
- data/samples/drawing/tn_bitmap.png +0 -0
- data/samples/drawing/tn_bitmap_image.png +0 -0
- data/samples/drawing/tn_graphics_drawing.png +0 -0
- data/samples/drawing/tn_maths_images.png +0 -0
- data/samples/drawing/tn_rmagic_bitmap_image.png +0 -0
- data/samples/drawing/tn_svgtest.png +0 -0
- data/samples/etc/choice.rb +82 -0
- data/samples/etc/miniframe.rb +92 -0
- data/samples/etc/sash.rb +140 -0
- data/samples/etc/scrollwin.rb +120 -0
- data/samples/etc/system_settings.rb +263 -0
- data/samples/etc/tn_choice.png +0 -0
- data/samples/etc/tn_miniframe.png +0 -0
- data/samples/etc/tn_sash.png +0 -0
- data/samples/etc/tn_scrollwin.png +0 -0
- data/samples/etc/tn_system_settings.png +0 -0
- data/samples/event/activation.rb +129 -0
- data/samples/event/event.rb +220 -0
- data/samples/event/threaded.rb +141 -0
- data/samples/event/tn_activation.png +0 -0
- data/samples/event/tn_event.png +0 -0
- data/samples/event/tn_threaded.png +0 -0
- data/samples/event/tn_update_ui_event.png +0 -0
- data/samples/event/update_ui_event.rb +91 -0
- data/samples/grid/grid.rb +224 -0
- data/samples/grid/gridtablebase.rb +178 -0
- data/samples/grid/tn_grid.png +0 -0
- data/samples/grid/tn_gridtablebase.png +0 -0
- data/samples/html/8859_2.htm +14 -0
- data/samples/html/cp1250.htm +19 -0
- data/samples/html/foo.png +0 -0
- data/samples/html/html.rb +278 -0
- data/samples/html/i18n.gif +0 -0
- data/samples/html/imagemap.htm +20 -0
- data/samples/html/imagemap.png +0 -0
- data/samples/html/listtest.htm +28 -0
- data/samples/html/pic.png +0 -0
- data/samples/html/pic2.bmp +0 -0
- data/samples/html/regres.htm +20 -0
- data/samples/html/subsup.html +42 -0
- data/samples/html/tables.htm +255 -0
- data/samples/html/test.htm +375 -0
- data/samples/html/tn_html.png +0 -0
- data/samples/mdi/mdi.rb +118 -0
- data/samples/mdi/tn_mdi.png +0 -0
- data/samples/minimal/minimal.rb +95 -0
- data/samples/minimal/mondrian.ico +0 -0
- data/samples/minimal/mondrian.png +0 -0
- data/samples/minimal/nothing.rb +38 -0
- data/samples/minimal/tn_minimal.png +0 -0
- data/samples/minimal/tn_nothing.png +0 -0
- data/samples/printing/mondrian.ico +0 -0
- data/samples/printing/mondrian.xpm +44 -0
- data/samples/printing/printing.rb +499 -0
- data/samples/printing/printing2.rb +251 -0
- data/samples/printing/sample-text.txt +213 -0
- data/samples/printing/tn_printing.png +0 -0
- data/samples/printing/tn_printing2.png +0 -0
- data/samples/propgrid/propgrid.rb +2711 -0
- data/samples/propgrid/propgrid_minimal.rb +107 -0
- data/samples/propgrid/sample_props.rb +434 -0
- data/samples/propgrid/tn_propgrid.png +0 -0
- data/samples/propgrid/tn_propgrid_minimal.png +0 -0
- data/samples/ribbon/align_center.xpm +21 -0
- data/samples/ribbon/align_left.xpm +21 -0
- data/samples/ribbon/align_right.xpm +21 -0
- data/samples/ribbon/aui_style.xpm +53 -0
- data/samples/ribbon/auto_crop_selection.xpm +55 -0
- data/samples/ribbon/auto_crop_selection_small.xpm +33 -0
- data/samples/ribbon/circle.xpm +38 -0
- data/samples/ribbon/circle_small.xpm +22 -0
- data/samples/ribbon/colours.xpm +25 -0
- data/samples/ribbon/cross.xpm +38 -0
- data/samples/ribbon/empty.xpm +23 -0
- data/samples/ribbon/expand_selection_h.xpm +46 -0
- data/samples/ribbon/expand_selection_v.xpm +46 -0
- data/samples/ribbon/eye.xpm +26 -0
- data/samples/ribbon/hexagon.xpm +38 -0
- data/samples/ribbon/msw_style.xpm +65 -0
- data/samples/ribbon/position_left.xpm +22 -0
- data/samples/ribbon/position_top.xpm +22 -0
- data/samples/ribbon/ribbon.rb +900 -0
- data/samples/ribbon/ribbon.xpm +54 -0
- data/samples/ribbon/selection_panel.xpm +23 -0
- data/samples/ribbon/square.xpm +38 -0
- data/samples/ribbon/tn_ribbon.png +0 -0
- data/samples/ribbon/triangle.xpm +38 -0
- data/samples/sample.xpm +475 -0
- data/samples/sampler/back.xpm +21 -0
- data/samples/sampler/copy.xpm +44 -0
- data/samples/sampler/cut.xpm +46 -0
- data/samples/sampler/editor.rb +560 -0
- data/samples/sampler/ext.rb +51 -0
- data/samples/sampler/filesave.xpm +42 -0
- data/samples/sampler/find.xpm +62 -0
- data/samples/sampler/findrepl.xpm +63 -0
- data/samples/sampler/forward.xpm +21 -0
- data/samples/sampler/paste.xpm +46 -0
- data/samples/sampler/play.xpm +24 -0
- data/samples/sampler/redo.xpm +58 -0
- data/samples/sampler/sample.rb +347 -0
- data/samples/sampler/stc_editor.rb +321 -0
- data/samples/sampler/txt_editor.rb +130 -0
- data/samples/sampler/undo.xpm +58 -0
- data/samples/sampler.rb +394 -0
- data/samples/splash/mobile.xpm +1835 -0
- data/samples/splash/splash.png +0 -0
- data/samples/splash/splash.rb +164 -0
- data/samples/splash/tn_splash.png +0 -0
- data/samples/text/document-open.png +0 -0
- data/samples/text/document-save.png +0 -0
- data/samples/text/edit-copy.png +0 -0
- data/samples/text/edit-cut.png +0 -0
- data/samples/text/edit-paste.png +0 -0
- data/samples/text/edit-redo.png +0 -0
- data/samples/text/edit-undo.png +0 -0
- data/samples/text/format-text-bold.png +0 -0
- data/samples/text/format-text-italic.png +0 -0
- data/samples/text/format-text-underline.png +0 -0
- data/samples/text/mondrian.ico +0 -0
- data/samples/text/mondrian.xpm +44 -0
- data/samples/text/preferences-desktop-font.png +0 -0
- data/samples/text/rich_textctrl.rb +326 -0
- data/samples/text/scintilla.rb +179 -0
- data/samples/text/textctrl.rb +124 -0
- data/samples/text/tn_rich_textctrl.png +0 -0
- data/samples/text/tn_scintilla.png +0 -0
- data/samples/text/tn_textctrl.png +0 -0
- data/samples/text/tn_unicode.png +0 -0
- data/samples/text/unicode.rb +238 -0
- data/samples/text/utf8.txt +15 -0
- data/samples/treectrl/checked.xpm +54 -0
- data/samples/treectrl/icon1.xpm +79 -0
- data/samples/treectrl/icon2.xpm +53 -0
- data/samples/treectrl/icon3.xpm +79 -0
- data/samples/treectrl/icon4.xpm +43 -0
- data/samples/treectrl/icon5.xpm +79 -0
- data/samples/treectrl/state1.xpm +145 -0
- data/samples/treectrl/state2.xpm +144 -0
- data/samples/treectrl/state3.xpm +142 -0
- data/samples/treectrl/state4.xpm +145 -0
- data/samples/treectrl/state5.xpm +85 -0
- data/samples/treectrl/tn_treectrl.png +0 -0
- data/samples/treectrl/treectrl.rb +1720 -0
- data/samples/treectrl/unchecked.xpm +30 -0
- data/samples/xrc/custom_dialog.xrc +46 -0
- data/samples/xrc/custom_xrc_sample.rb +84 -0
- data/samples/xrc/samples.xrc +46 -0
- data/samples/xrc/tn_xrc_sample.png +0 -0
- data/samples/xrc/xrc_sample.rb +86 -0
- data/tests/test_basic.rb +20 -0
- data/tests/test_clipboard.rb +241 -0
- data/tests/test_dialog.rb +28 -0
- data/tests/test_event_handling.rb +103 -0
- data/tests/test_events.rb +45 -0
- data/tests/test_geometry.rb +141 -0
- data/tests/test_intl.rb +107 -0
- data/tests/test_item_data.rb +120 -0
- data/tests/test_variant.rb +151 -0
- data/tests/testapp.rb +40 -0
- data/tests/testapp_noframe.rb +28 -0
- metadata +930 -0
@@ -0,0 +1,2711 @@
|
|
1
|
+
###
|
2
|
+
# PropertyGrid extended sample
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
4
|
+
###
|
5
|
+
|
6
|
+
require 'wx'
|
7
|
+
|
8
|
+
require_relative './propgrid_minimal'
|
9
|
+
|
10
|
+
# -----------------------------------------------------------------------
|
11
|
+
# WxSampleMultiButtonEditor
|
12
|
+
# A sample editor class that has multiple buttons.
|
13
|
+
# -----------------------------------------------------------------------
|
14
|
+
|
15
|
+
class WxSampleMultiButtonEditor < Wx::PG::PGTextCtrlEditor
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_controls(propGrid, property, pos, sz)
|
22
|
+
# Create and populate buttons-subwindow
|
23
|
+
buttons = Wx::PG::PGMultiButton.new(propGrid, sz)
|
24
|
+
|
25
|
+
# Add two regular buttons
|
26
|
+
buttons.add('...')
|
27
|
+
buttons.add('A')
|
28
|
+
# Add a bitmap button
|
29
|
+
buttons.add(Wx::ArtProvider::get_bitmap(Wx::ART_FOLDER))
|
30
|
+
|
31
|
+
# Create the 'primary' editor control (textctrl in this case)
|
32
|
+
primary, _ = super(propGrid, property, pos, buttons.primary_size)
|
33
|
+
|
34
|
+
# Finally, move buttons-subwindow to correct position and make sure
|
35
|
+
# returned Wx::PG::PGWindowList contains our custom button list.
|
36
|
+
buttons.finalize(propGrid, pos)
|
37
|
+
|
38
|
+
[primary, buttons]
|
39
|
+
end
|
40
|
+
|
41
|
+
def on_event(propGrid, property, ctrl, event)
|
42
|
+
if event.event_type == Wx::EVT_BUTTON
|
43
|
+
buttons = propGrid.get_editor_control_secondary
|
44
|
+
|
45
|
+
if event.id == buttons.button_id(0)
|
46
|
+
|
47
|
+
# Do something when the first button is pressed
|
48
|
+
Wx::log_info('First button pressed')
|
49
|
+
return false # Return false since value did not change
|
50
|
+
end
|
51
|
+
if event.id == buttons.get_button_id(1)
|
52
|
+
|
53
|
+
# Do something when the second button is pressed
|
54
|
+
Wx.message_box('Second button pressed')
|
55
|
+
return false # Return false since value did not change
|
56
|
+
end
|
57
|
+
if event.id == buttons.button_id(2)
|
58
|
+
# Do something when the third button is pressed
|
59
|
+
Wx.message_box('Third button pressed')
|
60
|
+
return false # Return false since value did not change
|
61
|
+
end
|
62
|
+
end
|
63
|
+
super(propGrid, property, ctrl, event)
|
64
|
+
end
|
65
|
+
|
66
|
+
end # class WxSampleMultiButtonEditor
|
67
|
+
|
68
|
+
if Wx.has_feature?(:USE_VALIDATORS)
|
69
|
+
|
70
|
+
class WxInvalidWordValidator < Wx::Validator
|
71
|
+
|
72
|
+
def initialize(invalidWord)
|
73
|
+
super()
|
74
|
+
@invalidWord = invalidWord
|
75
|
+
end
|
76
|
+
|
77
|
+
def clone
|
78
|
+
return WxInvalidWordValidator.new(@invalidWord)
|
79
|
+
end
|
80
|
+
|
81
|
+
def validate(parent_)
|
82
|
+
tc = get_window
|
83
|
+
raise 'validator window must be wxTextCtrl' unless Wx::TextCtrl === tc
|
84
|
+
|
85
|
+
val = tc.value
|
86
|
+
|
87
|
+
return true unless val.index(@invalidWord)
|
88
|
+
|
89
|
+
Wx.message_box("%s is not allowed word" % @invalidWord,
|
90
|
+
"Validation Failure")
|
91
|
+
false
|
92
|
+
end
|
93
|
+
|
94
|
+
end # class WxInvalidWordValidator
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
# -----------------------------------------------------------------------
|
99
|
+
# WxVectorProperty
|
100
|
+
# -----------------------------------------------------------------------
|
101
|
+
|
102
|
+
class WxVectorProperty < Wx::PG::PGProperty
|
103
|
+
|
104
|
+
WxVector3f = Struct.new(:x, :y, :z) do |klass|
|
105
|
+
def initialize
|
106
|
+
self.x = self.y = self.z = 0.0
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def initialize(label = Wx::PG::PG_LABEL, name = Wx::PG::PG_LABEL, value = WxVector3f.new)
|
111
|
+
super(label, name)
|
112
|
+
self.value = value
|
113
|
+
add_private_child(Wx::PG::FloatProperty.new("X",Wx::PG::PG_LABEL, value.x))
|
114
|
+
add_private_child(Wx::PG::FloatProperty.new("Y",Wx::PG::PG_LABEL, value.y))
|
115
|
+
add_private_child(Wx::PG::FloatProperty.new("Z",Wx::PG::PG_LABEL, value.z))
|
116
|
+
end
|
117
|
+
|
118
|
+
def child_changed(thisValue, childIndex, childValue)
|
119
|
+
vector = thisValue.object;
|
120
|
+
case childIndex
|
121
|
+
when 0
|
122
|
+
vector.x = childValue.to_f
|
123
|
+
when 1
|
124
|
+
vector.y = childValue.to_f
|
125
|
+
when 2
|
126
|
+
vector.z = childValue.to_f
|
127
|
+
end
|
128
|
+
Wx::Variant.new(vector)
|
129
|
+
end
|
130
|
+
|
131
|
+
def refresh_children
|
132
|
+
return if get_child_count == 0
|
133
|
+
vector = self.value_.object
|
134
|
+
item(0).value = vector.x
|
135
|
+
item(1).value = vector.y
|
136
|
+
item(2).value = vector.z
|
137
|
+
end
|
138
|
+
|
139
|
+
end # class WxVectorProperty
|
140
|
+
|
141
|
+
# -----------------------------------------------------------------------
|
142
|
+
# Wx::PG::TriangleProperty
|
143
|
+
# -----------------------------------------------------------------------
|
144
|
+
|
145
|
+
class WxTriangleProperty < Wx::PG::PGProperty
|
146
|
+
|
147
|
+
WxTriangle = Struct.new(:a, :b, :c) do |klass|
|
148
|
+
def initialize
|
149
|
+
self.a = WxVectorProperty::WxVector3f.new
|
150
|
+
self.b = WxVectorProperty::WxVector3f.new
|
151
|
+
self.c = WxVectorProperty::WxVector3f.new
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def initialize(label = Wx::PG::PG_LABEL, name = Wx::PG::PG_LABEL, value = WxTriangle.new)
|
156
|
+
super(label, name)
|
157
|
+
self.value = value
|
158
|
+
add_private_child(WxVectorProperty.new("A", Wx::PG::PG_LABEL, value.a.dup))
|
159
|
+
add_private_child(WxVectorProperty.new("B", Wx::PG::PG_LABEL, value.b.dup))
|
160
|
+
add_private_child(WxVectorProperty.new("C", Wx::PG::PG_LABEL, value.c.dup))
|
161
|
+
end
|
162
|
+
|
163
|
+
def child_changed(thisValue, childIndex, childValue)
|
164
|
+
triangle = thisValue.object.dup
|
165
|
+
vector = childValue.object.dup
|
166
|
+
case childIndex
|
167
|
+
when 0
|
168
|
+
triangle.a = vector
|
169
|
+
when 1
|
170
|
+
triangle.b = vector
|
171
|
+
when 2
|
172
|
+
triangle.c = vector
|
173
|
+
end
|
174
|
+
Wx::Variant.new(triangle)
|
175
|
+
end
|
176
|
+
|
177
|
+
def refresh_children
|
178
|
+
return if get_child_count == 0
|
179
|
+
triangle = self.value_.object
|
180
|
+
item(0).value = triangle.a
|
181
|
+
item(1).value = triangle.b
|
182
|
+
item(2).value = triangle.c
|
183
|
+
end
|
184
|
+
|
185
|
+
end # class WxTriangleProperty
|
186
|
+
|
187
|
+
|
188
|
+
# -----------------------------------------------------------------------
|
189
|
+
# wxSingleChoiceDialogAdapter (Wx::PG::PGEditorDialogAdapter sample)
|
190
|
+
# -----------------------------------------------------------------------
|
191
|
+
|
192
|
+
class WxSingleChoiceDialogAdapter < Wx::PG::PGEditorDialogAdapter
|
193
|
+
|
194
|
+
def initialize(choices)
|
195
|
+
super()
|
196
|
+
@choices = choices
|
197
|
+
end
|
198
|
+
|
199
|
+
def do_show_dialog(propGrid_, property_)
|
200
|
+
s = Wx.get_single_choice("Message",
|
201
|
+
"Caption",
|
202
|
+
@choices.labels)
|
203
|
+
unless s.empty?
|
204
|
+
value = s
|
205
|
+
return true
|
206
|
+
end
|
207
|
+
|
208
|
+
return false
|
209
|
+
end
|
210
|
+
|
211
|
+
end # class WxSingleChoiceDialogAdapter
|
212
|
+
|
213
|
+
class WxSingleChoiceProperty < Wx::PG::StringProperty
|
214
|
+
|
215
|
+
def initialize(label, name = Wx::PG::PG_LABEL, value = '')
|
216
|
+
super(label, name, value)
|
217
|
+
# Prepare choices
|
218
|
+
@choices = Wx::PG::PGChoices.new
|
219
|
+
@choices.add("Cat")
|
220
|
+
@choices.add("Dog")
|
221
|
+
@choices.add("Gibbon")
|
222
|
+
@choices.add("Otter")
|
223
|
+
end
|
224
|
+
|
225
|
+
# Set editor to have button
|
226
|
+
def do_get_editor_class
|
227
|
+
Wx::PG::PG_EDITOR_TEXT_CTRL_AND_BUTTON
|
228
|
+
end
|
229
|
+
|
230
|
+
# Set what happens on button click
|
231
|
+
def get_editor_dialog
|
232
|
+
WxSingleChoiceDialogAdapter.new(@choices)
|
233
|
+
end
|
234
|
+
|
235
|
+
end # class SingleChoiceProperty
|
236
|
+
|
237
|
+
#
|
238
|
+
# Test customizing wxColourProperty via subclassing
|
239
|
+
#
|
240
|
+
# * Includes custom colour entry.
|
241
|
+
# * Includes extra custom entry.
|
242
|
+
#
|
243
|
+
class MyColourProperty < Wx::PG::ColourProperty
|
244
|
+
|
245
|
+
def initialize(label = Wx::PG::PG_LABEL,
|
246
|
+
name = Wx::PG::PG_LABEL,
|
247
|
+
value = Wx::WHITE )
|
248
|
+
super(label, name, value)
|
249
|
+
self.choices = Wx::PG::PGChoices.new(%w[White Black Red Green Blue Custom None])
|
250
|
+
set_index(0)
|
251
|
+
self.value = value
|
252
|
+
end
|
253
|
+
|
254
|
+
def get_colour(index)
|
255
|
+
case index
|
256
|
+
when 0
|
257
|
+
return Wx::WHITE
|
258
|
+
when 1
|
259
|
+
return Wx::BLACK
|
260
|
+
when 2
|
261
|
+
return Wx::RED
|
262
|
+
when 3
|
263
|
+
return Wx::GREEN
|
264
|
+
when 4
|
265
|
+
return Wx::BLUE
|
266
|
+
when 5
|
267
|
+
# Return current colour for the custom entry
|
268
|
+
if get_index == get_custom_colour_index
|
269
|
+
return self.value_.colour unless self.value_.null?
|
270
|
+
else
|
271
|
+
return Wx::WHITE
|
272
|
+
end
|
273
|
+
end
|
274
|
+
Wx::Colour.new
|
275
|
+
end
|
276
|
+
|
277
|
+
def colour_to_string(col, index, argFlags = 0)
|
278
|
+
return '' if index == (self.choices.get_count-1)
|
279
|
+
|
280
|
+
super(col, index, argFlags)
|
281
|
+
end
|
282
|
+
|
283
|
+
def get_custom_colour_index
|
284
|
+
self.choices.get_count-2
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
module ID
|
289
|
+
%i[
|
290
|
+
PGID
|
291
|
+
ABOUT
|
292
|
+
QUIT
|
293
|
+
APPENDPROP
|
294
|
+
APPENDCAT
|
295
|
+
INSERTPROP
|
296
|
+
INSERTCAT
|
297
|
+
ENABLE
|
298
|
+
SETREADONLY
|
299
|
+
HIDE
|
300
|
+
BOOL_CHECKBOX
|
301
|
+
DELETE
|
302
|
+
DELETER
|
303
|
+
DELETEALL
|
304
|
+
UNSPECIFY
|
305
|
+
ITERATE1
|
306
|
+
ITERATE2
|
307
|
+
ITERATE3
|
308
|
+
ITERATE4
|
309
|
+
CLEARMODIF
|
310
|
+
FREEZE
|
311
|
+
DUMPLIST
|
312
|
+
COLOURSCHEME1
|
313
|
+
COLOURSCHEME2
|
314
|
+
COLOURSCHEME3
|
315
|
+
CATCOLOURS
|
316
|
+
SETBGCOLOUR
|
317
|
+
SETBGCOLOURRECUR
|
318
|
+
STATICLAYOUT
|
319
|
+
POPULATE1
|
320
|
+
POPULATE2
|
321
|
+
COLLAPSE
|
322
|
+
COLLAPSEALL
|
323
|
+
GETVALUES
|
324
|
+
SETVALUES
|
325
|
+
SETVALUES2
|
326
|
+
RUNTESTFULL
|
327
|
+
RUNTESTPARTIAL
|
328
|
+
FITCOLUMNS
|
329
|
+
CHANGEFLAGSITEMS
|
330
|
+
TESTINSERTCHOICE
|
331
|
+
TESTDELETECHOICE
|
332
|
+
INSERTPAGE
|
333
|
+
REMOVEPAGE
|
334
|
+
SETSPINCTRLEDITOR
|
335
|
+
SETPROPERTYVALUE
|
336
|
+
TESTREPLACE
|
337
|
+
SETCOLUMNS
|
338
|
+
SETVIRTWIDTH
|
339
|
+
SETPGDISABLED
|
340
|
+
TESTXRC
|
341
|
+
ENABLECOMMONVALUES
|
342
|
+
SELECTSTYLE
|
343
|
+
SAVESTATE
|
344
|
+
RESTORESTATE
|
345
|
+
RUNMINIMAL
|
346
|
+
ENABLELABELEDITING
|
347
|
+
VETOCOLDRAG
|
348
|
+
ONEXTENDEDKEYNAV
|
349
|
+
SHOWPOPUP
|
350
|
+
POPUPGRID
|
351
|
+
].each_with_index { |sym, ix| self.const_set(sym, ix+1) }
|
352
|
+
|
353
|
+
if Wx.has_feature?(:USE_HEADERCTRL)
|
354
|
+
SHOWHEADER = POPUPGRID+1
|
355
|
+
end
|
356
|
+
|
357
|
+
COLOURSCHEME4 = 100
|
358
|
+
end
|
359
|
+
|
360
|
+
#
|
361
|
+
# Handle events of the third page here.
|
362
|
+
class WxMyPropertyGridPage < Wx::PG::PropertyGridPage
|
363
|
+
|
364
|
+
def initialize
|
365
|
+
super
|
366
|
+
evt_pg_selected(Wx::ID_ANY, :on_property_select)
|
367
|
+
evt_pg_changing(Wx::ID_ANY, :on_property_changing)
|
368
|
+
evt_pg_changed(Wx::ID_ANY, :on_property_change)
|
369
|
+
evt_pg_page_changed(Wx::ID_ANY, :on_page_change)
|
370
|
+
end
|
371
|
+
|
372
|
+
# Return false here to indicate unhandled events should be
|
373
|
+
# propagated to manager's parent, as normal.
|
374
|
+
def is_handling_all_events; false; end
|
375
|
+
|
376
|
+
def do_insert(parent, index, property)
|
377
|
+
super(parent,index,property)
|
378
|
+
end
|
379
|
+
|
380
|
+
def on_property_select(event)
|
381
|
+
Wx.log_debug("WxMyPropertyGridPage#on_property_select('%s' is %s",
|
382
|
+
event.property.get_name,
|
383
|
+
(property_selected?(event.property) ? "selected": "unselected"))
|
384
|
+
end
|
385
|
+
def on_property_changing(event)
|
386
|
+
Wx.log_verbose("WxMyPropertyGridPage#on_property_change('%s', to value '%s')",
|
387
|
+
event.property.get_name,
|
388
|
+
event.property.get_displayed_string)
|
389
|
+
end
|
390
|
+
def on_property_change(event)
|
391
|
+
Wx.log_verbose("WxMyPropertyGridPage#on_property_changing('%s', to value '%s')",
|
392
|
+
event.property.get_name,
|
393
|
+
event.value.to_s)
|
394
|
+
end
|
395
|
+
def on_page_change(event)
|
396
|
+
Wx.log_debug("WxMyPropertyGridPage#on_page_change()")
|
397
|
+
end
|
398
|
+
|
399
|
+
end # class WxMyPropertyGridPage
|
400
|
+
|
401
|
+
|
402
|
+
class WxPGKeyHandler < Wx::EvtHandler
|
403
|
+
|
404
|
+
def initialize
|
405
|
+
super
|
406
|
+
evt_key_down :on_key_event
|
407
|
+
end
|
408
|
+
|
409
|
+
def on_key_event(event)
|
410
|
+
Wx.message_box("%i" % event.get_key_code)
|
411
|
+
event.skip
|
412
|
+
end
|
413
|
+
|
414
|
+
end
|
415
|
+
|
416
|
+
class PropertyGridPopup < Wx::PopupWindow
|
417
|
+
|
418
|
+
private def get_real_root(grid)
|
419
|
+
property = grid.root
|
420
|
+
property ? grid.get_first_child(property) : nil
|
421
|
+
end
|
422
|
+
|
423
|
+
private def get_column_widths(grid, root)
|
424
|
+
state = grid.get_state
|
425
|
+
|
426
|
+
width = [0,0,0]
|
427
|
+
minWidths = [ state.get_column_min_width(0),
|
428
|
+
state.get_column_min_width(1),
|
429
|
+
state.get_column_min_width(2) ]
|
430
|
+
root.child_count.times do |ii|
|
431
|
+
p = root.item(ii)
|
432
|
+
|
433
|
+
width[0] = [width[0], state.get_column_full_width(p, 0)].max
|
434
|
+
width[1] = [width[1], state.get_column_full_width(p, 1)].max
|
435
|
+
width[2] = [width[2], state.get_column_full_width(p, 2)].max
|
436
|
+
end
|
437
|
+
root.child_count.times do |ii|
|
438
|
+
p = root.item(ii)
|
439
|
+
if p.is_expanded
|
440
|
+
w = get_column_widths(grid, p)
|
441
|
+
width[0] = [width[0], w[0]].max
|
442
|
+
width[1] = [width[1], w[1]].max
|
443
|
+
width[2] = [width[2], w[2]].max
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
447
|
+
width[0] = [width[0], minWidths[0]].max
|
448
|
+
width[1] = [width[1], minWidths[1]].max
|
449
|
+
width[2] = [width[2], minWidths[2]].max
|
450
|
+
width
|
451
|
+
end
|
452
|
+
|
453
|
+
private def set_popup_min_size(grid)
|
454
|
+
p = get_real_root(grid)
|
455
|
+
first = grid.get_first(Wx::PG::PG_ITERATE_ALL)
|
456
|
+
last = grid.get_last_item(Wx::PG::PG_ITERATE_DEFAULT)
|
457
|
+
rect = grid.get_property_rect(first, last)
|
458
|
+
height = rect.height + 2 * grid.get_vertical_spacing
|
459
|
+
|
460
|
+
# add some height when the root item is collapsed,
|
461
|
+
# this is needed to prevent the vertical scroll from showing
|
462
|
+
unless grid.is_property_expanded(p)
|
463
|
+
height += 2 * grid.get_vertical_spacing
|
464
|
+
end
|
465
|
+
|
466
|
+
width = get_column_widths(grid, grid.root)
|
467
|
+
rect.width = width.sum
|
468
|
+
|
469
|
+
minWidth = (Wx::SystemSettings.get_metric(Wx::SYS_SCREEN_X, grid.get_parent)*3)/2
|
470
|
+
minHeight = (Wx::SystemSettings.get_metric(Wx::SYS_SCREEN_Y, grid.get_parent)*3)/2
|
471
|
+
|
472
|
+
size = [[minWidth, rect.width + grid.get_margin_width].min, [minHeight, height].min]
|
473
|
+
grid.set_min_size(size)
|
474
|
+
|
475
|
+
proportions = [ (100.0*width[0]/size[0]).round,
|
476
|
+
(100.0*width[1]/size[0]).round ]
|
477
|
+
proportions << [100 - proportions[0] - proportions[1], 0].max
|
478
|
+
grid.set_column_proportion(0, proportions[0])
|
479
|
+
grid.set_column_proportion(1, proportions[1])
|
480
|
+
grid.set_column_proportion(2, proportions[2])
|
481
|
+
grid.reset_column_sizes(true)
|
482
|
+
end
|
483
|
+
|
484
|
+
def initialize(parent)
|
485
|
+
super(parent, Wx::BORDER_NONE|Wx::WANTS_CHARS|Wx::PU_CONTAINS_CONTROLS)
|
486
|
+
@panel = Wx::ScrolledWindow.new(self, Wx::ID_ANY, size: Wx::Size.new(200, 200))
|
487
|
+
@grid = Wx::PG::PropertyGrid.new(@panel, ID::POPUPGRID, size: [400,400], style: Wx::PG::PG_SPLITTER_AUTO_CENTER)
|
488
|
+
@grid.set_column_count(3)
|
489
|
+
|
490
|
+
prop = @grid.append(Wx::PG::StringProperty.new("test_name", Wx::PG::PG_LABEL, "test_value"))
|
491
|
+
@grid.set_property_attribute(prop, Wx::PG::PG_ATTR_UNITS, "type")
|
492
|
+
prop1 = @grid.append_in(prop, Wx::PG::StringProperty.new("sub_name1", Wx::PG::PG_LABEL, "sub_value1"))
|
493
|
+
|
494
|
+
@grid.append_in(prop1, Wx::PG::SystemColourProperty.new("Cell Colour", Wx::PG::PG_LABEL, @grid.grid.get_cell_background_colour))
|
495
|
+
prop2 = @grid.append_in(prop, Wx::PG::StringProperty.new("sub_name2", Wx::PG::PG_LABEL, "sub_value2"))
|
496
|
+
@grid.append_in(prop2, Wx::PG::StringProperty.new("sub_name21", Wx::PG::PG_LABEL, "sub_value21"))
|
497
|
+
|
498
|
+
arrdbl = [-1.0, -0.5, 0.0, 0.5, 1.0]
|
499
|
+
@grid.append_in(prop, WxArrayDoubleProperty.new("ArrayDoubleProperty", Wx::PG::PG_LABEL, arrdbl))
|
500
|
+
@grid.append_in(prop, Wx::PG::FontProperty.new("Font", Wx::PG::PG_LABEL))
|
501
|
+
@grid.append_in(prop2, Wx::PG::StringProperty.new("sub_name22", Wx::PG::PG_LABEL, "sub_value22"))
|
502
|
+
@grid.append_in(prop2, Wx::PG::StringProperty.new("sub_name23", Wx::PG::PG_LABEL, "sub_value23"))
|
503
|
+
prop2.set_expanded(false)
|
504
|
+
|
505
|
+
set_popup_min_size(@grid)
|
506
|
+
|
507
|
+
@sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
508
|
+
@sizer.add(@grid, Wx::SizerFlags.new(0).expand.border(Wx::ALL, 0))
|
509
|
+
@panel.set_auto_layout(true)
|
510
|
+
@panel.set_sizer(@sizer)
|
511
|
+
@sizer.fit(@panel)
|
512
|
+
@sizer.fit(self)
|
513
|
+
|
514
|
+
evt_pg_item_collapsed ID::POPUPGRID, :on_collapse
|
515
|
+
evt_pg_item_expanded ID::POPUPGRID, :on_expand
|
516
|
+
end
|
517
|
+
|
518
|
+
def on_collapse(event)
|
519
|
+
Wx.log_message("OnCollapse")
|
520
|
+
fit
|
521
|
+
end
|
522
|
+
|
523
|
+
def on_expand(event)
|
524
|
+
Wx.log_message("OnExpand")
|
525
|
+
fit
|
526
|
+
end
|
527
|
+
|
528
|
+
def fit
|
529
|
+
set_popup_min_size(@grid)
|
530
|
+
@sizer.fit(@panel)
|
531
|
+
pos = get_screen_position
|
532
|
+
size = @panel.get_screen_rect.size
|
533
|
+
set_size(pos.x, pos.y, size.width, size.height)
|
534
|
+
end
|
535
|
+
|
536
|
+
end
|
537
|
+
|
538
|
+
class FormMain < Wx::Frame
|
539
|
+
|
540
|
+
FS_WINDOWSTYLE_LABELS = %w[
|
541
|
+
wxSIMPLE_BORDER wxDOUBLE_BORDER wxSUNKEN_BORDER wxRAISED_BORDER wxNO_BORDER
|
542
|
+
wxTRANSPARENT_WINDOW wxTAB_TRAVERSAL wxWANTS_CHARS wxVSCROLL wxALWAYS_SHOW_SB
|
543
|
+
wxCLIP_CHILDREN wxFULL_REPAINT_ON_RESIZE]
|
544
|
+
|
545
|
+
FS_WINDOWSTYLE_VALUES = [
|
546
|
+
Wx::SIMPLE_BORDER,
|
547
|
+
Wx::DOUBLE_BORDER,
|
548
|
+
Wx::SUNKEN_BORDER,
|
549
|
+
Wx::RAISED_BORDER,
|
550
|
+
Wx::NO_BORDER,
|
551
|
+
Wx::TRANSPARENT_WINDOW,
|
552
|
+
Wx::TAB_TRAVERSAL,
|
553
|
+
Wx::WANTS_CHARS,
|
554
|
+
Wx::VSCROLL,
|
555
|
+
Wx::ALWAYS_SHOW_SB,
|
556
|
+
Wx::CLIP_CHILDREN,
|
557
|
+
Wx::FULL_REPAINT_ON_RESIZE
|
558
|
+
]
|
559
|
+
|
560
|
+
FS_FRAMESTYLE_LABELS = %w[
|
561
|
+
wxCAPTION wxMINIMIZE wxMAXIMIZE wxCLOSE_BOX wxSTAY_ON_TOP wxSYSTEM_MENU
|
562
|
+
wxRESIZE_BORDER wxFRAME_TOOL_WINDOW wxFRAME_NO_TASKBAR
|
563
|
+
wxFRAME_FLOAT_ON_PARENT wxFRAME_SHAPED]
|
564
|
+
|
565
|
+
FS_FRAMESTYLE_VALUES = [
|
566
|
+
Wx::CAPTION,
|
567
|
+
Wx::MINIMIZE,
|
568
|
+
Wx::MAXIMIZE,
|
569
|
+
Wx::CLOSE_BOX,
|
570
|
+
Wx::STAY_ON_TOP,
|
571
|
+
Wx::SYSTEM_MENU,
|
572
|
+
Wx::RESIZE_BORDER,
|
573
|
+
Wx::FRAME_TOOL_WINDOW,
|
574
|
+
Wx::FRAME_NO_TASKBAR,
|
575
|
+
Wx::FRAME_FLOAT_ON_PARENT,
|
576
|
+
Wx::FRAME_SHAPED
|
577
|
+
]
|
578
|
+
|
579
|
+
def initialize(title, pos, size)
|
580
|
+
super(nil, title: title, pos: pos, size: size,
|
581
|
+
style: (Wx::MINIMIZE_BOX|Wx::MAXIMIZE_BOX|Wx::RESIZE_BORDER|Wx::SYSTEM_MENU|
|
582
|
+
Wx::CAPTION|Wx::TAB_TRAVERSAL|Wx::CLOSE_BOX))
|
583
|
+
@propGridManager = nil
|
584
|
+
@propGrid = nil
|
585
|
+
@hasHeader = false
|
586
|
+
@labelEditingEnabled = false
|
587
|
+
@combinedFlags = Wx::PG::PGChoices.new
|
588
|
+
|
589
|
+
self.icon = Wx::Icon.new(local_icon_file('../sample.xpm'))
|
590
|
+
centre
|
591
|
+
|
592
|
+
# This is default in wxRuby
|
593
|
+
# if Wx.has_feature?(:USE_IMAGE)
|
594
|
+
# # This is here to really test the Wx::PG::ImageFileProperty.
|
595
|
+
# wxInitAllImageHandlers()
|
596
|
+
# end
|
597
|
+
|
598
|
+
# Create menu bar
|
599
|
+
menuFile = Wx::Menu.new('', Wx::MENU_TEAROFF)
|
600
|
+
menuTry = Wx::Menu.new
|
601
|
+
menuTools1 = Wx::Menu.new
|
602
|
+
menuTools2 = Wx::Menu.new
|
603
|
+
menuHelp = Wx::Menu.new
|
604
|
+
|
605
|
+
menuHelp.append(ID::ABOUT, '&About', 'Show about dialog')
|
606
|
+
|
607
|
+
menuTools1.append(ID::APPENDPROP, 'Append New Property')
|
608
|
+
menuTools1.append(ID::APPENDCAT, "Append New Category\tCtrl-S")
|
609
|
+
menuTools1.append_separator
|
610
|
+
menuTools1.append(ID::INSERTPROP, "Insert New Property\tCtrl-I")
|
611
|
+
menuTools1.append(ID::INSERTCAT, "Insert New Category\tCtrl-W")
|
612
|
+
menuTools1.append_separator
|
613
|
+
menuTools1.append(ID::DELETE, 'Delete Selected')
|
614
|
+
menuTools1.append(ID::DELETER, 'Delete Random')
|
615
|
+
menuTools1.append(ID::DELETEALL, 'Delete All')
|
616
|
+
menuTools1.append_separator
|
617
|
+
menuTools1.append(ID::POPULATE1, 'Populate with Standard Items')
|
618
|
+
menuTools1.append(ID::POPULATE2, 'Populate with Library Configuration')
|
619
|
+
menuTools1.append_separator
|
620
|
+
menuTools1.append(ID::SETBGCOLOUR, 'Set Bg Colour')
|
621
|
+
menuTools1.append(ID::SETBGCOLOURRECUR, 'Set Bg Colour (Recursively)')
|
622
|
+
menuTools1.append(ID::UNSPECIFY, 'Set Value to Unspecified')
|
623
|
+
menuTools1.append_separator
|
624
|
+
@itemEnable = menuTools1.append(ID::ENABLE, 'Enable',
|
625
|
+
'Toggles item\'s enabled state.')
|
626
|
+
@itemEnable.enable(false)
|
627
|
+
menuTools1.append(ID::HIDE, 'Hide', 'Hides a property')
|
628
|
+
menuTools1.append(ID::SETREADONLY, 'Set as Read-Only',
|
629
|
+
'Set property as read-only')
|
630
|
+
|
631
|
+
menuTools2.append(ID::ITERATE1, 'Iterate Over Properties')
|
632
|
+
menuTools2.append(ID::ITERATE2, 'Iterate Over Visible Items')
|
633
|
+
menuTools2.append(ID::ITERATE3, 'Reverse Iterate Over Properties')
|
634
|
+
menuTools2.append(ID::ITERATE4, 'Iterate Over Categories')
|
635
|
+
menuTools2.append_separator
|
636
|
+
menuTools2.append(ID::ONEXTENDEDKEYNAV, 'Extend Keyboard Navigation',
|
637
|
+
'This will set Enter to navigate to next property, '+
|
638
|
+
'and allows arrow keys to navigate even when in '+
|
639
|
+
'editor control.')
|
640
|
+
menuTools2.append_separator
|
641
|
+
menuTools2.append(ID::SETPROPERTYVALUE, 'Set Property Value')
|
642
|
+
menuTools2.append(ID::CLEARMODIF, 'Clear Modified Status', 'Clears Wx::PG::PG_MODIFIED flag from all properties.')
|
643
|
+
menuTools2.append_separator
|
644
|
+
@itemFreeze = menuTools2.append_check_item(ID::FREEZE, 'Freeze',
|
645
|
+
'Disables painting, auto-sorting, etc.')
|
646
|
+
menuTools2.append_separator
|
647
|
+
menuTools2.append(ID::DUMPLIST, 'Display Values as wxVariant List', 'Tests GetAllValues method and wxVariant conversion.')
|
648
|
+
menuTools2.append_separator
|
649
|
+
menuTools2.append(ID::GETVALUES, 'Get Property Values', 'Stores all property values.')
|
650
|
+
menuTools2.append(ID::SETVALUES, 'Set Property Values', 'Reverts property values to those last stored.')
|
651
|
+
menuTools2.append(ID::SETVALUES2, 'Set Property Values 2', 'Adds property values that should not initially be as items (so new items are created).')
|
652
|
+
menuTools2.append_separator
|
653
|
+
menuTools2.append(ID::SAVESTATE, 'Save Editable State')
|
654
|
+
menuTools2.append(ID::RESTORESTATE, 'Restore Editable State')
|
655
|
+
menuTools2.append_separator
|
656
|
+
menuTools2.append(ID::ENABLECOMMONVALUES, 'Enable Common Value',
|
657
|
+
'Enable values that are common to all properties, for selected property.')
|
658
|
+
menuTools2.append_separator
|
659
|
+
menuTools2.append(ID::COLLAPSE, 'Collapse Selected')
|
660
|
+
menuTools2.append(ID::COLLAPSEALL, 'Collapse All')
|
661
|
+
menuTools2.append_separator
|
662
|
+
menuTools2.append(ID::INSERTPAGE, 'Add Page')
|
663
|
+
menuTools2.append(ID::REMOVEPAGE, 'Remove Page')
|
664
|
+
menuTools2.append_separator
|
665
|
+
menuTools2.append(ID::FITCOLUMNS, 'Fit Columns')
|
666
|
+
@itemVetoDragging =
|
667
|
+
menuTools2.append_check_item(ID::VETOCOLDRAG,
|
668
|
+
'Veto Column Dragging')
|
669
|
+
menuTools2.append_separator
|
670
|
+
menuTools2.append(ID::CHANGEFLAGSITEMS, 'Change Children of FlagsProp')
|
671
|
+
menuTools2.append_separator
|
672
|
+
menuTools2.append(ID::TESTINSERTCHOICE, 'Test InsertPropertyChoice')
|
673
|
+
menuTools2.append(ID::TESTDELETECHOICE, 'Test DeletePropertyChoice')
|
674
|
+
menuTools2.append_separator
|
675
|
+
menuTools2.append(ID::SETSPINCTRLEDITOR, 'Use SpinCtrl Editor')
|
676
|
+
menuTools2.append(ID::TESTREPLACE, 'Test ReplaceProperty')
|
677
|
+
|
678
|
+
menuTry.append(ID::SELECTSTYLE, 'Set Window Style',
|
679
|
+
'Select window style flags used by the grid.')
|
680
|
+
menuTry.append_check_item(ID::ENABLELABELEDITING, 'Enable label editing',
|
681
|
+
'This calls wxPropertyGrid::MakeColumnEditable(0)')
|
682
|
+
menuTry.check(ID::ENABLELABELEDITING, @labelEditingEnabled)
|
683
|
+
if Wx.has_feature?(:USE_HEADERCTRL)
|
684
|
+
menuTry.append_check_item(ID::SHOWHEADER,
|
685
|
+
'Enable header',
|
686
|
+
'This calls wxPropertyGridManager::ShowHeader()')
|
687
|
+
menuTry.check(ID::SHOWHEADER, @hasHeader)
|
688
|
+
end # USE_HEADERCTRL
|
689
|
+
menuTry.append_separator
|
690
|
+
menuTry.append_radio_item(ID::COLOURSCHEME1, 'Standard Colour Scheme')
|
691
|
+
menuTry.append_radio_item(ID::COLOURSCHEME2, 'White Colour Scheme')
|
692
|
+
menuTry.append_radio_item(ID::COLOURSCHEME3, '.NET Colour Scheme')
|
693
|
+
menuTry.append_radio_item(ID::COLOURSCHEME4, 'Cream Colour Scheme')
|
694
|
+
menuTry.append_separator
|
695
|
+
@itemCatColours = menuTry.append_check_item(ID::CATCOLOURS, 'Category Specific Colours',
|
696
|
+
'Switches between category-specific cell colours and default scheme (actually done using SetPropertyTextColour and SetPropertyBackgroundColour).')
|
697
|
+
menuTry.append_separator
|
698
|
+
menuTry.append_check_item(ID::STATICLAYOUT, 'Static Layout',
|
699
|
+
'Switches between user-modifiable and static layouts.')
|
700
|
+
menuTry.append_check_item(ID::BOOL_CHECKBOX, 'Render Boolean values as checkboxes',
|
701
|
+
'Renders Boolean values as checkboxes')
|
702
|
+
menuTry.append(ID::SETCOLUMNS, 'Set Number of Columns')
|
703
|
+
menuTry.append(ID::SETVIRTWIDTH, 'Set Virtual Width')
|
704
|
+
menuTry.append_check_item(ID::SETPGDISABLED, 'Disable Grid')
|
705
|
+
menuTry.append_separator
|
706
|
+
menuTry.append(ID::TESTXRC, 'Display XRC sample')
|
707
|
+
|
708
|
+
menuFile.append(ID::RUNMINIMAL, 'Run Minimal Sample')
|
709
|
+
menuFile.append_separator
|
710
|
+
menuFile.append(ID::RUNTESTFULL, 'Run Tests (full)')
|
711
|
+
menuFile.append(ID::RUNTESTPARTIAL, 'Run Tests (fast)')
|
712
|
+
menuFile.append_separator
|
713
|
+
menuFile.append(ID::QUIT, "E&xit\tAlt-X", 'Quit this program')
|
714
|
+
|
715
|
+
# Now append the freshly created menu to the menu bar...
|
716
|
+
menuBar = Wx::MenuBar.new
|
717
|
+
menuBar.append(menuFile, '&File')
|
718
|
+
menuBar.append(menuTry, '&Try These!')
|
719
|
+
menuBar.append(menuTools1, '&Basic')
|
720
|
+
menuBar.append(menuTools2, '&Advanced')
|
721
|
+
menuBar.append(menuHelp, '&Help')
|
722
|
+
|
723
|
+
# ... and attach this menu bar to the frame
|
724
|
+
self.menu_bar = menuBar
|
725
|
+
|
726
|
+
if Wx.has_feature?(:USE_STATUSBAR)
|
727
|
+
# create a status bar
|
728
|
+
create_status_bar(1)
|
729
|
+
set_status_text('')
|
730
|
+
end # USE_STATUSBAR
|
731
|
+
|
732
|
+
# this is default with wxRuby
|
733
|
+
# Register all editors (SpinCtrl etc.)
|
734
|
+
# wxPropertyGridInterface::RegisterAdditionalEditors()
|
735
|
+
|
736
|
+
# Register our sample custom editors
|
737
|
+
@sampleMultiButtonEditor =
|
738
|
+
Wx::PG::PropertyGrid.register_editor_class(WxSampleMultiButtonEditor.new)
|
739
|
+
|
740
|
+
@panel = Wx::Panel.new(self, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TAB_TRAVERSAL)
|
741
|
+
|
742
|
+
style = Wx::PG::PG_BOLD_MODIFIED |
|
743
|
+
Wx::PG::PG_SPLITTER_AUTO_CENTER |
|
744
|
+
Wx::PG::PG_AUTO_SORT |
|
745
|
+
#Wx::PG::PG_HIDE_MARGIN|Wx::PG::PG_STATIC_SPLITTER |
|
746
|
+
#Wx::PG::PG_TOOLTIPS |
|
747
|
+
#Wx::PG::PG_HIDE_CATEGORIES |
|
748
|
+
#Wx::PG::PG_LIMITED_EDITING |
|
749
|
+
Wx::PG::PG_TOOLBAR |
|
750
|
+
Wx::PG::PG_DESCRIPTION
|
751
|
+
# extra style
|
752
|
+
xtra_style = Wx::PG::PG_EX_MODE_BUTTONS |
|
753
|
+
Wx::PG::PG_EX_MULTIPLE_SELECTION
|
754
|
+
#| Wx::PG::PG_EX_AUTO_UNSPECIFIED_VALUES
|
755
|
+
#| Wx::PG::PG_EX_GREY_LABEL_WHEN_DISABLED
|
756
|
+
#| Wx::PG::PG_EX_HELP_AS_TOOLTIPS
|
757
|
+
if Wx.has_feature?(:ALWAYS_NATIVE_DOUBLE_BUFFER)
|
758
|
+
xtra_style |= Wx::PG::PG_EX_NATIVE_DOUBLE_BUFFERING
|
759
|
+
end # ALWAYS_NATIVE_DOUBLE_BUFFER
|
760
|
+
|
761
|
+
create_grid(style, xtra_style)
|
762
|
+
|
763
|
+
@topSizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
764
|
+
|
765
|
+
@topSizer.add(@propGridManager, Wx::SizerFlags.new(1).expand)
|
766
|
+
|
767
|
+
# Button for tab traversal testing
|
768
|
+
btnSizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
769
|
+
btnSizer.add(Wx::Button.new(@panel, Wx::ID_ANY,
|
770
|
+
'Should be able to move here with Tab'),
|
771
|
+
Wx::SizerFlags.new(1).border(Wx::ALL, 10))
|
772
|
+
btnSizer.add(Wx::Button.new(@panel, ID::SHOWPOPUP,
|
773
|
+
'Show Popup'),
|
774
|
+
Wx::SizerFlags.new(1).border(Wx::ALL, 10))
|
775
|
+
@topSizer.add(btnSizer, Wx::SizerFlags.new(0).border(Wx::ALL, 5).expand)
|
776
|
+
|
777
|
+
@panel.set_sizer(@topSizer)
|
778
|
+
@topSizer.set_size_hints(@panel)
|
779
|
+
|
780
|
+
@panel.layout
|
781
|
+
|
782
|
+
if Wx.has_feature?(:USE_LOGWINDOW)
|
783
|
+
# Create log window
|
784
|
+
@logWindow = Wx::LogWindow.new(self, 'Log Messages', false)
|
785
|
+
@logWindow.frame.move(position.x + size.width + 10,
|
786
|
+
position.y)
|
787
|
+
@logWindow.show
|
788
|
+
end
|
789
|
+
|
790
|
+
evt_idle :on_idle
|
791
|
+
evt_move :on_move
|
792
|
+
evt_size :on_resize
|
793
|
+
|
794
|
+
# This occurs when a property is selected
|
795
|
+
evt_pg_selected ID::PGID, :on_property_grid_select
|
796
|
+
# This occurs when a property value changes
|
797
|
+
evt_pg_changed ID::PGID, :on_property_grid_change
|
798
|
+
# This occurs just prior a property value is changed
|
799
|
+
evt_pg_changing ID::PGID, :on_property_grid_changing
|
800
|
+
# This occurs when a mouse moves over another property
|
801
|
+
evt_pg_highlighted ID::PGID, :on_property_grid_highlight
|
802
|
+
# This occurs when mouse is right-clicked.
|
803
|
+
evt_pg_right_click ID::PGID, :on_property_grid_item_right_click
|
804
|
+
# This occurs when mouse is double-clicked.
|
805
|
+
evt_pg_double_click ID::PGID, :on_property_grid_item_double_click
|
806
|
+
# This occurs when propgridmanager's page changes.
|
807
|
+
evt_pg_page_changed ID::PGID, :on_property_grid_page_change
|
808
|
+
# This occurs when user starts editing a property label
|
809
|
+
evt_pg_label_edit_begin ID::PGID, :on_property_grid_label_edit_begin
|
810
|
+
# This occurs when user stops editing a property label
|
811
|
+
evt_pg_label_edit_ending ID::PGID, :on_property_grid_label_edit_ending
|
812
|
+
# This occurs when property's editor button (if any) is clicked.
|
813
|
+
evt_button ID::PGID, :on_property_grid_button_click
|
814
|
+
|
815
|
+
evt_pg_item_collapsed ID::PGID, :on_property_grid_item_collapse
|
816
|
+
evt_pg_item_expanded ID::PGID, :on_property_grid_item_expand
|
817
|
+
|
818
|
+
evt_pg_col_begin_drag ID::PGID, :on_property_grid_col_begin_drag
|
819
|
+
evt_pg_col_dragging ID::PGID, :on_property_grid_col_dragging
|
820
|
+
evt_pg_col_end_drag ID::PGID, :on_property_grid_col_end_drag
|
821
|
+
|
822
|
+
evt_text ID::PGID, :on_property_grid_text_update
|
823
|
+
|
824
|
+
#
|
825
|
+
# Rest of the events are not property grid specific
|
826
|
+
evt_key_down :on_property_grid_key_event
|
827
|
+
evt_key_up :on_property_grid_key_event
|
828
|
+
|
829
|
+
evt_menu ID::APPENDPROP, :on_append_prop_click
|
830
|
+
evt_menu ID::APPENDCAT, :on_append_cat_click
|
831
|
+
evt_menu ID::INSERTPROP, :on_insert_prop_click
|
832
|
+
evt_menu ID::INSERTCAT, :on_insert_cat_click
|
833
|
+
evt_menu ID::DELETE, :on_del_prop_click
|
834
|
+
evt_menu ID::DELETER, :on_del_prop_r_click
|
835
|
+
evt_menu ID::UNSPECIFY, :on_misc
|
836
|
+
evt_menu ID::DELETEALL, :on_clear_click
|
837
|
+
evt_menu ID::ENABLE, :on_enable_disable
|
838
|
+
evt_menu ID::SETREADONLY, :on_set_read_only
|
839
|
+
evt_menu ID::HIDE, :on_hide
|
840
|
+
evt_menu ID::BOOL_CHECKBOX, :on_bool_checkbox
|
841
|
+
|
842
|
+
evt_menu ID::ITERATE1, :on_iterate1_click
|
843
|
+
evt_menu ID::ITERATE2, :on_iterate2_click
|
844
|
+
evt_menu ID::ITERATE3, :on_iterate3_click
|
845
|
+
evt_menu ID::ITERATE4, :on_iterate4_click
|
846
|
+
evt_menu ID::ONEXTENDEDKEYNAV, :on_extended_key_nav
|
847
|
+
evt_menu ID::SETBGCOLOUR, :on_set_background_colour
|
848
|
+
evt_menu ID::SETBGCOLOURRECUR, :on_set_background_colour
|
849
|
+
evt_menu ID::CLEARMODIF, :on_clear_modify_status_click
|
850
|
+
evt_menu ID::FREEZE, :on_freeze_click
|
851
|
+
evt_menu ID::ENABLELABELEDITING, :on_enable_label_editing
|
852
|
+
if Wx.has_feature? :USE_HEADERCTRL
|
853
|
+
evt_menu ID::SHOWHEADER, :on_show_header
|
854
|
+
end
|
855
|
+
evt_menu ID::DUMPLIST, :on_dump_list
|
856
|
+
|
857
|
+
evt_menu ID::COLOURSCHEME1, :on_colour_scheme
|
858
|
+
evt_menu ID::COLOURSCHEME2, :on_colour_scheme
|
859
|
+
evt_menu ID::COLOURSCHEME3, :on_colour_scheme
|
860
|
+
evt_menu ID::COLOURSCHEME4, :on_colour_scheme
|
861
|
+
|
862
|
+
evt_menu ID::ABOUT, :on_about
|
863
|
+
evt_menu ID::QUIT, :on_close_click
|
864
|
+
|
865
|
+
evt_menu ID::CATCOLOURS, :on_cat_colours
|
866
|
+
evt_menu ID::SETCOLUMNS, :on_set_columns
|
867
|
+
evt_menu ID::SETVIRTWIDTH, :on_set_virtual_width
|
868
|
+
evt_menu ID::SETPGDISABLED, :on_set_grid_disabled
|
869
|
+
evt_menu ID::TESTXRC, :on_test_xrc
|
870
|
+
evt_menu ID::ENABLECOMMONVALUES, :on_enable_common_values
|
871
|
+
evt_menu ID::SELECTSTYLE, :on_select_style
|
872
|
+
|
873
|
+
evt_menu ID::STATICLAYOUT, :on_misc
|
874
|
+
evt_menu ID::COLLAPSE, :on_misc
|
875
|
+
evt_menu ID::COLLAPSEALL, :on_misc
|
876
|
+
|
877
|
+
evt_menu ID::POPULATE1, :on_populate_click
|
878
|
+
evt_menu ID::POPULATE2, :on_populate_click
|
879
|
+
|
880
|
+
evt_menu ID::GETVALUES, :on_misc
|
881
|
+
evt_menu ID::SETVALUES, :on_misc
|
882
|
+
evt_menu ID::SETVALUES2, :on_misc
|
883
|
+
|
884
|
+
evt_menu ID::FITCOLUMNS, :on_fit_columns_click
|
885
|
+
|
886
|
+
evt_menu ID::CHANGEFLAGSITEMS, :on_change_flags_prop_items_click
|
887
|
+
|
888
|
+
evt_menu ID::RUNTESTFULL, :on_misc
|
889
|
+
evt_menu ID::RUNTESTPARTIAL, :on_misc
|
890
|
+
|
891
|
+
evt_menu ID::TESTINSERTCHOICE, :on_insert_choice
|
892
|
+
evt_menu ID::TESTDELETECHOICE, :on_delete_choice
|
893
|
+
|
894
|
+
evt_menu ID::INSERTPAGE, :on_insert_page
|
895
|
+
evt_menu ID::REMOVEPAGE, :on_remove_page
|
896
|
+
|
897
|
+
evt_menu ID::SAVESTATE, :on_save_state
|
898
|
+
evt_menu ID::RESTORESTATE, :on_restore_state
|
899
|
+
|
900
|
+
evt_menu ID::SETSPINCTRLEDITOR, :on_set_spin_ctrl_editor_click
|
901
|
+
evt_menu ID::TESTREPLACE, :on_test_replace_click
|
902
|
+
evt_menu ID::SETPROPERTYVALUE, :on_set_property_value
|
903
|
+
|
904
|
+
evt_menu ID::RUNMINIMAL, :on_run_minimal_click
|
905
|
+
|
906
|
+
evt_update_ui ID::CATCOLOURS, :on_cat_colours_update_ui
|
907
|
+
|
908
|
+
evt_context_menu :on_context_menu
|
909
|
+
evt_button ID::SHOWPOPUP, :on_show_popup
|
910
|
+
|
911
|
+
end
|
912
|
+
|
913
|
+
#
|
914
|
+
# Normally, wxPropertyGrid does not check whether item with identical
|
915
|
+
# label already exists. However, since in this sample we use labels for
|
916
|
+
# identifying properties, we have to be sure not to generate identical
|
917
|
+
# labels.
|
918
|
+
#
|
919
|
+
def self.generate_unique_property_label(pg, base_label)
|
920
|
+
count = -1;
|
921
|
+
|
922
|
+
if pg.get_property_by_label(base_label)
|
923
|
+
while true
|
924
|
+
count += 1
|
925
|
+
new_label = "%s %i" % [base_label,count]
|
926
|
+
break unless pg.get_property_by_label(new_label)
|
927
|
+
end
|
928
|
+
end
|
929
|
+
|
930
|
+
base_label = new_label if count >= 0
|
931
|
+
|
932
|
+
base_label
|
933
|
+
end
|
934
|
+
|
935
|
+
# utility function to find an icon relative to this ruby script
|
936
|
+
def local_icon_file(icon_name)
|
937
|
+
File.join(File.dirname(__FILE__), icon_name)
|
938
|
+
end
|
939
|
+
|
940
|
+
def create_grid(style, extraStyle)
|
941
|
+
#
|
942
|
+
# This function (re)creates the property grid in our sample
|
943
|
+
#
|
944
|
+
|
945
|
+
if style == -1
|
946
|
+
# default style
|
947
|
+
style = Wx::PG::PG_BOLD_MODIFIED |
|
948
|
+
Wx::PG::PG_SPLITTER_AUTO_CENTER |
|
949
|
+
Wx::PG::PG_AUTO_SORT |
|
950
|
+
#Wx::PG::PG_HIDE_MARGIN|Wx::PG::PG_STATIC_SPLITTER |
|
951
|
+
#Wx::PG::PG_TOOLTIPS |
|
952
|
+
#Wx::PG::PG_HIDE_CATEGORIES |
|
953
|
+
#Wx::PG::PG_LIMITED_EDITING |
|
954
|
+
Wx::PG::PG_TOOLBAR |
|
955
|
+
Wx::PG::PG_DESCRIPTION
|
956
|
+
end
|
957
|
+
if extraStyle == -1
|
958
|
+
# default extra style
|
959
|
+
extraStyle = Wx::PG::PG_EX_MODE_BUTTONS |
|
960
|
+
Wx::PG::PG_EX_MULTIPLE_SELECTION
|
961
|
+
#| Wx::PG::PG_EX_AUTO_UNSPECIFIED_VALUES
|
962
|
+
#| Wx::PG::PG_EX_GREY_LABEL_WHEN_DISABLED
|
963
|
+
#| Wx::PG::PG_EX_HELP_AS_TOOLTIPS
|
964
|
+
if Wx.has_feature?(:ALWAYS_NATIVE_DOUBLE_BUFFER)
|
965
|
+
extraStyle |= Wx::PG::PG_EX_NATIVE_DOUBLE_BUFFERING
|
966
|
+
end # ALWAYS_NATIVE_DOUBLE_BUFFER
|
967
|
+
end
|
968
|
+
|
969
|
+
#
|
970
|
+
# This shows how to combine two static choice descriptors
|
971
|
+
@combinedFlags.add(FS_WINDOWSTYLE_LABELS, FS_WINDOWSTYLE_VALUES)
|
972
|
+
@combinedFlags.add(FS_FRAMESTYLE_LABELS, FS_FRAMESTYLE_VALUES)
|
973
|
+
|
974
|
+
pgman = @propGridManager =
|
975
|
+
Wx::PG::PropertyGridManager.new(@panel,
|
976
|
+
# Don't change this into wxID_ANY in the sample, or the
|
977
|
+
# event handling will obviously be broken.
|
978
|
+
ID::PGID, # wxID_ANY
|
979
|
+
Wx::DEFAULT_POSITION,
|
980
|
+
Wx::DEFAULT_SIZE,
|
981
|
+
style)
|
982
|
+
|
983
|
+
@propGrid = pgman.grid
|
984
|
+
|
985
|
+
pgman.set_extra_style(extraStyle)
|
986
|
+
|
987
|
+
# This is the default validation failure behaviour
|
988
|
+
@propGridManager.set_validation_failure_behavior(Wx::PG::PG_VFB_MARK_CELL|Wx::PG::PG_VFB_SHOW_MESSAGEBOX)
|
989
|
+
|
990
|
+
@propGridManager.grid.set_vertical_spacing(2)
|
991
|
+
|
992
|
+
#
|
993
|
+
# Set somewhat different unspecified value appearance
|
994
|
+
cell = Wx::PG::PGCell.new
|
995
|
+
cell.text = 'Unspecified'
|
996
|
+
cell.set_fg_col(Wx::LIGHT_GREY)
|
997
|
+
@propGrid.set_unspecified_value_appearance(cell)
|
998
|
+
|
999
|
+
populate_grid
|
1000
|
+
|
1001
|
+
@propGrid.make_column_editable(0, @labelEditingEnabled)
|
1002
|
+
@propGridManager.show_header(@hasHeader)
|
1003
|
+
@propGridManager.set_column_title(2, 'Units') if @hasHeader
|
1004
|
+
end
|
1005
|
+
|
1006
|
+
def replace_grid(style, extraStyle)
|
1007
|
+
pgmanOld = @propGridManager;
|
1008
|
+
create_grid(style, extraStyle)
|
1009
|
+
@topSizer.replace(pgmanOld, @propGridManager)
|
1010
|
+
pgmanOld.destroy
|
1011
|
+
@propGridManager.set_focus
|
1012
|
+
@panel.layout
|
1013
|
+
end
|
1014
|
+
|
1015
|
+
# These are used in CreateGrid(), and in tests to compose
|
1016
|
+
# grids for testing purposes.
|
1017
|
+
def populate_grid
|
1018
|
+
pgman = @propGridManager;
|
1019
|
+
pgman.add_page('Standard Items')
|
1020
|
+
|
1021
|
+
populate_with_standard_items
|
1022
|
+
|
1023
|
+
pgman.add_page('wxWidgets Library Config')
|
1024
|
+
|
1025
|
+
populate_with_library_config
|
1026
|
+
|
1027
|
+
myPage = WxMyPropertyGridPage.new
|
1028
|
+
myPage.append(Wx::PG::IntProperty.new("IntProperty", Wx::PG::PG_LABEL, 12345678))
|
1029
|
+
|
1030
|
+
# Use WxMyPropertyGridPage (see above) to test the
|
1031
|
+
# custom wxPropertyGridPage feature.
|
1032
|
+
pgman.add_page("Examples", Wx::BitmapBundle.new, myPage)
|
1033
|
+
|
1034
|
+
populate_with_examples
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
def populate_with_standard_items
|
1038
|
+
pgman = @propGridManager
|
1039
|
+
pg = pgman.get_page("Standard Items")
|
1040
|
+
|
1041
|
+
# Append is ideal way to add items to wxPropertyGrid.
|
1042
|
+
pg.append(Wx::PG::PropertyCategory.new("Appearance", Wx::PG::PG_LABEL))
|
1043
|
+
|
1044
|
+
pg.append(Wx::PG::StringProperty.new("Label", Wx::PG::PG_LABEL, get_title))
|
1045
|
+
pg.append(Wx::PG::FontProperty.new("Font", Wx::PG::PG_LABEL))
|
1046
|
+
pg.set_property_help_string("Font", "Editing this will change font used in the property grid.")
|
1047
|
+
|
1048
|
+
pg.append(Wx::PG::SystemColourProperty.new("Margin Colour",Wx::PG::PG_LABEL,
|
1049
|
+
Wx::PG::ColourPropertyValue.new(pg.get_grid.get_margin_colour)))
|
1050
|
+
|
1051
|
+
pg.append(Wx::PG::SystemColourProperty.new("Cell Colour",Wx::PG::PG_LABEL,
|
1052
|
+
pg.grid.get_cell_background_colour))
|
1053
|
+
pg.append(Wx::PG::SystemColourProperty.new("Cell Text Colour",Wx::PG::PG_LABEL,
|
1054
|
+
pg.grid.get_cell_text_colour))
|
1055
|
+
pg.append(Wx::PG::SystemColourProperty.new("Line Colour",Wx::PG::PG_LABEL,
|
1056
|
+
pg.grid.get_line_colour))
|
1057
|
+
pg.append(Wx::PG::FlagsProperty.new("Window Styles",Wx::PG::PG_LABEL,
|
1058
|
+
@combinedFlags, get_window_style))
|
1059
|
+
|
1060
|
+
pg.append(Wx::PG::CursorProperty.new("Cursor",Wx::PG::PG_LABEL))
|
1061
|
+
|
1062
|
+
pg.append(Wx::PG::PropertyCategory.new("Position","PositionCategory"))
|
1063
|
+
pg.set_property_help_string("PositionCategory", "Change in items in this category will cause respective changes in frame.")
|
1064
|
+
|
1065
|
+
# Let's demonstrate 'Units' attribute here
|
1066
|
+
|
1067
|
+
# Note that we use many attribute constants instead of strings here
|
1068
|
+
# (for instance, Wx::PG::PG_ATTR_MIN, instead of "min").
|
1069
|
+
# Using constant may reduce binary size.
|
1070
|
+
|
1071
|
+
pg.append(Wx::PG::IntProperty.new("Height",Wx::PG::PG_LABEL,480))
|
1072
|
+
pg.set_property_attribute("Height", Wx::PG::PG_ATTR_MIN, 10)
|
1073
|
+
pg.set_property_attribute("Height", Wx::PG::PG_ATTR_MAX, 2048)
|
1074
|
+
pg.set_property_attribute("Height", Wx::PG::PG_ATTR_UNITS, "Pixels")
|
1075
|
+
|
1076
|
+
# Set value to unspecified so that Hint attribute will be demonstrated
|
1077
|
+
pg.set_property_value_unspecified("Height")
|
1078
|
+
pg.set_property_attribute("Height", Wx::PG::PG_ATTR_HINT,
|
1079
|
+
"Enter new height for window")
|
1080
|
+
|
1081
|
+
# Difference between hint and help string is that the hint is shown in
|
1082
|
+
# an empty value cell, while help string is shown either in the
|
1083
|
+
# description text box, as a tool tip, or on the status bar.
|
1084
|
+
pg.set_property_help_string("Height",
|
1085
|
+
"This property uses attributes \"Units\" and \"Hint\".")
|
1086
|
+
|
1087
|
+
pg.append(Wx::PG::IntProperty.new("Width",Wx::PG::PG_LABEL,640))
|
1088
|
+
pg.set_property_attribute("Width", Wx::PG::PG_ATTR_MIN, 10)
|
1089
|
+
pg.set_property_attribute("Width", Wx::PG::PG_ATTR_MAX, 2048)
|
1090
|
+
pg.set_property_attribute("Width", Wx::PG::PG_ATTR_UNITS, "Pixels")
|
1091
|
+
|
1092
|
+
pg.set_property_value_unspecified("Width")
|
1093
|
+
pg.set_property_attribute("Width", Wx::PG::PG_ATTR_HINT,
|
1094
|
+
"Enter new width for window")
|
1095
|
+
pg.set_property_help_string("Width",
|
1096
|
+
"This property uses attributes \"Units\" and \"Hint\".")
|
1097
|
+
|
1098
|
+
pg.append(Wx::PG::IntProperty.new("X",Wx::PG::PG_LABEL,10))
|
1099
|
+
pg.set_property_attribute("X", Wx::PG::PG_ATTR_UNITS, "Pixels")
|
1100
|
+
pg.set_property_help_string("X", "This property uses \"Units\" attribute.")
|
1101
|
+
|
1102
|
+
pg.append Wx::PG::IntProperty.new("Y",Wx::PG::PG_LABEL,10)
|
1103
|
+
pg.set_property_attribute("Y", Wx::PG::PG_ATTR_UNITS, "Pixels")
|
1104
|
+
pg.set_property_help_string("Y", "This property uses \"Units\" attribute.")
|
1105
|
+
|
1106
|
+
disabledHelpString = "This property is simply disabled. In order to have label disabled as well, "+
|
1107
|
+
"you need to set Wx::PG::PG_EX_GREY_LABEL_WHEN_DISABLED using SetExtraStyle."
|
1108
|
+
|
1109
|
+
pg.append(Wx::PG::PropertyCategory.new("Environment",Wx::PG::PG_LABEL))
|
1110
|
+
pg.append(Wx::PG::StringProperty.new("Operating System",Wx::PG::PG_LABEL, Wx.get_os_description))
|
1111
|
+
|
1112
|
+
pg.append(Wx::PG::StringProperty.new("User Id",Wx::PG::PG_LABEL, Wx.get_user_id))
|
1113
|
+
pg.append(Wx::PG::DirProperty.new("User Home",Wx::PG::PG_LABEL, Wx.get_user_home))
|
1114
|
+
pg.append(Wx::PG::StringProperty.new("User Name",Wx::PG::PG_LABEL, Wx.get_user_name))
|
1115
|
+
|
1116
|
+
# Disable some of them
|
1117
|
+
pg.disable_property("Operating System")
|
1118
|
+
pg.disable_property("User Id")
|
1119
|
+
pg.disable_property("User Name")
|
1120
|
+
|
1121
|
+
pg.set_property_help_string("Operating System", disabledHelpString)
|
1122
|
+
pg.set_property_help_string("User Id", disabledHelpString)
|
1123
|
+
pg.set_property_help_string("User Name", disabledHelpString)
|
1124
|
+
|
1125
|
+
pg.append(Wx::PG::PropertyCategory.new("More Examples",Wx::PG::PG_LABEL))
|
1126
|
+
|
1127
|
+
pg.append(WxFontDataProperty.new("FontDataProperty", Wx::PG::PG_LABEL))
|
1128
|
+
pg.set_property_help_string("FontDataProperty",
|
1129
|
+
"This demonstrates Wx::PG::FontDataProperty class defined in this sample app. "+
|
1130
|
+
"It is exactly like Wx::PG::FontProperty from the library, but also has colour sub-property.")
|
1131
|
+
|
1132
|
+
pg.append(WxDirsProperty.new("DirsProperty",Wx::PG::PG_LABEL))
|
1133
|
+
pg.set_property_help_string("DirsProperty",
|
1134
|
+
"This demonstrates Wx::PG::DirsProperty class defined in this sample app. "+
|
1135
|
+
"It is built with WX_PG_IMPLEMENT_ARRAYSTRING_PROPERTY_WITH_VALIDATOR macro, "+
|
1136
|
+
"with custom action (dir dialog popup) defined.")
|
1137
|
+
|
1138
|
+
arrdbl = [
|
1139
|
+
-1.0,
|
1140
|
+
-0.5,
|
1141
|
+
0.0,
|
1142
|
+
0.5,
|
1143
|
+
1.0
|
1144
|
+
]
|
1145
|
+
|
1146
|
+
pg.append(WxArrayDoubleProperty.new("ArrayDoubleProperty",Wx::PG::PG_LABEL,arrdbl))
|
1147
|
+
pg.set_property_attribute("ArrayDoubleProperty",Wx::PG::PG_FLOAT_PRECISION,2)
|
1148
|
+
pg.set_property_help_string("ArrayDoubleProperty",
|
1149
|
+
"This demonstrates Wx::PG::ArrayDoubleProperty class defined in this sample app. "+
|
1150
|
+
"It is an example of a custom list editor property.")
|
1151
|
+
|
1152
|
+
pg.append(Wx::PG::LongStringProperty.new("Information",Wx::PG::PG_LABEL,
|
1153
|
+
"Editing properties will have immediate effect on this window, "+
|
1154
|
+
"and vice versa (at least in most cases, that is)."))
|
1155
|
+
pg.set_property_help_string("Information",
|
1156
|
+
"This property is read-only.")
|
1157
|
+
|
1158
|
+
pg.set_property_read_only("Information", true)
|
1159
|
+
|
1160
|
+
#
|
1161
|
+
# Set test information for cells in columns 3 and 4
|
1162
|
+
# (reserve column 2 for displaying units)
|
1163
|
+
bmp = Wx::ArtProvider.get_bitmap(Wx::ART_FOLDER)
|
1164
|
+
|
1165
|
+
pg.grid.each_property do |p|
|
1166
|
+
continue if p.category?
|
1167
|
+
|
1168
|
+
pg.set_property_cell(p, 3, "Cell 3", bmp)
|
1169
|
+
pg.set_property_cell(p, 4, "Cell 4", Wx::BitmapBundle.new, Wx::WHITE, Wx::BLACK)
|
1170
|
+
end
|
1171
|
+
end
|
1172
|
+
|
1173
|
+
def populate_with_examples
|
1174
|
+
pgman = @propGridManager
|
1175
|
+
pg = pgman.get_page("Examples")
|
1176
|
+
|
1177
|
+
if Wx.has_feature?(:USE_SPINBTN)
|
1178
|
+
pg.append(Wx::PG::IntProperty.new("SpinCtrl", Wx::PG::PG_LABEL, 0))
|
1179
|
+
|
1180
|
+
pg.set_property_editor("SpinCtrl", Wx::PG::PG_EDITOR_SPIN_CTRL)
|
1181
|
+
pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_MIN, -2) # Use constants instead of string
|
1182
|
+
pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_MAX, 16384) # for reduced binary size.
|
1183
|
+
pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_SPINCTRL_STEP, 2)
|
1184
|
+
pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_SPINCTRL_MOTION, true)
|
1185
|
+
pg.set_property_attribute("SpinCtrl", Wx::PG::PG_ATTR_SPINCTRL_WRAP, true)
|
1186
|
+
|
1187
|
+
pg.set_property_help_string("SpinCtrl",
|
1188
|
+
"This is regular Wx::PG::IntProperty, which editor has been "+
|
1189
|
+
"changed to Wx::PG::PGEditor_SpinCtrl. Note however that "+
|
1190
|
+
"static wxPropertyGrid::RegisterAdditionalEditors() "+
|
1191
|
+
"needs to be called prior to using it.")
|
1192
|
+
end
|
1193
|
+
|
1194
|
+
# Add bool property
|
1195
|
+
pg.append(Wx::PG::BoolProperty.new("BoolProperty", Wx::PG::PG_LABEL, false))
|
1196
|
+
|
1197
|
+
# Add bool property with check box
|
1198
|
+
pg.append(Wx::PG::BoolProperty.new("BoolProperty with CheckBox", Wx::PG::PG_LABEL, false))
|
1199
|
+
pg.set_property_attribute("BoolProperty with CheckBox",
|
1200
|
+
Wx::PG::PG_BOOL_USE_CHECKBOX,
|
1201
|
+
true)
|
1202
|
+
|
1203
|
+
pg.set_property_help_string("BoolProperty with CheckBox",
|
1204
|
+
"Property attribute Wx::PG::PG_BOOL_USE_CHECKBOX has been set to true.")
|
1205
|
+
|
1206
|
+
prop = pg.append(Wx::PG::FloatProperty.new("FloatProperty",
|
1207
|
+
Wx::PG::PG_LABEL,
|
1208
|
+
1234500.23))
|
1209
|
+
prop.set_attribute(Wx::PG::PG_ATTR_MIN, -100.12)
|
1210
|
+
|
1211
|
+
# A string property that can be edited in a separate editor dialog.
|
1212
|
+
pg.append(Wx::PG::LongStringProperty.new("LongStringProperty", "LongStringProp",
|
1213
|
+
"This is much longer string than the first one. Edit it by clicking the button."))
|
1214
|
+
|
1215
|
+
# A property that edits a wxArrayString.
|
1216
|
+
example_array = [
|
1217
|
+
"String 1",
|
1218
|
+
"String 2",
|
1219
|
+
"String 3"
|
1220
|
+
]
|
1221
|
+
pg.append(Wx::PG::ArrayStringProperty.new("ArrayStringProperty", Wx::PG::PG_LABEL,
|
1222
|
+
example_array))
|
1223
|
+
|
1224
|
+
# A file selector property. Note that argument between name
|
1225
|
+
# and initial value is wildcard (format same as in wxFileDialog).
|
1226
|
+
prop = Wx::PG::FileProperty.new("FileProperty", "TextFile")
|
1227
|
+
pg.append(prop)
|
1228
|
+
|
1229
|
+
prop.set_attribute(Wx::PG::PG_FILE_WILDCARD,"Text Files (*.txt)|*.txt")
|
1230
|
+
prop.set_attribute(Wx::PG::PG_DIALOG_TITLE,"Custom File Dialog Title")
|
1231
|
+
prop.set_attribute(Wx::PG::PG_FILE_SHOW_FULL_PATH,false)
|
1232
|
+
|
1233
|
+
if Wx::PLATFORM == 'WXMSW'
|
1234
|
+
prop.set_attribute(Wx::PG::PG_FILE_SHOW_RELATIVE_PATH,"C:\\Windows")
|
1235
|
+
pg.set_property_value(prop,"C:\\Windows\\System32\\msvcrt71.dll")
|
1236
|
+
end
|
1237
|
+
|
1238
|
+
if Wx.has_feature? :USE_IMAGE
|
1239
|
+
# An image file property. Arguments are just like for FileProperty, but
|
1240
|
+
# wildcard is missing (it is autogenerated from supported image formats).
|
1241
|
+
# If you really need to override it, create property separately, and call
|
1242
|
+
# its SetWildcard method.
|
1243
|
+
pg.append(Wx::PG::ImageFileProperty.new("ImageFile", Wx::PG::PG_LABEL))
|
1244
|
+
end
|
1245
|
+
|
1246
|
+
pid = pg.append(Wx::PG::ColourProperty.new("ColourProperty",Wx::PG::PG_LABEL,Wx::RED))
|
1247
|
+
pg.set_property_editor("ColourProperty", Wx::PG::PG_EDITOR_COMBO_BOX)
|
1248
|
+
pg.get_property("ColourProperty").set_auto_unspecified(true)
|
1249
|
+
pg.set_property_help_string("ColourProperty",
|
1250
|
+
"wxPropertyGrid::SetPropertyEditor method has been used to change "+
|
1251
|
+
"editor of this property to Wx::PG::PGEditor_ComboBox)")
|
1252
|
+
|
1253
|
+
pid = pg.append(Wx::PG::ColourProperty.new("ColourPropertyWithAlpha",
|
1254
|
+
Wx::PG::PG_LABEL,
|
1255
|
+
Wx::Colour.new(15, 200, 95, 128)))
|
1256
|
+
pg.set_property_attribute("ColourPropertyWithAlpha", Wx::PG::PG_COLOUR_HAS_ALPHA, true)
|
1257
|
+
pg.set_property_help_string("ColourPropertyWithAlpha",
|
1258
|
+
"Attribute \"HasAlpha\" is set to true for this property.")
|
1259
|
+
|
1260
|
+
#
|
1261
|
+
# This demonstrates using alternative editor for colour property
|
1262
|
+
# to trigger colour dialog directly from button.
|
1263
|
+
pg.append(Wx::PG::ColourProperty.new("ColourProperty2",Wx::PG::PG_LABEL,Wx::GREEN))
|
1264
|
+
|
1265
|
+
#
|
1266
|
+
# Wx::PG::EnumProperty does not store strings or even list of strings
|
1267
|
+
# (so that's why they are static in function).
|
1268
|
+
enum_prop_labels = [
|
1269
|
+
"One Item",
|
1270
|
+
"Another Item",
|
1271
|
+
"One More",
|
1272
|
+
"This Is Last" ]
|
1273
|
+
|
1274
|
+
# this value array would be optional if values matched string indexes
|
1275
|
+
enum_prop_values = [ 40, 80, 120, 160 ]
|
1276
|
+
|
1277
|
+
# note that the initial value (the last argument) is the actual value,
|
1278
|
+
# not index or anything like that. Thus, our value selects "Another Item".
|
1279
|
+
pg.append(Wx::PG::EnumProperty.new("EnumProperty",Wx::PG::PG_LABEL,
|
1280
|
+
enum_prop_labels, enum_prop_values, 80))
|
1281
|
+
|
1282
|
+
soc = Wx::PG::PGChoices.new
|
1283
|
+
|
1284
|
+
# use basic table from our previous example
|
1285
|
+
# can also set/add wxArrayStrings and wxArrayInts directly.
|
1286
|
+
soc.set(enum_prop_labels, enum_prop_values)
|
1287
|
+
|
1288
|
+
# add extra items
|
1289
|
+
soc.add("Look, it continues", 200)
|
1290
|
+
soc.add("Even More", 240)
|
1291
|
+
soc.add("And More", 280)
|
1292
|
+
soc.add('', 300)
|
1293
|
+
soc.add("True End of the List", 320)
|
1294
|
+
|
1295
|
+
# Test custom colours ([] operator of Wx::PG::PGChoices returns
|
1296
|
+
# references to Wx::PG::PGChoiceEntry).
|
1297
|
+
soc[1].set_fg_col(Wx::RED)
|
1298
|
+
soc[1].set_bg_col(Wx::LIGHT_GREY)
|
1299
|
+
soc[2].set_fg_col(Wx::GREEN)
|
1300
|
+
soc[2].set_bg_col(Wx::LIGHT_GREY)
|
1301
|
+
soc[3].set_fg_col(Wx::BLUE)
|
1302
|
+
soc[3].set_bg_col(Wx::LIGHT_GREY)
|
1303
|
+
soc[4].set_bitmap(Wx::ArtProvider.get_bitmap(Wx::ART_FOLDER))
|
1304
|
+
|
1305
|
+
pg.append(Wx::PG::EnumProperty.new("EnumProperty 2",
|
1306
|
+
Wx::PG::PG_LABEL,
|
1307
|
+
soc,
|
1308
|
+
240))
|
1309
|
+
pg.get_property("EnumProperty 2").add_choice("Testing Extra", 360)
|
1310
|
+
|
1311
|
+
# Here we only display the original 'soc' choices
|
1312
|
+
pg.append(Wx::PG::EnumProperty.new("EnumProperty 3",Wx::PG::PG_LABEL,
|
1313
|
+
soc, 240))
|
1314
|
+
|
1315
|
+
# Test Hint attribute in EnumProperty
|
1316
|
+
pg.get_property("EnumProperty 3").set_attribute(Wx::PG::PG_ATTR_HINT, "Dummy Hint")
|
1317
|
+
|
1318
|
+
pg.set_property_help_string("EnumProperty 3",
|
1319
|
+
"This property uses \"Hint\" attribute.")
|
1320
|
+
|
1321
|
+
# 'soc' plus one exclusive extra choice "4th only"
|
1322
|
+
pg.append(Wx::PG::EnumProperty.new("EnumProperty 4",Wx::PG::PG_LABEL,
|
1323
|
+
soc, 240))
|
1324
|
+
pg.get_property("EnumProperty 4").add_choice("4th only", 360)
|
1325
|
+
|
1326
|
+
pg.set_property_help_string("EnumProperty 4",
|
1327
|
+
"Should have one extra item when compared to EnumProperty 3")
|
1328
|
+
|
1329
|
+
# Plus property value bitmap
|
1330
|
+
pg.append(Wx::PG::EnumProperty.new("EnumProperty With Bitmap", "EnumProperty 5",
|
1331
|
+
soc, 280))
|
1332
|
+
pg.set_property_help_string("EnumProperty 5",
|
1333
|
+
"Should have bitmap in front of the displayed value")
|
1334
|
+
bmpVal = Wx::ArtProvider.get_bitmap(Wx::ART_REMOVABLE)
|
1335
|
+
pg.set_property_image("EnumProperty 5", bmpVal)
|
1336
|
+
|
1337
|
+
# Password property example.
|
1338
|
+
pg.append(Wx::PG::StringProperty.new("Password",Wx::PG::PG_LABEL, "password"))
|
1339
|
+
pg.set_property_attribute("Password", Wx::PG::PG_STRING_PASSWORD, true)
|
1340
|
+
pg.set_property_help_string("Password",
|
1341
|
+
"Has attribute Wx::PG::PG_STRING_PASSWORD set to true")
|
1342
|
+
|
1343
|
+
# String editor with dir selector button. Uses wxEmptyString as name, which
|
1344
|
+
# is allowed (naturally, in this case property cannot be accessed by name).
|
1345
|
+
pg.append(Wx::PG::DirProperty.new("DirProperty", Wx::PG::PG_LABEL, Wx.get_user_home))
|
1346
|
+
pg.set_property_attribute("DirProperty",
|
1347
|
+
Wx::PG::PG_DIALOG_TITLE,
|
1348
|
+
"This is a custom dir dialog title")
|
1349
|
+
|
1350
|
+
# Add string property - first arg is label, second name, and third initial value
|
1351
|
+
pg.append(Wx::PG::StringProperty.new("StringProperty", Wx::PG::PG_LABEL))
|
1352
|
+
pg.set_property_max_length("StringProperty", 6)
|
1353
|
+
pg.set_property_help_string("StringProperty",
|
1354
|
+
"Max length of this text has been limited to 6, using wxPropertyGrid::SetPropertyMaxLength.")
|
1355
|
+
|
1356
|
+
# Set value after limiting so that it will be applied
|
1357
|
+
pg.set_property_value("StringProperty", "some text")
|
1358
|
+
|
1359
|
+
#
|
1360
|
+
# Demonstrate "AutoComplete" attribute
|
1361
|
+
pg.append(Wx::PG::StringProperty.new("StringProperty AutoComplete",
|
1362
|
+
Wx::PG::PG_LABEL))
|
1363
|
+
|
1364
|
+
autoCompleteStrings = [
|
1365
|
+
"One choice",
|
1366
|
+
"Another choice",
|
1367
|
+
"Another choice, yeah",
|
1368
|
+
"Yet another choice",
|
1369
|
+
"Yet another choice, bear with me"
|
1370
|
+
]
|
1371
|
+
pg.set_property_attribute("StringProperty AutoComplete",
|
1372
|
+
Wx::PG::PG_ATTR_AUTOCOMPLETE,
|
1373
|
+
autoCompleteStrings)
|
1374
|
+
|
1375
|
+
pg.set_property_help_string("StringProperty AutoComplete",
|
1376
|
+
"AutoComplete attribute has been set for this property "+
|
1377
|
+
"(try writing something beginning with 'a', 'o' or 'y').")
|
1378
|
+
|
1379
|
+
|
1380
|
+
# Add string property with arbitrarily wide bitmap in front of it. We
|
1381
|
+
# intentionally lower-than-typical row height here so that the ugly
|
1382
|
+
# scaling code won't be run.
|
1383
|
+
pg.append(Wx::PG::StringProperty.new("StringPropertyWithBitmap",
|
1384
|
+
Wx::PG::PG_LABEL,
|
1385
|
+
"Test Text"))
|
1386
|
+
myTestBitmap1x = Wx::Bitmap.new(60, 15, 32)
|
1387
|
+
mdc = Wx::MemoryDC.new(myTestBitmap1x)
|
1388
|
+
mdc.set_background(Wx::WHITE_BRUSH)
|
1389
|
+
mdc.clear
|
1390
|
+
mdc.set_pen(Wx::BLACK_PEN)
|
1391
|
+
mdc.set_brush(Wx::WHITE_BRUSH)
|
1392
|
+
mdc.draw_rectangle(0, 0, 60, 15)
|
1393
|
+
mdc.draw_line(0, 0, 59, 14)
|
1394
|
+
mdc.set_text_foreground(Wx::BLACK)
|
1395
|
+
mdc.draw_text("x1", 0, 0)
|
1396
|
+
|
1397
|
+
myTestBitmap2x = Wx::Bitmap.new(120, 30, 32)
|
1398
|
+
mdc = Wx::MemoryDC.new(myTestBitmap2x)
|
1399
|
+
mdc.set_background(Wx::WHITE_BRUSH)
|
1400
|
+
mdc.clear
|
1401
|
+
mdc.set_pen(Wx::Pen.new(Wx::BLUE, 2))
|
1402
|
+
mdc.set_brush(Wx::WHITE_BRUSH)
|
1403
|
+
mdc.draw_rectangle(0, 0, 120, 30)
|
1404
|
+
mdc.draw_line(0, 0, 119, 31)
|
1405
|
+
mdc.set_text_foreground(Wx::BLUE)
|
1406
|
+
f = mdc.font
|
1407
|
+
f.set_pixel_size(f.get_pixel_size * 2)
|
1408
|
+
mdc.set_font(f)
|
1409
|
+
mdc.draw_text("x2", 0, 0)
|
1410
|
+
|
1411
|
+
myTestBitmap2x.set_scale_factor(2)
|
1412
|
+
pg.set_property_image("StringPropertyWithBitmap", Wx::BitmapBundle.from_bitmaps(myTestBitmap1x, myTestBitmap2x))
|
1413
|
+
|
1414
|
+
# Multi choice dialog.
|
1415
|
+
tchoices = %w[Cabbage Carrot Onion Potato Strawberry]
|
1416
|
+
|
1417
|
+
tchoicesValues = %w[Carrot Potato]
|
1418
|
+
|
1419
|
+
pg.append(Wx::PG::EnumProperty.new("EnumProperty X",Wx::PG::PG_LABEL, tchoices))
|
1420
|
+
|
1421
|
+
pg.append(Wx::PG::MultiChoiceProperty.new("MultiChoiceProperty", Wx::PG::PG_LABEL,
|
1422
|
+
tchoices, tchoicesValues))
|
1423
|
+
pg.set_property_attribute("MultiChoiceProperty", Wx::PG::PG_ATTR_MULTICHOICE_USERSTRINGMODE, 1)
|
1424
|
+
|
1425
|
+
pg.append(WxSizeProperty.new("SizeProperty", "Size", get_size))
|
1426
|
+
pg.append(WxPointProperty.new("PointProperty", "Position", get_position))
|
1427
|
+
|
1428
|
+
# UInt samples
|
1429
|
+
pg.append(Wx::PG::UIntProperty.new("UIntProperty", Wx::PG::PG_LABEL, 0xFEEEFEEEFEEE))
|
1430
|
+
pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_PREFIX, Wx::PG::PG_PREFIX_NONE)
|
1431
|
+
pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_BASE, Wx::PG::PG_BASE_HEX)
|
1432
|
+
#pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_PREFIX, Wx::PG::PG_PREFIX_NONE)
|
1433
|
+
#pg.set_property_attribute("UIntProperty", Wx::PG::PG_UINT_BASE, Wx::PG::PG_BASE_OCT)
|
1434
|
+
|
1435
|
+
#
|
1436
|
+
# Wx::PG::EditEnumProperty
|
1437
|
+
eech = Wx::PG::PGChoices.new([
|
1438
|
+
"Choice 1",
|
1439
|
+
"Choice 2",
|
1440
|
+
"Choice 3"
|
1441
|
+
])
|
1442
|
+
pg.append(Wx::PG::EditEnumProperty.new("EditEnumProperty",
|
1443
|
+
Wx::PG::PG_LABEL,
|
1444
|
+
eech,
|
1445
|
+
"Choice not in the list"))
|
1446
|
+
|
1447
|
+
# Test Hint attribute in EditEnumProperty
|
1448
|
+
pg.get_property("EditEnumProperty").set_attribute(Wx::PG::PG_ATTR_HINT, "Dummy Hint")
|
1449
|
+
|
1450
|
+
#wxString v_;
|
1451
|
+
#wxTextValidator validator1(wxFILTER_NUMERIC,&v_)
|
1452
|
+
#pg.SetPropertyValidator("EditEnumProperty", validator1)
|
1453
|
+
|
1454
|
+
if Wx.has_feature? :USE_DATETIME
|
1455
|
+
#
|
1456
|
+
# Wx::PG::DateTimeProperty
|
1457
|
+
pg.append(Wx::PG::DateProperty.new("DateProperty", Wx::PG::PG_LABEL, Time.now))
|
1458
|
+
|
1459
|
+
if Wx.has_feature? :USE_DATEPICKCTRL
|
1460
|
+
pg.set_property_attribute("DateProperty", Wx::PG::PG_DATE_PICKER_STYLE,
|
1461
|
+
Wx::DP_DROPDOWN|Wx::DP_SHOWCENTURY|Wx::DP_ALLOWNONE)
|
1462
|
+
|
1463
|
+
pg.set_property_help_string("DateProperty",
|
1464
|
+
"Attribute Wx::PG::PG_DATE_PICKER_STYLE has been set to (long)"+
|
1465
|
+
"(wxDP_DROPDOWN | wxDP_SHOWCENTURY | wxDP_ALLOWNONE).")
|
1466
|
+
end
|
1467
|
+
|
1468
|
+
end
|
1469
|
+
|
1470
|
+
#
|
1471
|
+
# Add Triangle properties as both Wx::PG::TriangleProperty and
|
1472
|
+
# a generic parent property (using Wx::PG::StringProperty).
|
1473
|
+
#
|
1474
|
+
topId = pg.append(Wx::PG::StringProperty.new("3D Object", Wx::PG::PG_LABEL, "<composed>"))
|
1475
|
+
|
1476
|
+
pid = pg.append_in(topId, Wx::PG::StringProperty.new("Triangle 1", "Triangle 1", "<composed>"))
|
1477
|
+
pg.append_in(pid, WxVectorProperty.new("A", Wx::PG::PG_LABEL))
|
1478
|
+
pg.append_in(pid, WxVectorProperty.new("B", Wx::PG::PG_LABEL))
|
1479
|
+
pg.append_in(pid, WxVectorProperty.new("C", Wx::PG::PG_LABEL))
|
1480
|
+
|
1481
|
+
pg.append_in(topId, WxTriangleProperty.new("Triangle 2", "Triangle 2"))
|
1482
|
+
|
1483
|
+
pg.set_property_help_string("3D Object",
|
1484
|
+
"3D Object is Wx::PG::StringProperty with value \"<composed>\". Two of its children are similar wxStringProperties with "+
|
1485
|
+
"three Wx::PG::VectorProperty children, and other two are custom wxTriangleProperties.")
|
1486
|
+
|
1487
|
+
pid = pg.append_in(topId, Wx::PG::StringProperty.new("Triangle 3", "Triangle 3", "<composed>"))
|
1488
|
+
pg.append_in(pid, WxVectorProperty.new("A", Wx::PG::PG_LABEL))
|
1489
|
+
pg.append_in(pid, WxVectorProperty.new("B", Wx::PG::PG_LABEL))
|
1490
|
+
pg.append_in(pid, WxVectorProperty.new("C", Wx::PG::PG_LABEL))
|
1491
|
+
|
1492
|
+
pg.append_in(topId, WxTriangleProperty.new("Triangle 4", "Triangle 4"))
|
1493
|
+
|
1494
|
+
#
|
1495
|
+
# This snippet is a doc sample test
|
1496
|
+
#
|
1497
|
+
carProp = pg.append(Wx::PG::StringProperty.new("Car",
|
1498
|
+
Wx::PG::PG_LABEL,
|
1499
|
+
"<composed>"))
|
1500
|
+
|
1501
|
+
pg.append_in(carProp, Wx::PG::StringProperty.new("Model",
|
1502
|
+
Wx::PG::PG_LABEL,
|
1503
|
+
"Lamborghini Diablo SV"))
|
1504
|
+
|
1505
|
+
pg.append_in(carProp, Wx::PG::IntProperty.new("Engine Size (cc)",
|
1506
|
+
Wx::PG::PG_LABEL,
|
1507
|
+
5707))
|
1508
|
+
|
1509
|
+
speedsProp = pg.append_in(carProp,
|
1510
|
+
Wx::PG::StringProperty.new("Speeds",
|
1511
|
+
Wx::PG::PG_LABEL,
|
1512
|
+
"<composed>"))
|
1513
|
+
|
1514
|
+
pg.append_in(speedsProp, Wx::PG::IntProperty.new("Max. Speed (mph)",
|
1515
|
+
Wx::PG::PG_LABEL,290))
|
1516
|
+
pg.append_in(speedsProp, Wx::PG::FloatProperty.new("0-100 mph (sec)",
|
1517
|
+
Wx::PG::PG_LABEL,3.9))
|
1518
|
+
pg.append_in(speedsProp, Wx::PG::FloatProperty.new("1/4 mile (sec)",
|
1519
|
+
Wx::PG::PG_LABEL,8.6))
|
1520
|
+
|
1521
|
+
# This is how child property can be referred to by name
|
1522
|
+
pg.set_property_value("Car.Speeds.Max. Speed (mph)", 300)
|
1523
|
+
|
1524
|
+
pg.append_in(carProp, Wx::PG::IntProperty.new("Price ($)",
|
1525
|
+
Wx::PG::PG_LABEL,
|
1526
|
+
300000))
|
1527
|
+
|
1528
|
+
pg.append_in(carProp, Wx::PG::BoolProperty.new("Convertible",
|
1529
|
+
Wx::PG::PG_LABEL,
|
1530
|
+
false))
|
1531
|
+
|
1532
|
+
# Displayed value of "Car" property is now very close to this:
|
1533
|
+
# "Lamborghini Diablo SV; 5707 [300; 3.9; 8.6] 300000"
|
1534
|
+
|
1535
|
+
#
|
1536
|
+
# Test wxSampleMultiButtonEditor
|
1537
|
+
pg.append(Wx::PG::LongStringProperty.new("MultipleButtons", Wx::PG::PG_LABEL))
|
1538
|
+
pg.set_property_editor("MultipleButtons", @sampleMultiButtonEditor)
|
1539
|
+
|
1540
|
+
# Test SingleChoiceProperty
|
1541
|
+
pg.append(WxSingleChoiceProperty.new("SingleChoiceProperty"))
|
1542
|
+
|
1543
|
+
#
|
1544
|
+
# Test adding variable height bitmaps in Wx::PG::PGChoices
|
1545
|
+
bc = Wx::PG::PGChoices.new
|
1546
|
+
bc.add("Wee",
|
1547
|
+
Wx::ArtProvider.get_bitmap(Wx::ART_CDROM, Wx::ART_OTHER, [16, 16]))
|
1548
|
+
bc.add("Not so wee",
|
1549
|
+
Wx::ArtProvider.get_bitmap(Wx::ART_FLOPPY, Wx::ART_OTHER, [32, 32]))
|
1550
|
+
bc.add("Friggin' huge",
|
1551
|
+
Wx::ArtProvider.get_bitmap(Wx::ART_HARDDISK, Wx::ART_OTHER, [64, 64]))
|
1552
|
+
|
1553
|
+
pg.append(Wx::PG::EnumProperty.new("Variable Height Bitmaps",
|
1554
|
+
Wx::PG::PG_LABEL,
|
1555
|
+
bc,
|
1556
|
+
0))
|
1557
|
+
|
1558
|
+
#
|
1559
|
+
# Test how non-editable composite strings appear
|
1560
|
+
pid = Wx::PG::StringProperty.new("wxRuby Traits", Wx::PG::PG_LABEL, "<composed>")
|
1561
|
+
pg.set_property_read_only(pid)
|
1562
|
+
|
1563
|
+
#
|
1564
|
+
# For testing purposes, combine two methods of adding children
|
1565
|
+
#
|
1566
|
+
|
1567
|
+
pid.append_child(Wx::PG::StringProperty.new("Latest Release",
|
1568
|
+
Wx::PG::PG_LABEL,
|
1569
|
+
"3.0.0"))
|
1570
|
+
pid.append_child(Wx::PG::BoolProperty.new("Win API",
|
1571
|
+
Wx::PG::PG_LABEL,
|
1572
|
+
true))
|
1573
|
+
|
1574
|
+
pg.append(pid)
|
1575
|
+
|
1576
|
+
pg.append_in(pid, Wx::PG::BoolProperty.new("QT", Wx::PG::PG_LABEL, true))
|
1577
|
+
pg.append_in(pid, Wx::PG::BoolProperty.new("Cocoa", Wx::PG::PG_LABEL, true))
|
1578
|
+
pg.append_in(pid, Wx::PG::BoolProperty.new("Haiku", Wx::PG::PG_LABEL, false))
|
1579
|
+
pg.append_in(pid, Wx::PG::StringProperty.new("Trunk Version", Wx::PG::PG_LABEL, Wx::WXRUBY_VERSION))
|
1580
|
+
pg.append_in(pid, Wx::PG::BoolProperty.new("GTK+", Wx::PG::PG_LABEL, true))
|
1581
|
+
pg.append_in(pid, Wx::PG::BoolProperty.new("Android", Wx::PG::PG_LABEL, false))
|
1582
|
+
|
1583
|
+
add_test_properties(pg)
|
1584
|
+
end
|
1585
|
+
|
1586
|
+
def populate_with_library_config
|
1587
|
+
pgman = @propGridManager;
|
1588
|
+
pg = pgman.get_page("wxWidgets Library Config")
|
1589
|
+
|
1590
|
+
# Set custom column proportions (here in the sample app we need
|
1591
|
+
# to check if the grid has wxPG_SPLITTER_AUTO_CENTER style. You usually
|
1592
|
+
# need not to do it in your application).
|
1593
|
+
if pgman.has_flag(Wx::PG::PG_SPLITTER_AUTO_CENTER)
|
1594
|
+
pg.set_column_proportion(0, 3)
|
1595
|
+
pg.set_column_proportion(1, 1)
|
1596
|
+
end
|
1597
|
+
|
1598
|
+
bmp = Wx::ArtProvider.get_bitmap(Wx::ART_REPORT_VIEW)
|
1599
|
+
|
1600
|
+
italicFont = pgman.grid.get_caption_font
|
1601
|
+
italicFont.set_style(Wx::FONTSTYLE_ITALIC)
|
1602
|
+
|
1603
|
+
italicFontHelp = "Font of this property's wxPGCell has " +
|
1604
|
+
"been modified. Obtain property's cell " +
|
1605
|
+
"with wxPGProperty::" +
|
1606
|
+
"GetOrCreateCell(column)."
|
1607
|
+
|
1608
|
+
pid = pg.append(Wx::PG::PropertyCategory.new("wxWidgets Library Configuration" ))
|
1609
|
+
pg.set_property_cell(pid, 0, Wx::PG::PG_LABEL, bmp)
|
1610
|
+
|
1611
|
+
# Both of following lines would set a label for the second column
|
1612
|
+
pg.set_property_cell(pid, 1, "Is Enabled")
|
1613
|
+
pid.set_value("Is Enabled")
|
1614
|
+
|
1615
|
+
_ADD_WX_LIB_CONF_GROUP = ->(label) {
|
1616
|
+
cat = pg.append_in(pid, Wx::PG::PropertyCategory.new(label))
|
1617
|
+
pg.set_property_cell(cat, 0, Wx::PG::PG_LABEL, bmp)
|
1618
|
+
cat.get_cell(0).set_font(italicFont)
|
1619
|
+
cat.set_help_string(italicFontHelp)
|
1620
|
+
}
|
1621
|
+
|
1622
|
+
_ADD_WX_LIB_CONF = ->(sym) {
|
1623
|
+
pg.append(Wx::PG::BoolProperty.new(sym.to_s, Wx::PG::PG_LABEL, Wx.has_feature?(sym)))
|
1624
|
+
}
|
1625
|
+
|
1626
|
+
_ADD_WX_LIB_CONF_NODEF = ->(sym) {
|
1627
|
+
pg.append(Wx::PG::BoolProperty.new(sym.to_s, Wx::PG::PG_LABEL, Wx.has_feature?(sym)))
|
1628
|
+
pg.disable_property(sym.to_s) unless Wx.has_feature?(sym)
|
1629
|
+
}
|
1630
|
+
|
1631
|
+
_ADD_WX_LIB_CONF_GROUP.call("Global Settings")
|
1632
|
+
_ADD_WX_LIB_CONF.call(:USE_GUI)
|
1633
|
+
|
1634
|
+
_ADD_WX_LIB_CONF_GROUP.call("Compatibility Settings")
|
1635
|
+
if Wx.has_feature?(:WXWIN_COMPATIBILITY_3_0)
|
1636
|
+
_ADD_WX_LIB_CONF.call(:WXWIN_COMPATIBILITY_3_0)
|
1637
|
+
end
|
1638
|
+
_ADD_WX_LIB_CONF_NODEF.call(:FONT_SIZE_COMPATIBILITY)
|
1639
|
+
_ADD_WX_LIB_CONF_NODEF.call(:DIALOG_UNIT_COMPATIBILITY)
|
1640
|
+
|
1641
|
+
_ADD_WX_LIB_CONF_GROUP.call("Debugging Settings")
|
1642
|
+
_ADD_WX_LIB_CONF.call(:USE_DEBUG_CONTEXT)
|
1643
|
+
_ADD_WX_LIB_CONF.call(:USE_MEMORY_TRACING)
|
1644
|
+
_ADD_WX_LIB_CONF.call(:USE_GLOBAL_MEMORY_OPERATORS)
|
1645
|
+
_ADD_WX_LIB_CONF.call(:USE_DEBUG_NEW_ALWAYS)
|
1646
|
+
_ADD_WX_LIB_CONF.call(:USE_ON_FATAL_EXCEPTION)
|
1647
|
+
|
1648
|
+
_ADD_WX_LIB_CONF_GROUP.call("Unicode Support")
|
1649
|
+
# From wxWidgets 3.3.0 Unicode is the fixed default and the setup macro 'wxUSE_UNICODE' removed
|
1650
|
+
if Wx::WXWIDGETS_VERSION < '3.3.0'
|
1651
|
+
_ADD_WX_LIB_CONF.call(:USE_UNICODE)
|
1652
|
+
end
|
1653
|
+
_ADD_WX_LIB_CONF.call(:USE_UNICODE_UTF8)
|
1654
|
+
|
1655
|
+
_ADD_WX_LIB_CONF_GROUP.call("Global Features")
|
1656
|
+
_ADD_WX_LIB_CONF.call(:USE_EXCEPTIONS)
|
1657
|
+
_ADD_WX_LIB_CONF.call(:USE_EXTENDED_RTTI)
|
1658
|
+
_ADD_WX_LIB_CONF.call(:USE_STL)
|
1659
|
+
_ADD_WX_LIB_CONF.call(:USE_LOG)
|
1660
|
+
_ADD_WX_LIB_CONF.call(:USE_LOGWINDOW)
|
1661
|
+
_ADD_WX_LIB_CONF.call(:USE_LOGGUI)
|
1662
|
+
_ADD_WX_LIB_CONF.call(:USE_LOG_DIALOG)
|
1663
|
+
_ADD_WX_LIB_CONF.call(:USE_CMDLINE_PARSER)
|
1664
|
+
_ADD_WX_LIB_CONF.call(:USE_THREADS)
|
1665
|
+
_ADD_WX_LIB_CONF.call(:USE_STREAMS)
|
1666
|
+
_ADD_WX_LIB_CONF.call(:USE_STD_IOSTREAM)
|
1667
|
+
|
1668
|
+
_ADD_WX_LIB_CONF_GROUP.call("Non-GUI Features")
|
1669
|
+
_ADD_WX_LIB_CONF.call(:USE_LONGLONG)
|
1670
|
+
_ADD_WX_LIB_CONF.call(:USE_FILE)
|
1671
|
+
_ADD_WX_LIB_CONF.call(:USE_FFILE)
|
1672
|
+
_ADD_WX_LIB_CONF.call(:USE_FSVOLUME)
|
1673
|
+
_ADD_WX_LIB_CONF.call(:USE_TEXTBUFFER)
|
1674
|
+
_ADD_WX_LIB_CONF.call(:USE_TEXTFILE)
|
1675
|
+
_ADD_WX_LIB_CONF.call(:USE_INTL)
|
1676
|
+
_ADD_WX_LIB_CONF.call(:USE_DATETIME)
|
1677
|
+
_ADD_WX_LIB_CONF.call(:USE_TIMER)
|
1678
|
+
_ADD_WX_LIB_CONF.call(:USE_STOPWATCH)
|
1679
|
+
_ADD_WX_LIB_CONF.call(:USE_CONFIG)
|
1680
|
+
_ADD_WX_LIB_CONF_NODEF.call(:USE_CONFIG_NATIVE)
|
1681
|
+
_ADD_WX_LIB_CONF.call(:USE_DIALUP_MANAGER)
|
1682
|
+
_ADD_WX_LIB_CONF.call(:USE_DYNLIB_CLASS)
|
1683
|
+
_ADD_WX_LIB_CONF.call(:USE_DYNAMIC_LOADER)
|
1684
|
+
_ADD_WX_LIB_CONF.call(:USE_SOCKETS)
|
1685
|
+
_ADD_WX_LIB_CONF.call(:USE_FILESYSTEM)
|
1686
|
+
_ADD_WX_LIB_CONF.call(:USE_FS_ZIP)
|
1687
|
+
_ADD_WX_LIB_CONF.call(:USE_FS_INET)
|
1688
|
+
_ADD_WX_LIB_CONF.call(:USE_ZIPSTREAM)
|
1689
|
+
_ADD_WX_LIB_CONF.call(:USE_ZLIB)
|
1690
|
+
_ADD_WX_LIB_CONF.call(:USE_APPLE_IEEE)
|
1691
|
+
_ADD_WX_LIB_CONF.call(:USE_JOYSTICK)
|
1692
|
+
_ADD_WX_LIB_CONF.call(:USE_FONTMAP)
|
1693
|
+
_ADD_WX_LIB_CONF.call(:USE_MIMETYPE)
|
1694
|
+
_ADD_WX_LIB_CONF.call(:USE_PROTOCOL)
|
1695
|
+
_ADD_WX_LIB_CONF.call(:USE_PROTOCOL_FILE)
|
1696
|
+
_ADD_WX_LIB_CONF.call(:USE_PROTOCOL_FTP)
|
1697
|
+
_ADD_WX_LIB_CONF.call(:USE_PROTOCOL_HTTP)
|
1698
|
+
_ADD_WX_LIB_CONF.call(:USE_URL)
|
1699
|
+
_ADD_WX_LIB_CONF_NODEF.call(:USE_URL_NATIVE)
|
1700
|
+
_ADD_WX_LIB_CONF.call(:USE_REGEX)
|
1701
|
+
_ADD_WX_LIB_CONF.call(:USE_SYSTEM_OPTIONS)
|
1702
|
+
_ADD_WX_LIB_CONF.call(:USE_SOUND)
|
1703
|
+
_ADD_WX_LIB_CONF_NODEF.call(:USE_XRC)
|
1704
|
+
_ADD_WX_LIB_CONF.call(:USE_XML)
|
1705
|
+
|
1706
|
+
# Set them to use check box.
|
1707
|
+
pg.set_property_attribute(pid, Wx::PG::PG_BOOL_USE_CHECKBOX, true, Wx::PG::PG_RECURSE)
|
1708
|
+
end
|
1709
|
+
|
1710
|
+
def on_close_click(event)
|
1711
|
+
close(false)
|
1712
|
+
end
|
1713
|
+
|
1714
|
+
def on_colour_scheme(event)
|
1715
|
+
id = event.id
|
1716
|
+
if id == ID::COLOURSCHEME1
|
1717
|
+
@propGridManager.grid.reset_colours
|
1718
|
+
elsif id == ID::COLOURSCHEME2
|
1719
|
+
# white
|
1720
|
+
my_grey_1 = Wx::Colour.new(212,208,200)
|
1721
|
+
my_grey_3 = Wx::Colour.new(113,111,100)
|
1722
|
+
@propGridManager.freeze
|
1723
|
+
@propGridManager.grid.set_margin_colour(Wx::WHITE)
|
1724
|
+
@propGridManager.grid.set_caption_background_colour(Wx::WHITE)
|
1725
|
+
@propGridManager.grid.set_cell_background_colour(Wx::WHITE)
|
1726
|
+
@propGridManager.grid.set_cell_text_colour(my_grey_3)
|
1727
|
+
@propGridManager.grid.set_line_colour(my_grey_1)
|
1728
|
+
@propGridManager.thaw
|
1729
|
+
elsif id == ID::COLOURSCHEME3
|
1730
|
+
# .NET
|
1731
|
+
my_grey_1 = Wx::Colour.new(212,208,200)
|
1732
|
+
my_grey_2 = Wx::Colour.new(236,233,216)
|
1733
|
+
@propGridManager.freeze
|
1734
|
+
@propGridManager.grid.set_margin_colour(my_grey_1)
|
1735
|
+
@propGridManager.grid.set_caption_background_colour(my_grey_1)
|
1736
|
+
@propGridManager.grid.set_line_colour(my_grey_1)
|
1737
|
+
@propGridManager.thaw
|
1738
|
+
elsif id == ID::COLOURSCHEME4
|
1739
|
+
# cream
|
1740
|
+
my_grey_1 = Wx::Colour.new(212,208,200)
|
1741
|
+
my_grey_2 = Wx::Colour.new(241,239,226)
|
1742
|
+
my_grey_3 = Wx::Colour.new(113,111,100)
|
1743
|
+
@propGridManager.freeze
|
1744
|
+
@propGridManager.grid.set_margin_colour(Wx::WHITE)
|
1745
|
+
@propGridManager.grid.set_caption_background_colour(Wx::WHITE)
|
1746
|
+
@propGridManager.grid.set_cell_background_colour(my_grey_2)
|
1747
|
+
@propGridManager.grid.set_cell_background_colour(my_grey_2)
|
1748
|
+
@propGridManager.grid.set_cell_text_colour(my_grey_3)
|
1749
|
+
@propGridManager.grid.set_line_colour(my_grey_1)
|
1750
|
+
@propGridManager.thaw
|
1751
|
+
end
|
1752
|
+
end
|
1753
|
+
|
1754
|
+
def on_insert_prop_click(event)
|
1755
|
+
if @propGridManager.grid.root.get_child_count == 0
|
1756
|
+
Wx.message_box("No items to relate - first add some with Append.")
|
1757
|
+
return
|
1758
|
+
end
|
1759
|
+
|
1760
|
+
id = @propGridManager.grid.get_selection
|
1761
|
+
unless id
|
1762
|
+
Wx.message_box("First select a property - new one will be inserted right before that.")
|
1763
|
+
return
|
1764
|
+
end
|
1765
|
+
|
1766
|
+
propLabel = FormMain.generate_unique_property_label(@propGridManager, 'Property')
|
1767
|
+
|
1768
|
+
@propGridManager.insert(@propGridManager.get_property_parent(id),
|
1769
|
+
id.get_index_in_parent,
|
1770
|
+
Wx::PG::StringProperty.new(propLabel))
|
1771
|
+
end
|
1772
|
+
|
1773
|
+
def on_append_prop_click(event)
|
1774
|
+
propLabel = FormMain.generate_unique_property_label(@propGridManager, 'Property')
|
1775
|
+
|
1776
|
+
@propGridManager.append(Wx::PG::StringProperty.new(propLabel))
|
1777
|
+
|
1778
|
+
@propGridManager.refresh
|
1779
|
+
end
|
1780
|
+
|
1781
|
+
def on_clear_click(event)
|
1782
|
+
@propGridManager.grid.clear
|
1783
|
+
end
|
1784
|
+
|
1785
|
+
def on_append_cat_click(event)
|
1786
|
+
propLabel = FormMain.generate_unique_property_label(@propGridManager, 'Category')
|
1787
|
+
|
1788
|
+
@propGridManager.append(Wx::PG::PropertyCategory.new(propLabel))
|
1789
|
+
|
1790
|
+
@propGridManager.refresh
|
1791
|
+
end
|
1792
|
+
|
1793
|
+
def on_insert_cat_click(event)
|
1794
|
+
if @propGridManager.grid.root.get_child_count == 0
|
1795
|
+
Wx.message_box("No items to relate - first add some with Append.")
|
1796
|
+
return
|
1797
|
+
end
|
1798
|
+
|
1799
|
+
id = @propGridManager.grid.get_selection
|
1800
|
+
unless id
|
1801
|
+
Wx.message_box("First select a property - new one will be inserted right before that.")
|
1802
|
+
return
|
1803
|
+
end
|
1804
|
+
|
1805
|
+
propLabel = FormMain.generate_unique_property_label(@propGridManager, 'Category')
|
1806
|
+
|
1807
|
+
@propGridManager.insert(@propGridManager.get_property_parent(id),
|
1808
|
+
id.get_index_in_parent,
|
1809
|
+
Wx::PG::PropertyCategory.new(propLabel))
|
1810
|
+
end
|
1811
|
+
|
1812
|
+
def on_del_prop_click(event)
|
1813
|
+
id = @propGridManager.grid.get_selection
|
1814
|
+
unless id
|
1815
|
+
Wx.message_box("First select a property.")
|
1816
|
+
return
|
1817
|
+
end
|
1818
|
+
|
1819
|
+
@propGridManager.delete_property(id)
|
1820
|
+
end
|
1821
|
+
|
1822
|
+
def on_del_prop_r_click(event)
|
1823
|
+
# Delete random property
|
1824
|
+
p = @propGridManager.grid.root
|
1825
|
+
|
1826
|
+
while true
|
1827
|
+
break if p.get_child_count == 0
|
1828
|
+
|
1829
|
+
n = rand(p.get_child_count)
|
1830
|
+
p = p.item(n)
|
1831
|
+
|
1832
|
+
if !p.category?
|
1833
|
+
label = p.get_label
|
1834
|
+
@propGridManager.delete_property(p)
|
1835
|
+
Wx.log_message("Property deleted: %s", label)
|
1836
|
+
break
|
1837
|
+
end
|
1838
|
+
end
|
1839
|
+
end
|
1840
|
+
|
1841
|
+
def on_context_menu(event)
|
1842
|
+
Wx.log_debug("FormMain::OnContextMenu(%i,%i)",
|
1843
|
+
event.get_position.x,event.get_position.y)
|
1844
|
+
end
|
1845
|
+
|
1846
|
+
def on_enable_disable(event)
|
1847
|
+
id = @propGridManager.grid.get_selection
|
1848
|
+
unless id
|
1849
|
+
Wx.message_box("First select a property.")
|
1850
|
+
return
|
1851
|
+
end
|
1852
|
+
|
1853
|
+
if @propGridManager.is_property_enabled(id)
|
1854
|
+
@propGridManager.disable_property(id)
|
1855
|
+
@itemEnable.set_item_label("Enable")
|
1856
|
+
else
|
1857
|
+
@propGridManager.enable_property(id)
|
1858
|
+
@itemEnable.set_item_label("Disable")
|
1859
|
+
end
|
1860
|
+
end
|
1861
|
+
|
1862
|
+
def on_set_read_only(event)
|
1863
|
+
id = @propGridManager.grid.get_selection
|
1864
|
+
unless id
|
1865
|
+
Wx.message_box("First select a property.")
|
1866
|
+
return
|
1867
|
+
end
|
1868
|
+
@propGridManager.set_property_read_only(id)
|
1869
|
+
end
|
1870
|
+
|
1871
|
+
def on_hide(event)
|
1872
|
+
id = @propGridManager.grid.get_selection
|
1873
|
+
unless id
|
1874
|
+
Wx.message_box("First select a property.")
|
1875
|
+
return
|
1876
|
+
end
|
1877
|
+
@propGridManager.hide_property(id, true)
|
1878
|
+
end
|
1879
|
+
|
1880
|
+
def on_bool_checkbox(evt)
|
1881
|
+
@propGridManager.set_property_attribute_all(Wx::PG::PG_BOOL_USE_CHECKBOX, evt.checked?)
|
1882
|
+
end
|
1883
|
+
|
1884
|
+
def on_set_background_colour(event)
|
1885
|
+
pg = @propGridManager.grid
|
1886
|
+
prop = pg.get_selection
|
1887
|
+
unless prop
|
1888
|
+
Wx.message_box("First select a property.")
|
1889
|
+
return
|
1890
|
+
end
|
1891
|
+
|
1892
|
+
col = Wx.get_colour_from_user(self, Wx::WHITE, "Choose colour")
|
1893
|
+
|
1894
|
+
if col.ok?
|
1895
|
+
flags = (event.id==ID::SETBGCOLOURRECUR) ? Wx::PG::PG_RECURSE : 0
|
1896
|
+
pg.set_property_background_colour(prop, col, flags)
|
1897
|
+
end
|
1898
|
+
end
|
1899
|
+
|
1900
|
+
def on_clear_modify_status_click(event)
|
1901
|
+
@propGridManager.clear_modified_status
|
1902
|
+
@propGridManager.refresh
|
1903
|
+
end
|
1904
|
+
|
1905
|
+
def on_freeze_click(event)
|
1906
|
+
return unless @propGridManager
|
1907
|
+
|
1908
|
+
if event.checked?
|
1909
|
+
unless @propGridManager.is_frozen
|
1910
|
+
@propGridManager.freeze
|
1911
|
+
end
|
1912
|
+
else
|
1913
|
+
if @propGridManager.frozen?
|
1914
|
+
@propGridManager.thaw
|
1915
|
+
@propGridManager.refresh
|
1916
|
+
end
|
1917
|
+
end
|
1918
|
+
end
|
1919
|
+
|
1920
|
+
def on_enable_label_editing(event)
|
1921
|
+
@labelEditingEnabled = event.checked?
|
1922
|
+
@propGrid.make_column_editable(0, @labelEditingEnabled)
|
1923
|
+
end
|
1924
|
+
|
1925
|
+
if Wx.has_feature?(:USE_HEADERCTRL)
|
1926
|
+
def on_show_header(event)
|
1927
|
+
@hasHeader = event.checked?
|
1928
|
+
@propGridManager.show_header(@hasHeader)
|
1929
|
+
if @hasHeader
|
1930
|
+
@propGridManager.set_column_title(2, "Units")
|
1931
|
+
end
|
1932
|
+
end
|
1933
|
+
end
|
1934
|
+
|
1935
|
+
def on_dump_list(event)
|
1936
|
+
values = @propGridManager.get_property_values("list", nil, Wx::PG::PG_INC_ATTRIBUTES)
|
1937
|
+
text = "This only tests that wxVariant related routines do not crash.\n"
|
1938
|
+
|
1939
|
+
Wx.Dialog(self, Wx::ID_ANY,"wxVariant Test",
|
1940
|
+
Wx::DEFAULT_POSITION,Wx::DEFAULT_SIZE,Wx::DEFAULT_DIALOG_STYLE|Wx::RESIZE_BORDER) do |dlg|
|
1941
|
+
values.get_count.times do |i|
|
1942
|
+
v = values[i]
|
1943
|
+
|
1944
|
+
strValue = v.to_s
|
1945
|
+
|
1946
|
+
if v.name.end_with?("@attr")
|
1947
|
+
text << "Attributes:\n"
|
1948
|
+
|
1949
|
+
v.count.times do |n|
|
1950
|
+
a = v[n]
|
1951
|
+
|
1952
|
+
t = " attribute %i: name=\"%s\" (type=\"%s\" value=\"%s\")\n" % [n , a.name, a.type, a.to_s]
|
1953
|
+
text << t
|
1954
|
+
end
|
1955
|
+
else
|
1956
|
+
t = "%i: name=\"%s\" type=\"%s\" value=\"%s\"\n" % [i, v.name, v.type, strValue]
|
1957
|
+
text << t
|
1958
|
+
end
|
1959
|
+
end
|
1960
|
+
|
1961
|
+
# multi-line text editor dialog
|
1962
|
+
spacing = 8;
|
1963
|
+
topsizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
1964
|
+
rowsizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
1965
|
+
ed = Wx::TextCtrl.new(dlg, Wx::ID_ANY, text, style: Wx::TE_MULTILINE|Wx::TE_READONLY)
|
1966
|
+
rowsizer.add(ed, Wx::SizerFlags.new(1).expand.border(Wx::ALL, spacing))
|
1967
|
+
topsizer.add(rowsizer, Wx::SizerFlags.new(1).expand)
|
1968
|
+
rowsizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
1969
|
+
rowsizer.add(Wx::Button.new(dlg, Wx::ID_OK, "Ok"),
|
1970
|
+
Wx::SizerFlags.new.centre_horizontal.centre_vertical.border(Wx::Direction::BOTTOM|Wx::LEFT|Wx::RIGHT, spacing))
|
1971
|
+
topsizer.add(rowsizer, Wx::SizerFlags.new.right)
|
1972
|
+
|
1973
|
+
dlg.set_sizer(topsizer)
|
1974
|
+
topsizer.set_size_hints(dlg)
|
1975
|
+
|
1976
|
+
dlg.set_size([400,300])
|
1977
|
+
dlg.centre
|
1978
|
+
dlg.show_modal
|
1979
|
+
end
|
1980
|
+
end
|
1981
|
+
|
1982
|
+
def on_cat_colours_update_ui(event)
|
1983
|
+
# Prevent menu item from being checked
|
1984
|
+
# if it is selected from improper page.
|
1985
|
+
pg = @propGridManager.grid
|
1986
|
+
@itemCatColours.enable(
|
1987
|
+
!!(pg.get_property_by_name("Appearance") &&
|
1988
|
+
pg.get_property_by_name("PositionCategory") &&
|
1989
|
+
pg.get_property_by_name("Environment") &&
|
1990
|
+
pg.get_property_by_name("More Examples"))
|
1991
|
+
)
|
1992
|
+
end
|
1993
|
+
|
1994
|
+
def on_cat_colours(event)
|
1995
|
+
pg = @propGridManager.grid
|
1996
|
+
unless !!(pg.get_property_by_name("Appearance") &&
|
1997
|
+
pg.get_property_by_name("PositionCategory") &&
|
1998
|
+
pg.get_property_by_name("Environment") &&
|
1999
|
+
pg.get_property_by_name("More Examples"))
|
2000
|
+
Wx.message_box("First switch to 'Standard Items' page!")
|
2001
|
+
return
|
2002
|
+
end
|
2003
|
+
|
2004
|
+
@propGridManager.freeze
|
2005
|
+
|
2006
|
+
if event.checked?
|
2007
|
+
# Set custom colours.
|
2008
|
+
pg.set_property_text_colour("Appearance", Wx::Colour.new(255,0,0), Wx::PG::PG_DONT_RECURSE)
|
2009
|
+
pg.set_property_background_colour("Appearance", Wx::Colour.new(255,255,183))
|
2010
|
+
pg.set_property_text_colour("Appearance", Wx::Colour.new(255,0,183))
|
2011
|
+
pg.set_property_text_colour("PositionCategory", Wx::Colour.new(0,255,0), Wx::PG::PG_DONT_RECURSE)
|
2012
|
+
pg.set_property_background_colour("PositionCategory", Wx::Colour.new(255,226,190))
|
2013
|
+
pg.set_property_text_colour("PositionCategory", Wx::Colour.new(255,0,190))
|
2014
|
+
pg.set_property_text_colour("Environment", Wx::Colour.new(0,0,255), Wx::PG::PG_DONT_RECURSE)
|
2015
|
+
pg.set_property_background_colour("Environment", Wx::Colour.new(208,240,175))
|
2016
|
+
pg.set_property_text_colour("Environment", Wx::Colour.new(255,255,255))
|
2017
|
+
pg.set_property_background_colour("More Examples", Wx::Colour.new(172,237,255))
|
2018
|
+
pg.set_property_text_colour("More Examples", Wx::Colour.new(172,0,255))
|
2019
|
+
else
|
2020
|
+
# Revert to original.
|
2021
|
+
pg.set_property_colours_to_default("Appearance")
|
2022
|
+
pg.set_property_colours_to_default("Appearance", Wx::PG::PG_RECURSE)
|
2023
|
+
pg.set_property_colours_to_default("PositionCategory")
|
2024
|
+
pg.set_property_colours_to_default("PositionCategory", Wx::PG::PG_RECURSE)
|
2025
|
+
pg.set_property_colours_to_default("Environment")
|
2026
|
+
pg.set_property_colours_to_default("Environment", Wx::PG::PG_RECURSE)
|
2027
|
+
pg.set_property_colours_to_default("More Examples", Wx::PG::PG_RECURSE)
|
2028
|
+
end
|
2029
|
+
@propGridManager.thaw
|
2030
|
+
@propGridManager.refresh
|
2031
|
+
end
|
2032
|
+
|
2033
|
+
def on_set_columns(event)
|
2034
|
+
colCount = Wx::get_number_from_user("Enter number of columns (2-20).","Columns:",
|
2035
|
+
"Change Columns", @propGridManager.get_column_count,
|
2036
|
+
2,20)
|
2037
|
+
|
2038
|
+
if colCount != @propGridManager.column_count
|
2039
|
+
@propGridManager.set_column_count(colCount)
|
2040
|
+
end
|
2041
|
+
end
|
2042
|
+
|
2043
|
+
def on_set_virtual_width(evt)
|
2044
|
+
oldWidth = @propGridManager.current_page.get_virtual_width
|
2045
|
+
newWidth = oldWidth
|
2046
|
+
Wx.NumberEntryDialog(self, "Enter virtual width (-1-2000).", "Width:",
|
2047
|
+
"Change Virtual Width", oldWidth, -1, 2000) do |dlg|
|
2048
|
+
newWidth = dlg.value if dlg.show_modal == Wx::ID_OK
|
2049
|
+
end
|
2050
|
+
if newWidth != oldWidth
|
2051
|
+
@propGridManager.grid.set_virtual_width(newWidth)
|
2052
|
+
end
|
2053
|
+
end
|
2054
|
+
|
2055
|
+
def on_set_grid_disabled(evt)
|
2056
|
+
@propGridManager.enable(!evt.is_checked)
|
2057
|
+
end
|
2058
|
+
|
2059
|
+
def on_misc(event)
|
2060
|
+
case event.id
|
2061
|
+
when ID::STATICLAYOUT
|
2062
|
+
wsf = @propGridManager.get_window_style_flag
|
2063
|
+
if event.is_checked
|
2064
|
+
@propGridManager.set_window_style_flag(wsf|Wx::PG::PG_STATIC_LAYOUT)
|
2065
|
+
else
|
2066
|
+
@propGridManager.set_window_style_flag(wsf&~(Wx::PG::PG_STATIC_LAYOUT))
|
2067
|
+
end
|
2068
|
+
when ID::COLLAPSEALL
|
2069
|
+
pg = @propGridManager.grid
|
2070
|
+
pg.each_property(Wx::PG::PG_ITERATE_ALL) { |p| p.set_expanded(false) }
|
2071
|
+
pg.refresh_grid
|
2072
|
+
when ID::GETVALUES
|
2073
|
+
@storedValues = @propGridManager.grid.get_property_values("Test",
|
2074
|
+
@propGridManager.grid.root,
|
2075
|
+
Wx::PG::PG_KEEP_STRUCTURE|Wx::PG::PG_INC_ATTRIBUTES)
|
2076
|
+
when ID::SETVALUES
|
2077
|
+
if @storedValues && @storedValues.is_type("list")
|
2078
|
+
@propGridManager.grid.set_property_values(@storedValues)
|
2079
|
+
else
|
2080
|
+
Wx.message_box("First use Get Property Values.")
|
2081
|
+
end
|
2082
|
+
when ID::SETVALUES2
|
2083
|
+
list = Wx::Variant.new([ Wx::Variant.new(1234, "VariantLong"),
|
2084
|
+
Wx::Variant.new(true,"VariantBool") ])
|
2085
|
+
list.append(Wx::Variant.new("Test Text", "VariantString"))
|
2086
|
+
@propGridManager.grid.set_property_values(list)
|
2087
|
+
when ID::COLLAPSE
|
2088
|
+
# Collapses selected.
|
2089
|
+
selProp = @propGridManager.selection
|
2090
|
+
@propGridManager.collapse(selProp) if selProp
|
2091
|
+
when ID::RUNTESTFULL
|
2092
|
+
# Runs a regression test.
|
2093
|
+
run_tests(true)
|
2094
|
+
when ID::RUNTESTPARTIAL
|
2095
|
+
# Runs a regression test.
|
2096
|
+
run_tests(false)
|
2097
|
+
when ID::UNSPECIFY
|
2098
|
+
prop = @propGridManager.selection
|
2099
|
+
if prop
|
2100
|
+
@propGridManager.set_property_value_unspecified(prop)
|
2101
|
+
prop.refresh_editor
|
2102
|
+
end
|
2103
|
+
end
|
2104
|
+
end
|
2105
|
+
|
2106
|
+
def on_populate_click(event)
|
2107
|
+
id = event.id
|
2108
|
+
@propGrid.clear
|
2109
|
+
@propGrid.freeze
|
2110
|
+
if id == ID::POPULATE1
|
2111
|
+
populate_with_standard_items
|
2112
|
+
elsif id == ID::POPULATE2
|
2113
|
+
populate_with_library_config
|
2114
|
+
end
|
2115
|
+
@propGrid.thaw
|
2116
|
+
end
|
2117
|
+
|
2118
|
+
def on_set_spin_ctrl_editor_click(event)
|
2119
|
+
if Wx.has_feature? :USE_SPINBTN
|
2120
|
+
pgId = @propGridManager.get_selection
|
2121
|
+
if pgId
|
2122
|
+
@propGridManager.set_property_editor(pgId, Wx::PG::PG_EDITOR_SPIN_CTRL)
|
2123
|
+
else
|
2124
|
+
Wx.message_box("First select a property")
|
2125
|
+
end
|
2126
|
+
end
|
2127
|
+
end
|
2128
|
+
|
2129
|
+
def on_test_replace_click(event)
|
2130
|
+
pgId = @propGridManager.selection
|
2131
|
+
if pgId
|
2132
|
+
choices = Wx::PG::PGChoices.new
|
2133
|
+
choices.add("Flag 0", 0x0001)
|
2134
|
+
choices.add("Flag 1", 0x0002)
|
2135
|
+
choices.add("Flag 2", 0x0004)
|
2136
|
+
choices.add("Flag 3", 0x0008)
|
2137
|
+
maxVal = 0x000F
|
2138
|
+
# Look for unused property name
|
2139
|
+
propName = "ReplaceFlagsProperty"
|
2140
|
+
idx = 0;
|
2141
|
+
while @propGridManager.get_property_by_name(propName)
|
2142
|
+
propName = "ReplaceFlagsProperty %i" % (idx += 1)
|
2143
|
+
end
|
2144
|
+
# Replace property and select new one
|
2145
|
+
# with random value in range [1..maxVal]
|
2146
|
+
propVal = Time.now.to_i % maxVal + 1
|
2147
|
+
newId = @propGridManager.replace_property(pgId, Wx::FlagsProperty.new(propName, Wx::PG::PG_LABEL,
|
2148
|
+
choices, propVal))
|
2149
|
+
@propGridManager.set_property_attribute(newId, Wx::PG::PG_BOOL_USE_CHECKBOX,
|
2150
|
+
true, Wx::PG::PG_RECURSE)
|
2151
|
+
@propGridManager.select_property(newId)
|
2152
|
+
else
|
2153
|
+
Wx.message_box("First select a property")
|
2154
|
+
end
|
2155
|
+
end
|
2156
|
+
|
2157
|
+
def on_test_xrc(event)
|
2158
|
+
Wx.message_box("Sorry, not yet implemented")
|
2159
|
+
end
|
2160
|
+
|
2161
|
+
def on_enable_common_values(event)
|
2162
|
+
prop = @propGridManager.selection
|
2163
|
+
if prop
|
2164
|
+
prop.enable_common_value
|
2165
|
+
else
|
2166
|
+
Wx.message_box("First select a property")
|
2167
|
+
end
|
2168
|
+
end
|
2169
|
+
|
2170
|
+
def on_select_style(event)
|
2171
|
+
extraStyle = style = 0
|
2172
|
+
names, values = %w[
|
2173
|
+
PG_HIDE_CATEGORIES
|
2174
|
+
PG_AUTO_SORT
|
2175
|
+
PG_BOLD_MODIFIED
|
2176
|
+
PG_SPLITTER_AUTO_CENTER
|
2177
|
+
PG_TOOLTIPS
|
2178
|
+
PG_STATIC_SPLITTER
|
2179
|
+
PG_HIDE_MARGIN
|
2180
|
+
PG_LIMITED_EDITING
|
2181
|
+
PG_TOOLBAR
|
2182
|
+
PG_DESCRIPTION
|
2183
|
+
PG_NO_INTERNAL_BORDER
|
2184
|
+
].inject([[],[]]) { |set, name| set[0] << "Wx::PG::#{name}"; set[1] << Wx::PG.const_get(name); set }
|
2185
|
+
flags = @propGridManager.get_window_style
|
2186
|
+
Wx.MultiChoiceDialog(self, "Select window styles to use",
|
2187
|
+
"wxPropertyGrid Window Style", names) do |dlg|
|
2188
|
+
sel = []
|
2189
|
+
values.each_with_index { |val, ix| sel << ix if (flags & val) == val }
|
2190
|
+
dlg.set_selections(sel)
|
2191
|
+
return if dlg.show_modal == Wx::ID_CANCEL
|
2192
|
+
|
2193
|
+
flags = 0
|
2194
|
+
sel = dlg.selections
|
2195
|
+
sel.each { |ix| flags |= values[ix] }
|
2196
|
+
style = flags
|
2197
|
+
end
|
2198
|
+
|
2199
|
+
names, values = %w[
|
2200
|
+
PG_EX_INIT_NOCAT
|
2201
|
+
PG_EX_NO_FLAT_TOOLBAR
|
2202
|
+
PG_EX_MODE_BUTTONS
|
2203
|
+
PG_EX_HELP_AS_TOOLTIPS
|
2204
|
+
PG_EX_NATIVE_DOUBLE_BUFFERING
|
2205
|
+
PG_EX_AUTO_UNSPECIFIED_VALUES
|
2206
|
+
PG_EX_WRITEONLY_BUILTIN_ATTRIBUTES
|
2207
|
+
PG_EX_HIDE_PAGE_BUTTONS
|
2208
|
+
PG_EX_MULTIPLE_SELECTION
|
2209
|
+
PG_EX_ENABLE_TLP_TRACKING
|
2210
|
+
PG_EX_NO_TOOLBAR_DIVIDER
|
2211
|
+
PG_EX_TOOLBAR_SEPARATOR
|
2212
|
+
PG_EX_ALWAYS_ALLOW_FOCUS
|
2213
|
+
].inject([[],[]]) { |set, name| set[0] << "Wx::PG::#{name}"; set[1] << Wx::PG.const_get(name); set }
|
2214
|
+
flags = @propGridManager.get_extra_style
|
2215
|
+
Wx.MultiChoiceDialog(self, "Select extra window styles to use",
|
2216
|
+
"wxPropertyGrid Extra Style", names) do |dlg|
|
2217
|
+
sel = []
|
2218
|
+
values.each_with_index { |val, ix| sel << ix if (flags & val) == val }
|
2219
|
+
dlg.set_selections(sel)
|
2220
|
+
return if dlg.show_modal == Wx::ID_CANCEL
|
2221
|
+
|
2222
|
+
flags = 0
|
2223
|
+
sel = dlg.selections
|
2224
|
+
sel.each { |ix| flags |= values[ix] }
|
2225
|
+
extraStyle = flags
|
2226
|
+
end
|
2227
|
+
|
2228
|
+
replace_grid(style, extraStyle)
|
2229
|
+
end
|
2230
|
+
|
2231
|
+
def on_fit_columns_click(event)
|
2232
|
+
page = @propGridManager.get_current_page
|
2233
|
+
|
2234
|
+
# Remove auto-centering
|
2235
|
+
@propGridManager.set_window_style(@propGridManager.get_window_style & ~Wx::PG::PG_SPLITTER_AUTO_CENTER)
|
2236
|
+
|
2237
|
+
# Grow manager size just prior fit - otherwise
|
2238
|
+
# column information may be lost.
|
2239
|
+
oldGridSize = @propGridManager.grid.get_client_size
|
2240
|
+
oldFullSize = self.size
|
2241
|
+
self.size = ([1000, oldFullSize.height])
|
2242
|
+
|
2243
|
+
newSz = page.fit_columns
|
2244
|
+
|
2245
|
+
dx = oldFullSize.width - oldGridSize.width;
|
2246
|
+
dy = oldFullSize.height - oldGridSize.height;
|
2247
|
+
|
2248
|
+
newSz.inc_by(dx, dy)
|
2249
|
+
|
2250
|
+
self.size = newSz
|
2251
|
+
end
|
2252
|
+
|
2253
|
+
def on_change_flags_prop_items_click(event)
|
2254
|
+
p = @propGridManager.get_property_by_name("Window Styles")
|
2255
|
+
|
2256
|
+
newChoices = Wx::PG::PGChoices.new
|
2257
|
+
newChoices.add("Fast",0x1)
|
2258
|
+
newChoices.add("Powerful",0x2)
|
2259
|
+
newChoices.add("Safe",0x4)
|
2260
|
+
newChoices.add("Sleek",0x8)
|
2261
|
+
|
2262
|
+
p.set_choices(newChoices)
|
2263
|
+
end
|
2264
|
+
|
2265
|
+
# def on_save_to_file_click(event) end
|
2266
|
+
|
2267
|
+
# def on_load_from_file_click(event) end
|
2268
|
+
|
2269
|
+
def on_set_property_value(event)
|
2270
|
+
pg = @propGridManager.grid
|
2271
|
+
selected = pg.selection
|
2272
|
+
|
2273
|
+
if selected
|
2274
|
+
value = Wx.get_text_from_user("Enter new value:")
|
2275
|
+
pg.set_property_value(selected, value)
|
2276
|
+
end
|
2277
|
+
end
|
2278
|
+
|
2279
|
+
def on_insert_choice(event)
|
2280
|
+
pg = @propGridManager.grid
|
2281
|
+
selected = pg.selection
|
2282
|
+
|
2283
|
+
if selected
|
2284
|
+
choices = selected.choices
|
2285
|
+
|
2286
|
+
if choices.ok?
|
2287
|
+
# Insert new choice to the center of list
|
2288
|
+
pos = choices.count / 2
|
2289
|
+
selected.insert_choice("New Choice", pos)
|
2290
|
+
return
|
2291
|
+
end
|
2292
|
+
end
|
2293
|
+
|
2294
|
+
Wx.message_box("First select a property with some choices.")
|
2295
|
+
end
|
2296
|
+
|
2297
|
+
def on_delete_choice(event)
|
2298
|
+
pg = @propGridManager.grid
|
2299
|
+
selected = pg.selection
|
2300
|
+
|
2301
|
+
if selected
|
2302
|
+
choices = selected.choices
|
2303
|
+
|
2304
|
+
if choices.ok?
|
2305
|
+
# Deletes choice from the center of list
|
2306
|
+
pos = choices.count / 2
|
2307
|
+
selected.delete_choice(pos)
|
2308
|
+
return
|
2309
|
+
end
|
2310
|
+
end
|
2311
|
+
|
2312
|
+
Wx.message_box("First select a property with some choices.")
|
2313
|
+
end
|
2314
|
+
|
2315
|
+
def on_insert_page(event)
|
2316
|
+
@propGridManager.add_page("New Page")
|
2317
|
+
end
|
2318
|
+
|
2319
|
+
def on_remove_page(event)
|
2320
|
+
@propGridManager.remove_page(@propGridManager.get_selected_page)
|
2321
|
+
end
|
2322
|
+
|
2323
|
+
def on_save_state(event)
|
2324
|
+
@savedState = @propGridManager.save_editable_state
|
2325
|
+
Wx.log_debug("Saved editable state string: \"%s\"", @savedState)
|
2326
|
+
end
|
2327
|
+
|
2328
|
+
def on_restore_state(event)
|
2329
|
+
@propGridManager.restore_editable_state(@savedState) if @savedState
|
2330
|
+
end
|
2331
|
+
|
2332
|
+
def on_run_minimal_click(event)
|
2333
|
+
display_minimal_frame(self)
|
2334
|
+
end
|
2335
|
+
|
2336
|
+
def iterate_message(prop)
|
2337
|
+
s = "\"%s\" class = %s, valuetype = %s" % [prop.label, prop.class.name, prop.value_type]
|
2338
|
+
|
2339
|
+
Wx.message_box(s, "Iterating... (press CANCEL to end)", Wx::OK|Wx::CANCEL)
|
2340
|
+
end
|
2341
|
+
private :iterate_message
|
2342
|
+
|
2343
|
+
def on_iterate1_click(event)
|
2344
|
+
@propGridManager.get_current_page.each_property do |p|
|
2345
|
+
break if iterate_message(p) == Wx::CANCEL
|
2346
|
+
end
|
2347
|
+
end
|
2348
|
+
|
2349
|
+
def on_iterate2_click(event)
|
2350
|
+
@propGridManager.get_current_page.each_property(Wx::PG::PG_ITERATE_VISIBLE) do |p|
|
2351
|
+
break if iterate_message(p) == Wx::CANCEL
|
2352
|
+
end
|
2353
|
+
end
|
2354
|
+
|
2355
|
+
def on_iterate3_click(event)
|
2356
|
+
@propGridManager.get_current_page.properties_reversed(Wx::PG::PG_ITERATE_DEFAULT).each do |p|
|
2357
|
+
break if iterate_message(p) == Wx::CANCEL
|
2358
|
+
end
|
2359
|
+
end
|
2360
|
+
|
2361
|
+
def on_iterate4_click(event)
|
2362
|
+
@propGridManager.get_current_page.each_property(Wx::PG::PG_ITERATE_CATEGORIES) do |p|
|
2363
|
+
break if iterate_message(p) == Wx::CANCEL
|
2364
|
+
end
|
2365
|
+
end
|
2366
|
+
|
2367
|
+
def on_extended_key_nav(event)
|
2368
|
+
# Use AddActionTrigger() and DedicateKey() to set up Enter,
|
2369
|
+
# Up, and Down keys for navigating between properties.
|
2370
|
+
propGrid = @propGridManager.grid
|
2371
|
+
|
2372
|
+
propGrid.add_action_trigger(Wx::PG::PG_ACTION_NEXT_PROPERTY,
|
2373
|
+
Wx::K_RETURN)
|
2374
|
+
propGrid.dedicate_key(Wx::K_RETURN)
|
2375
|
+
|
2376
|
+
# Up and Down keys are already associated with navigation,
|
2377
|
+
# but we must also prevent them from being eaten by
|
2378
|
+
# editor controls.
|
2379
|
+
propGrid.dedicate_key(Wx::K_UP)
|
2380
|
+
propGrid.dedicate_key(Wx::K_DOWN)
|
2381
|
+
end
|
2382
|
+
|
2383
|
+
def on_property_grid_change(event)
|
2384
|
+
property = event.property
|
2385
|
+
|
2386
|
+
name = property.name
|
2387
|
+
|
2388
|
+
# Properties store values internally as wxVariants, but it is preferred
|
2389
|
+
# to use the more modern wxAny at the interface level in C++
|
2390
|
+
# wxRuby however does not support wxAny and does not need to as Variants map
|
2391
|
+
# pretty seamless to Ruby
|
2392
|
+
value = property.value
|
2393
|
+
|
2394
|
+
# Don't handle 'unspecified' values
|
2395
|
+
return if value.null?
|
2396
|
+
|
2397
|
+
# Some settings are disabled outside Windows platform
|
2398
|
+
if name == "X"
|
2399
|
+
set_size(value.to_i, -1, -1, -1, Wx::SIZE_USE_EXISTING)
|
2400
|
+
elsif name == "Y"
|
2401
|
+
set_size(-1, value.to_i, -1, -1, Wx::SIZE_USE_EXISTING)
|
2402
|
+
elsif ( name == "Width" )
|
2403
|
+
set_size(-1, -1, value.to_i, -1, Wx::SIZE_USE_EXISTING)
|
2404
|
+
elsif name == "Height"
|
2405
|
+
set_size( -1, -1, -1, value.to_i, Wx::SIZE_USE_EXISTING)
|
2406
|
+
elsif name == "Label"
|
2407
|
+
set_title(value.to_s)
|
2408
|
+
elsif name == "Font"
|
2409
|
+
font = value.font
|
2410
|
+
unless font.ok?
|
2411
|
+
Wx.message_box('Invalid font!')
|
2412
|
+
return
|
2413
|
+
end
|
2414
|
+
@propGridManager.set_font(font)
|
2415
|
+
elsif name == "Margin Colour"
|
2416
|
+
cpv = value.colour_property_value
|
2417
|
+
@propGridManager.grid.set_margin_colour(cpv.colour_)
|
2418
|
+
elsif name == "Cell Colour"
|
2419
|
+
cpv = value.colour_property_value
|
2420
|
+
@propGridManager.grid.set_cell_background_colour(cpv.colour_)
|
2421
|
+
elsif name == "Line Colour"
|
2422
|
+
cpv = value.colour_property_value
|
2423
|
+
@propGridManager.grid.set_line_colour(cpv.colour_)
|
2424
|
+
elsif name == "Cell Text Colour"
|
2425
|
+
cpv = value.colour_property_value
|
2426
|
+
@propGridManager.grid.set_cell_text_colour(cpv.colour_)
|
2427
|
+
end
|
2428
|
+
end
|
2429
|
+
|
2430
|
+
def on_property_grid_changing(event)
|
2431
|
+
p = event.property
|
2432
|
+
|
2433
|
+
if p.name == "Font"
|
2434
|
+
res = Wx.message_box("'%s' is about to change (to variant of type '%s')\n\nAllow or deny?" %
|
2435
|
+
[p.name, event.value.type],
|
2436
|
+
"Testing wxEVT_PG_CHANGING", Wx::YES_NO, @propGridManager)
|
2437
|
+
if res == Wx::NO
|
2438
|
+
Kernel.raise 'Must be able to Veto event' unless event.can_veto?
|
2439
|
+
|
2440
|
+
event.veto
|
2441
|
+
|
2442
|
+
# Since we ask a question, it is better if we omit any validation
|
2443
|
+
# failure behaviour.
|
2444
|
+
event.set_validation_failure_behavior(0)
|
2445
|
+
end
|
2446
|
+
end
|
2447
|
+
end
|
2448
|
+
|
2449
|
+
def on_property_grid_select(event)
|
2450
|
+
property = event.property
|
2451
|
+
if property
|
2452
|
+
@itemEnable.enable(true)
|
2453
|
+
if property.enabled?
|
2454
|
+
@itemEnable.set_item_label("Disable")
|
2455
|
+
else
|
2456
|
+
@itemEnable.set_item_label("Enable")
|
2457
|
+
end
|
2458
|
+
else
|
2459
|
+
@itemEnable.enable(false)
|
2460
|
+
end
|
2461
|
+
|
2462
|
+
if Wx.has_feature? :USE_STATUSBAR
|
2463
|
+
prop = event.property
|
2464
|
+
sb = self.status_bar
|
2465
|
+
if prop
|
2466
|
+
text = "Selected: "
|
2467
|
+
text << @propGridManager.get_property_label(prop)
|
2468
|
+
sb.set_status_text(text)
|
2469
|
+
end
|
2470
|
+
end
|
2471
|
+
end
|
2472
|
+
|
2473
|
+
def on_property_grid_highlight(event)
|
2474
|
+
end
|
2475
|
+
|
2476
|
+
def on_property_grid_item_right_click(event)
|
2477
|
+
if Wx.has_feature? :USE_STATUSBAR
|
2478
|
+
prop = event.property
|
2479
|
+
sb = self.status_bar
|
2480
|
+
if prop
|
2481
|
+
text = "Right-clicked: "
|
2482
|
+
text << prop.label
|
2483
|
+
text << ", name=";
|
2484
|
+
text << @propGridManager.get_property_name(prop)
|
2485
|
+
sb.set_status_text(text)
|
2486
|
+
else
|
2487
|
+
sb.set_status_text('')
|
2488
|
+
end
|
2489
|
+
end
|
2490
|
+
end
|
2491
|
+
|
2492
|
+
def on_property_grid_item_double_click(event)
|
2493
|
+
if Wx.has_feature? :USE_STATUSBAR
|
2494
|
+
prop = event.property
|
2495
|
+
sb = self.status_bar
|
2496
|
+
if prop
|
2497
|
+
text = "Double-clicked: "
|
2498
|
+
text << prop.label
|
2499
|
+
text << ", name="
|
2500
|
+
text << @propGridManager.get_property_name(prop)
|
2501
|
+
sb.set_status_text(text)
|
2502
|
+
else
|
2503
|
+
sb.set_status_text('')
|
2504
|
+
end
|
2505
|
+
end
|
2506
|
+
end
|
2507
|
+
|
2508
|
+
def on_property_grid_page_change(event)
|
2509
|
+
if Wx.has_feature? :USE_STATUSBAR
|
2510
|
+
sb = self.status_bar
|
2511
|
+
text = "Page Changed: "
|
2512
|
+
text << @propGridManager.get_page_name(@propGridManager.get_selected_page)
|
2513
|
+
sb.set_status_text(text)
|
2514
|
+
end
|
2515
|
+
end
|
2516
|
+
|
2517
|
+
def on_property_grid_button_click(event)
|
2518
|
+
if Wx.has_feature? :USE_STATUSBAR
|
2519
|
+
prop = @propGridManager.selection
|
2520
|
+
sb = self.status_bar
|
2521
|
+
if prop
|
2522
|
+
text = "Button clicked: "
|
2523
|
+
text << @propGridManager.get_property_label(prop)
|
2524
|
+
text << ", name="
|
2525
|
+
text << @propGridManager.get_property_name(prop)
|
2526
|
+
sb.set_status_text(text)
|
2527
|
+
else
|
2528
|
+
Wx.message_box("SHOULD NOT HAPPEN!!!")
|
2529
|
+
end
|
2530
|
+
end
|
2531
|
+
end
|
2532
|
+
|
2533
|
+
def on_property_grid_text_update(event)
|
2534
|
+
event.skip
|
2535
|
+
end
|
2536
|
+
|
2537
|
+
def on_property_grid_key_event(event)
|
2538
|
+
end
|
2539
|
+
|
2540
|
+
def on_property_grid_item_collapse(event)
|
2541
|
+
Wx.log_message("Item was Collapsed")
|
2542
|
+
end
|
2543
|
+
|
2544
|
+
def on_property_grid_item_expand(event)
|
2545
|
+
Wx.log_message("Item was Expanded")
|
2546
|
+
end
|
2547
|
+
|
2548
|
+
def on_property_grid_label_edit_begin(event)
|
2549
|
+
Wx.log_message("PG_EVT_LABEL_EDIT_BEGIN(%s)", event.property.label)
|
2550
|
+
end
|
2551
|
+
|
2552
|
+
def on_property_grid_label_edit_ending(event)
|
2553
|
+
Wx.log_message("PG_EVT_LABEL_EDIT_ENDING(%s)", event.property.label)
|
2554
|
+
end
|
2555
|
+
|
2556
|
+
def on_property_grid_col_begin_drag(event)
|
2557
|
+
if @itemVetoDragging.is_checked
|
2558
|
+
Wx.log_message("Splitter %i resize was vetoed", event.column)
|
2559
|
+
event.veto
|
2560
|
+
else
|
2561
|
+
Wx.log_debug("Splitter %i resize began", event.column)
|
2562
|
+
end
|
2563
|
+
end
|
2564
|
+
|
2565
|
+
def on_property_grid_col_dragging(event)
|
2566
|
+
end
|
2567
|
+
|
2568
|
+
def on_property_grid_col_end_drag(event)
|
2569
|
+
Wx.log_debug("Splitter %i resize ended", event.column)
|
2570
|
+
end
|
2571
|
+
|
2572
|
+
def on_about(event)
|
2573
|
+
toolkit = "%s %i.%i.%i" % [Wx::PlatformInfo.get_port_id_name,
|
2574
|
+
Wx::PlatformInfo.get_toolkit_major_version,
|
2575
|
+
Wx::PlatformInfo.get_toolkit_minor_version,
|
2576
|
+
Wx::PlatformInfo.get_toolkit_micro_version]
|
2577
|
+
msg = ("wxRuby PropertyGrid Sample" +
|
2578
|
+
if Wx::WXWIDGETS_VERSION >= '3.3.0' || Wx.has_feature?(:USE_UNICODE)
|
2579
|
+
if Wx.has_feature?(:USE_UNICODE_UTF8) && Wx.has_feature?(:USE_UNICODE_UTF8)
|
2580
|
+
" <utf-8>"
|
2581
|
+
else
|
2582
|
+
" <unicode>"
|
2583
|
+
end
|
2584
|
+
else
|
2585
|
+
" <ansi>"
|
2586
|
+
end +
|
2587
|
+
if Wx::DEBUG
|
2588
|
+
" <debug>"
|
2589
|
+
else
|
2590
|
+
" <release>"
|
2591
|
+
end +
|
2592
|
+
"\n\n" +
|
2593
|
+
"Programmed by %s\n\n" +
|
2594
|
+
"Using wxRuby %s (wxWidgets %s; %s)\n\n") %
|
2595
|
+
["Martin Corino (C++ original by Jaakko Salli)", Wx::WXRUBY_VERSION, Wx::WXWIDGETS_VERSION, toolkit]
|
2596
|
+
|
2597
|
+
Wx.message_box(msg, "About", Wx::OK | Wx::ICON_INFORMATION, self)
|
2598
|
+
end
|
2599
|
+
|
2600
|
+
def on_move(event)
|
2601
|
+
unless @propGridManager
|
2602
|
+
# this check is here so the frame layout can be tested
|
2603
|
+
# without creating propertygrid
|
2604
|
+
event.skip
|
2605
|
+
return
|
2606
|
+
end
|
2607
|
+
|
2608
|
+
# Update position properties
|
2609
|
+
pos = get_position
|
2610
|
+
|
2611
|
+
# Must check if properties exist (as they may be deleted).
|
2612
|
+
|
2613
|
+
# Using m_pPropGridManager, we can scan all pages automatically.
|
2614
|
+
id = @propGridManager.get_property_by_name("X")
|
2615
|
+
@propGridManager.set_property_value(id, pos.x) if id
|
2616
|
+
|
2617
|
+
id = @propGridManager.get_property_by_name("Y")
|
2618
|
+
@propGridManager.set_property_value( id, pos.y) if id
|
2619
|
+
|
2620
|
+
id = @propGridManager.get_property_by_name("Position")
|
2621
|
+
@propGridManager.set_property_value(id, pos) if id
|
2622
|
+
|
2623
|
+
# Should always call event.skip in frame's MoveEvent handler
|
2624
|
+
event.skip
|
2625
|
+
end
|
2626
|
+
|
2627
|
+
def on_resize(event)
|
2628
|
+
unless @propGridManager
|
2629
|
+
# this check is here so the frame layout can be tested
|
2630
|
+
# without creating propertygrid
|
2631
|
+
event.skip
|
2632
|
+
return
|
2633
|
+
end
|
2634
|
+
|
2635
|
+
# Update size properties
|
2636
|
+
sz = get_size
|
2637
|
+
|
2638
|
+
# Must check if properties exist (as they may be deleted).
|
2639
|
+
|
2640
|
+
# Using m_pPropGridManager, we can scan all pages automatically.
|
2641
|
+
p = @propGridManager.get_property_by_name("Width")
|
2642
|
+
@propGridManager.set_property_value(p, sz.width) if p && !p.is_value_unspecified
|
2643
|
+
|
2644
|
+
p = @propGridManager.get_property_by_name("Height")
|
2645
|
+
@propGridManager.set_property_value(p, sz.height) if p && !p.is_value_unspecified
|
2646
|
+
|
2647
|
+
id = @propGridManager.get_property_by_name("Size")
|
2648
|
+
@propGridManager.set_property_value(id, sz) if id
|
2649
|
+
|
2650
|
+
# Should always call event.skip in frame's SizeEvent handler
|
2651
|
+
event.skip
|
2652
|
+
end
|
2653
|
+
|
2654
|
+
def on_idle(event)
|
2655
|
+
event.skip
|
2656
|
+
end
|
2657
|
+
|
2658
|
+
def on_show_popup(event)
|
2659
|
+
if @popup
|
2660
|
+
@popup.destroy
|
2661
|
+
@popup = nil
|
2662
|
+
return
|
2663
|
+
end
|
2664
|
+
|
2665
|
+
@popup = PropertyGridPopup.new(self)
|
2666
|
+
pt = Wx.get_mouse_position
|
2667
|
+
@popup.position(pt, [0, 0])
|
2668
|
+
@popup.show
|
2669
|
+
end
|
2670
|
+
|
2671
|
+
def add_test_properties(pg)
|
2672
|
+
pg.append(MyColourProperty.new("CustomColourProperty", Wx::PG::PG_LABEL, Wx::GREEN))
|
2673
|
+
pg.get_property("CustomColourProperty").set_auto_unspecified(true)
|
2674
|
+
pg.set_property_editor("CustomColourProperty", Wx::PG::PG_EDITOR_COMBO_BOX)
|
2675
|
+
|
2676
|
+
pg.set_property_help_string("CustomColourProperty",
|
2677
|
+
"This is a MyColourProperty from the sample app. "+
|
2678
|
+
"It is built by subclassing wxColourProperty.")
|
2679
|
+
end
|
2680
|
+
|
2681
|
+
def run_tests(fullTest, interactive = false) end
|
2682
|
+
|
2683
|
+
end
|
2684
|
+
|
2685
|
+
module PropgridSample
|
2686
|
+
|
2687
|
+
include WxRuby::Sample if defined? WxRuby::Sample
|
2688
|
+
|
2689
|
+
def self.describe
|
2690
|
+
{ file: __FILE__,
|
2691
|
+
summary: 'wxRuby PropGrid example.',
|
2692
|
+
description: 'wxRuby PropGrid example displaying frame showcasing PropgridManager.' }
|
2693
|
+
end
|
2694
|
+
|
2695
|
+
def self.activate
|
2696
|
+
frameSize = Wx::Size.new((Wx::SystemSettings.get_metric(Wx::SYS_SCREEN_X) / 10) * 4,
|
2697
|
+
(Wx::SystemSettings.get_metric(Wx::SYS_SCREEN_Y) / 10) * 8)
|
2698
|
+
frameSize.width = 500 if frameSize.width > 500
|
2699
|
+
frame = FormMain.new("wxPropertyGrid Sample", [0,0], frameSize)
|
2700
|
+
frame.show(true)
|
2701
|
+
frame
|
2702
|
+
end
|
2703
|
+
|
2704
|
+
if $0 == __FILE__
|
2705
|
+
Wx::App.run do
|
2706
|
+
gc_stress
|
2707
|
+
PropgridSample.activate
|
2708
|
+
end
|
2709
|
+
end
|
2710
|
+
|
2711
|
+
end
|