wxruby3 0.9.0.pre.beta.13 → 0.9.0.pre.rc.1
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/README.md +47 -4
- data/assets/hello_button.png +0 -0
- data/assets/hello_button_clicked.png +0 -0
- data/assets/hello_world.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/accessors.rb +8 -2
- 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/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 +36 -0
- data/lib/wx/core/find_replace_dialog.rb +24 -0
- data/lib/wx/core/icon.rb +1 -1
- data/lib/wx/core/image.rb +1 -1
- data/lib/wx/core/paintdc.rb +8 -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 +1 -1
- 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/memory_dc.rb +75 -0
- data/lib/wx/doc/mirror_dc.rb +16 -0
- data/lib/wx/doc/prt/printer_dc.rb +26 -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_disabler.rb +10 -0
- data/lib/wx/global_const.rb +24 -18
- 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 +7 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/wxruby/cmd/test.rb +1 -1
- data/rakelib/install.rb +3 -1
- data/rakelib/lib/core/mapping.rb +5 -5
- data/rakelib/lib/core/spec.rb +7 -3
- data/rakelib/lib/core/spec_helper.rb +9 -1
- data/rakelib/lib/director/accelerator.rb +1 -1
- data/rakelib/lib/director/app.rb +25 -3
- 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/bitmap.rb +2 -1
- data/rakelib/lib/director/bitmap_combobox.rb +32 -0
- data/rakelib/lib/director/brush.rb +1 -0
- 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 +1 -2
- 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 +4 -1
- 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 +2 -1
- 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/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/icon.rb +2 -0
- data/rakelib/lib/director/listbox.rb +1 -0
- data/rakelib/lib/director/locale.rb +2 -1
- data/rakelib/lib/director/palette.rb +1 -0
- data/rakelib/lib/director/pen.rb +2 -1
- 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/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/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 +24 -0
- data/rakelib/lib/director/sizer.rb +2 -2
- data/rakelib/lib/director/styled_text_ctrl.rb +2 -0
- data/rakelib/lib/director/text_entry.rb +2 -2
- 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 +0 -6
- 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/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/events.yaml +152 -0
- data/rakelib/lib/generate/doc/evt_handler.yaml +63 -0
- data/rakelib/lib/generate/doc.rb +77 -14
- data/rakelib/lib/generate/interface.rb +11 -0
- data/rakelib/lib/specs/interfaces.rb +5 -4
- 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/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 +23 -21
- data/samples/ribbon/ribbon.rb +47 -46
- data/tests/lib/wxapp_runner.rb +3 -3
- data/tests/lib/wxframe_runner.rb +59 -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_gdi_object.rb +161 -0
- data/tests/test_intl.rb +11 -14
- data/tests/test_item_data.rb +33 -1
- data/tests/test_std_controls.rb +147 -0
- metadata +56 -4
- data/samples/drawing/tn_svgtest.png +0 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
:wxArtProvider:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:para:
|
6
|
+
- :pattern: !ruby/regexp /<programlisting>.*MyProvider/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
Example:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
class MyArtProvider < Wx::ArtProvider
|
13
|
+
|
14
|
+
def create_bitmap(id, client, size)
|
15
|
+
# ... create and return bitmap
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
Wx::ArtProvider.push(MyArtProvider.new)
|
21
|
+
```
|
22
|
+
|
23
|
+
- :pattern: !ruby/regexp /Note\s+that,\s+as\s+usual\s+in\s+wxWidgets\s+API.*/
|
24
|
+
:replace: ''
|
25
|
+
- :pattern: !ruby/regexp /wxNO_IMPLICIT_WXSTRING_ENCODING/
|
26
|
+
:replace: ''
|
27
|
+
:programlisting:
|
28
|
+
- :pattern: !ruby/regexp /ifdef.*__WXGTK__/
|
29
|
+
:replace: |
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
if Wx::PLATFORM == 'WXGTK'
|
33
|
+
bmp = Wx::ArtProvider.get_bitmap("gtk-cdrom", Wx::ART_MENU)
|
34
|
+
end
|
35
|
+
```
|
@@ -0,0 +1,37 @@
|
|
1
|
+
---
|
2
|
+
:wxBitmap.wxBitmap:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:para:
|
6
|
+
- :pattern: !ruby/regexp /<programlisting>.*GetSubBitmap/
|
7
|
+
:replace: |
|
8
|
+
```ruby
|
9
|
+
newBitmap = oldBitmap.get_sub_bitmap(
|
10
|
+
Wx::Rect.new(0, 0, oldBitmap.width, oldBitmap.height))
|
11
|
+
```
|
12
|
+
:wxBitmapBundle:
|
13
|
+
:detail:
|
14
|
+
:pre:
|
15
|
+
:para:
|
16
|
+
- :pattern: !ruby/regexp /<programlisting>.*MyFrame::MyFrame/
|
17
|
+
:replace: |
|
18
|
+
```ruby
|
19
|
+
class MyFrame < Wx::Frame
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
super(nil, Wx::ID_ANY, "My frame")
|
23
|
+
# ...
|
24
|
+
tool_bar = create_toolBar
|
25
|
+
|
26
|
+
bitmaps = [
|
27
|
+
Wx::Bitmap(:open_32x32, Wx::BitmapType::BITMAP_TYPE_PNG),
|
28
|
+
Wx::Bitmap(:open_48x48, Wx::BitmapType::BITMAP_TYPE_PNG),
|
29
|
+
Wx::Bitmap(:open_64x64, Wx::BitmapType::BITMAP_TYPE_PNG)
|
30
|
+
]
|
31
|
+
|
32
|
+
tool_bar.add_tool(Wx::ID_OPEN, "Open", Wx::BitmapBundle.from_bitmaps(bitmaps))
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
- :pattern: !ruby/regexp /For\s+the\s+platforms\s+with\s+resources\s+support/
|
37
|
+
:replace: ''
|
@@ -0,0 +1,74 @@
|
|
1
|
+
---
|
2
|
+
:wxBusyInfo:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:detaileddescription:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
Normally the main thread should always return to the main loop to continue dispatching events as quickly as possible,
|
9
|
+
hence this class shouldn't be needed. However if the main thread does need to block, this class provides a simple
|
10
|
+
way to at least show this to the user: just call {Wx::BusyInfo.busy} with a block and for the duration of the
|
11
|
+
execution of the block a message window will be shown.
|
12
|
+
For example:
|
13
|
+
```ruby
|
14
|
+
BusyInfo.busy('Working, please wait...') do
|
15
|
+
100000.times { do_a_calculation }
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
The displayed window is rather plain by default but can be customized by passing {Wx::BusyInfo.busy} an object of
|
20
|
+
{Wx::BusyInfoFlags} class instead of a simple message. Here is an example:
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
Wx::BusyInfo.busy(
|
24
|
+
Wx::BusyInfoFlags.new
|
25
|
+
.parent(self)
|
26
|
+
.icon(Wx::ArtProvider.get_icon(Wx::ART_PRINT,Wx::ART_OTHER, [128, 128]))
|
27
|
+
.title("<b>Printing your document</b>")
|
28
|
+
.text("Please wait...")
|
29
|
+
.foreground(Wx::WHITE)
|
30
|
+
.background(Wx::BLACK)
|
31
|
+
.transparency(4*Wx::ALPHA_OPAQUE/5)) do |bi|
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
This shows that separate title and text can be set, and that simple markup ({Wx::Control#set_label_markup}) can be used in them, and that it's also possible to add an icon and customize the colours and transparency of the window.
|
36
|
+
You may also want to call `Wx.get_app.yield` to refresh the window periodically (in case it had been obscured by other windows, for example) like this:
|
37
|
+
```ruby
|
38
|
+
Wx::WindowDisabler.disable do
|
39
|
+
BusyInfo.busy('Working, please wait...') do
|
40
|
+
100000.times do |i|
|
41
|
+
do_a_calculation }
|
42
|
+
Wx.get_app.yield if (i % 1000) == 0
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
```
|
47
|
+
|
48
|
+
but take care to not cause undesirable re-entrance when doing it (see {Wx::App#yield} for more details). The simplest way to do it is to use {Wx::WindowDisabler} class as illustrated in the above example.
|
49
|
+
Note that a {Wx::BusyInfo} is always built with the {Wx::STAY_ON_TOP} window style (see {Wx::Frame} window styles for more info).
|
50
|
+
|
51
|
+
===
|
52
|
+
|
53
|
+
Category: Common Dialogs
|
54
|
+
|
55
|
+
|
56
|
+
:wxBusyInfoFlags:
|
57
|
+
:detail:
|
58
|
+
:pre:
|
59
|
+
:programlisting:
|
60
|
+
- :pattern: !ruby/regexp /.*/
|
61
|
+
:replace: |
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
Wx::BusyInfo.busy(
|
65
|
+
Wx::BusyInfoFlags.new
|
66
|
+
.parent(self)
|
67
|
+
.icon(Wx::ArtProvider.get_icon(Wx::ART_PRINT,Wx::ART_OTHER, [128, 128]))
|
68
|
+
.title("<b>Printing your document</b>")
|
69
|
+
.text("Please wait...")
|
70
|
+
.foreground(Wx::WHITE)
|
71
|
+
.background(Wx::BLACK)
|
72
|
+
.transparency(4*Wx::ALPHA_OPAQUE/5)) do |bi|
|
73
|
+
end
|
74
|
+
```
|
@@ -0,0 +1,19 @@
|
|
1
|
+
---
|
2
|
+
:wxClientDC:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
# Create the initially empty label with the size big enough to show
|
11
|
+
# the given string.
|
12
|
+
text = Wx::ClientDC.draw_on(self) do |dc|
|
13
|
+
Wx::StaticText.new(
|
14
|
+
self, Wx::ID_ANY, "",
|
15
|
+
Wx::Point.new,
|
16
|
+
dc.get_text_extent("String of max length"),
|
17
|
+
Wx::ST_NO_AUTORESIZE)
|
18
|
+
end
|
19
|
+
```
|
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
:wxClipboard:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:detaileddescription:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
To use the clipboard, you call member functions of the global {Wx::Clipboard} object passed to the block for {Wx::Clipboard.open}.
|
9
|
+
See the {Wx::DataObject} Overview for further information.
|
10
|
+
Call {Wx::Clipboard.open} to get ownership of the (global) clipboard and execute the given block. You now
|
11
|
+
own the clipboard passed to the given block. Call {Wx::Clipboard#set_data} to put data on the clipboard, or
|
12
|
+
{Wx::Clipboard#get_data} to retrieve data from the clipboard. The clipboard is closed and ownership
|
13
|
+
relinquished when the block returns. You should keep the clipboard open only momentarily.
|
14
|
+
For example:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
# Write some text to the clipboard
|
18
|
+
Wx::Clipboard.open do |clip|
|
19
|
+
# This data object is held by the clipboard
|
20
|
+
clip.place(Wx::TextDataObject.new("Some text"))
|
21
|
+
# or alternatively
|
22
|
+
# clip.set_data(Wx::TextDataObject.new("Some text"))
|
23
|
+
end
|
24
|
+
|
25
|
+
# Read some text
|
26
|
+
data = Wx::TextDataObject.new
|
27
|
+
Wx::Clipboard.open do |clip|
|
28
|
+
if clip.supported?(Wx::DF_TEXT)
|
29
|
+
clip.fetch(data) # or clip.get_data(data)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
Wx.message_box(data.get_text)
|
33
|
+
```
|
34
|
+
|
35
|
+
On GTK, the clipboard behavior can vary depending on the configuration of the end-user's machine. In order
|
36
|
+
for the clipboard data to persist after the window closes, a clipboard manager must be installed. Some
|
37
|
+
clipboard managers will automatically flush the clipboard after each new piece of data is added, while others
|
38
|
+
will not. The {Wx::Clipboard#flush} function will force the clipboard manager to flush the data.
|
39
|
+
|
40
|
+
===
|
41
|
+
|
42
|
+
Category: Clipboard and Drag & Drop
|
43
|
+
@see Wx::DataObject
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
:wxCollapsiblePane:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
collpane = Wx::CollapsiblePane.new(self, Wx::ID_ANY, "Details:")
|
11
|
+
|
12
|
+
# add the pane with a zero proportion value to the 'sz' sizer which contains it
|
13
|
+
sz.add(collpane, 0, Wx::GROW|Wx::ALL, 5)
|
14
|
+
|
15
|
+
#/ now add a test label in the collapsible pane using a sizer to layout it:
|
16
|
+
win = collpane.get_pane
|
17
|
+
pane_sz = Wx::VBoxSizer
|
18
|
+
pane_sz.add(Wx::StaticText.new(win, Wx::ID_ANY, "test!"), 1, Wx::GROW|Wx::ALL, 2)
|
19
|
+
win.set_sizer(pane_sz)
|
20
|
+
pane_sz.set_size_hints(win)
|
21
|
+
```
|
@@ -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,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,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
|
+
```
|