wxruby3 0.9.0.pre.beta.14 → 0.9.0.pre.rc.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/INSTALL.md +51 -22
- data/README.md +81 -6
- data/assets/hello_button-macos.png +0 -0
- data/assets/hello_button-msw.png +0 -0
- data/assets/hello_button.png +0 -0
- data/assets/hello_button_clicked-macos.png +0 -0
- data/assets/hello_button_clicked-msw.png +0 -0
- data/assets/hello_button_clicked.png +0 -0
- data/assets/hello_button_clicked_combi.png +0 -0
- data/assets/hello_world-macos.png +0 -0
- data/assets/hello_world-msw.png +0 -0
- data/assets/hello_world.png +0 -0
- data/assets/hello_world_combi.png +0 -0
- data/assets/repo-social-preview.png +0 -0
- data/ext/wxruby3/include/wxruby-runtime.h +1 -0
- data/ext/wxruby3/swig/memory_management.i +6 -10
- data/ext/wxruby3/swig/wx.i +17 -6
- data/lib/wx/core/art_locator.rb +2 -2
- data/lib/wx/core/artprovider.rb +2 -2
- data/lib/wx/core/bitmap.rb +6 -5
- data/lib/wx/core/bitmap_combobox.rb +34 -0
- data/lib/wx/core/brush.rb +6 -0
- data/lib/wx/core/controlwithitems.rb +52 -14
- data/lib/wx/core/cursor.rb +1 -1
- data/lib/wx/core/dc.rb +0 -20
- data/lib/wx/core/event_blocker.rb +14 -0
- data/lib/wx/core/evthandler.rb +48 -2
- data/lib/wx/core/find_replace_dialog.rb +24 -0
- data/lib/wx/core/font.rb +22 -14
- data/lib/wx/core/helpprovider.rb +2 -2
- data/lib/wx/core/icon.rb +1 -1
- data/lib/wx/core/image.rb +1 -1
- data/lib/wx/core/menu.rb +5 -0
- data/lib/wx/core/paintdc.rb +8 -0
- data/lib/wx/core/pen.rb +6 -0
- data/lib/wx/core/text_entry.rb +15 -0
- data/lib/wx/core/v_list_box.rb +13 -0
- data/lib/wx/core/window.rb +29 -2
- data/lib/wx/doc/app.rb +40 -0
- data/lib/wx/doc/brush.rb +17 -0
- data/lib/wx/doc/busy_info.rb +21 -0
- data/lib/wx/doc/client_dc.rb +28 -0
- data/lib/wx/doc/controlwithitems.rb +11 -0
- data/lib/wx/doc/dc.rb +0 -14
- data/lib/wx/doc/event_blocker.rb +27 -0
- data/lib/wx/doc/evthandler.rb +4 -0
- data/lib/wx/doc/extra/02_lifecycles.md +49 -0
- data/lib/wx/doc/extra/10_art.md +1 -1
- data/lib/wx/doc/extra/11_drawing_and_dc.md +62 -0
- data/lib/wx/doc/font.rb +27 -0
- data/lib/wx/doc/memory_dc.rb +75 -0
- data/lib/wx/doc/mirror_dc.rb +16 -0
- data/lib/wx/doc/pen.rb +17 -0
- data/lib/wx/doc/prt/printer_dc.rb +26 -0
- data/lib/wx/doc/radio_box.rb +20 -0
- data/lib/wx/doc/screen_dc.rb +10 -6
- data/lib/wx/doc/svg_file_dc.rb +20 -0
- data/lib/wx/doc/v_list_box.rb +9 -0
- data/lib/wx/doc/window.rb +27 -0
- data/lib/wx/doc/window_disabler.rb +10 -0
- data/lib/wx/html/keyword_defs.rb +6 -7
- data/lib/wx/html/require.rb +1 -0
- data/lib/wx/html/simple_html_listbox.rb +105 -0
- data/lib/wx/keyword_defs.rb +83 -75
- data/lib/wx/prt/keyword_defs.rb +5 -1
- data/lib/wx/version.rb +1 -1
- data/lib/wx/wxruby/cmd/test.rb +1 -1
- data/rakelib/install.rb +20 -7
- data/rakelib/lib/config/linux.rb +4 -2
- data/rakelib/lib/config/macosx.rb +120 -1
- data/rakelib/lib/config/mingw.rb +6 -1
- data/rakelib/lib/config/unixish.rb +26 -11
- data/rakelib/lib/config.rb +15 -6
- data/rakelib/lib/core/mapping.rb +5 -5
- data/rakelib/lib/core/package.rb +1 -1
- data/rakelib/lib/core/spec.rb +9 -5
- data/rakelib/lib/core/spec_helper.rb +9 -1
- data/rakelib/lib/director/accelerator.rb +1 -1
- data/rakelib/lib/director/app.rb +55 -4
- data/rakelib/lib/director/art_provider.rb +5 -1
- data/rakelib/lib/director/aui_pane_info.rb +1 -1
- data/rakelib/lib/director/aui_tab_ctrl.rb +1 -1
- data/rakelib/lib/director/aui_toolbar.rb +41 -0
- data/rakelib/lib/director/bitmap.rb +2 -1
- data/rakelib/lib/director/bitmap_combobox.rb +32 -0
- data/rakelib/lib/director/brush.rb +11 -1
- data/rakelib/lib/director/busy_info.rb +1 -1
- data/rakelib/lib/director/choice.rb +1 -0
- data/rakelib/lib/director/clipboard.rb +1 -1
- data/rakelib/lib/director/colour.rb +1 -0
- data/rakelib/lib/director/colour_picker_ctrl.rb +1 -1
- data/rakelib/lib/director/combobox.rb +2 -3
- data/rakelib/lib/director/context_help_button.rb +23 -0
- data/rakelib/lib/director/ctrl_with_items.rb +3 -0
- data/rakelib/lib/director/cursor.rb +1 -0
- data/rakelib/lib/director/data_object.rb +5 -7
- data/rakelib/lib/director/dc.rb +5 -1
- data/rakelib/lib/director/defs.rb +3 -0
- data/rakelib/lib/director/derived_dc.rb +278 -27
- data/rakelib/lib/director/dialog.rb +12 -3
- data/rakelib/lib/director/dir_picker_ctrl.rb +1 -1
- data/rakelib/lib/director/event.rb +3 -3
- data/rakelib/lib/director/event_blocker.rb +41 -0
- data/rakelib/lib/director/event_filter.rb +20 -0
- data/rakelib/lib/director/event_handler.rb +29 -2
- data/rakelib/lib/director/file_picker_ctrl.rb +1 -1
- data/rakelib/lib/director/find_replace_data.rb +1 -0
- data/rakelib/lib/director/font.rb +14 -4
- data/rakelib/lib/director/font_data.rb +1 -0
- data/rakelib/lib/director/font_picker_ctrl.rb +1 -1
- data/rakelib/lib/director/gdi_object.rb +1 -0
- data/rakelib/lib/director/graphics_context.rb +6 -6
- data/rakelib/lib/director/grid_table_message.rb +1 -1
- data/rakelib/lib/director/help_provider.rb +8 -10
- data/rakelib/lib/director/html_cell.rb +1 -1
- data/rakelib/lib/director/html_data_object.rb +5 -7
- data/rakelib/lib/director/html_listbox.rb +65 -1
- data/rakelib/lib/director/hyperlink_event.rb +22 -0
- data/rakelib/lib/director/icon.rb +2 -0
- data/rakelib/lib/director/listbox.rb +1 -0
- data/rakelib/lib/director/locale.rb +2 -1
- data/rakelib/lib/director/menu.rb +0 -3
- data/rakelib/lib/director/menu_bar.rb +3 -0
- data/rakelib/lib/director/palette.rb +1 -0
- data/rakelib/lib/director/pen.rb +12 -2
- data/rakelib/lib/director/pgproperties.rb +1 -1
- data/rakelib/lib/director/pgproperty.rb +1 -1
- data/rakelib/lib/director/pgvalidation_info.rb +1 -1
- data/rakelib/lib/director/platform_info.rb +1 -1
- data/rakelib/lib/director/popup_window.rb +18 -0
- data/rakelib/lib/director/print_data.rb +1 -1
- data/rakelib/lib/director/property_grid_interface.rb +1 -1
- data/rakelib/lib/director/property_grid_page_state.rb +1 -1
- data/rakelib/lib/director/radio_box.rb +15 -4
- data/rakelib/lib/director/region.rb +1 -0
- data/rakelib/lib/director/ribbon_art_provider.rb +1 -1
- data/rakelib/lib/director/richtext_buffer_data_object.rb +5 -7
- data/rakelib/lib/director/richtext_header_footer_data.rb +1 -1
- data/rakelib/lib/director/searchctrl.rb +25 -0
- data/rakelib/lib/director/sizer.rb +2 -2
- data/rakelib/lib/director/static_box.rb +1 -1
- data/rakelib/lib/director/styled_text_ctrl.rb +2 -0
- data/rakelib/lib/director/text_entry.rb +7 -2
- data/rakelib/lib/director/textctrl.rb +1 -1
- data/rakelib/lib/director/tree_ctrl.rb +6 -3
- data/rakelib/lib/director/uiaction_simulator.rb +20 -0
- data/rakelib/lib/director/variant.rb +1 -1
- data/rakelib/lib/director/vlistbox.rb +25 -0
- data/rakelib/lib/director/window.rb +37 -7
- data/rakelib/lib/director/with_images.rb +1 -1
- data/rakelib/lib/director/xml_node.rb +1 -1
- data/rakelib/lib/extractor/function.rb +5 -3
- data/rakelib/lib/generate/doc/about_dialog_info.yaml +46 -0
- data/rakelib/lib/generate/doc/accelerator.yaml +21 -0
- data/rakelib/lib/generate/doc/art_provider.yaml +35 -0
- data/rakelib/lib/generate/doc/bitmap.yaml +37 -0
- data/rakelib/lib/generate/doc/box_sizer.yaml +15 -0
- data/rakelib/lib/generate/doc/busy_info.yaml +74 -0
- data/rakelib/lib/generate/doc/client_dc.yaml +19 -0
- data/rakelib/lib/generate/doc/clipboard.yaml +43 -0
- data/rakelib/lib/generate/doc/collapsible_pane.yaml +21 -0
- data/rakelib/lib/generate/doc/colour_dialog.yaml +32 -0
- data/rakelib/lib/generate/doc/context_help_button.yaml +16 -0
- data/rakelib/lib/generate/doc/control.yaml +46 -0
- data/rakelib/lib/generate/doc/cursor.yaml +40 -0
- data/rakelib/lib/generate/doc/data_object.yaml +55 -0
- data/rakelib/lib/generate/doc/dc.yaml +14 -0
- data/rakelib/lib/generate/doc/dialog.yaml +36 -0
- data/rakelib/lib/generate/doc/dir_dialog.yaml +25 -0
- data/rakelib/lib/generate/doc/event_blocker.yaml +27 -0
- data/rakelib/lib/generate/doc/event_filter.yaml +47 -0
- data/rakelib/lib/generate/doc/events.yaml +152 -0
- data/rakelib/lib/generate/doc/evt_handler.yaml +63 -0
- data/rakelib/lib/generate/doc/file_dialog.yaml +68 -0
- data/rakelib/lib/generate/doc.rb +77 -14
- data/rakelib/lib/generate/interface.rb +22 -10
- data/rakelib/lib/specs/interfaces.rb +9 -5
- data/rakelib/lib/swig_runner.rb +3 -3
- data/rakelib/lib/typemap/common.rb +15 -3
- data/rakelib/lib/util/string.rb +1 -0
- data/rakelib/yard/yard/relative_markdown_links.rb +5 -1
- data/samples/aui/aui.rb +432 -363
- data/samples/bigdemo/wxArtProvider.rbw +5 -4
- data/samples/controls/controls.rb +2 -2
- data/samples/controls/htlbox.rb +411 -0
- data/samples/controls/tn_htlbox.png +0 -0
- data/samples/drawing/graphics_drawing.rb +1 -2
- data/samples/drawing/{svgtest.rb → image_prt.rb} +49 -18
- data/samples/drawing/tn_image_prt.png +0 -0
- data/samples/propgrid/propgrid.rb +26 -21
- data/samples/ribbon/ribbon.rb +47 -46
- data/samples/sampler/editor.rb +33 -25
- data/samples/sampler/sample.rb +2 -2
- data/samples/sampler/stc_editor.rb +4 -2
- data/tests/lib/item_container_tests.rb +82 -0
- data/tests/lib/text_entry_tests.rb +80 -0
- data/tests/lib/wxapp_runner.rb +15 -3
- data/tests/lib/wxframe_runner.rb +144 -0
- data/tests/test_app_event_filter.rb +74 -0
- data/tests/test_art_provider.rb +52 -0
- data/tests/test_clipboard.rb +2 -1
- data/tests/test_event_handling.rb +199 -16
- data/tests/test_events.rb +4 -11
- data/tests/test_ext_controls.rb +28 -0
- data/tests/test_font.rb +239 -0
- data/tests/test_gdi_object.rb +161 -0
- data/tests/test_intl.rb +16 -15
- data/tests/test_item_data.rb +33 -1
- data/tests/test_std_controls.rb +373 -0
- data/tests/test_window.rb +340 -0
- metadata +82 -4
- data/samples/drawing/tn_svgtest.png +0 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
---
|
2
|
+
:wxColourDialog:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# Some function for redrawing using the given colour. Ideally, it
|
11
|
+
# shouldn't do anything if the colour is the same as the one used
|
12
|
+
# before.
|
13
|
+
# def redraw(colour) ... end
|
14
|
+
|
15
|
+
data = Wx::ColourData.new
|
16
|
+
data.set_colour(initialColourToUse)
|
17
|
+
Wx::ColourDialog(self, data) do |dlg|
|
18
|
+
dlg.evt_colour_changed { |event| redraw(event.get_colour) }
|
19
|
+
if dlg.show_modal == Wx::ID_OK
|
20
|
+
# Colour did change.
|
21
|
+
else
|
22
|
+
# Colour didn't change.
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# This call is unnecessary under platforms generating
|
27
|
+
# Wx::EVT_COLOUR_CHANGED if the dialog was accepted and unnecessary
|
28
|
+
# under the platforms not generating this event if it was cancelled,
|
29
|
+
# so we could check for the different cases explicitly to avoid it,
|
30
|
+
# but it's simpler to just always call it.
|
31
|
+
redraw(data.get_colour)
|
32
|
+
```
|
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
:wxContextHelp:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# puts the application into a 'context-sensitive help mode' for my_window
|
11
|
+
context_help = Wx::ContextHelp.new(my_window)
|
12
|
+
...
|
13
|
+
...
|
14
|
+
# ends the 'context-sensitive help mode' for my_window
|
15
|
+
context_help.end_context_help
|
16
|
+
```
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
:wxControl.GetSizeFromTextSize:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# Create a control for post code entry.
|
11
|
+
postcode = Wx::TextCtrl.new(self, ...)
|
12
|
+
|
13
|
+
# And set its initial and minimal size to be big enough for
|
14
|
+
# entering 5 digits.
|
15
|
+
postcode.set_initial_size(
|
16
|
+
postcode.get_size_from_text_size(
|
17
|
+
postcode.get_text_extent("99999")))
|
18
|
+
```
|
19
|
+
|
20
|
+
:wxControl.GetSizeFromText:
|
21
|
+
:detail:
|
22
|
+
:pre:
|
23
|
+
:programlisting:
|
24
|
+
- :pattern: !ruby/regexp /.*/
|
25
|
+
:replace: |
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
def get_size_from_text(text)
|
29
|
+
get_size_from_text_size(get_text_extent(text))
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
:wxControl.SetLabelMarkup:
|
34
|
+
:detail:
|
35
|
+
:pre:
|
36
|
+
:programlisting:
|
37
|
+
- :pattern: !ruby/regexp /.*/
|
38
|
+
:replace: |
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
text = Wx::StaticText.new
|
42
|
+
...
|
43
|
+
text.set_label_markup("<b>&Bed</b> &mp; "+
|
44
|
+
"<span foreground='red'>breakfast</span> "+
|
45
|
+
"available <big>HERE</big>")
|
46
|
+
```
|
@@ -0,0 +1,40 @@
|
|
1
|
+
---
|
2
|
+
:wxCursor:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:detaileddescription:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
As with icons, cursors in X and MS Windows are created in a different manner. Therefore, separate cursors
|
9
|
+
will be created for the different environments. Platform-specific methods for creating a {Wx::Cursor} object
|
10
|
+
are catered for, and this is an occasion where conditional compilation will probably be required
|
11
|
+
(see {Wx::Icon} for an example).
|
12
|
+
A single cursor object may be used in many windows (any subwindow type). The wxWidgets convention is to set
|
13
|
+
the cursor for a window, as in X, rather than to set it globally as in MS Windows, although a global
|
14
|
+
{set_cursor} function is also available for MS Windows use.
|
15
|
+
|
16
|
+
===
|
17
|
+
|
18
|
+
Category: Graphics Device Interface (GDI)
|
19
|
+
Predefined objects/pointers:
|
20
|
+
- {Wx::NULL_CURSOR}
|
21
|
+
- {Wx::STANDARD_CURSOR}
|
22
|
+
- {Wx::HOURGLASS_CURSOR}
|
23
|
+
- {Wx::CROSS_CURSOR}
|
24
|
+
@see Wx::Bitmap
|
25
|
+
@see Wx::Icon
|
26
|
+
@see Wx::Window#set_cursor
|
27
|
+
@see Wx.set_cursor
|
28
|
+
@see Wx::StockCursor
|
29
|
+
|
30
|
+
:wxCursor.wxCursor:
|
31
|
+
:detail:
|
32
|
+
:pre:
|
33
|
+
:programlisting:
|
34
|
+
- :pattern: !ruby/regexp /.*/
|
35
|
+
:replace: |
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
image.set_option(Wx::IMAGE_OPTION_CUR_HOTSPOT_X, hotSpotX)
|
39
|
+
image.set_option(Wx::IMAGE_OPTION_CUR_HOTSPOT_X, hotSpotY)
|
40
|
+
```
|
@@ -0,0 +1,55 @@
|
|
1
|
+
---
|
2
|
+
:wxDataObjectComposite:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class MyDropTarget < Wx::DropTarget
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
dataobj = Wx::DataObjectComposite.new
|
14
|
+
dataobj.add(Wx::BitmapDataObject.new, true)
|
15
|
+
dataobj.add(Wx::FileDataObject.new)
|
16
|
+
set_data_object(dataobj)
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_data(x, y, defaultDragResult)
|
20
|
+
return Wx::DragNone unless get_data
|
21
|
+
|
22
|
+
dataobj_comp = get_data_object
|
23
|
+
|
24
|
+
format = dataobj_comp.get_received_format
|
25
|
+
dataobj = dataobj_comp.get_object(format)
|
26
|
+
case format.get_type
|
27
|
+
when Wx::DataFormatId::DF_BITMAP
|
28
|
+
# dataobj is Wx::BitmapDataObject
|
29
|
+
|
30
|
+
... use dataobj.get_bitmap ...
|
31
|
+
|
32
|
+
when Wx::DataFormatId::DF_FILENAME
|
33
|
+
# dataobj is Wx::FileDataObject
|
34
|
+
|
35
|
+
... use dataobj->GetFilenames() ...
|
36
|
+
|
37
|
+
else
|
38
|
+
Wx.log_error("unexpected data object format")
|
39
|
+
end
|
40
|
+
|
41
|
+
defaultDragResult
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
```
|
46
|
+
:wxURLDataObject:
|
47
|
+
:detail:
|
48
|
+
:pre:
|
49
|
+
:programlisting:
|
50
|
+
- :pattern: !ruby/regexp /.*/
|
51
|
+
:replace: |
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
Wx::Clipboard.open { |clip| clip.place(Wx::URLDataObject.new(url))
|
55
|
+
```
|
@@ -0,0 +1,14 @@
|
|
1
|
+
---
|
2
|
+
:wxDC.GetSize:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
sz = dc.get_dimensions
|
11
|
+
scaleX = (maxX.to_f / sz.width)
|
12
|
+
scaleY = (maxY.to_f / sz.height);
|
13
|
+
dc.set_user_scale([scaleX, scaleY].min,[scaleX, scaleY].min)
|
14
|
+
```
|
@@ -0,0 +1,36 @@
|
|
1
|
+
---
|
2
|
+
:wxDialog:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:para:
|
6
|
+
- :pattern: !ruby/regexp /Note\s+that\s+the\s+modal\s+dialog\s+is\s+one\s+of\s+the\s+very\s+few\s+examples/
|
7
|
+
:replace: |
|
8
|
+
Note that dialogs need to be explicitly destroyed when closed and not used anymore. The traditional code for this would be like:
|
9
|
+
:programlisting:
|
10
|
+
- :pattern: !ruby/regexp /MyAskDialog.*\*dlg/
|
11
|
+
:replace: |
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
def ask_user
|
15
|
+
dlg = MyAskDialog.new(...)
|
16
|
+
if dlg.show_modal == Wx::ID_OK
|
17
|
+
# ...
|
18
|
+
#else: dialog was cancelled or some another button pressed
|
19
|
+
end
|
20
|
+
|
21
|
+
dlg.destroy
|
22
|
+
end
|
23
|
+
```
|
24
|
+
- :pattern: !ruby/regexp /dlg\.ShowModal\(\)/
|
25
|
+
:replace: |
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
def ask_user
|
29
|
+
MyAskDialog(...) do |dlg|
|
30
|
+
if dlg.show_modal == Wx::ID_OK
|
31
|
+
# ...
|
32
|
+
#else: dialog was cancelled or some another button pressed
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
```
|
@@ -0,0 +1,25 @@
|
|
1
|
+
---
|
2
|
+
:wxDirSelector:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
dir = Wx.dir_selector('Choose a folder')
|
11
|
+
unless dir.empty?
|
12
|
+
...
|
13
|
+
end
|
14
|
+
```
|
15
|
+
:wxDirDialog:
|
16
|
+
:detail:
|
17
|
+
:pre:
|
18
|
+
:programlisting:
|
19
|
+
- :pattern: !ruby/regexp /.*/
|
20
|
+
:replace: |
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
Wx::DirDialog(nil, 'Choose input directory', '',
|
24
|
+
Wx::DD_DEFAULT_STYLE | Wx::DD_DIR_MUST_EXIST)
|
25
|
+
```
|
@@ -0,0 +1,27 @@
|
|
1
|
+
---
|
2
|
+
:wxEventBlocker:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class MyWindow
|
11
|
+
|
12
|
+
...
|
13
|
+
|
14
|
+
def do_something
|
15
|
+
# block all events directed to this window
|
16
|
+
Wx::EventBlocker.blocked_for(self) do
|
17
|
+
# while we do 1000 function_that_sends_events calls
|
18
|
+
1000.times { |i| function_that_sends_events(i) }
|
19
|
+
end
|
20
|
+
# old event handler restored; generated event(s) from next call will be processed
|
21
|
+
function_that_sends_events(0)
|
22
|
+
end
|
23
|
+
|
24
|
+
...
|
25
|
+
|
26
|
+
end
|
27
|
+
```
|
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
:wxEventFilter:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# This class allows determining the last time the user has worked with
|
11
|
+
# this application:
|
12
|
+
class LastActivityTimeDetector < Wx::EventFilter
|
13
|
+
def initialize
|
14
|
+
Wx::EvtHandler.add_filter(self)
|
15
|
+
|
16
|
+
@last = Time.now
|
17
|
+
end
|
18
|
+
|
19
|
+
def clear
|
20
|
+
Wx::EvtHandler.remove_filter(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def filter_event(event)
|
24
|
+
# Update the last user activity
|
25
|
+
t = event.get_event_type
|
26
|
+
case t
|
27
|
+
when Wx::EVT_KEY_DOWN,
|
28
|
+
Wx::EVT_MOTION,
|
29
|
+
Wx::EVT_LEFT_DOWN,
|
30
|
+
Wx::EVT_RIGHT_DOWN,
|
31
|
+
Wx::EVT_MIDDLE_DOWN
|
32
|
+
@last = Time.now
|
33
|
+
end
|
34
|
+
|
35
|
+
# Continue processing the event normally as well.
|
36
|
+
Event_Skip
|
37
|
+
end
|
38
|
+
|
39
|
+
# This function could be called periodically from some timer to
|
40
|
+
# do something (e.g. hide sensitive data or log out from remote
|
41
|
+
# server) if the user has been inactive for some time period.
|
42
|
+
def is_inactive_for?(diff)
|
43
|
+
(Time.now - diff) > @last
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
```
|
@@ -0,0 +1,152 @@
|
|
1
|
+
---
|
2
|
+
:wxKeyEvent.GetKeyCode:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
def on_char(event)
|
11
|
+
uc = event.get_unicode_key
|
12
|
+
if uc
|
13
|
+
# It's a "normal" character. Notice that this includes
|
14
|
+
# control characters in 1..31 range, e.g. Wx::K_RETURN or
|
15
|
+
# Wx::K_BACK, so check for them explicitly.
|
16
|
+
if uc.ord >= 32
|
17
|
+
Wx.log_message("You pressed '#{uc}'")
|
18
|
+
else
|
19
|
+
# It's a control character
|
20
|
+
...
|
21
|
+
end
|
22
|
+
else # No Unicode equivalent.
|
23
|
+
# It's a special key, deal with all the known ones:
|
24
|
+
case event.get_key_code
|
25
|
+
when Wx::K_LEFT, Wx::K_RIGHT
|
26
|
+
... move cursor ...
|
27
|
+
|
28
|
+
when Wx::K_F1:
|
29
|
+
... give help ...
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
```
|
34
|
+
:post:
|
35
|
+
- :pattern: !ruby/regexp /returns\s+\{Wx::K_NONE\}\)/
|
36
|
+
:subst: 'returns nil)'
|
37
|
+
:wxKeyEvent.GetUnicodeKey:
|
38
|
+
:detail:
|
39
|
+
:post:
|
40
|
+
- :pattern: !ruby/regexp /return\s+\{Wx::K_NONE\}\./
|
41
|
+
:subst: 'return nil.'
|
42
|
+
:wxKeyEvent.GetModifiers:
|
43
|
+
:detail:
|
44
|
+
:pre:
|
45
|
+
:programlisting:
|
46
|
+
- :pattern: !ruby/regexp /ControlDown/
|
47
|
+
:replace: |
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
if event.control_down && !event.alt_down && !event.shift_down && !event.meta_down
|
51
|
+
# ... handle Ctrl-XXX ...
|
52
|
+
```
|
53
|
+
- :pattern: !ruby/regexp /GetModifiers/
|
54
|
+
:replace: |
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
if event.get_modifiers == Wx::KeyModifier::MOD_CONTROL
|
58
|
+
# ... handle Ctrl-XXX ...
|
59
|
+
```
|
60
|
+
:wxMouseEvent.GetModifiers:
|
61
|
+
:detail:
|
62
|
+
:pre:
|
63
|
+
:programlisting:
|
64
|
+
- :pattern: !ruby/regexp /ControlDown/
|
65
|
+
:replace: |
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
if event.control_down && !event.alt_down && !event.shift_down && !event.meta_down
|
69
|
+
# ... handle Ctrl-XXX ...
|
70
|
+
```
|
71
|
+
- :pattern: !ruby/regexp /GetModifiers/
|
72
|
+
:replace: |
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
if event.get_modifiers == Wx::KeyModifier::MOD_CONTROL
|
76
|
+
# ... handle Ctrl-XXX ...
|
77
|
+
```
|
78
|
+
:wxUpdateUIEvent.IsCheckable:
|
79
|
+
:detail:
|
80
|
+
:pre:
|
81
|
+
:programlisting:
|
82
|
+
- :pattern: !ruby/regexp /.*/
|
83
|
+
:replace: |
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
def on_update_ui(event)
|
87
|
+
....
|
88
|
+
if event.is_checkable
|
89
|
+
event.check(...some condition...)
|
90
|
+
end
|
91
|
+
```
|
92
|
+
:wxPaintEvent:
|
93
|
+
:detail:
|
94
|
+
:pre:
|
95
|
+
:programlisting:
|
96
|
+
- :pattern: !ruby/regexp /DrawMyDocument/
|
97
|
+
:replace: |
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
def on_paint(event)
|
101
|
+
self.pain do |dc|
|
102
|
+
draw_my_document(dc)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
```
|
106
|
+
- :pattern: !ruby/regexp /GetViewStart/
|
107
|
+
:replace: |
|
108
|
+
|
109
|
+
```ruby
|
110
|
+
# Called when window needs to be repainted.
|
111
|
+
def on_paint(event)
|
112
|
+
self.paint do |dc|
|
113
|
+
# Find Out where the window has scrolled to
|
114
|
+
vb_pt = get_view_start # Top left corner of client
|
115
|
+
|
116
|
+
Wx::RegionIterator.for_region(get_update_region) do |region_it|
|
117
|
+
|
118
|
+
int vX,vY,vW,vH
|
119
|
+
wxRegionIterator upd(GetUpdateRegion()) # get the update rect list
|
120
|
+
|
121
|
+
region_it.each do |rct|
|
122
|
+
# rct == Dimensions of client area to repaint in pixels
|
123
|
+
|
124
|
+
# Repaint this rectangle
|
125
|
+
...some code...
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
```
|
131
|
+
:wxCloseEvent:
|
132
|
+
:detail:
|
133
|
+
:pre:
|
134
|
+
:programlisting:
|
135
|
+
- :pattern: !ruby/regexp /.*/
|
136
|
+
:replace: |
|
137
|
+
|
138
|
+
```ruby
|
139
|
+
def on_close(event)
|
140
|
+
if event.can_veto? && @file_not_saved
|
141
|
+
if Wx.message_box("The file has not been saved... continue closing?",
|
142
|
+
"Please confirm",
|
143
|
+
Wx::ICON_QUESTION | Wx::YES_NO) != Wx::YES)
|
144
|
+
event.veto
|
145
|
+
return
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
destroy # you may also do: event.skip
|
150
|
+
# since the default event handler does call #destroy too
|
151
|
+
end
|
152
|
+
```
|
@@ -0,0 +1,63 @@
|
|
1
|
+
---
|
2
|
+
:wxEvtHandler.QueueEvent:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: ''
|
8
|
+
:post:
|
9
|
+
- :pattern: !ruby/regexp /This\s+implies\s+that\s+the\s+event\s+should\s+be\s+allocated\s+on\s+the\s+heap\s+and/
|
10
|
+
:subst: 'This implies'
|
11
|
+
- :pattern: !ruby/regexp /\{Wx::EvtHandler#queue_event\}.*For\s+example:/
|
12
|
+
:subst: ''
|
13
|
+
- :pattern: !ruby/regexp /Note.*problem:/
|
14
|
+
:subst: ''
|
15
|
+
:wxEvtHandler.SetNextHandler:
|
16
|
+
:detail:
|
17
|
+
:pre:
|
18
|
+
:programlisting:
|
19
|
+
- :pattern: !ruby/regexp /.*/
|
20
|
+
:replace: |
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
handlerA.set_next_handler(handlerB)
|
24
|
+
handlerB.set_previous_handler(handlerA)
|
25
|
+
```
|
26
|
+
:wxEvtHandler.TryBefore:
|
27
|
+
:detail:
|
28
|
+
:pre:
|
29
|
+
:programlisting:
|
30
|
+
- :pattern: !ruby/regexp /.*/
|
31
|
+
:replace: |
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
class MyClass < BaseClass # inheriting from Wx::EvtHandler
|
35
|
+
...
|
36
|
+
protected
|
37
|
+
def try_before(event)
|
38
|
+
if my_pre_process(event)
|
39
|
+
return true
|
40
|
+
|
41
|
+
super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
```
|
45
|
+
:wxEvtHandler.TryAfter:
|
46
|
+
:detail:
|
47
|
+
:pre:
|
48
|
+
:programlisting:
|
49
|
+
- :pattern: !ruby/regexp /.*/
|
50
|
+
:replace: |
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
class MyClass < BaseClass # inheriting from Wx::EvtHandler
|
54
|
+
...
|
55
|
+
protected
|
56
|
+
def try_after(event)
|
57
|
+
if super
|
58
|
+
return true
|
59
|
+
|
60
|
+
my_post_process(event)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
```
|
@@ -0,0 +1,68 @@
|
|
1
|
+
---
|
2
|
+
:wxFileDialog:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /MyFrame::OnOpen/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class MyFrame
|
11
|
+
...
|
12
|
+
def on_open(event)
|
13
|
+
if (...current content has not been saved...)
|
14
|
+
if Wx.message_box('Current content has not been saved! Proceed?', 'Please confirm',
|
15
|
+
Wx::ICON_QUESTION | Wx::YES_NO, self) == Wx::NO
|
16
|
+
return
|
17
|
+
#else: proceed asking to the user the new file to open
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Wx::FileDialog(self, "Open XYZ file", "", "",
|
22
|
+
"XYZ files (*.xyz)|*.xyz", Wx::FD_OPEN|Wx::FD_FILE_MUST_EXIST) do |dlg|
|
23
|
+
return if dlg.show_modal == Wx::ID_CANCEL # the user changed idea...?
|
24
|
+
|
25
|
+
# proceed loading the file chosen by the user
|
26
|
+
file = File.open(dlg.path, 'r') rescue nil
|
27
|
+
unless file
|
28
|
+
Wx.log_error("Cannot open file '#{dlg.path}'.")
|
29
|
+
return
|
30
|
+
end
|
31
|
+
...
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
```
|
37
|
+
- :pattern: !ruby/regexp /MyFrame::OnSaveAs/
|
38
|
+
:replace: |
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
class MyFrame
|
42
|
+
...
|
43
|
+
def on_save_as(event)
|
44
|
+
Wx::FileDialog(self, "Save XYZ file", "", "",
|
45
|
+
"XYZ files (*.xyz)|*.xyz", Wx::FD_SAVE|Wx::FD_OVERWRITE_PROMPT) do |dlg|
|
46
|
+
return if dlg.show_modal == Wx::ID_CANCEL # the user changed idea...?
|
47
|
+
|
48
|
+
# save the current contents in the file
|
49
|
+
begin
|
50
|
+
File.open(dlg.path, 'w+') do |f|
|
51
|
+
# save to file
|
52
|
+
end
|
53
|
+
rescue
|
54
|
+
Wx.log_error("Cannot save current contents in file '#{dlg.path}'.")
|
55
|
+
return
|
56
|
+
end
|
57
|
+
end
|
58
|
+
...
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
```
|
63
|
+
- :pattern: !ruby/regexp /wxSystemOptions::SetOption/
|
64
|
+
:replace: |
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
Wx::SystemOptions.set_option(Wx::OSX_FILEDIALOG_ALWAYS_SHOW_TYPES, 1)
|
68
|
+
```
|