wxruby3 0.9.2 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/INSTALL.md +35 -29
- data/README.md +24 -15
- data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
- data/ext/wxruby3/include/wxruby-Config.h +23 -5
- data/ext/wxruby3/include/wxruby-Persistence.h +79 -0
- data/ext/wxruby3/include/wxruby-Validator.h +39 -0
- data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
- data/ext/wxruby3/swig/custom/director.swg +8 -0
- data/ext/wxruby3/swig/mark_free_impl.i +0 -33
- data/ext/wxruby3/swig/memory_management.i +6 -0
- data/lib/wx/core/bitmap_combobox.rb +17 -21
- data/lib/wx/core/book_ctrl_base.rb +16 -0
- data/lib/wx/core/combobox.rb +13 -3
- data/lib/wx/core/config.rb +454 -83
- data/lib/wx/core/controlwithitems.rb +40 -130
- data/lib/wx/core/enum.rb +17 -1
- data/lib/wx/core/event.rb +6 -1
- data/lib/wx/core/evthandler.rb +8 -2
- data/lib/wx/core/generic_validator.rb +312 -0
- data/lib/wx/core/listbox.rb +2 -2
- data/lib/wx/core/log.rb +1 -1
- data/lib/wx/core/notebook.rb +10 -8
- data/lib/wx/core/owner_drawn_combobox.rb +45 -0
- data/lib/wx/core/peristent_object.rb +15 -0
- data/lib/wx/core/persistence_manager.rb +39 -0
- data/lib/wx/core/persistent_window.rb +16 -0
- data/lib/wx/core/size.rb +4 -0
- data/lib/wx/core/sizer.rb +1 -2
- data/lib/wx/core/standard_paths.rb +22 -0
- data/lib/wx/core/text_entry.rb +4 -1
- data/lib/wx/core/top_level_window.rb +16 -0
- data/lib/wx/core/treebook.rb +18 -0
- data/lib/wx/core/validator.rb +70 -5
- data/lib/wx/core/window.rb +3 -7
- data/lib/wx/core.rb +4 -0
- data/lib/wx/doc/art_locator.rb +1 -0
- data/lib/wx/doc/book_ctrl_base.rb +19 -0
- data/lib/wx/doc/comboctrl.rb +18 -0
- data/lib/wx/doc/config.rb +101 -41
- data/lib/wx/doc/controlwithitems.rb +16 -0
- data/lib/wx/doc/date_picker_ctrl.rb +23 -0
- data/lib/wx/doc/editable_listbox.rb +44 -0
- data/lib/wx/doc/enum.rb +15 -0
- data/lib/wx/doc/event.rb +12 -0
- data/lib/wx/doc/extra/12_client_data.md +89 -0
- data/lib/wx/doc/extra/13_validators.md +139 -0
- data/lib/wx/doc/extra/14_config.md +101 -0
- data/lib/wx/doc/extra/15_persistence.md +148 -0
- data/lib/wx/doc/gdi_common.rb +4 -0
- data/lib/wx/doc/generic_validator.rb +95 -0
- data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
- data/lib/wx/doc/num_validator.rb +387 -0
- data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
- data/lib/wx/doc/persistence_manager.rb +36 -0
- data/lib/wx/doc/persistent_object.rb +27 -0
- data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
- data/lib/wx/doc/static_bitmap.rb +25 -0
- data/lib/wx/doc/text_validator.rb +10 -0
- data/lib/wx/doc/top_level_window.rb +19 -0
- data/lib/wx/doc/treebook.rb +6 -1
- data/lib/wx/doc/validator.rb +113 -0
- data/lib/wx/doc/window.rb +30 -0
- data/lib/wx/html/simple_html_listbox.rb +24 -91
- data/lib/wx/keyword_defs.rb +34 -2
- data/lib/wx/rbn/ribbon_gallery.rb +0 -21
- data/lib/wx/version.rb +1 -1
- data/rakelib/build.rb +1 -1
- data/rakelib/lib/config/mingw.rb +12 -0
- data/rakelib/lib/core/include/client_data.inc +65 -0
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/package.rb +39 -3
- data/rakelib/lib/core/parameter.rb +1 -1
- data/rakelib/lib/core/spec.rb +10 -0
- data/rakelib/lib/core/spec_helper.rb +8 -2
- data/rakelib/lib/director/app.rb +18 -0
- data/rakelib/lib/director/app_traits.rb +3 -1
- data/rakelib/lib/director/bitmap_combobox.rb +2 -2
- data/rakelib/lib/director/combobox.rb +22 -0
- data/rakelib/lib/director/comboctrl.rb +1 -55
- data/rakelib/lib/director/config_base.rb +490 -19
- data/rakelib/lib/director/ctrl_with_items.rb +88 -21
- data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
- data/rakelib/lib/director/editable_listbox.rb +30 -0
- data/rakelib/lib/director/event.rb +102 -12
- data/rakelib/lib/director/event_filter.rb +1 -1
- data/rakelib/lib/director/event_handler.rb +3 -2
- data/rakelib/lib/director/event_loop.rb +1 -1
- data/rakelib/lib/director/file_dialog_customize_hook.rb +2 -2
- data/rakelib/lib/director/functions.rb +4 -2
- data/rakelib/lib/director/generic_dirctrl.rb +17 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +1 -3
- data/rakelib/lib/director/grid_cell_renderer.rb +1 -3
- data/rakelib/lib/director/header_ctrl.rb +9 -1
- data/rakelib/lib/director/html_listbox.rb +97 -22
- data/rakelib/lib/director/num_validator.rb +495 -0
- data/rakelib/lib/director/numeric_property_validator.rb +131 -6
- data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
- data/rakelib/lib/director/persistence_manager.rb +410 -0
- data/rakelib/lib/director/persistent_object.rb +70 -0
- data/rakelib/lib/director/persistent_window.rb +73 -0
- data/rakelib/lib/director/pgproperty.rb +3 -29
- data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
- data/rakelib/lib/director/ribbon_gallery.rb +3 -5
- data/rakelib/lib/director/sizer.rb +15 -4
- data/rakelib/lib/director/sizer_item.rb +13 -0
- data/rakelib/lib/director/static_bitmap.rb +32 -0
- data/rakelib/lib/director/text_entry.rb +5 -1
- data/rakelib/lib/director/text_validator.rb +124 -13
- data/rakelib/lib/director/toggle_button.rb +1 -0
- data/rakelib/lib/director/top_level_window.rb +0 -2
- data/rakelib/lib/director/tree_ctrl.rb +35 -0
- data/rakelib/lib/director/utils.rb +16 -2
- data/rakelib/lib/director/validator.rb +196 -21
- data/rakelib/lib/director/window.rb +16 -2
- data/rakelib/lib/extractor/function.rb +2 -1
- data/rakelib/lib/generate/analyzer.rb +44 -44
- data/rakelib/lib/generate/doc.rb +11 -5
- data/rakelib/lib/specs/interfaces.rb +5 -0
- data/rakelib/lib/swig_runner.rb +55 -9
- data/rakelib/lib/typemap/client_data.rb +67 -0
- data/rakelib/lib/typemap/common.rb +3 -3
- data/rakelib/lib/typemap/config.rb +8 -0
- data/rakelib/lib/typemap/datetime.rb +1 -1
- data/rakelib/lib/typemap/tree_itemid.rb +2 -2
- data/samples/aui/aui.rb +1237 -1233
- data/samples/calendar/calendar.rb +293 -289
- data/samples/controls/get_item_sample.rb +83 -79
- data/samples/controls/htlbox.rb +331 -327
- data/samples/dialogs/dialogs.rb +682 -694
- data/samples/dialogs/wizard.rb +52 -55
- data/samples/dragdrop/dragdrop.rb +146 -142
- data/samples/drawing/bitmap.rb +29 -26
- data/samples/drawing/bitmap_image.rb +84 -80
- data/samples/drawing/graphics_drawing.rb +209 -205
- data/samples/drawing/image_prt.rb +344 -340
- data/samples/drawing/maths_images.rb +18 -1
- data/samples/drawing/rmagic_bitmap_image.rb +88 -84
- data/samples/etc/caret.rb +306 -0
- data/samples/etc/miniframe.rb +65 -60
- data/samples/etc/sash.rb +109 -105
- data/samples/etc/scrollwin.rb +86 -80
- data/samples/etc/system_settings.rb +216 -209
- data/samples/event/activation.rb +72 -67
- data/samples/event/event.rb +160 -153
- data/samples/event/threaded.rb +8 -1
- data/samples/event/update_ui_event.rb +67 -60
- data/samples/grid/grid.rb +188 -181
- data/samples/grid/gridtablebase.rb +136 -129
- data/samples/html/html.rb +208 -204
- data/samples/mdi/mdi.rb +59 -54
- data/samples/minimal/minimal.rb +54 -51
- data/samples/minimal/nothing.rb +1 -0
- data/samples/printing/printing.rb +367 -377
- data/samples/printing/printing2.rb +203 -198
- data/samples/propgrid/propgrid.rb +2312 -2308
- data/samples/propgrid/propgrid_minimal.rb +57 -50
- data/samples/ribbon/ribbon.rb +780 -774
- data/samples/sampler/ext.rb +0 -33
- data/samples/sampler/sample.rb +4 -9
- data/samples/sampler.rb +1 -1
- data/samples/splash/splash.rb +118 -116
- data/samples/text/rich_textctrl.rb +207 -201
- data/samples/text/richtext.rb +1409 -1405
- data/samples/text/scintilla.rb +137 -128
- data/samples/text/textctrl.rb +89 -83
- data/samples/text/unicode.rb +175 -168
- data/samples/treectrl/treectrl.rb +1430 -1426
- data/samples/widgets/activityindicator.rb +95 -0
- data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
- data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
- data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
- data/samples/widgets/art/widgets/button.xpm +54 -0
- data/samples/widgets/art/widgets/checkbox.xpm +54 -0
- data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
- data/samples/widgets/art/widgets/choicebk.xpm +54 -0
- data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
- data/samples/widgets/art/widgets/combobox.xpm +54 -0
- data/samples/widgets/art/widgets/datepick.xpm +200 -0
- data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
- data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
- data/samples/widgets/art/widgets/filepicker.xpm +214 -0
- data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
- data/samples/widgets/art/widgets/gauge.xpm +54 -0
- data/samples/widgets/art/widgets/header.xpm +54 -0
- data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
- data/samples/widgets/art/widgets/listbook.xpm +54 -0
- data/samples/widgets/art/widgets/listbox.xpm +54 -0
- data/samples/widgets/art/widgets/native.xpm +81 -0
- data/samples/widgets/art/widgets/notebook.xpm +54 -0
- data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
- data/samples/widgets/art/widgets/radiobox.xpm +54 -0
- data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
- data/samples/widgets/art/widgets/slider.xpm +54 -0
- data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
- data/samples/widgets/art/widgets/statbmp.xpm +40 -0
- data/samples/widgets/art/widgets/statbox.xpm +54 -0
- data/samples/widgets/art/widgets/stattext.xpm +54 -0
- data/samples/widgets/art/widgets/text.xpm +54 -0
- data/samples/widgets/art/widgets/timepick.xpm +207 -0
- data/samples/widgets/art/widgets/toggle.xpm +54 -0
- data/samples/widgets/art/widgets/toucan.png +0 -0
- data/samples/widgets/bmpcombobox.rb +651 -0
- data/samples/widgets/button.rb +462 -0
- data/samples/widgets/checkbox.rb +211 -0
- data/samples/widgets/choice.rb +287 -0
- data/samples/widgets/clrpicker.rb +156 -0
- data/samples/widgets/combobox.rb +516 -0
- data/samples/widgets/datepick.rb +215 -0
- data/samples/widgets/dirctrl.rb +265 -0
- data/samples/widgets/dirpicker.rb +158 -0
- data/samples/widgets/editlbox.rb +122 -0
- data/samples/widgets/filectrl.rb +216 -0
- data/samples/widgets/filepicker.rb +214 -0
- data/samples/widgets/fontpicker.rb +135 -0
- data/samples/widgets/gauge.rb +311 -0
- data/samples/widgets/headerctrl.rb +236 -0
- data/samples/widgets/hyperlink.rb +203 -0
- data/samples/widgets/itemcontainer.rb +185 -0
- data/samples/widgets/listbox.rb +473 -0
- data/samples/widgets/notebook.rb +488 -0
- data/samples/widgets/odcombobox.rb +608 -0
- data/samples/widgets/radiobox.rb +328 -0
- data/samples/widgets/searchctrl.rb +159 -0
- data/samples/widgets/slider.rb +594 -0
- data/samples/widgets/spinbtn.rb +443 -0
- data/samples/widgets/statbmp.rb +130 -0
- data/samples/widgets/static.rb +436 -0
- data/samples/widgets/textctrl.rb +700 -0
- data/samples/widgets/timepick.rb +148 -0
- data/samples/widgets/tn_widgets.png +0 -0
- data/samples/widgets/toggle.rb +385 -0
- data/samples/widgets/widgets.rb +1229 -0
- data/samples/xrc/custom_xrc_sample.rb +47 -41
- data/samples/xrc/xrc_sample.rb +53 -47
- data/tests/test_config.rb +207 -42
- data/tests/test_event_handling.rb +52 -34
- data/tests/test_events.rb +7 -0
- data/tests/test_item_data.rb +24 -0
- data/tests/test_persistence.rb +142 -0
- data/tests/test_sizer.rb +44 -1
- data/tests/test_validators.rb +805 -0
- metadata +109 -138
- data/lib/wx/core/choice.rb +0 -14
- data/lib/wx/core/combo_ctrl.rb +0 -110
- data/rakelib/lib/typemap/grid_client_data.rb +0 -58
- data/samples/bigdemo/About.rbw +0 -39
- data/samples/bigdemo/ColorPanel.rbw +0 -23
- data/samples/bigdemo/GridSimple.rbw +0 -78
- data/samples/bigdemo/MDIDemo.rbw +0 -57
- data/samples/bigdemo/PopupMenu.rbw +0 -146
- data/samples/bigdemo/ShapedWindow.rbw +0 -128
- data/samples/bigdemo/Sizers.rbw +0 -541
- data/samples/bigdemo/bigdemo.rb +0 -817
- data/samples/bigdemo/demoTemplate.rbw +0 -33
- 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/combo.bmp +0 -0
- data/samples/bigdemo/icons/combo.xpm +0 -27
- data/samples/bigdemo/icons/copy.xpm +0 -25
- data/samples/bigdemo/icons/cut.xpm +0 -24
- data/samples/bigdemo/icons/gauge.bmp +0 -0
- data/samples/bigdemo/icons/gauge.xpm +0 -27
- data/samples/bigdemo/icons/help.xpm +0 -25
- data/samples/bigdemo/icons/list.bmp +0 -0
- data/samples/bigdemo/icons/list.xpm +0 -27
- data/samples/bigdemo/icons/mondrian.ico +0 -0
- data/samples/bigdemo/icons/mondrian.xpm +0 -44
- data/samples/bigdemo/icons/new.xpm +0 -24
- data/samples/bigdemo/icons/ogl.ico +0 -0
- data/samples/bigdemo/icons/ogl.xpm +0 -45
- data/samples/bigdemo/icons/open.xpm +0 -26
- data/samples/bigdemo/icons/paste.bmp +0 -0
- data/samples/bigdemo/icons/paste.xpm +0 -38
- data/samples/bigdemo/icons/pointy.png +0 -0
- data/samples/bigdemo/icons/preview.xpm +0 -26
- data/samples/bigdemo/icons/print.xpm +0 -26
- data/samples/bigdemo/icons/radio.bmp +0 -0
- data/samples/bigdemo/icons/radio.xpm +0 -27
- data/samples/bigdemo/icons/robert.xpm +0 -415
- data/samples/bigdemo/icons/sashtest.ico +0 -0
- data/samples/bigdemo/icons/save.xpm +0 -25
- data/samples/bigdemo/icons/smiles.bmp +0 -0
- data/samples/bigdemo/icons/smiles.xpm +0 -39
- data/samples/bigdemo/icons/smiley.ico +0 -0
- data/samples/bigdemo/icons/smiley.xpm +0 -42
- data/samples/bigdemo/icons/stattext.xpm +0 -24
- data/samples/bigdemo/icons/test2.bmp +0 -0
- data/samples/bigdemo/icons/test2.png +0 -0
- data/samples/bigdemo/icons/test2.xpm +0 -79
- data/samples/bigdemo/icons/text.bmp +0 -0
- data/samples/bigdemo/icons/text.xpm +0 -27
- data/samples/bigdemo/icons/tog1.bmp +0 -0
- data/samples/bigdemo/icons/tog1.xpm +0 -38
- data/samples/bigdemo/icons/tog2.bmp +0 -0
- data/samples/bigdemo/icons/tog2.xpm +0 -38
- 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 +0 -25
- data/samples/bigdemo/icons/wxwin32x32.png +0 -0
- data/samples/bigdemo/icons/wxwin48x48.png +0 -0
- data/samples/bigdemo/run.rb +0 -98
- data/samples/bigdemo/tips.txt +0 -7
- data/samples/bigdemo/utils.rb +0 -20
- data/samples/bigdemo/wxArtProvider.rbw +0 -282
- data/samples/bigdemo/wxBitmapButton.rbw +0 -65
- data/samples/bigdemo/wxButton.rbw +0 -64
- data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
- data/samples/bigdemo/wxCheckBox.rbw +0 -50
- data/samples/bigdemo/wxCheckListBox.rbw +0 -65
- data/samples/bigdemo/wxChoice.rbw +0 -47
- data/samples/bigdemo/wxChoicebook.rbw +0 -78
- data/samples/bigdemo/wxColourDialog.rbw +0 -33
- data/samples/bigdemo/wxComboBox.rbw +0 -77
- data/samples/bigdemo/wxCursor.rbw +0 -136
- data/samples/bigdemo/wxDialog.rbw +0 -74
- data/samples/bigdemo/wxDirDialog.rbw +0 -29
- data/samples/bigdemo/wxDragImage.rbw +0 -70
- data/samples/bigdemo/wxFileDialog.rbw +0 -37
- data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
- data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
- data/samples/bigdemo/wxFontDialog.rbw +0 -200
- data/samples/bigdemo/wxFrame.rbw +0 -53
- data/samples/bigdemo/wxGauge.rbw +0 -65
- data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
- data/samples/bigdemo/wxGrid.rbw +0 -66
- data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
- data/samples/bigdemo/wxListBox.rbw +0 -140
- data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
- data/samples/bigdemo/wxMDIWindows.rbw +0 -50
- data/samples/bigdemo/wxMenu.rbw +0 -247
- data/samples/bigdemo/wxMessageDialog.rbw +0 -27
- data/samples/bigdemo/wxMiniFrame.rbw +0 -70
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
- data/samples/bigdemo/wxNotebook.rbw +0 -136
- data/samples/bigdemo/wxProgressDialog.rbw +0 -43
- data/samples/bigdemo/wxRadioBox.rbw +0 -72
- data/samples/bigdemo/wxRadioButton.rbw +0 -125
- data/samples/bigdemo/wxSashWindow.rbw +0 -141
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
- data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
- data/samples/bigdemo/wxSlider.rbw +0 -42
- data/samples/bigdemo/wxSpinButton.rbw +0 -50
- data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
- data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
- data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
- data/samples/bigdemo/wxStaticText.rbw +0 -55
- data/samples/bigdemo/wxStatusBar.rbw +0 -126
- data/samples/bigdemo/wxTextCtrl.rbw +0 -149
- data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
- data/samples/bigdemo/wxToggleButton.rbw +0 -49
- data/samples/bigdemo/wxToolBar.rbw +0 -131
- data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
- data/samples/caret/caret.rb +0 -298
- data/samples/caret/mondrian.xpm +0 -44
- data/samples/controls/books.rb +0 -189
- data/samples/controls/choice.xpm +0 -27
- data/samples/controls/combo.xpm +0 -27
- data/samples/controls/controls.rb +0 -1099
- data/samples/controls/gauge.xpm +0 -27
- data/samples/controls/list.xpm +0 -27
- data/samples/controls/mondrian.ico +0 -0
- data/samples/controls/mondrian.xpm +0 -44
- data/samples/controls/radio.xpm +0 -27
- data/samples/controls/stattext.xpm +0 -24
- data/samples/controls/test2.bmp +0 -0
- data/samples/controls/text.xpm +0 -27
- data/samples/controls/tn_books.png +0 -0
- data/samples/controls/tn_controls.png +0 -0
- data/samples/etc/choice.rb +0 -87
- data/samples/etc/tn_choice.png +0 -0
- data/samples/text/mondrian.ico +0 -0
- data/samples/text/mondrian.xpm +0 -44
- /data/samples/{caret → etc}/tn_caret.png +0 -0
data/samples/dialogs/dialogs.rb
CHANGED
@@ -11,876 +11,864 @@
|
|
11
11
|
|
12
12
|
require 'wx'
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
DIALOGS_CHOOSE_COLOUR = 1
|
17
|
-
DIALOGS_CHOOSE_COLOUR_GENERIC = 2
|
18
|
-
DIALOGS_CHOOSE_FONT = 3
|
19
|
-
DIALOGS_CHOOSE_FONT_GENERIC = 4
|
20
|
-
DIALOGS_MESSAGE_BOX = 5
|
21
|
-
DIALOGS_SINGLE_CHOICE = 6
|
22
|
-
DIALOGS_MULTI_CHOICE = 7
|
23
|
-
DIALOGS_TEXT_ENTRY = 8
|
24
|
-
DIALOGS_PASSWORD_ENTRY = 9
|
25
|
-
DIALOGS_FILE_OPEN = 10
|
26
|
-
DIALOGS_FILE_OPEN2 = 11
|
27
|
-
DIALOGS_FILES_OPEN = 12
|
28
|
-
DIALOGS_FILE_SAVE = 13
|
29
|
-
DIALOGS_DIR_CHOOSE = 14
|
30
|
-
DIALOGS_GENERIC_DIR_CHOOSE = 15
|
31
|
-
DIALOGS_TIP = 16
|
32
|
-
DIALOGS_CUSTOM_TIP = 17
|
33
|
-
DIALOGS_NUM_ENTRY = 18
|
34
|
-
DIALOGS_LOG_DIALOG = 19
|
35
|
-
DIALOGS_MODAL = 20
|
36
|
-
DIALOGS_MODELESS = 21
|
37
|
-
DIALOGS_MODELESS_BTN = 22
|
38
|
-
DIALOGS_PROGRESS = 23
|
39
|
-
DIALOGS_BUSYINFO = 24
|
40
|
-
DIALOGS_STYLED_BUSYINFO = 25
|
41
|
-
DIALOGS_FIND = 26
|
42
|
-
DIALOGS_REPLACE = 27
|
43
|
-
DIALOGS_PREFS = 28
|
44
|
-
DIALOGS_PREFS_TOOLBOOK = 29
|
45
|
-
|
46
|
-
class MyTipProvider < TipProvider
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
14
|
+
module Dialogs
|
15
|
+
|
16
|
+
DIALOGS_CHOOSE_COLOUR = 1
|
17
|
+
DIALOGS_CHOOSE_COLOUR_GENERIC = 2
|
18
|
+
DIALOGS_CHOOSE_FONT = 3
|
19
|
+
DIALOGS_CHOOSE_FONT_GENERIC = 4
|
20
|
+
DIALOGS_MESSAGE_BOX = 5
|
21
|
+
DIALOGS_SINGLE_CHOICE = 6
|
22
|
+
DIALOGS_MULTI_CHOICE = 7
|
23
|
+
DIALOGS_TEXT_ENTRY = 8
|
24
|
+
DIALOGS_PASSWORD_ENTRY = 9
|
25
|
+
DIALOGS_FILE_OPEN = 10
|
26
|
+
DIALOGS_FILE_OPEN2 = 11
|
27
|
+
DIALOGS_FILES_OPEN = 12
|
28
|
+
DIALOGS_FILE_SAVE = 13
|
29
|
+
DIALOGS_DIR_CHOOSE = 14
|
30
|
+
DIALOGS_GENERIC_DIR_CHOOSE = 15
|
31
|
+
DIALOGS_TIP = 16
|
32
|
+
DIALOGS_CUSTOM_TIP = 17
|
33
|
+
DIALOGS_NUM_ENTRY = 18
|
34
|
+
DIALOGS_LOG_DIALOG = 19
|
35
|
+
DIALOGS_MODAL = 20
|
36
|
+
DIALOGS_MODELESS = 21
|
37
|
+
DIALOGS_MODELESS_BTN = 22
|
38
|
+
DIALOGS_PROGRESS = 23
|
39
|
+
DIALOGS_BUSYINFO = 24
|
40
|
+
DIALOGS_STYLED_BUSYINFO = 25
|
41
|
+
DIALOGS_FIND = 26
|
42
|
+
DIALOGS_REPLACE = 27
|
43
|
+
DIALOGS_PREFS = 28
|
44
|
+
DIALOGS_PREFS_TOOLBOOK = 29
|
45
|
+
|
46
|
+
class MyTipProvider < Wx::TipProvider
|
47
|
+
TIPS = [
|
48
|
+
%Q{This is the first tip.},
|
49
|
+
%Q{This is the second tip.\nWhich even has a second line.},
|
50
|
+
%Q{This is the third tip.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.},
|
51
|
+
]
|
52
|
+
|
53
|
+
def initialize(curtip)
|
54
|
+
super
|
55
|
+
end
|
56
56
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
57
|
+
def get_tip
|
58
|
+
c = get_current_tip
|
59
|
+
if c >= 0 && c < TIPS.size
|
60
|
+
set_current_tip(c+1)
|
61
|
+
TIPS[c]
|
62
|
+
else
|
63
|
+
set_current_tip(1)
|
64
|
+
TIPS[0]
|
65
|
+
end
|
65
66
|
end
|
66
67
|
end
|
67
|
-
end
|
68
68
|
|
69
|
-
class MyModalDialog < Dialog
|
70
|
-
|
71
|
-
|
69
|
+
class MyModalDialog < Wx::Dialog
|
70
|
+
def initialize(parent)
|
71
|
+
super(parent, -1, "Modal dialog")
|
72
72
|
|
73
|
-
|
73
|
+
sizer_top = Wx::BoxSizer.new(Wx::HORIZONTAL)
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
75
|
+
@btn_focused = Wx::Button.new(self, -1, "Default button")
|
76
|
+
@btn_delete = Wx::Button.new(self, -1, "&Delete button")
|
77
|
+
btn_ok = Wx::Button.new(self, Wx::ID_CANCEL, "&Close")
|
78
|
+
sizer_top.add(@btn_focused, 0, Wx::ALIGN_CENTER | Wx::ALL, 5)
|
79
|
+
sizer_top.add(@btn_delete, 0, Wx::ALIGN_CENTER | Wx::ALL, 5)
|
80
|
+
sizer_top.add(btn_ok, 0, Wx::ALIGN_CENTER | Wx::ALL, 5)
|
81
81
|
|
82
|
-
|
83
|
-
|
82
|
+
set_auto_layout(true)
|
83
|
+
set_sizer(sizer_top)
|
84
84
|
|
85
|
-
|
86
|
-
|
85
|
+
sizer_top.set_size_hints(self)
|
86
|
+
sizer_top.fit(self)
|
87
87
|
|
88
|
-
|
89
|
-
|
88
|
+
@btn_focused.set_focus
|
89
|
+
@btn_focused.set_default
|
90
90
|
|
91
|
-
|
92
|
-
|
91
|
+
evt_button(-1) {|event| on_button(event) }
|
92
|
+
end
|
93
|
+
|
94
|
+
def on_button(event)
|
95
|
+
id = event.get_id
|
93
96
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
if id == @btn_delete.get_id
|
98
|
-
@btn_focused.destroy
|
99
|
-
@btn_focused = nil
|
97
|
+
if id == @btn_delete.get_id
|
98
|
+
@btn_focused.destroy
|
99
|
+
@btn_focused = nil
|
100
100
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
101
|
+
@btn_delete.disable
|
102
|
+
elsif @btn_focused && id == @btn_focused.get_id
|
103
|
+
get_text_from_user("Dummy prompt", "Modal dialog called from dialog",
|
104
|
+
"", self)
|
105
|
+
else
|
106
|
+
event.skip
|
107
|
+
end
|
107
108
|
end
|
108
109
|
end
|
109
|
-
end
|
110
110
|
|
111
111
|
|
112
|
-
class MyModelessDialog < Dialog
|
113
|
-
|
114
|
-
|
112
|
+
class MyModelessDialog < Wx::Dialog
|
113
|
+
def initialize(parent)
|
114
|
+
super(parent, -1, "Modeless dialog")
|
115
115
|
|
116
|
-
|
116
|
+
sizer_top = Wx::BoxSizer.new(Wx::VERTICAL)
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
118
|
+
btn = Wx::Button.new(self, DIALOGS_MODELESS_BTN, "Press me")
|
119
|
+
check = Wx::CheckBox.new(self, -1, "Should be disabled")
|
120
|
+
check.disable
|
121
121
|
|
122
|
-
|
123
|
-
|
122
|
+
sizer_top.add(btn, 1, Wx::EXPAND | Wx::ALL, 5)
|
123
|
+
sizer_top.add(check, 1, Wx::EXPAND | Wx::ALL, 5)
|
124
124
|
|
125
|
-
|
126
|
-
|
125
|
+
set_auto_layout(true)
|
126
|
+
set_sizer(sizer_top)
|
127
127
|
|
128
|
-
|
129
|
-
|
128
|
+
sizer_top.set_size_hints(self)
|
129
|
+
sizer_top.fit(self)
|
130
130
|
|
131
|
-
|
131
|
+
evt_button(DIALOGS_MODELESS_BTN) {|event| on_button(event) }
|
132
132
|
|
133
|
-
|
133
|
+
evt_close {|event| on_close(event) }
|
134
134
|
|
135
|
-
|
135
|
+
end
|
136
136
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
137
|
+
def on_button(_event)
|
138
|
+
Wx.message_box("Button pressed in modeless dialog", "Info",
|
139
|
+
Wx::OK | Wx::ICON_INFORMATION, self)
|
140
|
+
end
|
141
141
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
142
|
+
def on_close(event)
|
143
|
+
if event.can_veto
|
144
|
+
Wx.message_box("Use the menu item to close self dialog",
|
145
|
+
"Modeless dialog",
|
146
|
+
Wx::OK | Wx::ICON_INFORMATION, self)
|
147
147
|
|
148
|
-
|
148
|
+
event.veto
|
149
|
+
end
|
149
150
|
end
|
150
151
|
end
|
151
|
-
end
|
152
152
|
|
153
|
-
# PropertySheetDialog is specialised for doing preferences dialogs; it
|
154
|
-
# contains a BookCtrl of some sort
|
155
|
-
class MyPrefsDialog < Wx::PropertySheetDialog
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
create(parent, -1, "Preferences")
|
170
|
-
create_buttons(Wx::ID_OK|Wx::ID_CANCEL)
|
171
|
-
book_ctrl.image_list = img_list
|
172
|
-
book_ctrl.add_page(file_panel(book_ctrl), "File", false, 0)
|
173
|
-
book_ctrl.add_page(cdrom_panel(book_ctrl), "CD ROM", false, 1)
|
174
|
-
|
175
|
-
layout_dialog
|
176
|
-
end
|
153
|
+
# PropertySheetDialog is specialised for doing preferences dialogs; it
|
154
|
+
# contains a BookCtrl of some sort
|
155
|
+
class MyPrefsDialog < Wx::PropertySheetDialog
|
156
|
+
def initialize(parent, pref_type)
|
157
|
+
# Using Book type other than Notebook needs two-step construction
|
158
|
+
super()
|
159
|
+
img_id1 = img_id2 = -1
|
160
|
+
if pref_type == DIALOGS_PREFS_TOOLBOOK
|
161
|
+
self.sheet_style = Wx::PROPSHEET_BUTTONTOOLBOOK
|
162
|
+
self.sheet_outer_border = 1
|
163
|
+
self.sheet_inner_border = 2
|
164
|
+
imgs = [std_bitmap(Wx::ART_NORMAL_FILE), std_bitmap(Wx::ART_CDROM), std_bitmap(Wx::ART_REPORT_VIEW)]
|
165
|
+
img_id1 = 0
|
166
|
+
img_id2 = 1
|
167
|
+
end
|
177
168
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
169
|
+
create(parent, -1, "Preferences")
|
170
|
+
create_buttons(Wx::ID_OK|Wx::ID_CANCEL)
|
171
|
+
book_ctrl.set_images(imgs)
|
172
|
+
book_ctrl.add_page(file_panel(book_ctrl), "File", false, img_id1)
|
173
|
+
book_ctrl.add_page(cdrom_panel(book_ctrl), "CD ROM", false, img_id2)
|
182
174
|
|
183
|
-
|
184
|
-
|
185
|
-
panel.sizer = Wx::VBoxSizer.new
|
175
|
+
layout_dialog
|
176
|
+
end
|
186
177
|
|
187
|
-
|
188
|
-
|
178
|
+
# Gets one of the rather ugly standard bitmaps from ArtProvider
|
179
|
+
def std_bitmap(art_id)
|
180
|
+
Wx::BitmapBundle.new(Wx::ArtProvider.bitmap(art_id, Wx::ART_TOOLBAR, [32, 32]))
|
181
|
+
end
|
189
182
|
|
190
|
-
|
191
|
-
|
183
|
+
def file_panel(book)
|
184
|
+
panel = Wx::Panel.new(book)
|
185
|
+
panel.sizer = Wx::VBoxSizer.new
|
192
186
|
|
193
|
-
|
194
|
-
|
187
|
+
cb1 = Wx::CheckBox.new(panel, :label => 'Show hidden files')
|
188
|
+
panel.sizer.add(cb1, 0, Wx::ALL, 5)
|
195
189
|
|
196
|
-
|
197
|
-
|
190
|
+
cb2 = Wx::CheckBox.new(panel, :label => 'Always show extensions')
|
191
|
+
panel.sizer.add(cb2, 0, Wx::ALL, 5)
|
198
192
|
|
199
|
-
|
200
|
-
|
193
|
+
cb3 = Wx::CheckBox.new(panel, :label => 'Show icons')
|
194
|
+
panel.sizer.add(cb3, 0, Wx::ALL, 5)
|
201
195
|
|
202
|
-
|
203
|
-
|
204
|
-
panel
|
205
|
-
end
|
196
|
+
cb4 = Wx::CheckBox.new(panel, :label => 'Show owner')
|
197
|
+
panel.sizer.add(cb4, 0, Wx::ALL, 5)
|
206
198
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
:choices => choices,
|
215
|
-
:major_dimension => 1)
|
216
|
-
panel.sizer.add(rb, 0, Wx::GROW|Wx::ALL, 5)
|
217
|
-
panel
|
218
|
-
end
|
219
|
-
end
|
199
|
+
st = Wx::StaticText.new(panel, :label => "Sort by:")
|
200
|
+
panel.sizer.add(st, 0, Wx::ALL, 5)
|
201
|
+
|
202
|
+
cb1 = Wx::Choice.new(panel, :choices => %w|Name Created Modified Size|)
|
203
|
+
panel.sizer.add(cb1, 0, Wx::ALL, 5)
|
204
|
+
panel
|
205
|
+
end
|
220
206
|
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
207
|
+
def cdrom_panel(book)
|
208
|
+
panel = Wx::Panel.new(book)
|
209
|
+
panel.sizer = Wx::VBoxSizer.new
|
210
|
+
|
211
|
+
choices = [ 'Show files', 'Play media', 'Run CD', 'Do nothing' ]
|
212
|
+
rb = Wx::RadioBox.new( panel,
|
213
|
+
:label => 'When opening CD',
|
214
|
+
:choices => choices,
|
215
|
+
:major_dimension => 1)
|
216
|
+
panel.sizer.add(rb, 0, Wx::GROW|Wx::ALL, 5)
|
217
|
+
panel
|
218
|
+
end
|
225
219
|
end
|
226
220
|
|
227
|
-
|
221
|
+
class MyCanvas < Wx::ScrolledWindow
|
222
|
+
def initialize(parent)
|
223
|
+
super(parent, -1, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::NO_FULL_REPAINT_ON_RESIZE)
|
224
|
+
evt_paint { |event| on_paint(event) }
|
225
|
+
end
|
228
226
|
|
229
|
-
|
227
|
+
def clear
|
230
228
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
229
|
+
end
|
230
|
+
|
231
|
+
def on_paint(_event)
|
232
|
+
paint do |dc|
|
233
|
+
dc.set_text_foreground( Wx.get_app.canvas_text_colour )
|
234
|
+
dc.set_font( Wx.get_app.canvas_font )
|
235
|
+
dc.draw_text("Windows common dialogs test application", 10, 10)
|
236
|
+
end
|
236
237
|
end
|
237
238
|
end
|
238
|
-
end
|
239
239
|
|
240
|
-
class MyFrame < Frame
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
@dialog = nil
|
248
|
-
|
249
|
-
@dlg_find = nil
|
250
|
-
@dlg_replace = nil
|
251
|
-
|
252
|
-
@find_data = FindReplaceData.new
|
253
|
-
|
254
|
-
@ext_def = ""
|
255
|
-
@index = -1
|
256
|
-
@index_2 = -1
|
257
|
-
|
258
|
-
@max = 100
|
259
|
-
|
260
|
-
create_status_bar()
|
261
|
-
|
262
|
-
evt_menu(DIALOGS_CHOOSE_COLOUR, :on_choose_colour)
|
263
|
-
evt_menu(DIALOGS_CHOOSE_FONT, :on_choose_font)
|
264
|
-
evt_menu(DIALOGS_LOG_DIALOG, :on_log_dialog)
|
265
|
-
evt_menu(DIALOGS_MESSAGE_BOX, :on_message_box)
|
266
|
-
evt_menu(DIALOGS_TEXT_ENTRY, :on_text_entry)
|
267
|
-
evt_menu(DIALOGS_PASSWORD_ENTRY, :on_password_entry)
|
268
|
-
evt_menu(DIALOGS_NUM_ENTRY, :on_numeric_entry)
|
269
|
-
evt_menu(DIALOGS_SINGLE_CHOICE, :on_single_choice)
|
270
|
-
evt_menu(DIALOGS_MULTI_CHOICE, :on_multi_choice)
|
271
|
-
evt_menu(DIALOGS_FILE_OPEN, :on_file_open)
|
272
|
-
evt_menu(DIALOGS_FILE_OPEN2, :on_file_open2)
|
273
|
-
evt_menu(DIALOGS_FILES_OPEN, :on_files_open)
|
274
|
-
evt_menu(DIALOGS_FILE_SAVE, :on_file_save)
|
275
|
-
evt_menu(DIALOGS_DIR_CHOOSE, :on_dir_choose)
|
276
|
-
evt_menu(DIALOGS_MODAL, :on_modal_dlg)
|
277
|
-
evt_menu(DIALOGS_MODELESS, :on_modeless_dlg)
|
278
|
-
evt_menu(DIALOGS_TIP, :on_show_tip)
|
279
|
-
evt_menu(DIALOGS_CUSTOM_TIP, :on_show_custom_tip)
|
280
|
-
evt_menu(DIALOGS_PROGRESS, :on_show_progress)
|
281
|
-
evt_menu(DIALOGS_BUSYINFO, :on_show_busy_info)
|
282
|
-
evt_menu(DIALOGS_STYLED_BUSYINFO, :on_show_styled_busy_info)
|
283
|
-
evt_menu(DIALOGS_PREFS, :on_show_prefs)
|
284
|
-
evt_menu(DIALOGS_PREFS_TOOLBOOK,:on_show_prefs)
|
285
|
-
evt_menu(DIALOGS_FIND, :on_show_find_dialog)
|
286
|
-
evt_menu(DIALOGS_REPLACE, :on_show_replace_dialog)
|
287
|
-
evt_find(-1, :on_find_dialog)
|
288
|
-
evt_find_next(-1, :on_find_dialog)
|
289
|
-
evt_find_replace(-1, :on_find_dialog)
|
290
|
-
evt_find_replace_all(-1, :on_find_dialog)
|
291
|
-
evt_find_close(-1, :on_find_dialog)
|
292
|
-
evt_menu(ID_EXIT, :on_exit)
|
240
|
+
class MyFrame < Wx::Frame
|
241
|
+
def initialize(parent,
|
242
|
+
title,
|
243
|
+
pos,
|
244
|
+
size)
|
245
|
+
super(parent, -1, title, pos, size)
|
293
246
|
|
294
|
-
|
247
|
+
@dialog = nil
|
295
248
|
|
296
|
-
|
249
|
+
@dlg_find = nil
|
250
|
+
@dlg_replace = nil
|
297
251
|
|
298
|
-
|
252
|
+
@find_data = Wx::FindReplaceData.new
|
253
|
+
|
254
|
+
@ext_def = ""
|
255
|
+
@index = -1
|
256
|
+
@index_2 = -1
|
257
|
+
|
258
|
+
@max = 100
|
259
|
+
|
260
|
+
create_status_bar
|
261
|
+
|
262
|
+
evt_menu(DIALOGS_CHOOSE_COLOUR, :on_choose_colour)
|
263
|
+
evt_menu(DIALOGS_CHOOSE_FONT, :on_choose_font)
|
264
|
+
evt_menu(DIALOGS_LOG_DIALOG, :on_log_dialog)
|
265
|
+
evt_menu(DIALOGS_MESSAGE_BOX, :on_message_box)
|
266
|
+
evt_menu(DIALOGS_TEXT_ENTRY, :on_text_entry)
|
267
|
+
evt_menu(DIALOGS_PASSWORD_ENTRY, :on_password_entry)
|
268
|
+
evt_menu(DIALOGS_NUM_ENTRY, :on_numeric_entry)
|
269
|
+
evt_menu(DIALOGS_SINGLE_CHOICE, :on_single_choice)
|
270
|
+
evt_menu(DIALOGS_MULTI_CHOICE, :on_multi_choice)
|
271
|
+
evt_menu(DIALOGS_FILE_OPEN, :on_file_open)
|
272
|
+
evt_menu(DIALOGS_FILE_OPEN2, :on_file_open2)
|
273
|
+
evt_menu(DIALOGS_FILES_OPEN, :on_files_open)
|
274
|
+
evt_menu(DIALOGS_FILE_SAVE, :on_file_save)
|
275
|
+
evt_menu(DIALOGS_DIR_CHOOSE, :on_dir_choose)
|
276
|
+
evt_menu(DIALOGS_MODAL, :on_modal_dlg)
|
277
|
+
evt_menu(DIALOGS_MODELESS, :on_modeless_dlg)
|
278
|
+
evt_menu(DIALOGS_TIP, :on_show_tip)
|
279
|
+
evt_menu(DIALOGS_CUSTOM_TIP, :on_show_custom_tip)
|
280
|
+
evt_menu(DIALOGS_PROGRESS, :on_show_progress)
|
281
|
+
evt_menu(DIALOGS_BUSYINFO, :on_show_busy_info)
|
282
|
+
evt_menu(DIALOGS_STYLED_BUSYINFO, :on_show_styled_busy_info)
|
283
|
+
evt_menu(DIALOGS_PREFS, :on_show_prefs)
|
284
|
+
evt_menu(DIALOGS_PREFS_TOOLBOOK,:on_show_prefs)
|
285
|
+
evt_menu(DIALOGS_FIND, :on_show_find_dialog)
|
286
|
+
evt_menu(DIALOGS_REPLACE, :on_show_replace_dialog)
|
287
|
+
evt_find(-1, :on_find_dialog)
|
288
|
+
evt_find_next(-1, :on_find_dialog)
|
289
|
+
evt_find_replace(-1, :on_find_dialog)
|
290
|
+
evt_find_replace_all(-1, :on_find_dialog)
|
291
|
+
evt_find_close(-1, :on_find_dialog)
|
292
|
+
evt_menu(Wx::ID_EXIT, :on_exit)
|
299
293
|
|
300
|
-
data = ColourData.new
|
301
|
-
data.set_colour(col)
|
302
|
-
data.set_choose_full(true)
|
303
|
-
for i in 0 ... 16
|
304
|
-
colour = Colour.new(i*16, i*16, i*16)
|
305
|
-
data.set_custom_colour(i, colour)
|
306
294
|
end
|
307
295
|
|
308
|
-
|
309
|
-
dialog.set_title("Choose the background colour (not OS X)")
|
310
|
-
if dialog.show_modal() == ID_OK
|
311
|
-
retData = dialog.get_colour_data()
|
312
|
-
col = retData.get_colour()
|
313
|
-
MyApp.canvas.set_background_colour(col)
|
314
|
-
#$my_canvas.clear()
|
315
|
-
MyApp.canvas.refresh()
|
316
|
-
end
|
317
|
-
end
|
318
|
-
end
|
296
|
+
def on_choose_colour(_event)
|
319
297
|
|
298
|
+
col = MyApp.canvas.get_background_colour
|
320
299
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
300
|
+
data = Wx::ColourData.new
|
301
|
+
data.set_colour(col)
|
302
|
+
data.set_choose_full(true)
|
303
|
+
16.times do |i|
|
304
|
+
colour = Wx::Colour.new(i*16, i*16, i*16)
|
305
|
+
data.set_custom_colour(i, colour)
|
306
|
+
end
|
325
307
|
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
# you MUST destroy the dialog yourself than at some point
|
336
|
-
dialog2 = MessageDialog.new(self, msg, "Got font")
|
337
|
-
dialog2.show_modal
|
338
|
-
dialog2.destroy
|
308
|
+
Wx.ColourDialog(self, data) do |dialog|
|
309
|
+
dialog.set_title("Choose the background colour (not OS X)")
|
310
|
+
if dialog.show_modal == Wx::ID_OK
|
311
|
+
retData = dialog.get_colour_data
|
312
|
+
col = retData.get_colour
|
313
|
+
MyApp.canvas.set_background_colour(col)
|
314
|
+
#$my_canvas.clear
|
315
|
+
MyApp.canvas.refresh
|
316
|
+
end
|
339
317
|
end
|
340
|
-
#else: cancelled by the user, don't change the font
|
341
318
|
end
|
342
|
-
end
|
343
|
-
|
344
319
|
|
345
|
-
def on_log_dialog(event)
|
346
|
-
|
347
|
-
# calling yield() (as ~BusyCursor does) shouldn't result in messages
|
348
|
-
# being flushed -- test it
|
349
|
-
|
350
|
-
BusyCursor.busy() do
|
351
|
-
|
352
|
-
log_message("This is some message - everything is ok so far.")
|
353
|
-
log_message("Another message...\n... self one is on multiple lines")
|
354
|
-
log_warning("And then something went wrong!")
|
355
|
-
|
356
|
-
# and if ~BusyCursor doesn't do it, then call it manually
|
357
|
-
Wx::get_app.yield()
|
358
|
-
|
359
|
-
log_error("Intermediary error handler decided to abort.")
|
360
|
-
log_error("DEMO: The top level caller detected an unrecoverable error.")
|
361
|
-
|
362
|
-
Log::flush_active()
|
363
|
-
|
364
|
-
log_message("And this is the same dialog but with only one message.")
|
365
|
-
end
|
366
|
-
end
|
367
320
|
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
321
|
+
def on_choose_font(_event)
|
322
|
+
data = Wx::FontData.new
|
323
|
+
data.set_initial_font(Wx::get_app.canvas_font)
|
324
|
+
data.set_colour(Wx::get_app.canvas_text_colour)
|
325
|
+
|
326
|
+
Wx::FontDialog(self, data) do |dialog|
|
327
|
+
if dialog.show_modal == Wx::ID_OK
|
328
|
+
ret_data = dialog.get_font_data
|
329
|
+
Wx::get_app.canvas_font = ret_data.get_chosen_font
|
330
|
+
Wx::get_app.canvas_text_colour = ret_data.get_colour
|
331
|
+
font = ret_data.get_chosen_font
|
332
|
+
msg = "Font = %s, %i pt" % [ font.get_face_name,
|
333
|
+
font.get_point_size ]
|
334
|
+
# Using functors is not mandatory but to prevent memory leaks
|
335
|
+
# you MUST destroy the dialog yourself than at some point
|
336
|
+
dialog2 = Wx::MessageDialog.new(self, msg, "Got font")
|
337
|
+
dialog2.show_modal
|
338
|
+
dialog2.destroy
|
339
|
+
end
|
340
|
+
#else: cancelled by the user, don't change the font
|
381
341
|
end
|
382
342
|
end
|
383
|
-
end
|
384
343
|
|
385
344
|
|
386
|
-
|
345
|
+
def on_log_dialog(_event)
|
387
346
|
|
388
|
-
|
389
|
-
|
390
|
-
"Enter a number:", "Numeric input test",
|
391
|
-
50, 0, 100, self )
|
347
|
+
# calling yield (as ~BusyCursor does) shouldn't result in messages
|
348
|
+
# being flushed -- test it
|
392
349
|
|
393
|
-
|
394
|
-
msg = "Invalid number entered or dialog cancelled."
|
395
|
-
icon = ICON_HAND
|
396
|
-
else
|
397
|
-
msg = sprintf("You've entered %d", res )
|
398
|
-
icon = ICON_INFORMATION
|
399
|
-
end
|
350
|
+
Wx::BusyCursor.busy do
|
400
351
|
|
401
|
-
|
402
|
-
|
352
|
+
Wx.log_message("This is some message - everything is ok so far.")
|
353
|
+
Wx.log_message("Another message...\n... self one is on multiple lines")
|
354
|
+
Wx.log_warning("And then something went wrong!")
|
403
355
|
|
404
|
-
|
356
|
+
# and if ~BusyCursor doesn't do it, then call it manually
|
357
|
+
Wx::get_app.yield
|
405
358
|
|
406
|
-
|
407
|
-
|
408
|
-
"", self)
|
409
|
-
if pwd
|
410
|
-
message_box(sprintf("Your password is '%s'", pwd),
|
411
|
-
"Got password", OK | ICON_INFORMATION, self)
|
412
|
-
end
|
413
|
-
end
|
359
|
+
Wx.log_error("Intermediary error handler decided to abort.")
|
360
|
+
Wx.log_error("DEMO: The top level caller detected an unrecoverable error.")
|
414
361
|
|
362
|
+
Wx::Log.flush_active
|
415
363
|
|
416
|
-
|
364
|
+
Wx.log_message("And this is the same dialog but with only one message.")
|
365
|
+
end
|
366
|
+
end
|
417
367
|
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
368
|
+
def on_message_box(_event)
|
369
|
+
|
370
|
+
Wx.MessageDialog(nil, "This is a message box\nA long, long string to test out the message box properly",
|
371
|
+
"Message box text", Wx::NO_DEFAULT|Wx::YES_NO|Wx::CANCEL|Wx::ICON_INFORMATION) do |dialog|
|
372
|
+
case dialog.show_modal
|
373
|
+
when Wx::ID_YES
|
374
|
+
Wx.log_status("You pressed \"Yes\"")
|
375
|
+
when Wx::ID_NO
|
376
|
+
Wx.log_status("You pressed \"No\"")
|
377
|
+
when Wx::ID_CANCEL
|
378
|
+
Wx.log_status("You pressed \"Cancel\"")
|
379
|
+
else
|
380
|
+
Wx.log_error("Unexpected MessageDialog return code!")
|
381
|
+
end
|
428
382
|
end
|
429
383
|
end
|
430
|
-
end
|
431
384
|
|
432
|
-
def on_single_choice(event)
|
433
385
|
|
434
|
-
|
386
|
+
def on_numeric_entry(_event)
|
435
387
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
choices, OK | CANCEL) do |dialog|
|
441
|
-
dialog.set_selection(2)
|
388
|
+
res = Wx.get_number_from_user( "This is some text, actually a lot of text.\n" +
|
389
|
+
"Even two rows of text.",
|
390
|
+
"Enter a number:", "Numeric input test",
|
391
|
+
50, 0, 100, self )
|
442
392
|
|
443
|
-
if
|
444
|
-
|
393
|
+
if res == -1
|
394
|
+
msg = "Invalid number entered or dialog cancelled."
|
395
|
+
icon = Wx::ICON_HAND
|
396
|
+
else
|
397
|
+
msg = sprintf("You've entered %d", res )
|
398
|
+
icon = Wx::ICON_INFORMATION
|
445
399
|
end
|
400
|
+
|
401
|
+
Wx.message_box(msg, "Numeric test result", Wx::OK | icon, self)
|
446
402
|
end
|
447
|
-
end
|
448
403
|
|
404
|
+
def on_password_entry(_event)
|
405
|
+
|
406
|
+
pwd = Wx.get_password_from_user("Enter password:",
|
407
|
+
"Password entry dialog",
|
408
|
+
"", self)
|
409
|
+
if pwd
|
410
|
+
Wx.message_box(sprintf("Your password is '%s'", pwd),
|
411
|
+
"Got password", Wx::OK | Wx::ICON_INFORMATION, self)
|
412
|
+
end
|
413
|
+
end
|
449
414
|
|
450
|
-
def on_multi_choice(event)
|
451
415
|
|
452
|
-
|
416
|
+
def on_text_entry(_event)
|
453
417
|
|
454
|
-
|
418
|
+
Wx.TextEntryDialog(self,
|
455
419
|
"This is a small sample\n" +
|
456
|
-
"A
|
457
|
-
"Please
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
log_message(msg)
|
420
|
+
"A long, long string to test out the text entrybox",
|
421
|
+
"Please enter a string",
|
422
|
+
"Default value",
|
423
|
+
Wx::OK | Wx::CANCEL) do |dialog|
|
424
|
+
if dialog.show_modal == Wx::ID_OK
|
425
|
+
dialog2 = Wx::MessageDialog.new(self, dialog.get_value, "Got string")
|
426
|
+
dialog2.show_modal
|
427
|
+
dialog2.destroy
|
465
428
|
end
|
466
429
|
end
|
467
430
|
end
|
468
|
-
end
|
469
431
|
|
470
|
-
|
432
|
+
def on_single_choice(_event)
|
471
433
|
|
472
|
-
|
473
|
-
"Testing open file dialog",
|
474
|
-
"",
|
475
|
-
"",
|
476
|
-
"C++ files (*.h;*.cpp)|*.h;*.cpp"
|
477
|
-
) do |dialog|
|
478
|
-
dialog.set_directory(get_home_dir)
|
434
|
+
choices = %w[One Two Three Four Five]
|
479
435
|
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
436
|
+
Wx.SingleChoiceDialog(self,
|
437
|
+
"This is a small sample\n" +
|
438
|
+
"A single-choice convenience dialog",
|
439
|
+
"Please select a value",
|
440
|
+
choices, Wx::OK | Wx::CANCEL) do |dialog|
|
441
|
+
dialog.set_selection(2)
|
442
|
+
|
443
|
+
if dialog.show_modal == Wx::ID_OK
|
444
|
+
Wx.MessageDialog(self, dialog.get_string_selection, "Got string")
|
445
|
+
end
|
488
446
|
end
|
489
447
|
end
|
490
|
-
end
|
491
448
|
|
492
449
|
|
493
|
-
|
494
|
-
# call to FileSelector: it is remembered after each new call and the next
|
495
|
-
# one will use it by default
|
496
|
-
def on_file_open2(event)
|
450
|
+
def on_multi_choice(_event)
|
497
451
|
|
498
|
-
|
499
|
-
"Select the file to load",
|
500
|
-
"", "",
|
501
|
-
@ext_def,
|
502
|
-
"Waveform (*.wav)|*.wav|Plain text (*.txt)|*.txt|All files (*.*)|*.*",
|
503
|
-
FD_CHANGE_DIR,
|
504
|
-
self
|
505
|
-
)
|
452
|
+
choices = %w[One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve Seventeen]
|
506
453
|
|
507
|
-
|
508
|
-
|
454
|
+
Wx.MultiChoiceDialog(self,
|
455
|
+
"This is a small sample\n" +
|
456
|
+
"A multi-choice convenience dialog",
|
457
|
+
"Please select a value",
|
458
|
+
choices, Wx::OK | Wx::CANCEL) do |dialog|
|
459
|
+
if dialog.show_modal == Wx::ID_OK
|
460
|
+
selections = dialog.get_selections
|
461
|
+
if selections
|
462
|
+
msg = ("You selected %d items:\n" % selections.length) +
|
463
|
+
selections.length.times.collect { |n| "\t%d: %d (%s)\n" % [n, selections[n], choices[selections[n]]] }.join
|
464
|
+
Wx.log_message(msg)
|
465
|
+
end
|
466
|
+
end
|
467
|
+
end
|
509
468
|
end
|
510
469
|
|
511
|
-
|
512
|
-
|
470
|
+
def on_file_open(_event)
|
471
|
+
|
472
|
+
Wx.FileDialog(self,
|
473
|
+
"Testing open file dialog",
|
474
|
+
"",
|
475
|
+
"",
|
476
|
+
"C++ files (*.h;*.cpp)|*.h;*.cpp") do |dialog|
|
477
|
+
dialog.set_directory(Wx.get_home_dir)
|
478
|
+
|
479
|
+
if dialog.show_modal == Wx::ID_OK
|
480
|
+
info = sprintf("Full file name: %s\n" +
|
481
|
+
"Path: %s\n" +
|
482
|
+
"Name: %s",
|
483
|
+
dialog.get_path,
|
484
|
+
dialog.get_directory,
|
485
|
+
dialog.get_filename)
|
486
|
+
Wx.MessageDialog(self, info, "Selected file")
|
487
|
+
end
|
488
|
+
end
|
489
|
+
end
|
513
490
|
|
514
|
-
log_message("You selected the file '%s', remembered extension '%s'",
|
515
|
-
path, @ext_def)
|
516
|
-
end
|
517
491
|
|
492
|
+
# this shows how to take advantage of specifying a default extension in the
|
493
|
+
# call to FileSelector: it is remembered after each new call and the next
|
494
|
+
# one will use it by default
|
495
|
+
def on_file_open2(_event)
|
518
496
|
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
497
|
+
path = Wx.file_selector(
|
498
|
+
"Select the file to load",
|
499
|
+
"", "",
|
500
|
+
@ext_def,
|
501
|
+
"Waveform (*.wav)|*.wav|Plain text (*.txt)|*.txt|All files (*.*)|*.*",
|
502
|
+
Wx::FD_CHANGE_DIR,
|
503
|
+
self)
|
526
504
|
|
527
|
-
|
528
|
-
|
529
|
-
Wx::MessageDialog(self, msg, "Selected files")
|
505
|
+
if path == nil
|
506
|
+
return nil
|
530
507
|
end
|
531
|
-
end
|
532
|
-
end
|
533
508
|
|
509
|
+
# it is just a sample, would use SplitPath in real program
|
510
|
+
@ext_def = path[/[^.]*$/]
|
511
|
+
|
512
|
+
Wx.log_message("You selected the file '%s', remembered extension '%s'",
|
513
|
+
path, @ext_def)
|
514
|
+
end
|
534
515
|
|
535
|
-
def on_file_save(event)
|
536
|
-
Wx::FileDialog(self,
|
537
|
-
"Testing save file dialog",
|
538
|
-
"",
|
539
|
-
"myletter.doc",
|
540
|
-
"Text files (*.txt)|*.txt|Document files (*.doc)|*.doc",
|
541
|
-
FD_SAVE | FD_OVERWRITE_PROMPT) do |dialog|
|
542
|
-
dialog.set_filter_index(1)
|
543
516
|
|
544
|
-
|
517
|
+
def on_files_open(_event)
|
518
|
+
Wx.FileDialog(self, "Testing open multiple file dialog",
|
519
|
+
"", "", Wx::FILE_SELECTOR_DEFAULT_WILDCARD_STR,
|
520
|
+
Wx::FD_MULTIPLE) do |dialog|
|
521
|
+
if dialog.show_modal == Wx::ID_OK
|
522
|
+
paths = dialog.get_paths
|
523
|
+
filenames = dialog.get_filenames
|
545
524
|
|
546
|
-
|
547
|
-
|
525
|
+
count = paths.length
|
526
|
+
msg = count.times.collect { |n| "File %d: %s (%s)\n" % [n, paths[n], filenames[n]] }.join
|
527
|
+
Wx.MessageDialog(self, msg, "Selected files")
|
528
|
+
end
|
548
529
|
end
|
549
530
|
end
|
550
|
-
end
|
551
531
|
|
552
|
-
def on_dir_choose(event)
|
553
532
|
|
554
|
-
|
555
|
-
|
533
|
+
def on_file_save(_event)
|
534
|
+
Wx.FileDialog(self,
|
535
|
+
"Testing save file dialog",
|
536
|
+
"",
|
537
|
+
"myletter.doc",
|
538
|
+
"Text files (*.txt)|*.txt|Document files (*.doc)|*.doc",
|
539
|
+
Wx::FD_SAVE | Wx::FD_OVERWRITE_PROMPT) do |dialog|
|
540
|
+
dialog.set_filter_index(1)
|
556
541
|
|
557
|
-
|
558
|
-
|
559
|
-
|
542
|
+
if dialog.show_modal == Wx::ID_OK
|
543
|
+
|
544
|
+
Wx.log_message("%s, filter %d",
|
545
|
+
dialog.get_path, dialog.get_filter_index)
|
546
|
+
end
|
560
547
|
end
|
561
548
|
end
|
562
|
-
end
|
563
549
|
|
550
|
+
def on_dir_choose(_event)
|
564
551
|
|
565
|
-
|
566
|
-
|
567
|
-
end
|
552
|
+
# pass some initial dir to DirDialog
|
553
|
+
dir_home = Wx.get_home_dir
|
568
554
|
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
@dialog = MyModelessDialog.new(self)
|
555
|
+
Wx.DirDialog(self, "Testing directory picker", dir_home) do |dialog|
|
556
|
+
if dialog.show_modal == Wx::ID_OK
|
557
|
+
Wx.log_message("Selected path: %s", dialog.get_path)
|
558
|
+
end
|
574
559
|
end
|
575
|
-
@dialog.show(true)
|
576
|
-
else # hide
|
577
|
-
@dialog.destroy
|
578
|
-
@dialog = nil
|
579
560
|
end
|
580
|
-
end
|
581
561
|
|
582
|
-
def on_show_tip(event)
|
583
562
|
|
584
|
-
|
585
|
-
|
563
|
+
def on_modal_dlg(_event)
|
564
|
+
Dialogs.MyModalDialog(self)
|
586
565
|
end
|
587
566
|
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
567
|
+
def on_modeless_dlg(event)
|
568
|
+
show = get_menu_bar.is_checked(event.get_id)
|
569
|
+
if show
|
570
|
+
@dialog ||= Dialogs::MyModelessDialog.new(self)
|
571
|
+
@dialog.show(true)
|
572
|
+
else # hide
|
573
|
+
@dialog.destroy
|
574
|
+
@dialog = nil
|
575
|
+
end
|
596
576
|
end
|
597
577
|
|
598
|
-
|
578
|
+
def on_show_tip(_event)
|
599
579
|
|
600
|
-
|
580
|
+
if @index == -1
|
581
|
+
@index = rand(5)
|
582
|
+
end
|
601
583
|
|
602
|
-
|
584
|
+
tip_src = File.join( File.dirname(__FILE__), 'tips.txt')
|
585
|
+
tip_provider = Wx.create_file_tip_provider(tip_src, @index)
|
603
586
|
|
604
|
-
|
605
|
-
|
606
|
-
|
587
|
+
show_at_startup = Wx.show_tip(self, tip_provider)
|
588
|
+
|
589
|
+
if show_at_startup
|
590
|
+
Wx.message_box("Will show tips on startup", "Tips dialog",
|
591
|
+
Wx::OK | Wx::ICON_INFORMATION, self)
|
592
|
+
end
|
607
593
|
|
608
|
-
|
609
|
-
show_at_startup = show_tip(self, tip_provider)
|
594
|
+
@index = tip_provider.get_current_tip
|
610
595
|
|
611
|
-
if show_at_startup
|
612
|
-
message_box("Will show tips on startup", "Tips dialog",
|
613
|
-
OK | ICON_INFORMATION, self)
|
614
596
|
end
|
615
597
|
|
616
|
-
|
598
|
+
def on_show_custom_tip(_event)
|
617
599
|
|
618
|
-
|
600
|
+
if @index_2 == -1
|
601
|
+
@index_2 = rand(3)
|
602
|
+
end
|
619
603
|
|
620
|
-
|
621
|
-
|
622
|
-
end
|
604
|
+
tip_provider = MyTipProvider.new(@index_2)
|
605
|
+
show_at_startup = Wx.show_tip(self, tip_provider)
|
623
606
|
|
607
|
+
if show_at_startup
|
608
|
+
Wx.message_box("Will show tips on startup", "Tips dialog",
|
609
|
+
Wx::OK | Wx::ICON_INFORMATION, self)
|
610
|
+
end
|
624
611
|
|
625
|
-
|
626
|
-
MyPrefsDialog(self, event.id)
|
627
|
-
end
|
612
|
+
@index_2 = tip_provider.get_current_tip
|
628
613
|
|
629
|
-
|
630
|
-
cont = false
|
631
|
-
Wx::ProgressDialog("Progress dialog example",
|
632
|
-
"An informative message\n"+"#{' '*100}\n\n\n\n",
|
633
|
-
@max, # range
|
634
|
-
self, # parent
|
635
|
-
PD_CAN_ABORT | PD_CAN_SKIP | PD_APP_MODAL |
|
636
|
-
PD_ELAPSED_TIME | PD_ESTIMATED_TIME |
|
637
|
-
PD_REMAINING_TIME) do |dialog|
|
638
|
-
cont = true
|
639
|
-
i = 0
|
640
|
-
while i <= @max
|
641
|
-
if i == 0
|
642
|
-
cont = dialog.update(i)
|
643
|
-
elsif i == @max
|
644
|
-
cont = dialog.update(i, "That's all, folks!\n\nNothing more to see here any more.")
|
645
|
-
elsif i <= (@max / 2)
|
646
|
-
cont = dialog.pulse("Testing indeterminate mode\n" +
|
647
|
-
"\n" +
|
648
|
-
"This mode allows you to show to the user\n" +
|
649
|
-
"that something is going on even if you don't know\n" +
|
650
|
-
"when exactly will you finish.")
|
651
|
-
else
|
652
|
-
cont = dialog.update(i, "Now in standard determinate mode\n" +
|
653
|
-
"\n" +
|
654
|
-
"This is the standard usage mode in which you\n" +
|
655
|
-
"update the dialog after performing each new step of work.\n" +
|
656
|
-
"It requires knowing the total number of steps in advance.")
|
657
|
-
end
|
614
|
+
end
|
658
615
|
|
659
|
-
|
660
|
-
|
661
|
-
"Progress dialog question", # caption
|
662
|
-
YES_NO | ICON_QUESTION) == YES
|
663
|
-
dialog.show(false)
|
664
|
-
break
|
665
|
-
end
|
666
|
-
dialog.resume
|
667
|
-
elsif cont == :skipped
|
668
|
-
i += (@max / 4)
|
669
|
-
i = @max-1 if i >= @max
|
670
|
-
end
|
671
|
-
sleep(i == 0 ? 1 : 0.15)
|
672
|
-
i += 1
|
673
|
-
end
|
616
|
+
def on_exit(_event)
|
617
|
+
close(true)
|
674
618
|
end
|
675
619
|
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
log_status("Countdown from %d finished", @max)
|
620
|
+
|
621
|
+
def on_show_prefs(event)
|
622
|
+
Dialogs.MyPrefsDialog(self, event.id)
|
680
623
|
end
|
681
|
-
end
|
682
624
|
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
625
|
+
def on_show_progress(_event)
|
626
|
+
cont = false
|
627
|
+
Wx.ProgressDialog("Progress dialog example",
|
628
|
+
"An informative message\n"+"#{' '*100}\n\n\n\n",
|
629
|
+
@max, # range
|
630
|
+
self, # parent
|
631
|
+
Wx::PD_CAN_ABORT | Wx::PD_CAN_SKIP | Wx::PD_APP_MODAL |
|
632
|
+
Wx::PD_ELAPSED_TIME | Wx::PD_ESTIMATED_TIME |
|
633
|
+
Wx::PD_REMAINING_TIME) do |dialog|
|
634
|
+
cont = true
|
635
|
+
i = 0
|
636
|
+
while i <= @max
|
637
|
+
if i == 0
|
638
|
+
cont = dialog.update(i)
|
639
|
+
elsif i == @max
|
640
|
+
cont = dialog.update(i, "That's all, folks!\n\nNothing more to see here any more.")
|
641
|
+
elsif i <= (@max / 2)
|
642
|
+
cont = dialog.pulse("Testing indeterminate mode\n" +
|
643
|
+
"\n" +
|
644
|
+
"This mode allows you to show to the user\n" +
|
645
|
+
"that something is going on even if you don't know\n" +
|
646
|
+
"when exactly will you finish.")
|
647
|
+
else
|
648
|
+
cont = dialog.update(i, "Now in standard determinate mode\n" +
|
649
|
+
"\n" +
|
650
|
+
"This is the standard usage mode in which you\n" +
|
651
|
+
"update the dialog after performing each new step of work.\n" +
|
652
|
+
"It requires knowing the total number of steps in advance.")
|
653
|
+
end
|
654
|
+
|
655
|
+
if !cont
|
656
|
+
if Wx.message_box("Do you really want to cancel?",
|
657
|
+
"Progress dialog question", # caption
|
658
|
+
Wx::YES_NO | Wx::ICON_QUESTION) == Wx::YES
|
659
|
+
dialog.show(false)
|
660
|
+
break
|
661
|
+
end
|
662
|
+
dialog.resume
|
663
|
+
elsif cont == :skipped
|
664
|
+
i += (@max / 4)
|
665
|
+
i = @max-1 if i >= @max
|
666
|
+
end
|
667
|
+
sleep(i == 0 ? 1 : 0.15)
|
668
|
+
i += 1
|
695
669
|
end
|
696
|
-
|
670
|
+
end
|
697
671
|
|
698
|
-
|
672
|
+
if !cont
|
673
|
+
Wx.log_status("Progress dialog aborted!")
|
674
|
+
else
|
675
|
+
Wx.log_status("Countdown from %d finished", @max)
|
699
676
|
end
|
700
677
|
end
|
701
|
-
log_status(result)
|
702
|
-
end
|
703
678
|
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
bif = BusyInfoFlags.new.parent(self).icon(Wx::Icon.new(icon_file)).title("Busy window").text("Working, please wait...")
|
709
|
-
result = BusyInfo.busy(bif) do |bi|
|
679
|
+
def on_show_busy_info(_event)
|
680
|
+
result = nil
|
681
|
+
Wx::WindowDisabler.disable(self) do
|
682
|
+
result = Wx::BusyInfo.busy("Working, please wait...", self) do |bi|
|
710
683
|
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
for i in 0 ... 18
|
717
|
-
Wx::get_app.yield()
|
718
|
-
end
|
719
|
-
sleep(1)
|
684
|
+
18.times { Wx.get_app.yield }
|
685
|
+
sleep(1)
|
686
|
+
bi.update_text('Working some more...')
|
687
|
+
18.times { Wx.get_app.yield }
|
688
|
+
sleep(1)
|
720
689
|
|
721
|
-
|
690
|
+
'Finished work!'
|
691
|
+
end
|
722
692
|
end
|
693
|
+
Wx.log_status(result)
|
723
694
|
end
|
724
|
-
log_status(result)
|
725
|
-
end
|
726
695
|
|
727
|
-
|
696
|
+
def on_show_styled_busy_info(_event)
|
697
|
+
result = nil
|
698
|
+
icon_file = File.join( File.dirname(__FILE__)+"/../art", "wxruby.png")
|
699
|
+
Wx::WindowDisabler.disable(self) do
|
700
|
+
bif = Wx::BusyInfoFlags.new.parent(self).icon(Wx::Icon.new(icon_file)).title("Busy window").text("Working, please wait...")
|
701
|
+
result = Wx::BusyInfo.busy(bif) do |bi|
|
728
702
|
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
self,
|
735
|
-
@find_data,
|
736
|
-
"Find and replace dialog",
|
737
|
-
FR_REPLACEDIALOG
|
738
|
-
)
|
703
|
+
18.times { Wx.get_app.yield }
|
704
|
+
sleep(1)
|
705
|
+
bi.update_text('Working some more...')
|
706
|
+
18.times { Wx.get_app.yield }
|
707
|
+
sleep(1)
|
739
708
|
|
740
|
-
|
709
|
+
'Finished work!'
|
710
|
+
end
|
711
|
+
end
|
712
|
+
Wx.log_status(result)
|
741
713
|
end
|
742
|
-
end
|
743
714
|
|
744
|
-
|
715
|
+
def on_show_replace_dialog(_event)
|
745
716
|
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
)
|
717
|
+
if @dlg_replace
|
718
|
+
@dlg_replace.destroy
|
719
|
+
@dlg_replace = nil
|
720
|
+
else
|
721
|
+
@dlg_replace = Wx::FindReplaceDialog.new(
|
722
|
+
self,
|
723
|
+
@find_data,
|
724
|
+
"Find and replace dialog",
|
725
|
+
Wx::FR_REPLACEDIALOG)
|
756
726
|
|
757
|
-
|
727
|
+
@dlg_replace.show(true)
|
728
|
+
end
|
758
729
|
end
|
759
|
-
end
|
760
730
|
|
761
|
-
|
762
|
-
str = ""
|
763
|
-
str << ((flags & FR_DOWN) != 0 ? "down" : "up") << ", " \
|
764
|
-
<< ((flags & FR_WHOLEWORD) != 0 ? "whole words only, " : "") \
|
765
|
-
<< ((flags & FR_MATCHCASE) != 0 ? "" : "not ") \
|
766
|
-
<< "case sensitive"
|
731
|
+
def on_show_find_dialog(_event)
|
767
732
|
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
def on_find_dialog(event)
|
772
|
-
|
773
|
-
type = event.get_event_type()
|
774
|
-
|
775
|
-
if type == EVT_FIND || type == EVT_FIND_NEXT
|
776
|
-
log_message("Find %s'%s' (flags: %s)",
|
777
|
-
type == EVT_FIND_NEXT ? "next " : "",
|
778
|
-
event.get_find_string(),
|
779
|
-
decode_find_dialog_event_flags(event.get_flags()))
|
780
|
-
elsif type == EVT_FIND_REPLACE || type == EVT_FIND_REPLACE_ALL
|
781
|
-
log_message("Replace %s'%s' with '%s' (flags: %s)",
|
782
|
-
type == EVT_FIND_REPLACE_ALL ? "all " : "",
|
783
|
-
event.get_find_string(),
|
784
|
-
event.get_replace_string(),
|
785
|
-
decode_find_dialog_event_flags(event.get_flags()))
|
786
|
-
elsif type == EVT_FIND_CLOSE
|
787
|
-
dlg = event.get_dialog()
|
788
|
-
if dlg == @dlg_find
|
789
|
-
txt = "Find"
|
790
|
-
id_menu = DIALOGS_FIND
|
733
|
+
if @dlg_find
|
734
|
+
@dlg_find.destroy
|
791
735
|
@dlg_find = nil
|
792
|
-
elsif dlg == @dlg_replace
|
793
|
-
txt = "Replace"
|
794
|
-
id_menu = DIALOGS_REPLACE
|
795
|
-
@dlg_replace = nil
|
796
736
|
else
|
797
|
-
|
798
|
-
|
799
|
-
|
737
|
+
@dlg_find = Wx::FindReplaceDialog.new(
|
738
|
+
self,
|
739
|
+
@find_data,
|
740
|
+
"Find dialog", # just for testing
|
741
|
+
Wx::FR_NOWHOLEWORD)
|
742
|
+
|
743
|
+
@dlg_find.show(true)
|
800
744
|
end
|
745
|
+
end
|
801
746
|
|
802
|
-
|
747
|
+
def decode_find_dialog_event_flags(flags)
|
748
|
+
str = ""
|
749
|
+
str << ((flags & Wx::FR_DOWN) != 0 ? "down" : "up") << ", " \
|
750
|
+
<< ((flags & Wx::FR_WHOLEWORD) != 0 ? "whole words only, " : "") \
|
751
|
+
<< ((flags & Wx::FR_MATCHCASE) != 0 ? "" : "not ") \
|
752
|
+
<< "case sensitive"
|
803
753
|
|
804
|
-
|
805
|
-
|
806
|
-
|
754
|
+
str
|
755
|
+
end
|
756
|
+
|
757
|
+
def on_find_dialog(event)
|
758
|
+
|
759
|
+
type = event.get_event_type
|
760
|
+
|
761
|
+
if type == Wx::EVT_FIND || type == Wx::EVT_FIND_NEXT
|
762
|
+
Wx.log_message("Find %s'%s' (flags: %s)",
|
763
|
+
type == Wx::EVT_FIND_NEXT ? "next " : "",
|
764
|
+
event.get_find_string,
|
765
|
+
decode_find_dialog_event_flags(event.get_flags))
|
766
|
+
elsif type == Wx::EVT_FIND_REPLACE || type == Wx::EVT_FIND_REPLACE_ALL
|
767
|
+
Wx.log_message("Replace %s'%s' with '%s' (flags: %s)",
|
768
|
+
type == Wx::EVT_FIND_REPLACE_ALL ? "all " : "",
|
769
|
+
event.get_find_string,
|
770
|
+
event.get_replace_string,
|
771
|
+
decode_find_dialog_event_flags(event.get_flags))
|
772
|
+
elsif type == Wx::EVT_FIND_CLOSE
|
773
|
+
dlg = event.get_dialog
|
774
|
+
if dlg == @dlg_find
|
775
|
+
txt = "Find"
|
776
|
+
id_menu = DIALOGS_FIND
|
777
|
+
@dlg_find = nil
|
778
|
+
elsif dlg == @dlg_replace
|
779
|
+
txt = "Replace"
|
780
|
+
id_menu = DIALOGS_REPLACE
|
781
|
+
@dlg_replace = nil
|
782
|
+
else
|
783
|
+
txt = "Unknown"
|
784
|
+
id_menu = -1
|
785
|
+
Wx.log_error("unexpected event")
|
786
|
+
end
|
787
|
+
|
788
|
+
Wx.log_message("%s dialog is being closed.", txt)
|
789
|
+
|
790
|
+
if id_menu != -1
|
791
|
+
get_menu_bar.check(id_menu, false)
|
792
|
+
end
|
807
793
|
|
808
|
-
|
809
|
-
|
810
|
-
|
794
|
+
dlg.destroy
|
795
|
+
else
|
796
|
+
Wx.log_error("Unknown find dialog event!")
|
797
|
+
end
|
811
798
|
end
|
799
|
+
|
812
800
|
end
|
813
801
|
|
814
|
-
end
|
815
802
|
|
803
|
+
class MyApp < Wx::App
|
816
804
|
|
817
|
-
class
|
805
|
+
class << self
|
806
|
+
attr_accessor :canvas
|
807
|
+
end
|
818
808
|
|
819
|
-
|
820
|
-
|
821
|
-
|
809
|
+
attr_accessor :canvas_text_colour, :canvas_font
|
810
|
+
|
811
|
+
def on_init
|
812
|
+
self.canvas_text_colour = Wx::Colour.new("BLACK")
|
813
|
+
self.canvas_font = Wx::NORMAL_FONT
|
814
|
+
# Create the main frame window
|
815
|
+
frame = MyFrame.new(nil, "Windows dialogs example",
|
816
|
+
[20, 20], [400, 300])
|
817
|
+
gc_stress
|
818
|
+
# Make a menubar
|
819
|
+
file_menu = Wx::Menu.new
|
820
|
+
|
821
|
+
file_menu.append(DIALOGS_CHOOSE_COLOUR, "&Choose colour")
|
822
|
+
file_menu.append_separator
|
823
|
+
file_menu.append(DIALOGS_CHOOSE_FONT, "Choose &font")
|
824
|
+
file_menu.append_separator
|
825
|
+
file_menu.append(DIALOGS_LOG_DIALOG, "&Log dialog\tCtrl-L")
|
826
|
+
file_menu.append(DIALOGS_MESSAGE_BOX, "&Message box\tCtrl-M")
|
827
|
+
file_menu.append(DIALOGS_TEXT_ENTRY, "Text &entry\tCtrl-E")
|
828
|
+
file_menu.append(DIALOGS_PASSWORD_ENTRY, "&Password entry\tCtrl-P")
|
829
|
+
file_menu.append(DIALOGS_NUM_ENTRY, "&Numeric entry\tCtrl-N")
|
830
|
+
file_menu.append(DIALOGS_SINGLE_CHOICE, "&Single choice\tCtrl-C")
|
831
|
+
file_menu.append(DIALOGS_MULTI_CHOICE, "M&ultiple choice\tCtrl-U")
|
832
|
+
file_menu.append_separator
|
833
|
+
file_menu.append(DIALOGS_TIP, "&Tip of the day\tCtrl-T")
|
834
|
+
file_menu.append(DIALOGS_CUSTOM_TIP, "Custom tip of the day")
|
835
|
+
file_menu.append_separator
|
836
|
+
file_menu.append(DIALOGS_FILE_OPEN, "&Open file\tCtrl-O")
|
837
|
+
file_menu.append(DIALOGS_FILE_OPEN2, "&Second open file\tCtrl-2")
|
838
|
+
file_menu.append(DIALOGS_FILES_OPEN, "Open &files\tShift-Ctrl-O")
|
839
|
+
file_menu.append(DIALOGS_FILE_SAVE, "Sa&ve file\tCtrl-S")
|
840
|
+
file_menu.append(DIALOGS_DIR_CHOOSE, "Choose a &directory\tCtrl-D")
|
841
|
+
file_menu.append(DIALOGS_PROGRESS, "Pro&gress dialog\tCtrl-G")
|
842
|
+
file_menu.append(DIALOGS_BUSYINFO, "&Busy info dialog\tCtrl-B")
|
843
|
+
file_menu.append(DIALOGS_STYLED_BUSYINFO, "Styled BusyInfo dialog")
|
844
|
+
file_menu.append(DIALOGS_PREFS, "Standard propert&y sheet dialog\tCtrl-Y")
|
845
|
+
file_menu.append(DIALOGS_PREFS_TOOLBOOK, "&Toolbook property sheet dialog\tShift-Ctrl-Y")
|
846
|
+
file_menu.append(DIALOGS_FIND, "&Find dialog\tCtrl-F", "", Wx::ITEM_CHECK)
|
847
|
+
file_menu.append(DIALOGS_REPLACE, "Find and &replace dialog\tShift-Ctrl-F", "", Wx::ITEM_CHECK)
|
848
|
+
|
849
|
+
file_menu.append_separator
|
850
|
+
file_menu.append(DIALOGS_MODAL, "Mo&dal dialog\tCtrl-W")
|
851
|
+
file_menu.append(DIALOGS_MODELESS, "Modeless &dialog\tCtrl-Z", "", Wx::ITEM_CHECK)
|
852
|
+
file_menu.append_separator
|
853
|
+
file_menu.append(Wx::ID_EXIT, "E&xit\tAlt-X")
|
854
|
+
menu_bar = Wx::MenuBar.new
|
855
|
+
menu_bar.append(file_menu, "&File")
|
856
|
+
frame.set_menu_bar(menu_bar)
|
857
|
+
|
858
|
+
MyApp.canvas = MyCanvas.new(frame)
|
859
|
+
MyApp.canvas.set_background_colour(Wx::WHITE)
|
860
|
+
|
861
|
+
frame.centre(Wx::BOTH)
|
862
|
+
|
863
|
+
# Show the frame
|
864
|
+
frame.show
|
865
|
+
end
|
822
866
|
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
self.canvas_text_colour = Wx::Colour.new("BLACK")
|
827
|
-
self.canvas_font = Wx::NORMAL_FONT
|
828
|
-
# Create the main frame window
|
829
|
-
frame = MyFrame.new(nil, "Windows dialogs example",
|
830
|
-
Point.new(20, 20), Size.new(400, 300))
|
831
|
-
gc_stress
|
832
|
-
# Make a menubar
|
833
|
-
file_menu = Menu.new
|
834
|
-
|
835
|
-
file_menu.append(DIALOGS_CHOOSE_COLOUR, "&Choose colour")
|
836
|
-
file_menu.append_separator()
|
837
|
-
file_menu.append(DIALOGS_CHOOSE_FONT, "Choose &font")
|
838
|
-
file_menu.append_separator()
|
839
|
-
file_menu.append(DIALOGS_LOG_DIALOG, "&Log dialog\tCtrl-L")
|
840
|
-
file_menu.append(DIALOGS_MESSAGE_BOX, "&Message box\tCtrl-M")
|
841
|
-
file_menu.append(DIALOGS_TEXT_ENTRY, "Text &entry\tCtrl-E")
|
842
|
-
file_menu.append(DIALOGS_PASSWORD_ENTRY, "&Password entry\tCtrl-P")
|
843
|
-
file_menu.append(DIALOGS_NUM_ENTRY, "&Numeric entry\tCtrl-N")
|
844
|
-
file_menu.append(DIALOGS_SINGLE_CHOICE, "&Single choice\tCtrl-C")
|
845
|
-
file_menu.append(DIALOGS_MULTI_CHOICE, "M&ultiple choice\tCtrl-U")
|
846
|
-
file_menu.append_separator()
|
847
|
-
file_menu.append(DIALOGS_TIP, "&Tip of the day\tCtrl-T")
|
848
|
-
file_menu.append(DIALOGS_CUSTOM_TIP, "Custom tip of the day")
|
849
|
-
file_menu.append_separator()
|
850
|
-
file_menu.append(DIALOGS_FILE_OPEN, "&Open file\tCtrl-O")
|
851
|
-
file_menu.append(DIALOGS_FILE_OPEN2, "&Second open file\tCtrl-2")
|
852
|
-
file_menu.append(DIALOGS_FILES_OPEN, "Open &files\tShift-Ctrl-O")
|
853
|
-
file_menu.append(DIALOGS_FILE_SAVE, "Sa&ve file\tCtrl-S")
|
854
|
-
file_menu.append(DIALOGS_DIR_CHOOSE, "Choose a &directory\tCtrl-D")
|
855
|
-
file_menu.append(DIALOGS_PROGRESS, "Pro&gress dialog\tCtrl-G")
|
856
|
-
file_menu.append(DIALOGS_BUSYINFO, "&Busy info dialog\tCtrl-B")
|
857
|
-
file_menu.append(DIALOGS_STYLED_BUSYINFO, "Styled BusyInfo dialog")
|
858
|
-
file_menu.append(DIALOGS_PREFS, "Standard propert&y sheet dialog\tCtrl-Y")
|
859
|
-
file_menu.append(DIALOGS_PREFS_TOOLBOOK, "&Toolbook property sheet dialog\tShift-Ctrl-Y")
|
860
|
-
file_menu.append(DIALOGS_FIND, "&Find dialog\tCtrl-F", "", ITEM_CHECK)
|
861
|
-
file_menu.append(DIALOGS_REPLACE, "Find and &replace dialog\tShift-Ctrl-F", "", ITEM_CHECK)
|
862
|
-
|
863
|
-
file_menu.append_separator()
|
864
|
-
file_menu.append(DIALOGS_MODAL, "Mo&dal dialog\tCtrl-W")
|
865
|
-
file_menu.append(DIALOGS_MODELESS, "Modeless &dialog\tCtrl-Z", "", ITEM_CHECK)
|
866
|
-
file_menu.append_separator()
|
867
|
-
file_menu.append(ID_EXIT, "E&xit\tAlt-X")
|
868
|
-
menu_bar = MenuBar.new
|
869
|
-
menu_bar.append(file_menu, "&File")
|
870
|
-
frame.set_menu_bar(menu_bar)
|
871
|
-
|
872
|
-
MyApp.canvas = MyCanvas.new(frame)
|
873
|
-
MyApp.canvas.set_background_colour(WHITE)
|
874
|
-
|
875
|
-
frame.centre(BOTH)
|
876
|
-
|
877
|
-
# Show the frame
|
878
|
-
frame.show
|
867
|
+
def on_exit
|
868
|
+
MyApp.canvas = nil
|
869
|
+
end
|
879
870
|
end
|
880
871
|
|
881
|
-
def on_exit
|
882
|
-
MyApp.canvas = nil
|
883
|
-
end
|
884
872
|
end
|
885
873
|
|
886
874
|
module DialogsSample
|
@@ -898,7 +886,7 @@ module DialogsSample
|
|
898
886
|
end
|
899
887
|
|
900
888
|
if $0 == __FILE__
|
901
|
-
MyApp.run
|
889
|
+
Dialogs::MyApp.run
|
902
890
|
end
|
903
891
|
|
904
892
|
end
|