wxruby3 0.9.2 → 0.9.3
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-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/lib/wx/core/bitmap_combobox.rb +17 -21
- data/lib/wx/core/combobox.rb +13 -3
- 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/owner_drawn_combobox.rb +45 -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/validator.rb +70 -5
- data/lib/wx/core/window.rb +3 -7
- data/lib/wx/doc/art_locator.rb +1 -0
- data/lib/wx/doc/comboctrl.rb +18 -0
- 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/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/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/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/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 +17 -2
- data/rakelib/lib/core/parameter.rb +1 -1
- data/rakelib/lib/core/spec_helper.rb +7 -1
- 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/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_handler.rb +3 -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 +0 -2
- data/rakelib/lib/director/grid_cell_editor.rb +0 -2
- data/rakelib/lib/director/grid_cell_renderer.rb +0 -2
- data/rakelib/lib/director/header_ctrl.rb +6 -1
- data/rakelib/lib/director/html_listbox.rb +96 -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/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 +28 -0
- data/rakelib/lib/director/text_entry.rb +4 -0
- 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 +1 -1
- data/rakelib/lib/generate/doc.rb +10 -4
- data/rakelib/lib/specs/interfaces.rb +2 -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/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 +1233 -0
- data/samples/xrc/custom_xrc_sample.rb +47 -41
- data/samples/xrc/xrc_sample.rb +53 -47
- 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_sizer.rb +44 -1
- data/tests/test_validators.rb +805 -0
- metadata +92 -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/event/event.rb
CHANGED
@@ -15,185 +15,192 @@ require 'wx'
|
|
15
15
|
# event handlers, and how to create custom event types and listeners
|
16
16
|
# associated with user-defined control classes.
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
|
22
|
-
#
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
18
|
+
module Event
|
19
|
+
|
20
|
+
# A custom type of event associated with a target control. Note that for
|
21
|
+
# user-defined controls, the associated event should inherit from
|
22
|
+
# Wx::CommandEvent rather than Wx::Event.
|
23
|
+
class TargetHitEvent < Wx::CommandEvent
|
24
|
+
# Create a new unique constant identifier, associate this class
|
25
|
+
# with events of that identifier, and create a shortcut 'evt_target'
|
26
|
+
# method for setting up this handler.
|
27
|
+
EVT_HIT_TARGET = Wx::EvtHandler.register_class(self, nil, 'evt_target', 1)
|
28
|
+
|
29
|
+
def initialize(target, score, distance)
|
30
|
+
# The constant id is the arg to super
|
31
|
+
super(EVT_HIT_TARGET)
|
32
|
+
# client_data should be used to store any information associated
|
33
|
+
# with the event.
|
34
|
+
self.client_data = { :score => score, :distance => distance }
|
35
|
+
self.id = target.get_id
|
36
|
+
end
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
# Returns the points score associated with this event
|
39
|
+
def score
|
40
|
+
client_data[:score]
|
41
|
+
end
|
40
42
|
|
41
|
-
|
42
|
-
|
43
|
-
|
43
|
+
# Returns the distance (in pixels) from the centre of the target
|
44
|
+
def distance
|
45
|
+
client_data[:distance]
|
46
|
+
end
|
44
47
|
end
|
45
|
-
end
|
46
48
|
|
47
|
-
class CountEvent < Wx::CommandEvent
|
48
|
-
|
49
|
+
class CountEvent < Wx::CommandEvent
|
50
|
+
EVT_COUNTER = Wx::EvtHandler.register_class(self, nil, 'evt_counter', 1)
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
+
def initialize(id)
|
53
|
+
super(EVT_COUNTER, id)
|
54
|
+
end
|
52
55
|
end
|
53
|
-
end
|
54
56
|
|
55
|
-
# An example of a simple user-written control, which displays a
|
56
|
-
# "bulls-eye" like target, and sends events with a score and distance
|
57
|
-
class TargetControl < Wx::Window
|
58
|
-
|
59
|
-
|
60
|
-
def initialize(parent, *args)
|
61
|
-
super(parent, *args)
|
62
|
-
|
63
|
-
# Set up the scores and sizes of the rings
|
64
|
-
@radii = [
|
65
|
-
TargetCircle[ 0.1, 20, Wx::RED_BRUSH ],
|
66
|
-
TargetCircle[ 0.25, 10, Wx::BLUE_BRUSH ],
|
67
|
-
TargetCircle[ 0.4, 5, Wx::GREEN_BRUSH ] ]
|
68
|
-
evt_paint { | e | on_paint(e) }
|
69
|
-
evt_left_down { | e | on_left_down(e) }
|
70
|
-
end
|
57
|
+
# An example of a simple user-written control, which displays a
|
58
|
+
# "bulls-eye" like target, and sends events with a score and distance
|
59
|
+
class TargetControl < Wx::Window
|
60
|
+
TargetCircle = Struct.new(:radius, :score, :brush)
|
71
61
|
|
72
|
-
|
73
|
-
|
74
|
-
size.width / 2
|
75
|
-
end
|
62
|
+
def initialize(parent, *args)
|
63
|
+
super(parent, *args)
|
76
64
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
dc.draw_circle(centre_point, centre_point,
|
85
|
-
( size.width * circ.radius).to_i )
|
86
|
-
end
|
65
|
+
# Set up the scores and sizes of the rings
|
66
|
+
@radii = [
|
67
|
+
TargetCircle[ 0.1, 20, Wx::RED_BRUSH ],
|
68
|
+
TargetCircle[ 0.25, 10, Wx::BLUE_BRUSH ],
|
69
|
+
TargetCircle[ 0.4, 5, Wx::GREEN_BRUSH ] ]
|
70
|
+
evt_paint { | e | on_paint(e) }
|
71
|
+
evt_left_down { | e | on_left_down(e) }
|
87
72
|
end
|
88
|
-
end
|
89
73
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
distance = Math.sqrt( ( evt.x - centre_point ) ** 2 +
|
94
|
-
( evt.y - centre_point ) ** 2 )
|
95
|
-
# See which target ring, if any, was hit by the event
|
96
|
-
@radii.each do | circ |
|
97
|
-
if distance < ( size.width * circ.radius)
|
98
|
-
# Create an instance of the event
|
99
|
-
evt = TargetHitEvent.new(self, circ.score, distance)
|
100
|
-
# This sends the event for processing by listeners
|
101
|
-
event_handler.process_event(evt)
|
102
|
-
break
|
103
|
-
end
|
74
|
+
# What point is at the centre (assuming this control is always square)
|
75
|
+
def centre_point
|
76
|
+
size.width / 2
|
104
77
|
end
|
105
|
-
end
|
106
78
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
79
|
+
# Called whenever the target is repainted, draws a series of
|
80
|
+
# concentric circles
|
81
|
+
def on_paint(evt)
|
82
|
+
paint do | dc |
|
83
|
+
dc.clear
|
84
|
+
@radii.reverse_each do | circ |
|
85
|
+
dc.brush = circ.brush
|
86
|
+
dc.draw_circle(centre_point, centre_point,
|
87
|
+
( size.width * circ.radius).to_i )
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
112
91
|
|
113
|
-
#
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
92
|
+
# Test if the target was hit, and generate a TargetHitEvent if so
|
93
|
+
def on_left_down(evt)
|
94
|
+
# quick bit of pythagoras...
|
95
|
+
distance = Math.sqrt( ( evt.x - centre_point ) ** 2 +
|
96
|
+
( evt.y - centre_point ) ** 2 )
|
97
|
+
# See which target ring, if any, was hit by the event
|
98
|
+
@radii.each do | circ |
|
99
|
+
if distance < ( size.width * circ.radius)
|
100
|
+
# Create an instance of the event
|
101
|
+
evt = TargetHitEvent.new(self, circ.score, distance)
|
102
|
+
# This sends the event for processing by listeners
|
103
|
+
event_handler.process_event(evt)
|
104
|
+
break
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
128
108
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
set_status_text(msg, 0)
|
109
|
+
def try_before(event)
|
110
|
+
event_handler.queue_event(CountEvent.new(self.id)) if TargetHitEvent === event
|
111
|
+
super
|
112
|
+
end
|
134
113
|
end
|
135
114
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
115
|
+
# Container frame for the target control
|
116
|
+
class TargetFrame < Wx::Frame
|
117
|
+
def initialize(title)
|
118
|
+
super(nil, :title => title, :size => [300, 300])
|
140
119
|
|
141
|
-
|
142
|
-
def on_size(evt)
|
143
|
-
smaller = [ evt.size.width, evt.size.height ].min
|
144
|
-
@tgt.centre
|
145
|
-
@tgt.size = Wx::Size.new(smaller, smaller)
|
146
|
-
@tgt.refresh
|
147
|
-
end
|
120
|
+
self.icon = Wx.Icon(:sample, Wx::BITMAP_TYPE_XPM, art_path: File.join(__dir__, '..'))
|
148
121
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
if @listening
|
153
|
-
# Remove :evt_target event handler for the @tgt
|
154
|
-
disconnect(@tgt.get_id, Wx::ID_ANY, :evt_target)
|
155
|
-
menu_bar.check(TOGGLE_LISTEN, false)
|
156
|
-
self.status_text = "Ignoring target events"
|
157
|
-
@listening = false
|
158
|
-
else
|
159
|
-
# Restore evt_target event handler for the @tgt
|
122
|
+
@tgt = TargetControl.new(self)
|
123
|
+
# This user-defined event handling method was set up by
|
124
|
+
# EvtHandler.register_class, above
|
160
125
|
evt_target(@tgt.get_id) { | e | on_target(e) }
|
161
|
-
|
162
|
-
|
126
|
+
@counter = 0
|
127
|
+
evt_counter(@tgt.get_id) { | e | on_counter(e) }
|
163
128
|
@listening = true
|
129
|
+
evt_size { | e | on_size(e) }
|
130
|
+
setup_menus
|
131
|
+
create_status_bar(2)
|
164
132
|
end
|
165
|
-
end
|
166
133
|
|
167
|
-
|
168
|
-
|
169
|
-
|
134
|
+
# What's done when the target is hit
|
135
|
+
def on_target(evt)
|
136
|
+
msg = "Target hit for score %i, %.2f pixels from centre" %
|
137
|
+
[ evt.score, evt.distance ]
|
138
|
+
set_status_text(msg, 0)
|
139
|
+
end
|
170
140
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
141
|
+
def on_counter(evt)
|
142
|
+
@counter += 1
|
143
|
+
set_status_text(@counter.to_s, 1)
|
144
|
+
end
|
145
|
+
|
146
|
+
# Keep the target centred and square
|
147
|
+
def on_size(evt)
|
148
|
+
smaller = [ evt.size.width, evt.size.height ].min
|
149
|
+
@tgt.centre
|
150
|
+
@tgt.size = Wx::Size.new(smaller, smaller)
|
151
|
+
@tgt.refresh
|
175
152
|
end
|
176
|
-
end
|
177
153
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
154
|
+
# Toggle whether or not we are listening for events from the bulls-eye
|
155
|
+
# target
|
156
|
+
def on_toggle_connect
|
157
|
+
if @listening
|
158
|
+
# Remove :evt_target event handler for the @tgt
|
159
|
+
disconnect(@tgt.get_id, Wx::ID_ANY, :evt_target)
|
160
|
+
menu_bar.check(TOGGLE_LISTEN, false)
|
161
|
+
self.status_text = "Ignoring target events"
|
162
|
+
@listening = false
|
163
|
+
else
|
164
|
+
# Restore evt_target event handler for the @tgt
|
165
|
+
evt_target(@tgt.get_id) { | e | on_target(e) }
|
166
|
+
menu_bar.check(TOGGLE_LISTEN, true)
|
167
|
+
self.status_text = ''
|
168
|
+
@listening = true
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def on_about
|
173
|
+
msg = sprintf("This is the About dialog of the event handling sample.\n" \
|
174
|
+
"Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION)
|
175
|
+
|
176
|
+
Wx::MessageDialog(self, msg, 'About Event Handling',
|
177
|
+
Wx::OK | Wx::ICON_INFORMATION) do |about_dlg|
|
178
|
+
about_dlg.ok_label = Wx::ButtonLabel.new('Close')
|
179
|
+
about_dlg.show_modal
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
TOGGLE_LISTEN = 1001
|
184
|
+
def setup_menus
|
185
|
+
menu_file = Wx::Menu.new
|
186
|
+
menu_help = Wx::Menu.new
|
187
|
+
menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
|
188
|
+
evt_menu(Wx::ID_ABOUT) { on_about }
|
189
|
+
menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
|
190
|
+
evt_menu(Wx::ID_EXIT) { self.close }
|
191
|
+
menu_file.append_check_item(TOGGLE_LISTEN, "L&isten for events",
|
192
|
+
"Toggle listening for target events")
|
193
|
+
evt_menu(TOGGLE_LISTEN) { on_toggle_connect }
|
194
|
+
|
195
|
+
menu_bar = Wx::MenuBar.new
|
196
|
+
menu_bar.append(menu_file, "&File")
|
197
|
+
menu_bar.append(menu_help, "&Help")
|
198
|
+
|
199
|
+
self.menu_bar = menu_bar
|
200
|
+
menu_bar.check(TOGGLE_LISTEN, true)
|
201
|
+
end
|
196
202
|
end
|
203
|
+
|
197
204
|
end
|
198
205
|
|
199
206
|
module EventSample
|
@@ -213,7 +220,7 @@ module EventSample
|
|
213
220
|
end
|
214
221
|
|
215
222
|
def self.activate
|
216
|
-
frame = TargetFrame.new("Event Handling Sample")
|
223
|
+
frame = Event::TargetFrame.new("Event Handling Sample")
|
217
224
|
frame.show
|
218
225
|
frame
|
219
226
|
end
|
data/samples/event/threaded.rb
CHANGED
@@ -27,6 +27,8 @@ require 'wx'
|
|
27
27
|
# wxRuby's Timer class to explicitly allocate time for non-GUI threads
|
28
28
|
# to run. The latter technique is shown here.
|
29
29
|
|
30
|
+
module Threaded
|
31
|
+
|
30
32
|
# A custom type of event associated with a target control. Note that for
|
31
33
|
# user-defined controls, the associated event should inherit from
|
32
34
|
# Wx::CommandEvent rather than Wx::Event.
|
@@ -55,6 +57,9 @@ class ProgressFrame < Wx::Frame
|
|
55
57
|
STEPS = 20
|
56
58
|
def initialize
|
57
59
|
super(nil, :title => 'Threading demo')
|
60
|
+
|
61
|
+
self.icon = Wx.Icon(:sample, Wx::BITMAP_TYPE_XPM, art_path: File.join(__dir__, '..'))
|
62
|
+
|
58
63
|
@gauges = []
|
59
64
|
panel = Wx::Panel.new(self)
|
60
65
|
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
@@ -107,6 +112,8 @@ class GaugeApp < Wx::App
|
|
107
112
|
end
|
108
113
|
end
|
109
114
|
|
115
|
+
end
|
116
|
+
|
110
117
|
module ThreadSample
|
111
118
|
|
112
119
|
include WxRuby::Sample if defined? WxRuby::Sample
|
@@ -140,7 +147,7 @@ module ThreadSample
|
|
140
147
|
end
|
141
148
|
|
142
149
|
if $0 == __FILE__
|
143
|
-
GaugeApp.run
|
150
|
+
Threaded::GaugeApp.run
|
144
151
|
end
|
145
152
|
|
146
153
|
end
|
@@ -11,66 +11,73 @@
|
|
11
11
|
|
12
12
|
require 'wx'
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# be
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
14
|
+
module UpdateUIEvent
|
15
|
+
|
16
|
+
# Demonstrating the use of evt_update_ui to keep menu items and controls
|
17
|
+
# in sync in being enabled/disabled, checked/unchecked.
|
18
|
+
#
|
19
|
+
# evt_update_ui is called repeatedly whenever the item is (or is about
|
20
|
+
# to become) visible; by calling methods on the passed event object, the
|
21
|
+
# state of the control is updated. For complex applications, this can be
|
22
|
+
# a lot simpler (less code, more reliable) than having to remember to
|
23
|
+
# update all the relevant controls and items whenever the state changes.
|
24
|
+
#
|
25
|
+
# In the example below, the application is globally in edit mode. This
|
26
|
+
# mode can be changed either from a menu item, or via a
|
27
|
+
# checkbox. Whichever is used to change, the state of the other should
|
28
|
+
# be kept in sync
|
29
|
+
class UpdateUIFrame < Wx::Frame
|
30
|
+
def initialize
|
31
|
+
super(nil, :title => 'Update UI example', :size => [ 400, 300 ])
|
32
|
+
|
33
|
+
self.icon = Wx.Icon(:sample, Wx::BITMAP_TYPE_XPM, art_path: File.join(__dir__, '..'))
|
34
|
+
|
35
|
+
@edit_mode = false
|
36
|
+
|
37
|
+
# First, set up the menus
|
38
|
+
self.menu_bar = Wx::MenuBar.new
|
39
|
+
menu_edit = Wx::Menu.new
|
40
|
+
|
41
|
+
# Toggle case-change menu item
|
42
|
+
menu_edit.append_check_item(Wx::ID_EDIT, 'Allow case change')
|
43
|
+
# When the item is called, toggle edit mode
|
44
|
+
evt_menu(Wx::ID_EDIT) { @edit_mode = ! @edit_mode }
|
45
|
+
# Give the menu item a check or not, depending on mode
|
46
|
+
evt_update_ui(Wx::ID_EDIT) { | evt | evt.check(@edit_mode) }
|
47
|
+
|
48
|
+
# Upcase menu item
|
49
|
+
up_case = menu_edit.append('Upper case')
|
50
|
+
evt_menu(up_case) { @txt.value = @txt.value.upcase }
|
51
|
+
evt_update_ui(up_case) { | evt | evt.enable(@edit_mode) }
|
52
|
+
|
53
|
+
# Lowercase menu item
|
54
|
+
up_case = menu_edit.append('Lower case')
|
55
|
+
evt_menu(up_case) { @txt.value = @txt.value.downcase }
|
56
|
+
evt_update_ui(up_case) { | evt | evt.enable(@edit_mode) }
|
57
|
+
|
58
|
+
menu_bar.append(menu_edit, "&Edit")
|
59
|
+
|
60
|
+
# Second, the frame contents
|
61
|
+
self.sizer = Wx::BoxSizer.new(Wx::VERTICAL)
|
62
|
+
|
63
|
+
# A text control
|
64
|
+
@txt = Wx::TextCtrl.new( self,
|
65
|
+
:value => 'Welcome to wxRuby',
|
66
|
+
:style => Wx::TE_MULTILINE )
|
67
|
+
sizer.add(@txt, 1, Wx::GROW|Wx::ALL, 5)
|
68
|
+
|
69
|
+
# A checkbox, use the Wx::ID_EDIT id to share evt code with the
|
70
|
+
# corresponding menu item
|
71
|
+
@cbx = Wx::CheckBox.new( self,
|
72
|
+
:id => Wx::ID_EDIT,
|
73
|
+
:label => 'Allow case change')
|
74
|
+
evt_checkbox(@cbx) { @edit_mode = ! @edit_mode }
|
75
|
+
|
76
|
+
sizer.add(@cbx, 0, Wx::RIGHT|Wx::ALL, 5)
|
77
|
+
sizer.layout
|
78
|
+
end
|
73
79
|
end
|
80
|
+
|
74
81
|
end
|
75
82
|
|
76
83
|
module UpdateUISample
|
@@ -84,7 +91,7 @@ module UpdateUISample
|
|
84
91
|
end
|
85
92
|
|
86
93
|
def self.activate
|
87
|
-
frame = UpdateUIFrame.new
|
94
|
+
frame = UpdateUIEvent::UpdateUIFrame.new
|
88
95
|
frame.show
|
89
96
|
frame
|
90
97
|
end
|