wxruby3 0.9.0 → 0.9.2
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/.yardopts +1 -0
- data/ext/wxruby3/include/wxRubyApp.h +338 -0
- data/ext/wxruby3/include/wxruby-Config.h +6 -6
- data/ext/wxruby3/include/wxruby-runtime.h +3 -0
- data/ext/wxruby3/swig/common.i +22 -0
- data/ext/wxruby3/swig/custom/director.swg +296 -0
- data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
- data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
- data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
- data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
- data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
- data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
- data/ext/wxruby3/swig/wx.i +50 -30
- data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
- data/lib/wx/aui/auinotebook.rb +6 -2
- data/lib/wx/aui/require.rb +1 -0
- data/lib/wx/core/app.rb +2 -2
- data/lib/wx/core/collapsible_pane.rb +1 -1
- data/lib/wx/core/const.rb +83 -0
- data/lib/wx/core/controlwithitems.rb +8 -6
- data/lib/wx/core/menu.rb +10 -0
- data/lib/wx/core/notebook.rb +6 -2
- data/lib/wx/core/sizer.rb +11 -0
- data/lib/wx/core/task_bar_button.rb +19 -0
- data/lib/wx/core/textctrl.rb +11 -1
- data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
- data/lib/wx/core/window.rb +10 -0
- data/lib/wx/doc/app.rb +48 -38
- data/lib/wx/doc/art_locator.rb +47 -43
- data/lib/wx/doc/aui/auimanager.rb +16 -8
- data/lib/wx/doc/aui/auinotebook.rb +20 -5
- data/lib/wx/doc/clipboard.rb +11 -7
- data/lib/wx/doc/colour_dialog.rb +14 -10
- data/lib/wx/doc/const.rb +66 -66
- data/lib/wx/doc/controlwithitems.rb +17 -7
- data/lib/wx/doc/data_object.rb +2 -2
- data/lib/wx/doc/event.rb +0 -6
- data/lib/wx/doc/evthandler.rb +113 -108
- data/lib/wx/doc/font.rb +1 -0
- data/lib/wx/doc/functions.rb +9 -9
- data/lib/wx/doc/gc_dc.rb +6 -1
- data/lib/wx/doc/graphics_context.rb +1 -0
- data/lib/wx/doc/grid/grid.rb +22 -1
- data/lib/wx/doc/help_controller.rb +11 -7
- data/lib/wx/doc/html/html_help_controller.rb +12 -4
- data/lib/wx/doc/list_ctrl.rb +33 -29
- data/lib/wx/doc/menu.rb +20 -0
- data/lib/wx/doc/notebook.rb +21 -0
- data/lib/wx/doc/pg/events.rb +13 -9
- data/lib/wx/doc/pg/pg_property.rb +18 -0
- data/lib/wx/doc/progress_dialog.rb +36 -32
- data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
- data/lib/wx/doc/prt/print_data.rb +13 -5
- data/lib/wx/doc/prt/print_dialog.rb +31 -23
- data/lib/wx/doc/prt/printer.rb +20 -12
- data/lib/wx/doc/radio_box.rb +19 -15
- data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
- data/lib/wx/doc/region_iterator.rb +32 -28
- data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
- data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
- data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
- data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
- data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
- data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
- data/lib/wx/doc/sizer.rb +20 -0
- data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
- data/lib/wx/doc/stream.rb +39 -35
- data/lib/wx/doc/system_settings.rb +30 -26
- data/lib/wx/doc/text_validator.rb +12 -8
- data/lib/wx/doc/textctrl.rb +16 -0
- data/lib/wx/doc/tree_ctrl.rb +95 -0
- data/lib/wx/doc/treebook.rb +9 -5
- data/lib/wx/doc/v_list_box.rb +9 -5
- data/lib/wx/doc/variant.rb +164 -160
- data/lib/wx/doc/window.rb +57 -42
- data/lib/wx/doc/window_disabler.rb +10 -6
- data/lib/wx/grid/grid.rb +27 -4
- data/lib/wx/keyword_defs.rb +43 -6
- data/lib/wx/pg/pg_property.rb +22 -0
- data/lib/wx/rtc/require.rb +3 -0
- data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
- data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
- data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
- data/lib/wx/stc/require.rb +1 -0
- data/lib/wx/stc/styled_text_ctrl.rb +25 -0
- data/lib/wx/version.rb +1 -1
- data/rakelib/lib/config/linux.rb +0 -3
- data/rakelib/lib/config/macosx.rb +1 -1
- data/rakelib/lib/config/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +1 -1
- data/rakelib/lib/config.rb +14 -4
- data/rakelib/lib/core/include/funcall.inc +33 -14
- data/rakelib/lib/core/include/swigdirector.inc +384 -0
- data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
- data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
- data/rakelib/lib/core/include/swigrun.inc +700 -0
- data/rakelib/lib/core/package.rb +19 -9
- data/rakelib/lib/core/parameter.rb +3 -0
- data/rakelib/lib/core/spec.rb +6 -1
- data/rakelib/lib/director/accelerator.rb +3 -4
- data/rakelib/lib/director/accessible.rb +47 -0
- data/rakelib/lib/director/animation.rb +1 -1
- data/rakelib/lib/director/animation_ctrl.rb +20 -0
- data/rakelib/lib/director/app.rb +15 -304
- data/rakelib/lib/director/app_traits.rb +10 -12
- data/rakelib/lib/director/art_provider.rb +1 -1
- data/rakelib/lib/director/ctrl_with_items.rb +17 -5
- data/rakelib/lib/director/data_format.rb +1 -1
- data/rakelib/lib/director/data_object_simple_base.rb +1 -2
- data/rakelib/lib/director/derived_dc.rb +1 -1
- data/rakelib/lib/director/dialog.rb +6 -0
- data/rakelib/lib/director/dialup_event.rb +44 -0
- data/rakelib/lib/director/dialup_manager.rb +45 -0
- data/rakelib/lib/director/drag_image.rb +2 -3
- data/rakelib/lib/director/event.rb +22 -4
- data/rakelib/lib/director/file_ctrl.rb +35 -0
- data/rakelib/lib/director/file_ctrl_event.rb +26 -0
- data/rakelib/lib/director/frame.rb +1 -3
- data/rakelib/lib/director/gdicommon.rb +27 -11
- data/rakelib/lib/director/graphics_context.rb +2 -4
- data/rakelib/lib/director/grid_cell_editor.rb +6 -6
- data/rakelib/lib/director/grid_ctrl.rb +34 -3
- data/rakelib/lib/director/help_controller.rb +1 -1
- data/rakelib/lib/director/icon.rb +5 -2
- data/rakelib/lib/director/list_ctrl.rb +5 -6
- data/rakelib/lib/director/locale.rb +1 -3
- data/rakelib/lib/director/log.rb +1 -4
- data/rakelib/lib/director/media_ctrl.rb +54 -0
- data/rakelib/lib/director/menu.rb +16 -1
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
- data/rakelib/lib/director/pgeditor.rb +2 -2
- data/rakelib/lib/director/pgproperties.rb +3 -3
- data/rakelib/lib/director/pgproperty.rb +24 -1
- data/rakelib/lib/director/property_grid_interface.rb +5 -10
- data/rakelib/lib/director/richtext_buffer.rb +1 -1
- data/rakelib/lib/director/richtext_composite_object.rb +25 -0
- data/rakelib/lib/director/richtext_ctrl.rb +15 -5
- data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
- data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
- data/rakelib/lib/director/sash_event.rb +42 -0
- data/rakelib/lib/director/sizer.rb +79 -1
- data/rakelib/lib/director/sizer_item.rb +22 -0
- data/rakelib/lib/director/static_box.rb +4 -5
- data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
- data/rakelib/lib/director/task_bar_button.rb +30 -0
- data/rakelib/lib/director/task_bar_icon.rb +6 -14
- data/rakelib/lib/director/textctrl.rb +12 -1
- data/rakelib/lib/director/tool_tip.rb +1 -1
- data/rakelib/lib/director/top_level_window.rb +4 -5
- data/rakelib/lib/director/tree_ctrl.rb +24 -50
- data/rakelib/lib/director/variant.rb +1 -1
- data/rakelib/lib/director/window.rb +24 -5
- data/rakelib/lib/director.rb +4 -4
- data/rakelib/lib/extractor/function.rb +6 -6
- data/rakelib/lib/extractor.rb +34 -5
- data/rakelib/lib/generate/analyzer.rb +8 -3
- data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
- data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
- data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
- data/rakelib/lib/generate/doc/cursor.yaml +0 -2
- data/rakelib/lib/generate/doc/events.yaml +10 -4
- data/rakelib/lib/generate/doc/panel.yaml +7 -0
- data/rakelib/lib/generate/doc/static_box.yaml +8 -0
- data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
- data/rakelib/lib/generate/doc.rb +89 -16
- data/rakelib/lib/generate/interface.rb +4 -3
- data/rakelib/lib/specs/interfaces.rb +161 -156
- data/rakelib/lib/swig_runner.rb +4 -50
- data/rakelib/lib/typemap/common.rb +54 -10
- data/rakelib/lib/typemap/data_format.rb +1 -1
- data/rakelib/lib/typemap/data_object_data.rb +2 -2
- data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
- data/rakelib/lib/typemap/points_list.rb +5 -7
- data/rakelib/lib/util/string.rb +10 -8
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
- data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
- data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
- data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
- data/rakelib/yard/templates/default/tags/setup.rb +16 -0
- data/rakelib/yard/yard-custom-templates.rb +3 -0
- data/samples/text/richtext.rb +0 -30
- data/samples/treectrl/treectrl.rb +1 -1
- data/tests/media/beep_lo.wav +0 -0
- data/tests/test_app_exit_exception.rb +36 -0
- data/tests/test_app_init_exception.rb +20 -0
- data/tests/test_book_controls.rb +29 -0
- data/tests/test_exceptions.rb +41 -0
- data/tests/test_list_ctrl.rb +1 -1
- data/tests/test_media_ctrl.rb +38 -0
- data/tests/test_menu.rb +69 -0
- data/tests/test_pg.rb +27 -0
- data/tests/test_richtext.rb +45 -0
- data/tests/test_sizer.rb +59 -0
- data/tests/test_std_controls.rb +78 -1
- data/tests/test_styled_text_ctrl.rb +46 -0
- data/tests/test_tree_ctrl.rb +138 -0
- data/tests/test_window.rb +12 -0
- data/tests/testapp_noframe.rb +1 -1
- metadata +54 -5
- data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
data/tests/test_menu.rb
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
require_relative './lib/wxframe_runner'
|
|
6
|
+
|
|
7
|
+
class MenuTests < WxRuby::Test::GUITests
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
@menu = Wx::Menu.new
|
|
12
|
+
@menu.append(Wx::ID_HIGHEST+1, 'Item 1', 'Test menuitem 1')
|
|
13
|
+
@menu.append(Wx::ID_HIGHEST+2, 'Item 2', 'Test menuitem 2')
|
|
14
|
+
@menu.append_separator
|
|
15
|
+
@menu.append_check_item(Wx::ID_HIGHEST+3, 'Check 3', 'Test menuitem 3')
|
|
16
|
+
@menu.append_separator
|
|
17
|
+
@menu.append_radio_item(Wx::ID_HIGHEST+4, 'Radio 4', 'Test menuitem 4')
|
|
18
|
+
@menu.append_radio_item(Wx::ID_HIGHEST+5, 'Radio 5', 'Test menuitem 5')
|
|
19
|
+
@menu.append_radio_item(Wx::ID_HIGHEST+6, 'Radio 6', 'Test menuitem 6')
|
|
20
|
+
frame_win.menu_bar = Wx::MenuBar.new
|
|
21
|
+
frame_win.menu_bar.append(@menu, "&Test")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def cleanup
|
|
25
|
+
frame_win.menu_bar = nil
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
attr_reader :menu
|
|
30
|
+
|
|
31
|
+
def test_basic
|
|
32
|
+
assert_equal(8, menu.get_menu_item_count)
|
|
33
|
+
check, pos = menu.find_child_item(Wx::ID_HIGHEST+3)
|
|
34
|
+
assert_not_nil(check)
|
|
35
|
+
assert_equal(3, pos)
|
|
36
|
+
assert_equal('Check 3', check.item_label)
|
|
37
|
+
assert_false(check.checked?)
|
|
38
|
+
check.check
|
|
39
|
+
assert_true(check.checked?)
|
|
40
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+5)
|
|
41
|
+
assert_not_nil(radio)
|
|
42
|
+
assert_equal(6, pos)
|
|
43
|
+
assert_equal('Radio 5', radio.item_label)
|
|
44
|
+
assert_false(radio.checked?)
|
|
45
|
+
radio.check
|
|
46
|
+
assert_true(radio.checked?)
|
|
47
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
|
|
48
|
+
assert_false(radio.checked?)
|
|
49
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+6)
|
|
50
|
+
assert_false(radio.checked?)
|
|
51
|
+
radio.check
|
|
52
|
+
assert_true(radio.checked?)
|
|
53
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+5)
|
|
54
|
+
assert_false(radio.checked?)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_enumerate
|
|
58
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
|
|
59
|
+
assert_true(radio.checked?) # first by default checked
|
|
60
|
+
menu.each_item do |mi|
|
|
61
|
+
mi.check if mi.id == (Wx::ID_HIGHEST+5)
|
|
62
|
+
end
|
|
63
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
|
|
64
|
+
assert_false(radio.checked?)
|
|
65
|
+
radio = menu.each_item.detect { |mi| mi.id == (Wx::ID_HIGHEST+5) }
|
|
66
|
+
assert_true(radio.checked?)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
data/tests/test_pg.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
require_relative './lib/wxframe_runner'
|
|
6
|
+
|
|
7
|
+
class PGChoicesTests < WxRuby::Test::GUITests
|
|
8
|
+
|
|
9
|
+
def test_enum_labels
|
|
10
|
+
texts = %w[Red Blue Green Yellow Black White]
|
|
11
|
+
choices = Wx::PG::PGChoices.new(texts)
|
|
12
|
+
choices.each_label { |lbl| assert_equal(texts.shift, lbl) }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_enum_entries
|
|
16
|
+
texts = %w[Flag1 Flag2 Flag3 Flag4]
|
|
17
|
+
choices = Wx::PG::PGChoices.new
|
|
18
|
+
texts.each_with_index do |s, i|
|
|
19
|
+
choices.add(s, 1 << i)
|
|
20
|
+
end
|
|
21
|
+
choices.each_entry.each_with_index do |entry, ix|
|
|
22
|
+
assert_equal(1 << ix, entry.value)
|
|
23
|
+
assert_equal(texts[ix], entry.get_text)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
data/tests/test_richtext.rb
CHANGED
|
@@ -67,6 +67,51 @@ class RichTextCtrlWriteTests < WxRuby::Test::GUITests
|
|
|
67
67
|
assert_equal('Second Line', richtext.get_line_text(1))
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
+
def test_enumerate_lines
|
|
71
|
+
richtext.write_text <<~__HEREDOC
|
|
72
|
+
This is line 1.
|
|
73
|
+
This is line 2.
|
|
74
|
+
This is line 3.
|
|
75
|
+
__HEREDOC
|
|
76
|
+
assert_equal(4, richtext.get_number_of_lines)
|
|
77
|
+
richtext.each_line.each_with_index do |txt, lnr|
|
|
78
|
+
if lnr < 3
|
|
79
|
+
assert("This is line #{lnr+1}.", txt)
|
|
80
|
+
else
|
|
81
|
+
assert('', txt)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
line_enum = richtext.each_line
|
|
85
|
+
txt = line_enum.detect { |l| l.index('2') }
|
|
86
|
+
assert_equal('This is line 2.', txt)
|
|
87
|
+
para = richtext.buffer.get_child_at_position(0)
|
|
88
|
+
assert_kind_of(Wx::RTC::RichTextParagraph, para)
|
|
89
|
+
assert_equal(1, para.get_lines.size)
|
|
90
|
+
para.each_line do |rtl|
|
|
91
|
+
txt = para.get_text_for_range(rtl.get_range)
|
|
92
|
+
assert("This is line 1.", txt)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_enumerate_children
|
|
97
|
+
richtext.write_text <<~__HEREDOC
|
|
98
|
+
This is line 1.
|
|
99
|
+
This is line 2.
|
|
100
|
+
This is line 3.
|
|
101
|
+
__HEREDOC
|
|
102
|
+
richtext.write_image(Wx.Bitmap(:wxruby, Wx::BitmapType::BITMAP_TYPE_PNG, art_section: 'test_art'))
|
|
103
|
+
assert_equal(4, richtext.buffer.get_child_count)
|
|
104
|
+
richtext.buffer.each_child.each_with_index do |c, i|
|
|
105
|
+
if i<3
|
|
106
|
+
assert_kind_of(Wx::RTC::RichTextParagraph, c)
|
|
107
|
+
assert_equal(1, c.get_lines.size)
|
|
108
|
+
else
|
|
109
|
+
assert_equal(1, c.get_child_count)
|
|
110
|
+
c.each_child { |cc| assert_kind_of(Wx::RTC::RichTextImage, cc) }
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
70
115
|
def test_write_image
|
|
71
116
|
assert_nothing_raised { richtext.write_image(Wx.Bitmap(:wxruby, Wx::BitmapType::BITMAP_TYPE_PNG, art_section: 'test_art')) }
|
|
72
117
|
img_obj = richtext.buffer.get_leaf_object_at_position(0)
|
data/tests/test_sizer.rb
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
require_relative './lib/wxframe_runner'
|
|
6
|
+
|
|
7
|
+
class SizerTests < WxRuby::Test::GUITests
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
frame_win.set_sizer(Wx::VBoxSizer.new)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def cleanup
|
|
15
|
+
super
|
|
16
|
+
GC.start
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_detach
|
|
20
|
+
frame_win.get_sizer.add(Wx::HBoxSizer.new)
|
|
21
|
+
frame_win.get_sizer.add_spacer(5)
|
|
22
|
+
# detaches HBoxSizer transferring ownership to Ruby; should not cause segfaults at GC
|
|
23
|
+
frame_win.get_sizer.detach(0)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_sizer_item_detach_and_re_attach
|
|
27
|
+
frame_win.get_sizer.add(Wx::HBoxSizer.new)
|
|
28
|
+
frame_win.get_sizer.add_spacer(5)
|
|
29
|
+
# get and detach
|
|
30
|
+
szr_itm = frame_win.get_sizer.get_item(0)
|
|
31
|
+
assert_not_nil(szr_itm)
|
|
32
|
+
assert_true(szr_itm.is_sizer)
|
|
33
|
+
szr = szr_itm.get_sizer
|
|
34
|
+
assert_not_nil(szr)
|
|
35
|
+
szr_itm.detach_sizer
|
|
36
|
+
assert_nil(szr_itm.get_sizer)
|
|
37
|
+
# remove sizer item
|
|
38
|
+
assert_true(frame_win.get_sizer.remove(0))
|
|
39
|
+
# re-attach detached sizer (should not cause segfaults at close due to incorrect ownership transfers)
|
|
40
|
+
assert_not_nil(frame_win.get_sizer.prepend(szr))
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_children
|
|
44
|
+
frame_win.get_sizer.add(Wx::HBoxSizer.new)
|
|
45
|
+
frame_win.get_sizer.add_spacer(5)
|
|
46
|
+
frame_win.get_sizer.add(Wx::VBoxSizer.new)
|
|
47
|
+
|
|
48
|
+
assert_equal(3, frame_win.sizer.item_count)
|
|
49
|
+
children = frame_win.sizer.get_children
|
|
50
|
+
assert_equal(3, children.size)
|
|
51
|
+
assert_true(children[0].sizer?)
|
|
52
|
+
assert_true(children[1].spacer?)
|
|
53
|
+
assert_true(children[2].sizer?)
|
|
54
|
+
frame_win.sizer.each_child do |si|
|
|
55
|
+
assert_equal(children.shift, si)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
data/tests/test_std_controls.rb
CHANGED
|
@@ -111,6 +111,34 @@ class TextCtrlTests < WxRuby::Test::GUITests
|
|
|
111
111
|
assert_equal('', text.get_value)
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
+
def test_stream_append
|
|
115
|
+
text << 'This is the number ' << 101 << '.'
|
|
116
|
+
assert_equal('This is the number 101.', text.get_value)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_enumerate_lines
|
|
120
|
+
text.destroy
|
|
121
|
+
@text = Wx::TextCtrl.new(frame_win, style: Wx::TE_MULTILINE, name: 'Text')
|
|
122
|
+
text << <<~__HEREDOC
|
|
123
|
+
This is line 1.
|
|
124
|
+
This is line 2.
|
|
125
|
+
This is line 3.
|
|
126
|
+
__HEREDOC
|
|
127
|
+
assert_equal(4, text.get_number_of_lines)
|
|
128
|
+
text.each_line.each_with_index do |txt, lnr|
|
|
129
|
+
if lnr < 3
|
|
130
|
+
assert("This is line #{lnr+1}.", txt)
|
|
131
|
+
else
|
|
132
|
+
assert('', txt)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
txt = text.each_line { |l| break l if l.index('2')}
|
|
136
|
+
assert_equal('This is line 2.', txt)
|
|
137
|
+
line_enum = text.each_line
|
|
138
|
+
txt = line_enum.detect { |l| l.index('3') }
|
|
139
|
+
assert_equal('This is line 3.', txt)
|
|
140
|
+
end
|
|
141
|
+
|
|
114
142
|
if has_ui_simulator?
|
|
115
143
|
def test_max_length
|
|
116
144
|
sim = get_ui_simulator
|
|
@@ -165,7 +193,7 @@ class ComboBoxTests < WxRuby::Test::GUITests
|
|
|
165
193
|
def setup
|
|
166
194
|
super
|
|
167
195
|
@combo = Wx::ComboBox.new(frame_win, name: 'ComboBox', choices: %w[One Two Three])
|
|
168
|
-
@combo.clear
|
|
196
|
+
@combo.value = '' # don't use #clear as that also clears the choices
|
|
169
197
|
end
|
|
170
198
|
|
|
171
199
|
def cleanup
|
|
@@ -180,6 +208,19 @@ class ComboBoxTests < WxRuby::Test::GUITests
|
|
|
180
208
|
assert_equal('', combo.get_value)
|
|
181
209
|
end
|
|
182
210
|
|
|
211
|
+
def test_enumerate
|
|
212
|
+
strings = combo.get_strings
|
|
213
|
+
combo.each_string.each_with_index do |str, ix|
|
|
214
|
+
assert_equal(strings[ix], str)
|
|
215
|
+
end
|
|
216
|
+
combo.each_string { |s| assert_equal(strings.shift, s)}
|
|
217
|
+
str_enum = combo.each_string
|
|
218
|
+
assert_kind_of(::Enumerator, str_enum)
|
|
219
|
+
assert_true(str_enum.any? { |s| s == 'Three'})
|
|
220
|
+
assert_true(combo.each_string.none? { |s| s == 'Four'})
|
|
221
|
+
assert_equal('BREAK', combo.each_string { |_| break 'BREAK' })
|
|
222
|
+
end
|
|
223
|
+
|
|
183
224
|
end
|
|
184
225
|
|
|
185
226
|
class CheckBoxTests < WxRuby::Test::GUITests
|
|
@@ -439,3 +480,39 @@ class GaugeTests < WxRuby::Test::GUITests
|
|
|
439
480
|
assert_equal(100, gauge.value)
|
|
440
481
|
end
|
|
441
482
|
end
|
|
483
|
+
|
|
484
|
+
class StaticBoxTests < WxRuby::Test::GUITests
|
|
485
|
+
|
|
486
|
+
def setup
|
|
487
|
+
super
|
|
488
|
+
@box = nil
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
def cleanup
|
|
492
|
+
@box.destroy if @box
|
|
493
|
+
super
|
|
494
|
+
end
|
|
495
|
+
|
|
496
|
+
attr_reader :box
|
|
497
|
+
|
|
498
|
+
def test_basic
|
|
499
|
+
@box = Wx::StaticBox.new(frame_win, label: 'Box')
|
|
500
|
+
|
|
501
|
+
txt = Wx::StaticText.new(box, Wx::ID_ANY, "This window is a child of the staticbox")
|
|
502
|
+
assert_equal(box, txt.parent)
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
unless Wx::PLATFORM == 'WXOSX'
|
|
506
|
+
|
|
507
|
+
def test_label_window
|
|
508
|
+
check = Wx::CheckBox.new(frame_win, Wx::ID_ANY, 'Enable')
|
|
509
|
+
@box = Wx::StaticBox.new(frame_win, label: check)
|
|
510
|
+
|
|
511
|
+
button = Wx::Button.new(box, label: 'Button')
|
|
512
|
+
box.enable(false)
|
|
513
|
+
assert_false(button.is_enabled)
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
require_relative './lib/wxframe_runner'
|
|
6
|
+
|
|
7
|
+
class StyledTextCtrlTests < WxRuby::Test::GUITests
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
@text = Wx::STC::StyledTextCtrl.new(frame_win, name: 'StyledText')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def cleanup
|
|
15
|
+
@text.destroy
|
|
16
|
+
super
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attr_reader :text
|
|
20
|
+
|
|
21
|
+
def test_text
|
|
22
|
+
assert_equal('', text.get_value)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_enumerate_lines
|
|
26
|
+
text.write_text <<~__HEREDOC
|
|
27
|
+
This is line 1.
|
|
28
|
+
This is line 2.
|
|
29
|
+
This is line 3.
|
|
30
|
+
__HEREDOC
|
|
31
|
+
assert_equal(4, text.get_number_of_lines)
|
|
32
|
+
text.each_line.each_with_index do |txt, lnr|
|
|
33
|
+
if lnr < 3
|
|
34
|
+
assert("This is line #{lnr+1}.", txt)
|
|
35
|
+
else
|
|
36
|
+
assert('', txt)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
txt = text.each_line { |l| break l if l.index('2')}
|
|
40
|
+
assert_equal('This is line 2.', txt)
|
|
41
|
+
line_enum = text.each_line
|
|
42
|
+
txt = line_enum.detect { |l| l.index('3') }
|
|
43
|
+
assert_equal('This is line 3.', txt)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
require_relative './lib/wxframe_runner'
|
|
6
|
+
|
|
7
|
+
class TreeCtrlTests < WxRuby::Test::GUITests
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
@tree = Wx::TreeCtrl.new(frame_win, name: 'TreeCtrl')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def cleanup
|
|
15
|
+
@tree.destroy
|
|
16
|
+
super
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attr_reader :tree
|
|
20
|
+
|
|
21
|
+
def tog_style(flag)
|
|
22
|
+
style = tree.get_window_style ^ flag
|
|
23
|
+
|
|
24
|
+
if Wx.has_feature?(:WXMSW)
|
|
25
|
+
# treectrl styles can't be changed on the fly using the native
|
|
26
|
+
# control and the tree must be recreated
|
|
27
|
+
tree.destroy
|
|
28
|
+
@tree = Wx::TreeCtrl.new(frame_win, style: style, name: 'TreeCtrl')
|
|
29
|
+
else
|
|
30
|
+
tree.set_window_style(style)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
private :tog_style
|
|
34
|
+
|
|
35
|
+
ITEMS = [
|
|
36
|
+
['Cat1', [
|
|
37
|
+
'Item1.1',
|
|
38
|
+
'Item1.2',
|
|
39
|
+
'Item1.3'
|
|
40
|
+
]
|
|
41
|
+
],
|
|
42
|
+
['Cat2', [
|
|
43
|
+
['Cat2.1', %w[Item2.1.1 Item2.1.2] ],
|
|
44
|
+
'Item2.2',
|
|
45
|
+
'Item2.3'
|
|
46
|
+
]
|
|
47
|
+
],
|
|
48
|
+
'Item3',
|
|
49
|
+
'Item4'
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
def add_tree_items(parent, items)
|
|
53
|
+
items.each do |itm|
|
|
54
|
+
if ::Array === itm
|
|
55
|
+
cat = tree.append_item(parent, itm.first.to_s)
|
|
56
|
+
add_tree_items(cat, itm.last)
|
|
57
|
+
else
|
|
58
|
+
tree.append_item(parent, itm.to_s)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
private :add_tree_items
|
|
63
|
+
|
|
64
|
+
def build_tree
|
|
65
|
+
root = tree.add_root('root')
|
|
66
|
+
add_tree_items(root, ITEMS)
|
|
67
|
+
end
|
|
68
|
+
private :build_tree
|
|
69
|
+
|
|
70
|
+
def test_tree
|
|
71
|
+
build_tree
|
|
72
|
+
|
|
73
|
+
assert_equal(4, tree.get_item_children(tree.get_root_item).size)
|
|
74
|
+
cat1 = tree.get_item_children(tree.get_root_item)[0]
|
|
75
|
+
assert_equal(3, tree.get_item_children(cat1).size)
|
|
76
|
+
cat2 = tree.get_item_children(tree.get_root_item)[1]
|
|
77
|
+
assert_equal(3, tree.get_item_children(cat2).size)
|
|
78
|
+
cat21 = tree.get_item_children(cat2)[0]
|
|
79
|
+
assert_equal(2, tree.get_item_children(cat21).size)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_hidden_root
|
|
83
|
+
tog_style(Wx::TR_HIDE_ROOT)
|
|
84
|
+
build_tree
|
|
85
|
+
|
|
86
|
+
assert_equal(4, tree.get_root_items.size)
|
|
87
|
+
cat1 = tree.get_root_items[0]
|
|
88
|
+
assert_equal(3, tree.get_item_children(cat1).size)
|
|
89
|
+
cat2 = tree.get_root_items[1]
|
|
90
|
+
assert_equal(3, tree.get_item_children(cat2).size)
|
|
91
|
+
cat21 = tree.get_item_children(cat2)[0]
|
|
92
|
+
assert_equal(2, tree.get_item_children(cat21).size)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_enumerable
|
|
96
|
+
build_tree
|
|
97
|
+
|
|
98
|
+
item211 = tree.detect { |itmid| tree.item_text(itmid) == 'Item2.1.1'}
|
|
99
|
+
assert_not_nil(item211)
|
|
100
|
+
assert_true(item211.ok?)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_enumerate
|
|
104
|
+
build_tree
|
|
105
|
+
|
|
106
|
+
tree.each_item_child(tree.get_root_item) do |itmid|
|
|
107
|
+
if tree.item_text(itmid) == 'Cat2'
|
|
108
|
+
tree.each_item_child(itmid) do |sub_itmid|
|
|
109
|
+
if tree.item_text(sub_itmid) == 'Cat2.1'
|
|
110
|
+
new_itm = tree.append_item(sub_itmid, 'Another Item')
|
|
111
|
+
assert_not_nil(new_itm)
|
|
112
|
+
assert_true(new_itm.ok?)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
assert_equal(4, tree.get_item_children(tree.get_root_item).size)
|
|
118
|
+
cat1 = tree.get_item_children(tree.get_root_item)[0]
|
|
119
|
+
assert_equal(3, tree.get_item_children(cat1).size)
|
|
120
|
+
cat2 = tree.get_item_children(tree.get_root_item)[1]
|
|
121
|
+
assert_equal(3, tree.get_item_children(cat2).size)
|
|
122
|
+
cat21 = tree.get_item_children(cat2)[0]
|
|
123
|
+
assert_equal(3, tree.get_item_children(cat21).size)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_enumerator
|
|
127
|
+
build_tree
|
|
128
|
+
|
|
129
|
+
root_enum = tree.each_item_child(tree.get_root_item)
|
|
130
|
+
assert_kind_of(::Enumerator, root_enum)
|
|
131
|
+
cat2 = root_enum.detect { |itmid| tree.item_text(itmid) == 'Cat2' }
|
|
132
|
+
assert_not_nil(cat2)
|
|
133
|
+
assert_true(cat2.ok?)
|
|
134
|
+
cat2_enum = tree.each_item_child(cat2)
|
|
135
|
+
assert_equal(3, cat2_enum.to_a.size)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
data/tests/test_window.rb
CHANGED
|
@@ -229,6 +229,18 @@ class WindowTests < WxRuby::Test::GUITests
|
|
|
229
229
|
assert_equal(child1, window.find_window_by_id(Wx::ID_HIGHEST + 1))
|
|
230
230
|
assert_equal(child1, window.find_window_by_name("child1"))
|
|
231
231
|
|
|
232
|
+
child1 = Wx::Window.new(window, Wx::ID_HIGHEST + 2)
|
|
233
|
+
|
|
234
|
+
children = window.get_children
|
|
235
|
+
window.each_child do |child|
|
|
236
|
+
assert_equal(child, children.shift)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
children = window.get_children
|
|
240
|
+
enum = window.each_child
|
|
241
|
+
assert_equal(children.first, enum.find { |c| c.get_id == Wx::ID_HIGHEST + 1})
|
|
242
|
+
assert_equal(children.last, enum.find { |c| c.get_id == Wx::ID_HIGHEST + 2})
|
|
243
|
+
|
|
232
244
|
window.destroy_children
|
|
233
245
|
|
|
234
246
|
assert_equal(0, window.get_children.count)
|
data/tests/testapp_noframe.rb
CHANGED