wxruby3 0.9.2 → 0.9.4
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 +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
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
#
|
|
5
|
+
# Adapted for wxRuby from wxWidgets widgets sample
|
|
6
|
+
# Copyright (c) 2001 Vadim Zeitlin
|
|
7
|
+
|
|
8
|
+
module Widgets
|
|
9
|
+
|
|
10
|
+
module EditableListBox
|
|
11
|
+
|
|
12
|
+
class EditableListBoxPage < Widgets::Page
|
|
13
|
+
|
|
14
|
+
module ID
|
|
15
|
+
include Wx::IDHelper
|
|
16
|
+
|
|
17
|
+
Reset = self.next_id(Widgets::Frame::ID::Last)
|
|
18
|
+
Listbox = self.next_id
|
|
19
|
+
ContainerTests = self.next_id
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def initialize(book, images)
|
|
23
|
+
super(book, images, :listbox)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Info = Widgets::PageInfo.new(self, 'EditableListbox', GENERIC_CTRLS)
|
|
27
|
+
|
|
28
|
+
def get_widget
|
|
29
|
+
@lbox.get_list_ctrl
|
|
30
|
+
end
|
|
31
|
+
def recreate_widget
|
|
32
|
+
create_lbox
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# lazy creation of the content
|
|
36
|
+
def create_content
|
|
37
|
+
# What we create here is a frame having 2 panes: style pane is the
|
|
38
|
+
# leftmost one and the pane containing the listbox itself to the right
|
|
39
|
+
sizerTop = Wx::HBoxSizer.new
|
|
40
|
+
|
|
41
|
+
# left pane
|
|
42
|
+
sizerLeft = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&Set listbox parameters')
|
|
43
|
+
sizerLeftBox = sizerLeft.get_static_box
|
|
44
|
+
|
|
45
|
+
@chkAllowNew = create_check_box_and_add_to_sizer(sizerLeft, 'Allow new items', Wx::ID_ANY, sizerLeftBox)
|
|
46
|
+
@chkAllowEdit = create_check_box_and_add_to_sizer(sizerLeft, 'Allow editing items', Wx::ID_ANY, sizerLeftBox)
|
|
47
|
+
@chkAllowDelete = create_check_box_and_add_to_sizer(sizerLeft, 'Allow deleting items', Wx::ID_ANY, sizerLeftBox)
|
|
48
|
+
@chkAllowNoReorder = create_check_box_and_add_to_sizer(sizerLeft, 'Block user reordering', Wx::ID_ANY, sizerLeftBox)
|
|
49
|
+
|
|
50
|
+
btn = Wx::Button.new(sizerLeftBox, ID::Reset, '&Reset')
|
|
51
|
+
sizerLeft.add(btn, 0, Wx::ALIGN_CENTRE_HORIZONTAL | Wx::ALL, 15)
|
|
52
|
+
|
|
53
|
+
# right pane
|
|
54
|
+
sizerRight = Wx::VBoxSizer.new
|
|
55
|
+
@lbox = Wx::EditableListBox.new(self, ID::Listbox,
|
|
56
|
+
'Match these wildcards:',
|
|
57
|
+
style: 0)
|
|
58
|
+
sizerRight.add(@lbox, 1, Wx::GROW | Wx::ALL, 5)
|
|
59
|
+
sizerRight.set_min_size(150, 0)
|
|
60
|
+
@sizerLbox = sizerRight # save it to modify it later
|
|
61
|
+
|
|
62
|
+
# the 3 panes panes compose the window
|
|
63
|
+
sizerTop.add(sizerLeft, 0, Wx::GROW | (Wx::ALL & ~Wx::LEFT), 10)
|
|
64
|
+
sizerTop.add(sizerRight, 1, Wx::GROW | (Wx::ALL & ~Wx::RIGHT), 10)
|
|
65
|
+
|
|
66
|
+
# final initializations
|
|
67
|
+
reset
|
|
68
|
+
|
|
69
|
+
set_sizer(sizerTop)
|
|
70
|
+
|
|
71
|
+
# connect event handlers
|
|
72
|
+
evt_button(ID::Reset, :on_button_reset)
|
|
73
|
+
evt_checkbox(Wx::ID_ANY, :on_check_box)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
protected
|
|
77
|
+
|
|
78
|
+
# event handlers
|
|
79
|
+
def on_button_reset(event)
|
|
80
|
+
reset
|
|
81
|
+
|
|
82
|
+
create_lbox
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def on_check_box(event)
|
|
86
|
+
create_lbox
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# reset the listbox parameters
|
|
90
|
+
def reset
|
|
91
|
+
@chkAllowNew.set_value(false)
|
|
92
|
+
@chkAllowEdit.set_value(false)
|
|
93
|
+
@chkAllowDelete.set_value(false)
|
|
94
|
+
@chkAllowNoReorder.set_value(false)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# (re)create the listbox
|
|
98
|
+
def create_lbox
|
|
99
|
+
flags = get_attrs.default_flags
|
|
100
|
+
|
|
101
|
+
flags |= Wx::EL_ALLOW_NEW if @chkAllowNew.value
|
|
102
|
+
flags |= Wx::EL_ALLOW_EDIT if @chkAllowEdit.value
|
|
103
|
+
flags |= Wx::EL_ALLOW_DELETE if @chkAllowDelete.value
|
|
104
|
+
flags |= Wx::EL_NO_REORDER if @chkAllowNoReorder.value
|
|
105
|
+
|
|
106
|
+
items = @lbox ? @lbox.get_strings : []
|
|
107
|
+
@lbox.destroy if @lbox
|
|
108
|
+
|
|
109
|
+
@lbox = Wx::EditableListBox.new(self, ID::Listbox,
|
|
110
|
+
'Match these wildcards:',
|
|
111
|
+
style: flags)
|
|
112
|
+
|
|
113
|
+
@lbox.set_strings(items)
|
|
114
|
+
@sizerLbox.add(@lbox, 1, Wx::GROW | Wx::ALL, 5)
|
|
115
|
+
@sizerLbox.layout
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
end
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
#
|
|
5
|
+
# Adapted for wxRuby from wxWidgets widgets sample
|
|
6
|
+
# Copyright (c) 2001 Vadim Zeitlin
|
|
7
|
+
|
|
8
|
+
require 'date'
|
|
9
|
+
|
|
10
|
+
module Widgets
|
|
11
|
+
|
|
12
|
+
module FileCtrl
|
|
13
|
+
|
|
14
|
+
class FileCtrlPage < Widgets::Page
|
|
15
|
+
|
|
16
|
+
module ID
|
|
17
|
+
include Wx::IDHelper
|
|
18
|
+
|
|
19
|
+
Reset = self.next_id(Widgets::Frame::ID::Last)
|
|
20
|
+
SetDirectory = self.next_id
|
|
21
|
+
SetPath = self.next_id
|
|
22
|
+
SetFilename = self.next_id
|
|
23
|
+
Ctrl = self.next_id
|
|
24
|
+
|
|
25
|
+
FileCtrlMode_Open = 0
|
|
26
|
+
FileCtrlMode_Save = 1
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def initialize(book, images)
|
|
30
|
+
super(book, images, :dirctrl)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Info = Widgets::PageInfo.new(self, 'FileCtrl',
|
|
34
|
+
if Wx::PLATFORM == 'WXGTK'
|
|
35
|
+
NATIVE_CTRLS
|
|
36
|
+
else
|
|
37
|
+
GENERIC_CTRLS
|
|
38
|
+
end)
|
|
39
|
+
|
|
40
|
+
def get_widget
|
|
41
|
+
@fileCtrl
|
|
42
|
+
end
|
|
43
|
+
def recreate_widget
|
|
44
|
+
create_file_ctrl
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# lazy creation of the content
|
|
48
|
+
def create_content
|
|
49
|
+
sizerTop = Wx::HBoxSizer.new
|
|
50
|
+
|
|
51
|
+
# left pane
|
|
52
|
+
sizerLeft = Wx::VBoxSizer.new
|
|
53
|
+
|
|
54
|
+
mode = %w{open save}
|
|
55
|
+
@radioFileCtrlMode = Wx::RadioBox.new(self, Wx::ID_ANY, 'wxFileCtrl mode',
|
|
56
|
+
choices: mode)
|
|
57
|
+
|
|
58
|
+
sizerLeft.add(@radioFileCtrlMode,
|
|
59
|
+
0, Wx::ALL | Wx::EXPAND , 5)
|
|
60
|
+
|
|
61
|
+
szr, @dir = create_sizer_with_text_and_button(ID::SetDirectory ,'Set &directory', Wx::ID_ANY)
|
|
62
|
+
sizerLeft.add(szr, 0, Wx::ALL | Wx::EXPAND, 5)
|
|
63
|
+
szr, @path = create_sizer_with_text_and_button(ID::SetPath,'Set &path', Wx::ID_ANY)
|
|
64
|
+
sizerLeft.add(szr, 0, Wx::ALL | Wx::EXPAND, 5)
|
|
65
|
+
szr, @filename = create_sizer_with_text_and_button(ID::SetFilename,'Set &filename', Wx::ID_ANY)
|
|
66
|
+
sizerLeft.add(szr, 0, Wx::ALL | Wx::EXPAND, 5)
|
|
67
|
+
|
|
68
|
+
sizerFlags = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&Flags')
|
|
69
|
+
sizerFlagsBox = sizerFlags.get_static_box
|
|
70
|
+
|
|
71
|
+
@chkMultiple = create_check_box_and_add_to_sizer(sizerFlags,'Wx::FC_MULTIPLE', Wx::ID_ANY, sizerFlagsBox)
|
|
72
|
+
@chkNoShowHidden = create_check_box_and_add_to_sizer(sizerFlags,'Wx::FC_NOSHOWHIDDEN', Wx::ID_ANY, sizerFlagsBox)
|
|
73
|
+
sizerLeft.add(sizerFlags, Wx::SizerFlags.new.expand.border)
|
|
74
|
+
|
|
75
|
+
sizerFilters = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&Filters')
|
|
76
|
+
sizerFiltersBox = sizerFilters.get_static_box
|
|
77
|
+
|
|
78
|
+
@fltr = []
|
|
79
|
+
@fltr << create_check_box_and_add_to_sizer(sizerFilters,
|
|
80
|
+
"all files (#{Wx::FILE_SELECTOR_DEFAULT_WILDCARD_STR})|#{Wx::FILE_SELECTOR_DEFAULT_WILDCARD_STR}",
|
|
81
|
+
Wx::ID_ANY, sizerFiltersBox)
|
|
82
|
+
@fltr << create_check_box_and_add_to_sizer(sizerFilters,"Ruby files (*.rb *.rbw)|*.rb;*.rbw", Wx::ID_ANY, sizerFiltersBox)
|
|
83
|
+
@fltr << create_check_box_and_add_to_sizer(sizerFilters,"PNG images (*.png)|*.png", Wx::ID_ANY, sizerFiltersBox)
|
|
84
|
+
sizerLeft.add(sizerFilters, Wx::SizerFlags.new.expand.border)
|
|
85
|
+
|
|
86
|
+
btn = Wx::Button.new(self, ID::Reset, '&Reset')
|
|
87
|
+
sizerLeft.add(btn, 0, Wx::ALIGN_CENTRE_HORIZONTAL | Wx::ALL, 15)
|
|
88
|
+
|
|
89
|
+
# right pane
|
|
90
|
+
@fileCtrl = Wx::FileCtrl.new(self,
|
|
91
|
+
ID::Ctrl,
|
|
92
|
+
'',
|
|
93
|
+
'',
|
|
94
|
+
'',
|
|
95
|
+
style: Wx::FC_OPEN)
|
|
96
|
+
|
|
97
|
+
# the 3 panes panes compose the window
|
|
98
|
+
sizerTop.add(sizerLeft, 0, (Wx::ALL & ~Wx::LEFT), 10)
|
|
99
|
+
sizerTop.add(@fileCtrl, 1, Wx::GROW | (Wx::ALL & ~Wx::RIGHT), 10)
|
|
100
|
+
|
|
101
|
+
# final initializations
|
|
102
|
+
reset
|
|
103
|
+
|
|
104
|
+
set_sizer(sizerTop)
|
|
105
|
+
|
|
106
|
+
# connect event handlers
|
|
107
|
+
evt_button(ID::Reset, :on_button_reset)
|
|
108
|
+
evt_button(ID::SetDirectory, :on_button_set_directory)
|
|
109
|
+
evt_button(ID::SetPath, :on_button_set_path)
|
|
110
|
+
evt_button(ID::SetFilename, :on_button_set_filename)
|
|
111
|
+
evt_checkbox(Wx::ID_ANY, :on_check_box)
|
|
112
|
+
evt_radiobox(Wx::ID_ANY, :on_switch_mode)
|
|
113
|
+
|
|
114
|
+
evt_filectrl_filterchanged(Wx::ID_ANY, :on_file_ctrl)
|
|
115
|
+
evt_filectrl_folderchanged(Wx::ID_ANY, :on_file_ctrl)
|
|
116
|
+
evt_filectrl_selectionchanged(Wx::ID_ANY, :on_file_ctrl)
|
|
117
|
+
evt_filectrl_fileactivated(Wx::ID_ANY, :on_file_ctrl)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
protected
|
|
121
|
+
|
|
122
|
+
# event handlers
|
|
123
|
+
def on_button_set_directory(_event)
|
|
124
|
+
@fileCtrl.set_directory(@dir.value)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def on_button_set_path(_event)
|
|
128
|
+
@fileCtrl.set_path(@path.value)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def on_button_set_filename(_event)
|
|
132
|
+
@fileCtrl.set_filename(@filename.value)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def on_button_reset(_event)
|
|
136
|
+
reset
|
|
137
|
+
|
|
138
|
+
create_file_ctrl
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def on_check_box(_event)
|
|
142
|
+
create_file_ctrl
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def on_switch_mode(_event)
|
|
146
|
+
create_file_ctrl
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def on_file_ctrl(event)
|
|
150
|
+
if event.get_event_type == Wx::EVT_FILECTRL_FOLDERCHANGED
|
|
151
|
+
Wx.log_message("Folder changed event, new folder: %s", event.directory)
|
|
152
|
+
elsif event.get_event_type == Wx::EVT_FILECTRL_FILEACTIVATED
|
|
153
|
+
Wx.log_message("File activated event: %s", event.files.join(' '))
|
|
154
|
+
elsif event.get_event_type == Wx::EVT_FILECTRL_SELECTIONCHANGED
|
|
155
|
+
Wx.log_message("Selection changed event: %s", event.files.join(' '))
|
|
156
|
+
elsif event.get_event_type == Wx::EVT_FILECTRL_FILTERCHANGED
|
|
157
|
+
Wx.log_message("Filter changed event: filter %d selected", event.filter_index + 1)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# reset the control parameters
|
|
162
|
+
def reset
|
|
163
|
+
@dir.set_value(@fileCtrl.directory)
|
|
164
|
+
@radioFileCtrlMode.set_selection(Wx::FC_DEFAULT_STYLE.allbits?(Wx::FC_OPEN) ? ID::FileCtrlMode_Open : ID::FileCtrlMode_Save)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# (re)create the m_fileCtrl
|
|
168
|
+
def create_file_ctrl
|
|
169
|
+
Wx::WindowUpdateLocker.update(self) do
|
|
170
|
+
|
|
171
|
+
style = get_attrs.default_flags
|
|
172
|
+
|
|
173
|
+
if @radioFileCtrlMode.selection == ID::FileCtrlMode_Open
|
|
174
|
+
style |= Wx::FC_OPEN
|
|
175
|
+
@chkMultiple.enable
|
|
176
|
+
style |= Wx::FC_MULTIPLE if @chkMultiple.is_checked
|
|
177
|
+
else
|
|
178
|
+
style |= Wx::FC_SAVE
|
|
179
|
+
# wxFC_SAVE is incompatible with wxFC_MULTIPLE
|
|
180
|
+
@chkMultiple.set_value(false)
|
|
181
|
+
@chkMultiple.enable(false)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
style |= Wx::FC_NOSHOWHIDDEN if @chkNoShowHidden.is_checked
|
|
185
|
+
|
|
186
|
+
fileCtrl = Wx::FileCtrl.new(self,
|
|
187
|
+
ID::Ctrl,
|
|
188
|
+
wildcard: '',
|
|
189
|
+
style: style)
|
|
190
|
+
|
|
191
|
+
wildcard = @fltr.inject('') do |s, f|
|
|
192
|
+
if f.checked?
|
|
193
|
+
s << '|' unless s.empty?
|
|
194
|
+
s << f.label
|
|
195
|
+
end
|
|
196
|
+
s
|
|
197
|
+
end
|
|
198
|
+
fileCtrl.set_wildcard(wildcard)
|
|
199
|
+
|
|
200
|
+
# update sizer's child window
|
|
201
|
+
get_sizer.replace(@fileCtrl, fileCtrl, true)
|
|
202
|
+
|
|
203
|
+
# update our pointer
|
|
204
|
+
@fileCtrl.destroy
|
|
205
|
+
@fileCtrl = fileCtrl
|
|
206
|
+
|
|
207
|
+
# re-layout the sizer
|
|
208
|
+
get_sizer.layout
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
end
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
#
|
|
5
|
+
# Adapted for wxRuby from wxWidgets widgets sample
|
|
6
|
+
# Copyright (c) 2001 Vadim Zeitlin
|
|
7
|
+
|
|
8
|
+
require 'date'
|
|
9
|
+
|
|
10
|
+
module Widgets
|
|
11
|
+
|
|
12
|
+
module FilePicker
|
|
13
|
+
|
|
14
|
+
class FilePickerPage < Widgets::Page
|
|
15
|
+
|
|
16
|
+
module ID
|
|
17
|
+
include Wx::IDHelper
|
|
18
|
+
|
|
19
|
+
Reset = self.next_id(Widgets::Frame::ID::Last)
|
|
20
|
+
File = self.next_id
|
|
21
|
+
SetDir = self.next_id
|
|
22
|
+
CurrentPath = self.next_id
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Mode_Open = 0
|
|
26
|
+
Mode_Save = 1
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def initialize(book, images)
|
|
30
|
+
super(book, images, :filepicker)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
Info = Widgets::PageInfo.new(self, 'FilePicker',
|
|
34
|
+
if Wx::PLATFORM == 'WXGTK'
|
|
35
|
+
NATIVE_CTRLS
|
|
36
|
+
else
|
|
37
|
+
GENERIC_CTRLS
|
|
38
|
+
end | PICKER_CTRLS)
|
|
39
|
+
|
|
40
|
+
def get_widget
|
|
41
|
+
@filePicker
|
|
42
|
+
end
|
|
43
|
+
def recreate_widget
|
|
44
|
+
recreate_picker
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# lazy creation of the content
|
|
48
|
+
def create_content
|
|
49
|
+
# left pane
|
|
50
|
+
leftSizer = Wx::VBoxSizer.new
|
|
51
|
+
|
|
52
|
+
mode = %w{open save}
|
|
53
|
+
@radioFilePickerMode = Wx::RadioBox.new(self, Wx::ID_ANY, 'wxFilePicker mode',
|
|
54
|
+
choices: mode)
|
|
55
|
+
leftSizer.add(@radioFilePickerMode, 0, Wx::ALL|Wx::GROW, 5)
|
|
56
|
+
|
|
57
|
+
styleSizer = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&FilePicker style')
|
|
58
|
+
styleSizerBox = styleSizer.get_static_box
|
|
59
|
+
|
|
60
|
+
@chkFileTextCtrl = create_check_box_and_add_to_sizer(styleSizer, 'With textctrl', Wx::ID_ANY, styleSizerBox)
|
|
61
|
+
@chkFileOverwritePrompt = create_check_box_and_add_to_sizer(styleSizer, 'Overwrite prompt', Wx::ID_ANY, styleSizerBox)
|
|
62
|
+
@chkFileMustExist = create_check_box_and_add_to_sizer(styleSizer, 'File must exist', Wx::ID_ANY, styleSizerBox)
|
|
63
|
+
@chkFileChangeDir = create_check_box_and_add_to_sizer(styleSizer, 'Change working dir', Wx::ID_ANY, styleSizerBox)
|
|
64
|
+
@chkSmall = create_check_box_and_add_to_sizer(styleSizer, '&Small version', Wx::ID_ANY, styleSizerBox)
|
|
65
|
+
|
|
66
|
+
leftSizer.add(styleSizer, 0, Wx::ALL|Wx::GROW, 5)
|
|
67
|
+
|
|
68
|
+
szr, @textInitialDir = create_sizer_with_text_and_button(ID::SetDir,
|
|
69
|
+
'&Initial directory',
|
|
70
|
+
Wx::ID_ANY)
|
|
71
|
+
leftSizer.add(szr, Wx::SizerFlags.new.expand.border)
|
|
72
|
+
|
|
73
|
+
leftSizer.add_spacer(10)
|
|
74
|
+
|
|
75
|
+
leftSizer.add(Wx::Button.new(self, ID::Reset, '&Reset'),
|
|
76
|
+
0, Wx::ALIGN_CENTRE_HORIZONTAL | Wx::ALL, 15)
|
|
77
|
+
|
|
78
|
+
reset # set checkboxes state
|
|
79
|
+
|
|
80
|
+
# create the picker and the static text displaying its current value
|
|
81
|
+
@labelPath = Wx::StaticText.new(self, ID::CurrentPath, '')
|
|
82
|
+
|
|
83
|
+
@filePicker = nil
|
|
84
|
+
create_picker
|
|
85
|
+
|
|
86
|
+
# right pane
|
|
87
|
+
@sizer = Wx::VBoxSizer.new
|
|
88
|
+
@sizer.add_stretch_spacer
|
|
89
|
+
@sizer.add(@filePicker, Wx::SizerFlags.new.expand.border)
|
|
90
|
+
@sizer.add_stretch_spacer
|
|
91
|
+
@sizer.add(@labelPath, Wx::SizerFlags.new.expand.border)
|
|
92
|
+
@sizer.add_stretch_spacer
|
|
93
|
+
|
|
94
|
+
# global pane
|
|
95
|
+
sz = Wx::HBoxSizer.new
|
|
96
|
+
sz.add(leftSizer, 0, Wx::GROW|Wx::ALL, 5)
|
|
97
|
+
sz.add(@sizer, 1, Wx::GROW|Wx::ALL, 5)
|
|
98
|
+
|
|
99
|
+
set_sizer(sz)
|
|
100
|
+
|
|
101
|
+
# connect event handlers
|
|
102
|
+
evt_button(ID::Reset, :on_button_reset)
|
|
103
|
+
evt_button(ID::SetDir, :on_button_set_dir)
|
|
104
|
+
|
|
105
|
+
evt_filepicker_changed(ID::File, :on_file_change)
|
|
106
|
+
|
|
107
|
+
evt_checkbox(Wx::ID_ANY, :on_check_box)
|
|
108
|
+
evt_radiobox(Wx::ID_ANY, :on_check_box)
|
|
109
|
+
|
|
110
|
+
evt_update_ui(ID::CurrentPath, :on_update_path)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
protected
|
|
114
|
+
|
|
115
|
+
# called only once at first construction
|
|
116
|
+
def create_picker
|
|
117
|
+
@filePicker.destroy if @filePicker
|
|
118
|
+
|
|
119
|
+
style = get_attrs.default_flags
|
|
120
|
+
|
|
121
|
+
style |= Wx::FLP_USE_TEXTCTRL if @chkFileTextCtrl.value
|
|
122
|
+
style |= Wx::FLP_OVERWRITE_PROMPT if @chkFileOverwritePrompt.value
|
|
123
|
+
style |= Wx::FLP_FILE_MUST_EXIST if @chkFileMustExist.value
|
|
124
|
+
style |= Wx::FLP_CHANGE_DIR if @chkFileChangeDir.value
|
|
125
|
+
style |= Wx::FLP_SMALL if @chkSmall.value
|
|
126
|
+
if @radioFilePickerMode.selection == ID::Mode_Open
|
|
127
|
+
style |= Wx::FLP_OPEN
|
|
128
|
+
else
|
|
129
|
+
style |= Wx::FLP_SAVE
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# pass an empty string as initial file
|
|
133
|
+
@filePicker = Wx::FilePickerCtrl.new(self, ID::File,
|
|
134
|
+
message: 'Hello!',
|
|
135
|
+
wildcard: '*',
|
|
136
|
+
style: style)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# called to recreate an existing control
|
|
140
|
+
def recreate_picker
|
|
141
|
+
@sizer.remove(1)
|
|
142
|
+
create_picker
|
|
143
|
+
@sizer.insert(1, @filePicker, 0, Wx::EXPAND|Wx::ALL, 5)
|
|
144
|
+
|
|
145
|
+
@sizer.layout
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# restore the checkboxes state to the initial values
|
|
149
|
+
def reset
|
|
150
|
+
@radioFilePickerMode.set_selection(Wx::FLP_DEFAULT_STYLE.allbits?(Wx::FLP_OPEN) ?
|
|
151
|
+
ID::Mode_Open : ID::Mode_Save)
|
|
152
|
+
@chkFileTextCtrl.set_value(Wx::FLP_DEFAULT_STYLE.allbits?(Wx::FLP_USE_TEXTCTRL))
|
|
153
|
+
@chkFileOverwritePrompt.set_value(Wx::FLP_DEFAULT_STYLE.allbits?(Wx::FLP_OVERWRITE_PROMPT))
|
|
154
|
+
@chkFileMustExist.set_value(Wx::FLP_DEFAULT_STYLE.allbits?(Wx::FLP_FILE_MUST_EXIST))
|
|
155
|
+
@chkFileChangeDir.set_value(Wx::FLP_DEFAULT_STYLE.allbits?(Wx::FLP_CHANGE_DIR))
|
|
156
|
+
@chkSmall.set_value(Wx::FLP_DEFAULT_STYLE.allbits?(Wx::FLP_SMALL))
|
|
157
|
+
|
|
158
|
+
update_file_picker_mode
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# update filepicker radiobox
|
|
162
|
+
def update_file_picker_mode
|
|
163
|
+
case @radioFilePickerMode.selection
|
|
164
|
+
when ID::Mode_Open
|
|
165
|
+
@chkFileOverwritePrompt.set_value(false)
|
|
166
|
+
@chkFileOverwritePrompt.disable
|
|
167
|
+
@chkFileMustExist.enable
|
|
168
|
+
when ID::Mode_Save
|
|
169
|
+
@chkFileMustExist.set_value(false)
|
|
170
|
+
@chkFileMustExist.disable
|
|
171
|
+
@chkFileOverwritePrompt.enable
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# the pickers and the relative event handlers
|
|
176
|
+
def on_file_change(event)
|
|
177
|
+
Wx.log_message("The file changed to '%s' ! The current working directory is '%s'",
|
|
178
|
+
event.path, Dir.getwd)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def on_check_box(event)
|
|
182
|
+
if event.event_object == @chkFileTextCtrl ||
|
|
183
|
+
event.event_object == @chkFileOverwritePrompt ||
|
|
184
|
+
event.event_object == @chkFileMustExist ||
|
|
185
|
+
event.event_object == @chkFileChangeDir ||
|
|
186
|
+
event.event_object == @chkSmall
|
|
187
|
+
recreate_picker
|
|
188
|
+
elsif event.event_object == @radioFilePickerMode
|
|
189
|
+
update_file_picker_mode
|
|
190
|
+
recreate_picker
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def on_button_reset(_event)
|
|
195
|
+
reset
|
|
196
|
+
|
|
197
|
+
recreate_picker
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def on_button_set_dir(_event)
|
|
201
|
+
dir = @textInitialDir.value
|
|
202
|
+
@filePicker.set_initial_directory(dir)
|
|
203
|
+
Wx.log_message("Initial directory set to \"#{dir}\"")
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def on_update_path(event)
|
|
207
|
+
event.set_text('Current path: ' + @filePicker.path)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
#
|
|
5
|
+
# Adapted for wxRuby from wxWidgets widgets sample
|
|
6
|
+
# Copyright (c) 2001 Vadim Zeitlin
|
|
7
|
+
|
|
8
|
+
require 'date'
|
|
9
|
+
|
|
10
|
+
module Widgets
|
|
11
|
+
|
|
12
|
+
module FontPicker
|
|
13
|
+
|
|
14
|
+
class FontPickerPage < Widgets::Page
|
|
15
|
+
|
|
16
|
+
module ID
|
|
17
|
+
include Wx::IDHelper
|
|
18
|
+
|
|
19
|
+
Reset = self.next_id(Widgets::Frame::ID::Last)
|
|
20
|
+
Font = self.next_id
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def initialize(book, images)
|
|
24
|
+
super(book, images, :fontpicker)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Info = Widgets::PageInfo.new(self, 'FontPicker',
|
|
28
|
+
if Wx::PLATFORM == 'WXGTK'
|
|
29
|
+
NATIVE_CTRLS
|
|
30
|
+
else
|
|
31
|
+
GENERIC_CTRLS
|
|
32
|
+
end | PICKER_CTRLS)
|
|
33
|
+
|
|
34
|
+
def get_widget
|
|
35
|
+
@fontPicker
|
|
36
|
+
end
|
|
37
|
+
def recreate_widget
|
|
38
|
+
recreate_picker
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# lazy creation of the content
|
|
42
|
+
def create_content
|
|
43
|
+
# left pane
|
|
44
|
+
leftSizer = Wx::VBoxSizer.new
|
|
45
|
+
styleSizer = Wx::StaticBoxSizer.new(Wx::VERTICAL, self, '&FontPicker style')
|
|
46
|
+
styleSizerBox = styleSizer.get_static_box
|
|
47
|
+
|
|
48
|
+
@chkFontTextCtrl = create_check_box_and_add_to_sizer(styleSizer, 'With textctrl', Wx::ID_ANY, styleSizerBox)
|
|
49
|
+
@chkFontDescAsLabel = create_check_box_and_add_to_sizer(styleSizer, 'Font desc as btn label', Wx::ID_ANY, styleSizerBox)
|
|
50
|
+
@chkFontUseFontForLabel = create_check_box_and_add_to_sizer(styleSizer, 'Use font for label', Wx::ID_ANY, styleSizerBox)
|
|
51
|
+
leftSizer.add(styleSizer, 0, Wx::ALL|Wx::GROW, 5)
|
|
52
|
+
|
|
53
|
+
leftSizer.add(Wx::Button.new(self, ID::Reset, '&Reset'),
|
|
54
|
+
0, Wx::ALIGN_CENTRE_HORIZONTAL | Wx::ALL, 15)
|
|
55
|
+
|
|
56
|
+
reset # set checkboxes state
|
|
57
|
+
|
|
58
|
+
# create pickers
|
|
59
|
+
@fontPicker = nil
|
|
60
|
+
create_picker
|
|
61
|
+
|
|
62
|
+
# right pane
|
|
63
|
+
@sizer = Wx::VBoxSizer.new
|
|
64
|
+
@sizer.add(1, 1, 1, Wx::GROW | Wx::ALL, 5) # spacer
|
|
65
|
+
@sizer.add(@fontPicker, 0, Wx::ALIGN_CENTER|Wx::ALL, 5)
|
|
66
|
+
@sizer.add(1, 1, 1, Wx::GROW | Wx::ALL, 5) # spacer
|
|
67
|
+
|
|
68
|
+
# global pane
|
|
69
|
+
sz = Wx::HBoxSizer.new
|
|
70
|
+
sz.add(leftSizer, 0, Wx::GROW|Wx::ALL, 5)
|
|
71
|
+
sz.add(@sizer, 1, Wx::GROW|Wx::ALL, 5)
|
|
72
|
+
|
|
73
|
+
set_sizer(sz)
|
|
74
|
+
|
|
75
|
+
# connect event handlers
|
|
76
|
+
evt_button(ID::Reset, :on_button_reset)
|
|
77
|
+
|
|
78
|
+
evt_fontpicker_changed(ID::Font, :on_font_change)
|
|
79
|
+
|
|
80
|
+
evt_checkbox(Wx::ID_ANY, :on_check_box)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
protected
|
|
84
|
+
|
|
85
|
+
# called only once at first construction
|
|
86
|
+
def create_picker
|
|
87
|
+
@fontPicker.destroy if @fontPicker
|
|
88
|
+
|
|
89
|
+
style = get_attrs.default_flags
|
|
90
|
+
|
|
91
|
+
style |= Wx::FNTP_USE_TEXTCTRL if @chkFontTextCtrl.value
|
|
92
|
+
style |= Wx::FNTP_USEFONT_FOR_LABEL if @chkFontUseFontForLabel.value
|
|
93
|
+
style |= Wx::FNTP_FONTDESC_AS_LABEL if @chkFontDescAsLabel.value
|
|
94
|
+
|
|
95
|
+
@fontPicker = Wx::FontPickerCtrl.new(self, ID::Font,
|
|
96
|
+
Wx::SWISS_FONT,
|
|
97
|
+
style: style)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# called to recreate an existing control
|
|
101
|
+
def recreate_picker
|
|
102
|
+
@sizer.remove(1)
|
|
103
|
+
create_picker
|
|
104
|
+
@sizer.insert(1, @fontPicker, 0, Wx::ALIGN_CENTER|Wx::ALL, 5)
|
|
105
|
+
|
|
106
|
+
@sizer.layout
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# restore the checkboxes state to the initial values
|
|
110
|
+
def reset
|
|
111
|
+
@chkFontTextCtrl.set_value(Wx::FNTP_DEFAULT_STYLE.allbits?(Wx::FNTP_USE_TEXTCTRL))
|
|
112
|
+
@chkFontUseFontForLabel.set_value(Wx::FNTP_DEFAULT_STYLE.allbits?(Wx::FNTP_USEFONT_FOR_LABEL))
|
|
113
|
+
@chkFontDescAsLabel.set_value(Wx::FNTP_DEFAULT_STYLE.allbits?(Wx::FNTP_FONTDESC_AS_LABEL))
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def on_font_change(event)
|
|
117
|
+
Wx.log_message("The font changed to '#{event.font.face_name}' with size #{event.font.point_size} !")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def on_check_box(event)
|
|
121
|
+
recreate_picker if event.event_object == @chkFontTextCtrl ||
|
|
122
|
+
event.event_object == @chkFontDescAsLabel ||
|
|
123
|
+
event.event_object == @chkFontUseFontForLabel
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def on_button_reset(_event)
|
|
127
|
+
reset
|
|
128
|
+
recreate_picker
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|