wxruby3 0.9.0.pre.beta.13-x64-mingw-ucrt → 0.9.0.pre.rc.1-x64-mingw-ucrt
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/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/wxbase32u_gcc_custom.dll +0 -0
- data/ext/wxbase32u_net_gcc_custom.dll +0 -0
- data/ext/wxbase32u_xml_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_aui_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_core_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_gl_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_html_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_media_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_propgrid_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_qa_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_ribbon_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_richtext_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_stc_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_webview_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_xrc_gcc_custom.dll +0 -0
- 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/events/evt_list.rb +12 -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/gen/about_dialog_info.rb +27 -24
- data/lib/wx/doc/gen/accelerator.rb +11 -12
- data/lib/wx/doc/gen/app.rb +6 -3
- data/lib/wx/doc/gen/art_provider.rb +53 -29
- data/lib/wx/doc/gen/aui/aui_manager.rb +4 -0
- data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +1 -1
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +2 -0
- data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +2 -0
- data/lib/wx/doc/gen/bitmap.rb +25 -25
- data/lib/wx/doc/gen/bitmap_combo_box.rb +157 -0
- data/lib/wx/doc/gen/box_sizer.rb +6 -8
- data/lib/wx/doc/gen/brush.rb +2 -0
- data/lib/wx/doc/gen/busy_info.rb +52 -46
- data/lib/wx/doc/gen/caret.rb +0 -4
- data/lib/wx/doc/gen/check_list_box.rb +0 -2
- data/lib/wx/doc/gen/choice.rb +1 -5
- data/lib/wx/doc/gen/client_dc.rb +13 -18
- data/lib/wx/doc/gen/clipboard.rb +30 -27
- data/lib/wx/doc/gen/collapsible_pane.rb +11 -9
- data/lib/wx/doc/gen/colour.rb +6 -3
- data/lib/wx/doc/gen/colour_dialog.rb +111 -23
- data/lib/wx/doc/gen/combo_box.rb +2 -4
- data/lib/wx/doc/gen/control.rb +20 -18
- data/lib/wx/doc/gen/core.rb +2 -2
- data/lib/wx/doc/gen/cursor.rb +18 -50
- data/lib/wx/doc/gen/data_format.rb +0 -2
- data/lib/wx/doc/gen/data_object.rb +37 -44
- data/lib/wx/doc/gen/dc.rb +16 -24
- data/lib/wx/doc/gen/defs.rb +3 -40
- data/lib/wx/doc/gen/dialog.rb +21 -17
- data/lib/wx/doc/gen/dir_dialog.rb +10 -8
- data/lib/wx/doc/gen/event.rb +2 -2
- data/lib/wx/doc/gen/event_blocker.rb +49 -0
- data/lib/wx/doc/gen/event_filter.rb +95 -0
- data/lib/wx/doc/gen/event_list.rb +16 -2
- data/lib/wx/doc/gen/events.rb +103 -112
- data/lib/wx/doc/gen/evt_handler.rb +28 -52
- data/lib/wx/doc/gen/file_dialog.rb +8 -4
- data/lib/wx/doc/gen/find_replace_dialog.rb +1 -1
- data/lib/wx/doc/gen/font.rb +10 -2
- data/lib/wx/doc/gen/font_data.rb +2 -0
- data/lib/wx/doc/gen/font_dialog.rb +1 -1
- data/lib/wx/doc/gen/frame.rb +4 -3
- data/lib/wx/doc/gen/fs_file.rb +8 -0
- data/lib/wx/doc/gen/gcdc.rb +2 -22
- data/lib/wx/doc/gen/gdi_common.rb +18 -2
- data/lib/wx/doc/gen/gdi_object.rb +2 -0
- data/lib/wx/doc/gen/graphics_context.rb +4 -43
- data/lib/wx/doc/gen/graphics_object.rb +2 -0
- data/lib/wx/doc/gen/grid/grid_cell_attr.rb +2 -1
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +4 -2
- data/lib/wx/doc/gen/grid/grid_table_message.rb +2 -0
- data/lib/wx/doc/gen/grid_bag_sizer.rb +4 -0
- data/lib/wx/doc/gen/help_controller.rb +4 -1
- data/lib/wx/doc/gen/html/html_cell.rb +4 -1
- data/lib/wx/doc/gen/html/html_help_controller.rb +4 -1
- data/lib/wx/doc/gen/html/html_help_data.rb +4 -0
- data/lib/wx/doc/gen/html/html_help_window.rb +2 -1
- data/lib/wx/doc/gen/html/html_list_box.rb +138 -11
- data/lib/wx/doc/gen/html/html_window.rb +9 -3
- data/lib/wx/doc/gen/icon.rb +7 -1
- data/lib/wx/doc/gen/icon_location.rb +2 -0
- data/lib/wx/doc/gen/image.rb +15 -8
- data/lib/wx/doc/gen/keyboard_state.rb +6 -0
- data/lib/wx/doc/gen/list_box.rb +0 -11
- data/lib/wx/doc/gen/list_ctrl.rb +10 -13
- data/lib/wx/doc/gen/locale.rb +7 -3
- data/lib/wx/doc/gen/log.rb +6 -2
- data/lib/wx/doc/gen/mdi_frame.rb +2 -0
- data/lib/wx/doc/gen/media_ctrl.rb +2 -0
- data/lib/wx/doc/gen/memory_dc.rb +105 -18
- data/lib/wx/doc/gen/menu.rb +4 -2
- data/lib/wx/doc/gen/menu_bar.rb +0 -2
- data/lib/wx/doc/gen/menu_item.rb +9 -3
- data/lib/wx/doc/gen/message_dialog.rb +6 -3
- data/lib/wx/doc/gen/mirror_dc.rb +2 -8
- data/lib/wx/doc/gen/mouse_state.rb +2 -0
- data/lib/wx/doc/gen/multi_choice_dialog.rb +0 -2
- data/lib/wx/doc/gen/non_owned_window.rb +2 -1
- data/lib/wx/doc/gen/notebook.rb +4 -2
- data/lib/wx/doc/gen/paint_dc.rb +2 -6
- data/lib/wx/doc/gen/palette.rb +3 -3
- data/lib/wx/doc/gen/pen.rb +6 -1
- data/lib/wx/doc/gen/pg/pg_editor.rb +2 -1
- data/lib/wx/doc/gen/pg/pg_multi_button.rb +4 -0
- data/lib/wx/doc/gen/pg/pg_properties.rb +30 -3
- data/lib/wx/doc/gen/pg/pg_property.rb +30 -4
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +2 -0
- data/lib/wx/doc/gen/pg/property_grid.rb +5 -2
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +6 -2
- data/lib/wx/doc/gen/pg/property_grid_manager.rb +2 -0
- data/lib/wx/doc/gen/pg/property_grid_page_state.rb +2 -0
- data/lib/wx/doc/gen/picker_base.rb +2 -1
- data/lib/wx/doc/gen/platform_info.rb +4 -1
- data/lib/wx/doc/gen/property_sheet_dialog.rb +2 -0
- data/lib/wx/doc/gen/prt/post_script_dc.rb +2 -8
- data/lib/wx/doc/gen/prt/print_data.rb +6 -0
- data/lib/wx/doc/gen/prt/printer.rb +0 -3
- data/lib/wx/doc/gen/prt/printer_dc.rb +2 -6
- data/lib/wx/doc/gen/radio_box.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +6 -0
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +1 -1
- data/lib/wx/doc/gen/region.rb +2 -0
- data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +6 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +0 -4
- data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +2 -0
- data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +2 -1
- data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +2 -0
- data/lib/wx/doc/gen/screen_dc.rb +2 -0
- data/lib/wx/doc/gen/scroll_bar.rb +2 -1
- data/lib/wx/doc/gen/scrolled_canvas.rb +4 -8
- data/lib/wx/doc/gen/scrolled_control.rb +4 -8
- data/lib/wx/doc/gen/scrolled_window.rb +4 -8
- data/lib/wx/doc/gen/search_ctrl.rb +131 -0
- data/lib/wx/doc/gen/single_choice_dialog.rb +0 -2
- data/lib/wx/doc/gen/sizer.rb +14 -3
- data/lib/wx/doc/gen/splash_screen.rb +2 -0
- data/lib/wx/doc/gen/static_box.rb +6 -3
- data/lib/wx/doc/gen/static_box_sizer.rb +2 -1
- data/lib/wx/doc/gen/status_bar.rb +0 -5
- data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +4 -5
- data/lib/wx/doc/gen/svg_file_dc.rb +10 -11
- data/lib/wx/doc/gen/text_ctrl.rb +10 -3
- data/lib/wx/doc/gen/text_entry.rb +8 -3
- data/lib/wx/doc/gen/text_entry_dialog.rb +4 -2
- data/lib/wx/doc/gen/timer_event.rb +2 -0
- data/lib/wx/doc/gen/tool_bar.rb +8 -4
- data/lib/wx/doc/gen/top_level_window.rb +5 -2
- data/lib/wx/doc/gen/tree_ctrl.rb +0 -6
- data/lib/wx/doc/gen/ui_action_simulator.rb +100 -0
- data/lib/wx/doc/gen/utils.rb +1 -1
- data/lib/wx/doc/gen/v_list_box.rb +36 -26
- data/lib/wx/doc/gen/validator.rb +2 -1
- data/lib/wx/doc/gen/variant.rb +10 -0
- data/lib/wx/doc/gen/window.rb +38 -17
- data/lib/wx/doc/gen/window_dc.rb +2 -0
- data/lib/wx/doc/gen/window_disabler.rb +2 -0
- data/lib/wx/doc/gen/wizard_page_simple.rb +2 -0
- data/lib/wx/doc/gen/xml_node.rb +6 -0
- data/lib/wx/doc/gen/xml_resource.rb +4 -1
- 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/lib/wxruby_aui.so +0 -0
- data/lib/wxruby_core.so +0 -0
- data/lib/wxruby_grid.so +0 -0
- data/lib/wxruby_html.so +0 -0
- data/lib/wxruby_pg.so +0 -0
- data/lib/wxruby_prt.so +0 -0
- data/lib/wxruby_rbn.so +0 -0
- data/lib/wxruby_rtc.so +0 -0
- data/lib/wxruby_stc.so +0 -0
- data/rakelib/install.rb +3 -1
- 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 +38 -8
- data/lib/wx/doc/gen/auto_buffered_paint_dc.rb +0 -47
- data/lib/wx/doc/gen/buffered_dc.rb +0 -95
- data/lib/wx/doc/gen/buffered_paint_dc.rb +0 -55
- data/lib/wx/doc/gen/colour_data.rb +0 -96
- data/samples/drawing/tn_svgtest.png +0 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
class Wx::HTML::SimpleHtmlListBox
|
3
|
+
|
4
|
+
# Make this a Ruby enumerable so find, find_all, map etc are available
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
# Passes each valid item index into the passed block
|
8
|
+
def each
|
9
|
+
get_count.times { | i | yield i }
|
10
|
+
end
|
11
|
+
|
12
|
+
# We need to cache client data in Ruby variables as we cannot access items
|
13
|
+
# during the GC mark phase as for some platforms (WXMSW at least) that would
|
14
|
+
# involve calling methods that would break in that phase.
|
15
|
+
|
16
|
+
def client_data_store
|
17
|
+
@client_data ||= []
|
18
|
+
end
|
19
|
+
private :client_data_store
|
20
|
+
|
21
|
+
wx_set_client_data = instance_method :set_client_data
|
22
|
+
define_method :set_client_data do |item, data|
|
23
|
+
item = item.to_i
|
24
|
+
wx_set_client_data.bind(self).call(item, data)
|
25
|
+
client_data_store[item] = data
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_client_data(item)
|
29
|
+
client_data_store[item.to_i]
|
30
|
+
end
|
31
|
+
|
32
|
+
wx_append = instance_method :append
|
33
|
+
define_method :append do |item, data=nil|
|
34
|
+
if data
|
35
|
+
if ::Array === item
|
36
|
+
if !(::Array === data)
|
37
|
+
::Kernel.raise ::TypeError.new("Expected Array for argument 3")
|
38
|
+
elsif data.size != item.size
|
39
|
+
::Kernel.raise ::ArgumentError.new("item and data array must be equal size")
|
40
|
+
end
|
41
|
+
offs = get_count
|
42
|
+
wx_append.bind(self).call(item)
|
43
|
+
item.size.times { |ix| set_client_data(offs+ix, data[ix]) }
|
44
|
+
else
|
45
|
+
wx_append.bind(self).call(item, data)
|
46
|
+
client_data_store[get_count-1] = data
|
47
|
+
end
|
48
|
+
else
|
49
|
+
wx_append.bind(self).call(item)
|
50
|
+
# no changes to data store
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
wx_insert = instance_method :insert
|
55
|
+
define_method :insert do |item, pos, data=nil|
|
56
|
+
if data
|
57
|
+
if ::Array === item
|
58
|
+
if !(::Array === data)
|
59
|
+
::Kernel.raise ::TypeError.new("Expected Array for argument 3")
|
60
|
+
elsif data.size != item.size
|
61
|
+
::Kernel.raise ::ArgumentError.new("item and data array must be equal size")
|
62
|
+
end
|
63
|
+
wx_insert.bind(self).call(item, pos)
|
64
|
+
client_data_store.insert(pos, *::Array.new(item.size))
|
65
|
+
item.size.times { |ix| set_client_data(pos+ix, data[ix]) }
|
66
|
+
else
|
67
|
+
wx_insert.bind(self).call(item, pos, data)
|
68
|
+
client_data_store.insert(pos, data)
|
69
|
+
end
|
70
|
+
else
|
71
|
+
wx_insert.bind(self).call(item, pos)
|
72
|
+
if ::Array === item
|
73
|
+
client_data_store.insert(pos, *::Array.new(item.size))
|
74
|
+
else
|
75
|
+
client_data_store.insert(pos, nil)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
wx_set = instance_method :set
|
81
|
+
define_method :set do |items, data=nil|
|
82
|
+
if data
|
83
|
+
if !(::Array === data)
|
84
|
+
::Kernel.raise ::TypeError.new("Expected Array for argument 2")
|
85
|
+
elsif data.size != items.size
|
86
|
+
::Kernel.raise ::ArgumentError.new("items and data array must be equal size")
|
87
|
+
end
|
88
|
+
end
|
89
|
+
wx_set.bind(self).call(items)
|
90
|
+
client_data_store.clear
|
91
|
+
items.each_with_index { |item, ix| set_client_data(item, data[ix]) }
|
92
|
+
end
|
93
|
+
|
94
|
+
wx_clear = instance_method :clear
|
95
|
+
define_method :clear do
|
96
|
+
wx_clear.bind(self).call
|
97
|
+
client_data_store.clear
|
98
|
+
end
|
99
|
+
|
100
|
+
wx_delete = instance_method :delete
|
101
|
+
define_method :delete do |item|
|
102
|
+
wx_delete.bind(self).call(item.to_i)
|
103
|
+
client_data_store.slice!(item.to_i)
|
104
|
+
end
|
105
|
+
end
|
data/lib/wx/keyword_defs.rb
CHANGED
@@ -296,6 +296,13 @@ Wx::define_keyword_ctors('CheckBox') do
|
|
296
296
|
wx_ctor_params :validator, :name => 'checkBox'
|
297
297
|
end
|
298
298
|
|
299
|
+
# wxListBox A list of strings for single or multiple selection
|
300
|
+
Wx::define_keyword_ctors('ListBox') do
|
301
|
+
wx_ctor_params :id, :pos, :size, :choices => []
|
302
|
+
wx_ctor_params :style
|
303
|
+
wx_ctor_params :validator, :name => 'listBox'
|
304
|
+
end
|
305
|
+
|
299
306
|
# A listbox with a checkbox to the left of each item
|
300
307
|
Wx::define_keyword_ctors('CheckListBox') do
|
301
308
|
wx_ctor_params :id, :pos, :size, :choices, :style
|
data/lib/wx/version.rb
CHANGED
data/lib/wx/wxruby/cmd/test.rb
CHANGED
data/lib/wxruby_aui.so
CHANGED
Binary file
|
data/lib/wxruby_core.so
CHANGED
Binary file
|
data/lib/wxruby_grid.so
CHANGED
Binary file
|
data/lib/wxruby_html.so
CHANGED
Binary file
|
data/lib/wxruby_pg.so
CHANGED
Binary file
|
data/lib/wxruby_prt.so
CHANGED
Binary file
|
data/lib/wxruby_rbn.so
CHANGED
Binary file
|
data/lib/wxruby_rtc.so
CHANGED
Binary file
|
data/lib/wxruby_stc.so
CHANGED
Binary file
|
data/rakelib/install.rb
CHANGED
@@ -34,7 +34,9 @@ module WXRuby3
|
|
34
34
|
grp_id = m[1]
|
35
35
|
lib_id = m[2]
|
36
36
|
ver = m[3].sub('.', '')
|
37
|
-
|
37
|
+
# as of wxw 3.3 there seems to be an additional digit added to the version part of the dll name
|
38
|
+
# so add a wildcard ('*') in that spot to match older and newer versions
|
39
|
+
lib = "wx#{grp_id.sub(/u\Z/, '')}#{ver}*u#{lib_id}"
|
38
40
|
@wxwin_shlibs.include File.join(libdir, "#{lib}*.#{WXRuby3.config.dll_mask}")
|
39
41
|
end
|
40
42
|
else
|
@@ -20,7 +20,11 @@ module YARD # rubocop:disable Style/Documentation
|
|
20
20
|
def resolve_links(text)
|
21
21
|
html = Nokogiri::HTML.fragment(text)
|
22
22
|
html.css("a[href]").each do |link|
|
23
|
-
|
23
|
+
begin
|
24
|
+
href = URI(link["href"])
|
25
|
+
rescue
|
26
|
+
return super(text)
|
27
|
+
end
|
24
28
|
|
25
29
|
if href.relative? && options.files
|
26
30
|
fnames = options.files.map(&:filename)
|
@@ -242,10 +242,11 @@ class TestPanel < Wx::Panel
|
|
242
242
|
|
243
243
|
|
244
244
|
def clear_bmp(bmp)
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
245
|
+
Wx::MemoryDC.draw_on do |dc|
|
246
|
+
dc.select_object(bmp)
|
247
|
+
dc.set_background(Wx::WHITE_BRUSH)
|
248
|
+
dc.clear
|
249
|
+
end
|
249
250
|
end
|
250
251
|
end
|
251
252
|
|
@@ -117,8 +117,8 @@ class MyComboBox < ComboBox
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def onChar(event)
|
120
|
-
log_message("MyComboBox::OnChar")
|
121
|
-
if event.
|
120
|
+
log_message("MyComboBox::OnChar : [#{event.get_unicode_key ? event.get_unicode_key.ord : 0}]")
|
121
|
+
if event.get_unicode_key == ?w
|
122
122
|
log_message("MyComboBox: 'w' will be ignored.")
|
123
123
|
else
|
124
124
|
event.skip()
|
@@ -0,0 +1,411 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
3
|
+
###
|
4
|
+
|
5
|
+
require 'wx'
|
6
|
+
|
7
|
+
# to use Wx::HtmlListBox you must derive a new class from it as you must
|
8
|
+
# implement virtual on_get_item
|
9
|
+
class MyHtmlListBox < Wx::HTML::HtmlListBox
|
10
|
+
|
11
|
+
def initialize(parent, multi = false)
|
12
|
+
super(parent, style: multi ? Wx::LB_MULTIPLE : 0)
|
13
|
+
# flag telling us whether we should use fg colour even for the selected
|
14
|
+
# item
|
15
|
+
@change = false
|
16
|
+
# flag which we toggle to update the first items text in on_get_item()
|
17
|
+
@first_item_updated = false
|
18
|
+
@link_clicked = false
|
19
|
+
|
20
|
+
set_margins(5, 5)
|
21
|
+
|
22
|
+
set_item_count(1000)
|
23
|
+
|
24
|
+
set_selection(3)
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_accessor :link_clicked
|
28
|
+
|
29
|
+
def set_change_sel_fg(change)
|
30
|
+
@change = change
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_first_item
|
34
|
+
@first_item_updated = !@first_item_updated
|
35
|
+
|
36
|
+
refresh_row(0)
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
# override this method to return data to be shown in the listbox (this is
|
42
|
+
# mandatory)
|
43
|
+
def on_get_item(n)
|
44
|
+
return '<h1><b>Just updated</b></h1>' if n == 0 && @first_item_updated
|
45
|
+
|
46
|
+
level = n % 6 + 1
|
47
|
+
|
48
|
+
clr = Wx::Colour.new((n - 192).abs % 256,
|
49
|
+
(n - 256).abs % 256,
|
50
|
+
(n - 128).abs % 256)
|
51
|
+
|
52
|
+
label = "<h#{level}><font color=#{clr.get_as_string(Wx::C2S_HTML_SYNTAX)}>Item</font> <b>#{n}</b></h#{level}>"
|
53
|
+
if n == 1
|
54
|
+
if !@link_clicked
|
55
|
+
label += "<a href='1'>Click here...</a>"
|
56
|
+
else
|
57
|
+
label += "<font color='#9999ff'>Clicked here...</font>"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
label
|
62
|
+
end
|
63
|
+
|
64
|
+
# change the appearance by overriding these functions (this is optional)
|
65
|
+
def on_draw_separator(dc, rect, _)
|
66
|
+
if get_parent.menu_bar.is_checked(MyFrame::ID::HtmlLbox_DrawSeparator)
|
67
|
+
dc.with_pen(Wx::BLACK_DASHED_PEN) do
|
68
|
+
dc.draw_line(rect.x, rect.y, rect.right, rect.y)
|
69
|
+
dc.draw_line(rect.x, rect.bottom, rect.right, rect.bottom)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def get_selected_text_colour(col_fg)
|
75
|
+
@change ? super : col_fg
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
class MyFrame < Wx::Frame
|
81
|
+
|
82
|
+
# IDs for the controls and the menu commands
|
83
|
+
module ID
|
84
|
+
include Wx::IDHelper
|
85
|
+
# menu items
|
86
|
+
HtmlLbox_CustomBox = self.next_id
|
87
|
+
HtmlLbox_SimpleBox = self.next_id
|
88
|
+
HtmlLbox_Quit = self.next_id
|
89
|
+
|
90
|
+
HtmlLbox_SetMargins = self.next_id
|
91
|
+
HtmlLbox_DrawSeparator = self.next_id
|
92
|
+
HtmlLbox_ToggleMulti = self.next_id
|
93
|
+
HtmlLbox_SelectAll = self.next_id
|
94
|
+
HtmlLbox_UpdateItem = self.next_id
|
95
|
+
HtmlLbox_GetItemRect = self.next_id
|
96
|
+
|
97
|
+
HtmlLbox_SetBgCol = self.next_id
|
98
|
+
HtmlLbox_SetSelBgCol = self.next_id
|
99
|
+
HtmlLbox_SetSelFgCol = self.next_id
|
100
|
+
|
101
|
+
HtmlLbox_Clear = self.next_id
|
102
|
+
|
103
|
+
# it is important for the id corresponding to the "About" command to have
|
104
|
+
# this standard value as otherwise it won't be handled properly under Mac
|
105
|
+
# (where it is special and put into the "Apple" menu)
|
106
|
+
HtmlLbox_About = Wx::ID_ABOUT
|
107
|
+
end
|
108
|
+
|
109
|
+
Wx::ArtLocator.add_search_path(File.dirname(__dir__))
|
110
|
+
|
111
|
+
def initialize
|
112
|
+
super(nil, title: 'HtmlLbox wxWidgets Sample',size: [500, 500])
|
113
|
+
|
114
|
+
# set the frame icon
|
115
|
+
set_icon(Wx::Icon(:sample))
|
116
|
+
|
117
|
+
if Wx.has_feature?(:USE_MENUS)
|
118
|
+
|
119
|
+
# create a menu bar
|
120
|
+
menu_file = Wx::Menu.new
|
121
|
+
menu_file.append_radio_item(ID::HtmlLbox_CustomBox, "Use custom box",
|
122
|
+
"Use a wxHtmlListBox virtual class control")
|
123
|
+
menu_file.append_radio_item(ID::HtmlLbox_SimpleBox, "Use simple box",
|
124
|
+
"Use a wxSimpleHtmlListBox control")
|
125
|
+
menu_file.append_separator
|
126
|
+
menu_file.append(ID::HtmlLbox_Quit, "E&xit\tAlt-X", "Quit this program")
|
127
|
+
|
128
|
+
# create our specific menu
|
129
|
+
menu_hl_box = Wx::Menu.new
|
130
|
+
menu_hl_box.append(ID::HtmlLbox_SetMargins, "Set &margins...\tCtrl-G", "Change the margins around the items")
|
131
|
+
menu_hl_box.append_check_item(ID::HtmlLbox_DrawSeparator,
|
132
|
+
"&Draw separators\tCtrl-D" ,
|
133
|
+
"Toggle drawing separators between cells")
|
134
|
+
menu_hl_box.append_separator
|
135
|
+
menu_hl_box.append_check_item(ID::HtmlLbox_ToggleMulti,
|
136
|
+
"&Multiple selection\tCtrl-M",
|
137
|
+
"Toggle multiple selection on/off")
|
138
|
+
menu_hl_box.append_separator
|
139
|
+
menu_hl_box.append(ID::HtmlLbox_SelectAll, "Select &all items\tCtrl-A")
|
140
|
+
menu_hl_box.append(ID::HtmlLbox_UpdateItem, "Update &first item\tCtrl-U")
|
141
|
+
menu_hl_box.append(ID::HtmlLbox_GetItemRect, "Show &rectangle of item #10\tCtrl-R")
|
142
|
+
menu_hl_box.append_separator
|
143
|
+
menu_hl_box.append(ID::HtmlLbox_SetBgCol, "Set &background...\tCtrl-B")
|
144
|
+
menu_hl_box.append(ID::HtmlLbox_SetSelBgCol,
|
145
|
+
"Set &selection background...\tCtrl-S")
|
146
|
+
menu_hl_box.append_check_item(ID::HtmlLbox_SetSelFgCol,
|
147
|
+
"Keep &foreground in selection\tCtrl-F")
|
148
|
+
|
149
|
+
menu_hl_box.append_separator
|
150
|
+
menu_hl_box.append(ID::HtmlLbox_Clear, "&Clear\tCtrl-L")
|
151
|
+
|
152
|
+
# the "About" item should be in the help menu
|
153
|
+
help_menu = Wx::Menu.new
|
154
|
+
help_menu.append(ID::HtmlLbox_About, "&About\tF1", "Show about dialog")
|
155
|
+
|
156
|
+
# now append the freshly created menu to the menu bar...
|
157
|
+
mbar = Wx::MenuBar.new
|
158
|
+
mbar.append(menu_file, "&File")
|
159
|
+
mbar.append(menu_hl_box, "&Listbox")
|
160
|
+
mbar.append(help_menu, "&Help")
|
161
|
+
|
162
|
+
mbar.check(ID::HtmlLbox_DrawSeparator, true)
|
163
|
+
|
164
|
+
# ... and attach this menu bar to the frame
|
165
|
+
self.menu_bar = mbar
|
166
|
+
|
167
|
+
end # USE_MENUS
|
168
|
+
|
169
|
+
if Wx.has_feature?(:USE_STATUSBAR)
|
170
|
+
# create a status bar just for fun (by default with 1 pane only)
|
171
|
+
create_status_bar(2)
|
172
|
+
set_status_text("Welcome to wxWidgets!")
|
173
|
+
end # USE_STATUSBAR
|
174
|
+
|
175
|
+
# create the child controls
|
176
|
+
create_box
|
177
|
+
text = Wx::TextCtrl.new(self, Wx::ID_ANY, "", style: Wx::TE_MULTILINE)
|
178
|
+
Wx::Log.set_active_target(Wx::LogTextCtrl.new(text))
|
179
|
+
|
180
|
+
# and lay them out
|
181
|
+
sizer = Wx::HBoxSizer.new
|
182
|
+
sizer.add(@hlbox, 2, Wx::GROW)
|
183
|
+
sizer.add(text, 3, Wx::GROW)
|
184
|
+
|
185
|
+
self.sizer = sizer
|
186
|
+
|
187
|
+
evt_menu ID::HtmlLbox_CustomBox, :on_simple_or_custom_box
|
188
|
+
evt_menu ID::HtmlLbox_SimpleBox, :on_simple_or_custom_box
|
189
|
+
evt_menu ID::HtmlLbox_Quit, :on_quit
|
190
|
+
|
191
|
+
evt_menu ID::HtmlLbox_SetMargins, :on_set_margins
|
192
|
+
evt_menu ID::HtmlLbox_DrawSeparator, :on_draw_separator
|
193
|
+
evt_menu ID::HtmlLbox_ToggleMulti, :on_toggle_multi
|
194
|
+
evt_menu ID::HtmlLbox_SelectAll, :on_select_all
|
195
|
+
evt_menu ID::HtmlLbox_UpdateItem, :on_update_item
|
196
|
+
evt_menu ID::HtmlLbox_GetItemRect, :on_get_item_rect
|
197
|
+
|
198
|
+
evt_menu ID::HtmlLbox_About, :on_about
|
199
|
+
|
200
|
+
evt_menu ID::HtmlLbox_SetBgCol, :on_set_bg_col
|
201
|
+
evt_menu ID::HtmlLbox_SetSelBgCol, :on_set_sel_bg_col
|
202
|
+
evt_menu ID::HtmlLbox_SetSelFgCol, :on_set_sel_fg_col
|
203
|
+
|
204
|
+
evt_menu ID::HtmlLbox_Clear, :on_clear
|
205
|
+
|
206
|
+
evt_update_ui ID::HtmlLbox_SelectAll, :on_update_ui_select_all
|
207
|
+
|
208
|
+
evt_listbox Wx::ID_ANY, :on_lbox_select
|
209
|
+
evt_listbox_dclick Wx::ID_ANY, :on_lbox_d_click
|
210
|
+
|
211
|
+
# the HTML listbox's events
|
212
|
+
evt_html_link_clicked Wx::ID_ANY, :on_html_link_clicked
|
213
|
+
evt_html_cell_hover Wx::ID_ANY, :on_html_cell_hover
|
214
|
+
evt_html_cell_clicked Wx::ID_ANY, :on_html_cell_clicked
|
215
|
+
end
|
216
|
+
|
217
|
+
# event handlers
|
218
|
+
def on_simple_or_custom_box(event)
|
219
|
+
old = @hlbox
|
220
|
+
|
221
|
+
# we need to recreate the listbox
|
222
|
+
create_box
|
223
|
+
get_sizer.replace(old, @hlbox)
|
224
|
+
old.destroy
|
225
|
+
|
226
|
+
get_sizer.layout
|
227
|
+
refresh
|
228
|
+
end
|
229
|
+
def on_quit(event)
|
230
|
+
# true is to force the frame to close
|
231
|
+
close(true)
|
232
|
+
end
|
233
|
+
def on_about(event)
|
234
|
+
Wx.message_box("This sample shows Wx::HtmlListBox class.\n"+
|
235
|
+
"\n"+
|
236
|
+
"(c) 2023 Martin Corino\n" +
|
237
|
+
"(original (c) 2003 Vadim Zeitlin)\n",
|
238
|
+
"About HtmlLbox",
|
239
|
+
Wx::OK | Wx::ICON_INFORMATION,
|
240
|
+
self)
|
241
|
+
end
|
242
|
+
|
243
|
+
def on_set_margins(event)
|
244
|
+
margin = Wx.get_number_from_user(
|
245
|
+
"Enter the margins to use for the listbox items.",
|
246
|
+
"Margin: ",
|
247
|
+
"HtmlLbox: Set the margins",
|
248
|
+
0, 0, 20,
|
249
|
+
self)
|
250
|
+
|
251
|
+
if margin != -1
|
252
|
+
@hlbox.set_margins(margin, margin)
|
253
|
+
@hlbox.refresh_all
|
254
|
+
end
|
255
|
+
end
|
256
|
+
def on_draw_separator(_event)
|
257
|
+
@hlbox.refresh_all
|
258
|
+
end
|
259
|
+
def on_toggle_multi(event)
|
260
|
+
old = @hlbox
|
261
|
+
|
262
|
+
# we need to recreate the listbox
|
263
|
+
create_box
|
264
|
+
get_sizer.replace(old, @hlbox)
|
265
|
+
old.destroy
|
266
|
+
|
267
|
+
get_sizer.layout
|
268
|
+
end
|
269
|
+
def on_select_all(event)
|
270
|
+
@hlbox.select_all
|
271
|
+
end
|
272
|
+
def on_update_item(event)
|
273
|
+
@hlbox.update_first_item if @hlbox.is_a?(MyHtmlListBox)
|
274
|
+
end
|
275
|
+
|
276
|
+
def on_get_item_rect(event)
|
277
|
+
r = @hlbox.get_item_rect(10)
|
278
|
+
Wx.log_message("Rect of item %d: (%d, %d)-(%d, %d)",
|
279
|
+
10, r.x, r.y, r.x + r.width, r.y + r.height)
|
280
|
+
end
|
281
|
+
|
282
|
+
def on_set_bg_col(event)
|
283
|
+
col = Wx.get_colour_from_user(self, @hlbox.get_background_colour)
|
284
|
+
if col.ok?
|
285
|
+
@hlbox.set_background_colour(col)
|
286
|
+
@hlbox.refresh
|
287
|
+
|
288
|
+
if Wx.has_feature?(:USE_STATUSBAR)
|
289
|
+
set_status_text("Background colour changed.")
|
290
|
+
end # wxUSE_STATUSBAR
|
291
|
+
end
|
292
|
+
end
|
293
|
+
def on_set_sel_bg_col(event)
|
294
|
+
col = Wx.get_colour_from_user(self, @hlbox.get_selection_background)
|
295
|
+
if col.ok?
|
296
|
+
@hlbox.set_selection_background(col)
|
297
|
+
@hlbox.refresh
|
298
|
+
|
299
|
+
if Wx.has_feature?(:USE_STATUSBAR)
|
300
|
+
set_status_text("Selection Background colour changed.")
|
301
|
+
end # wxUSE_STATUSBAR
|
302
|
+
end
|
303
|
+
end
|
304
|
+
def on_set_sel_fg_col(event)
|
305
|
+
if @hlbox.is_a?(MyHtmlListBox)
|
306
|
+
@hlbox.set_change_sel_fg(!event.checked?)
|
307
|
+
@hlbox.refresh
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
def on_clear(event)
|
312
|
+
@hlbox.clear
|
313
|
+
end
|
314
|
+
|
315
|
+
def on_update_ui_select_all(event)
|
316
|
+
event.enable(@hlbox && @hlbox.has_multiple_selection)
|
317
|
+
end
|
318
|
+
|
319
|
+
def on_lbox_select(event)
|
320
|
+
Wx.log_message("Listbox selection is now %d.", event.get_int)
|
321
|
+
|
322
|
+
if @hlbox.has_multiple_selection
|
323
|
+
s = ''
|
324
|
+
@hlbox.each_selected do |item|
|
325
|
+
s << ', ' unless s.empty?
|
326
|
+
s << item.to_s
|
327
|
+
end
|
328
|
+
Wx.log_message("Selected items: #{s}") unless s.empty?
|
329
|
+
end
|
330
|
+
|
331
|
+
if Wx.has_feature?(:USE_STATUSBAR)
|
332
|
+
set_status_text("# items selected = #{@hlbox.get_selected_count}")
|
333
|
+
end # wxUSE_STATUSBAR
|
334
|
+
end
|
335
|
+
|
336
|
+
def on_lbox_d_click(event)
|
337
|
+
Wx.log_message("Listbox item #{event.get_int} double clicked.")
|
338
|
+
end
|
339
|
+
|
340
|
+
def on_html_link_clicked(event)
|
341
|
+
Wx.log_message("The url '%s' has been clicked!", event.get_link_info.get_href)
|
342
|
+
|
343
|
+
if @hlbox.is_a?(MyHtmlListBox)
|
344
|
+
@hlbox.link_clicked = true
|
345
|
+
@hlbox.refresh_row(1)
|
346
|
+
end
|
347
|
+
end
|
348
|
+
def on_html_cell_hover(event)
|
349
|
+
Wx.log_message("Mouse moved over cell %s at %d;%d",
|
350
|
+
event.get_cell.id, event.get_point.x, event.get_point.y)
|
351
|
+
end
|
352
|
+
def on_html_cell_clicked(event)
|
353
|
+
Wx.log_message("Click over cell %s at %d;%d",
|
354
|
+
event.get_cell.id, event.get_point.x, event.get_point.y)
|
355
|
+
|
356
|
+
# if we don't skip the event, OnHtmlLinkClicked won't be called!
|
357
|
+
event.skip
|
358
|
+
end
|
359
|
+
|
360
|
+
def create_box
|
361
|
+
multi = get_menu_bar.is_checked(ID::HtmlLbox_ToggleMulti)
|
362
|
+
|
363
|
+
if get_menu_bar.is_checked(ID::HtmlLbox_CustomBox)
|
364
|
+
@hlbox = MyHtmlListBox.new(self, multi)
|
365
|
+
else # simple listbox
|
366
|
+
@hlbox = Wx::HTML::SimpleHtmlListBox.new(self, style: multi ? Wx::LB_MULTIPLE : 0)
|
367
|
+
|
368
|
+
# unlike Wx::HTML::HtmlListBox which is abstract, Wx::HTML::SimpleHtmlListBox is a
|
369
|
+
# concrete control and doesn't support virtual mode, this we need
|
370
|
+
# to add all of its items from the beginning
|
371
|
+
arr = []
|
372
|
+
1000.times do |n|
|
373
|
+
clr = Wx::Colour.new((n - 192).abs % 256,
|
374
|
+
(n - 256).abs % 256,
|
375
|
+
(n - 128).abs % 256)
|
376
|
+
level = n % 6 + 1
|
377
|
+
|
378
|
+
label = "<h#{level}><font color=#{clr.get_as_string(Wx::C2S_HTML_SYNTAX)}>Item</font> <b>#{n}</b></h#{level}>"
|
379
|
+
arr << label
|
380
|
+
end
|
381
|
+
|
382
|
+
@hlbox.append(arr)
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
end
|
387
|
+
|
388
|
+
module HtmlListBoxSample
|
389
|
+
|
390
|
+
include WxRuby::Sample if defined? WxRuby::Sample
|
391
|
+
|
392
|
+
def self.describe
|
393
|
+
{ file: __FILE__,
|
394
|
+
summary: 'wxRuby HtmlListBox control example.',
|
395
|
+
description: "wxRuby example showcasing the HtmlListBox controls.\n"+
|
396
|
+
" - Wx::HtmlListBox\n"+
|
397
|
+
" - Wx::SimpleHtmlListBox\n"
|
398
|
+
}
|
399
|
+
end
|
400
|
+
|
401
|
+
def self.activate
|
402
|
+
frame = MyFrame.new
|
403
|
+
frame.show
|
404
|
+
frame
|
405
|
+
end
|
406
|
+
|
407
|
+
if $0 == __FILE__
|
408
|
+
Wx::App.run { HtmlListBoxSample.activate }
|
409
|
+
end
|
410
|
+
|
411
|
+
end
|
Binary file
|
@@ -108,8 +108,7 @@ class GraphicsWindow < Wx::Window
|
|
108
108
|
@rtxt[:font] = gdc.create_font(@font,Wx::RED); @rtxt[:txt] = "This is a red string"
|
109
109
|
@gtxt[:font] = gdc.create_font(@font,Wx::GREEN); @gtxt[:txt] = "This is a green string"
|
110
110
|
@btxt[:font] = gdc.create_font(@font,Wx::BLUE); @btxt[:txt] = "This is a blue string"
|
111
|
-
# Create the GraphicsContext resources.
|
112
|
-
# GraphicsContext#create(wxWindow) to create these resources in initialize.
|
111
|
+
# Create the GraphicsContext resources.
|
113
112
|
@rbrush = gdc.create_brush(RED_BRUSH)
|
114
113
|
@gbrush = gdc.create_brush(GREEN_BRUSH)
|
115
114
|
@bbrush = gdc.create_brush(BLUE_BRUSH)
|