wxruby3 0.9.1 → 0.9.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/ext/wxruby3/include/wxRubyApp.h +338 -0
- data/ext/wxruby3/include/wxruby-Config.h +6 -6
- data/ext/wxruby3/swig/common.i +1 -1
- 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/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/controlwithitems.rb +17 -7
- data/lib/wx/doc/data_object.rb +2 -2
- data/lib/wx/doc/evthandler.rb +113 -108
- data/lib/wx/doc/font.rb +1 -0
- 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 -47
- data/lib/wx/doc/window_disabler.rb +10 -6
- data/lib/wx/grid/grid.rb +27 -4
- 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 +2 -2
- 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/package.rb +14 -7
- data/rakelib/lib/core/spec.rb +6 -1
- data/rakelib/lib/director/accelerator.rb +2 -3
- data/rakelib/lib/director/accessible.rb +47 -0
- data/rakelib/lib/director/app.rb +12 -319
- data/rakelib/lib/director/app_traits.rb +10 -12
- data/rakelib/lib/director/ctrl_with_items.rb +17 -5
- data/rakelib/lib/director/data_format.rb +1 -1
- data/rakelib/lib/director/derived_dc.rb +1 -1
- data/rakelib/lib/director/dialog.rb +1 -0
- data/rakelib/lib/director/drag_image.rb +2 -3
- data/rakelib/lib/director/event.rb +2 -2
- data/rakelib/lib/director/frame.rb +1 -3
- data/rakelib/lib/director/gdicommon.rb +8 -10
- data/rakelib/lib/director/graphics_context.rb +2 -4
- data/rakelib/lib/director/grid_ctrl.rb +34 -3
- 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/pgproperties.rb +1 -1
- data/rakelib/lib/director/pgproperty.rb +24 -1
- data/rakelib/lib/director/property_grid_interface.rb +5 -10
- data/rakelib/lib/director/richtext_composite_object.rb +25 -0
- data/rakelib/lib/director/richtext_ctrl.rb +14 -4
- 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/sizer.rb +15 -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 +5 -13
- 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 +5 -6
- 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/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/panel.yaml +7 -0
- data/rakelib/lib/generate/doc.rb +76 -14
- data/rakelib/lib/specs/interfaces.rb +161 -160
- data/rakelib/lib/typemap/common.rb +30 -1
- 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/treectrl/treectrl.rb +1 -1
- data/tests/media/beep_lo.wav +0 -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 +16 -0
- data/tests/test_std_controls.rb +42 -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 +31 -3
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
def init
|
4
|
+
# It seems YARD messes things up so that a number of classes are not properly
|
5
|
+
# registered in their enclosing namespaces.
|
6
|
+
# This hack makes sure that if that is the case we fix that here.
|
7
|
+
all_classes = Registry.all(:class)
|
8
|
+
all_classes.each do |c|
|
9
|
+
if (ns = c.namespace)
|
10
|
+
unless ns.children.any? { |nsc| nsc.path == c.path }
|
11
|
+
ns.children << c # class missing from child list of enclosing namespace -> add here
|
12
|
+
end
|
13
|
+
end
|
14
|
+
if (ns = Registry[c.namespace.path])
|
15
|
+
unless ns.children.any? { |nsc| nsc.path == c.path }
|
16
|
+
ns.children << c # class missing from child list of enclosing namespace -> add here
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def stylesheets_full_list
|
24
|
+
super + %w(css/wxruby3.css)
|
25
|
+
end
|
26
|
+
|
27
|
+
def logo_and_version
|
28
|
+
wxver = Registry['Wx::WXRUBY_VERSION']
|
29
|
+
wxwver = Registry['Wx::WXWIDGETS_VERSION']
|
30
|
+
<<~__HTML
|
31
|
+
<div class='wxrb-logo'>
|
32
|
+
<img src='assets/logo.png' height='38'/>
|
33
|
+
<table><tbody>
|
34
|
+
<tr><td><span class='wxrb-name'><a href="https://github.com/mcorino/wxRuby3">wxRuby3</a></span></td><td><span class='wxrb-version'>Version: #{::Kernel.eval(wxver.value)}</span></td></tr>
|
35
|
+
<tr><td></td><td><span class="wxrb-wxver">(wxWidgets: #{::Kernel.eval(wxwver.value)})</span></td></tr>
|
36
|
+
</tbody></table>
|
37
|
+
</div>
|
38
|
+
__HTML
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
def wxrb_require
|
4
|
+
erb('wxrb_require')
|
5
|
+
end
|
6
|
+
|
7
|
+
def wxruby_requires
|
8
|
+
object.tags(:wxrb_require).inject([]) do |list, tag|
|
9
|
+
tag.text.split(',').each do |feature|
|
10
|
+
list << feature.split('|').collect do |s|
|
11
|
+
s.split('&').collect { |ss| %Q[<span class="wxrb-require">#{ss.strip}</span>] }.join('&')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
list
|
15
|
+
end
|
16
|
+
end
|
Binary file
|
data/tests/test_list_ctrl.rb
CHANGED
@@ -0,0 +1,38 @@
|
|
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
|
+
# test seems to deadlock for WXGTK
|
8
|
+
if Wx.has_feature?(:USE_MEDIACTRL)
|
9
|
+
|
10
|
+
require 'uri'
|
11
|
+
|
12
|
+
class MediaCtrlTests < WxRuby::Test::GUITests
|
13
|
+
|
14
|
+
def setup
|
15
|
+
super
|
16
|
+
@media = Wx::MediaCtrl.new(frame_win)
|
17
|
+
end
|
18
|
+
|
19
|
+
def cleanup
|
20
|
+
@media.destroy
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :media
|
25
|
+
|
26
|
+
def test_uri
|
27
|
+
# just checking if Ruby URI is properly mapped
|
28
|
+
# it doesn't seem the mediactrl returns a very consistent result whether the resource is not a media file
|
29
|
+
# or if it is a non-existing file so only check whether it is a boolean return.
|
30
|
+
uri = URI("file://#{File.join(__dir__, 'media/beep_lo.wav')}")
|
31
|
+
assert_boolean(media.load(uri))
|
32
|
+
uri = URI("file://#{File.join(__dir__, 'art/test_art/image/wxruby.png')}")
|
33
|
+
assert_boolean(media.load(uri))
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
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
CHANGED
@@ -40,4 +40,20 @@ class SizerTests < WxRuby::Test::GUITests
|
|
40
40
|
assert_not_nil(frame_win.get_sizer.prepend(szr))
|
41
41
|
end
|
42
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
|
+
|
43
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
|
@@ -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