wxruby3 0.9.0.pre.beta.14 → 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/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/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 +76 -13
- 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
@@ -12,14 +12,16 @@ module WXRuby3
|
|
12
12
|
def setup
|
13
13
|
super
|
14
14
|
spec.disable_proxies
|
15
|
-
#
|
16
|
-
|
17
|
-
|
15
|
+
# do not track GraphicContext objects as that causes problems probably for similar
|
16
|
+
# reasons as for DC objects
|
17
|
+
spec.gc_as_untracked
|
18
|
+
# ignore all these; wxRuby only supports the ::draw_on methods
|
18
19
|
spec.ignore 'wxGraphicsContext::CreateFromNative',
|
19
20
|
'wxGraphicsContext::CreateFromNativeWindow',
|
20
21
|
'wxGraphicsContext::CreateFromNativeHDC',
|
22
|
+
'wxGraphicsContext::CreateFromUnknownDC',
|
21
23
|
'wxGraphicsContext::GetNativeContext',
|
22
|
-
'wxGraphicsContext::Create
|
24
|
+
'wxGraphicsContext::Create'
|
23
25
|
# type mappings
|
24
26
|
# Typemap to fix GraphicsContext#get_text_extent
|
25
27
|
spec.map_apply 'double *OUTPUT' => [ 'wxDouble* width', 'wxDouble* height',
|
@@ -135,8 +137,6 @@ module WXRuby3
|
|
135
137
|
}
|
136
138
|
__CODE
|
137
139
|
end
|
138
|
-
spec.new_object 'wxGraphicsContext::Create',
|
139
|
-
'wxGraphicsContext::CreateFromUnknownDC'
|
140
140
|
# add convenience method providing efficient gc memory management
|
141
141
|
spec.add_extend_code 'wxGraphicsContext', <<~__HEREDOC
|
142
142
|
static VALUE draw_on(wxWindow* win)
|
@@ -20,7 +20,7 @@ module WXRuby3
|
|
20
20
|
spec.make_abstract 'wxHtmlCell'
|
21
21
|
spec.make_abstract 'wxHtmlLinkInfo'
|
22
22
|
spec.make_abstract 'wxHtmlContainerCell'
|
23
|
-
spec.
|
23
|
+
spec.gc_as_untracked 'wxHtmlLinkInfo' # no tracking
|
24
24
|
spec.ignore 'wxHtmlCell::Find'
|
25
25
|
# not useful for wxRuby as we do not support customizing these
|
26
26
|
spec.ignore 'wxHtmlCell::AdjustPagebreak',
|
@@ -20,13 +20,11 @@ module WXRuby3
|
|
20
20
|
# we only allow Ruby derivatives from wxDataObject but not of any of the C++ implemented
|
21
21
|
# specializations
|
22
22
|
spec.no_proxy 'wxHTMLDataObject'
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
%feature("notabstract") wxHTMLDataObject;
|
29
|
-
__HEREDOC
|
23
|
+
# SWIG gets confused and doesn't realise that various virtual methods
|
24
|
+
# from wxDataObject are implemented fully in this subclass, and so,
|
25
|
+
# believing it to be abstract doesn't provide an allocator for this
|
26
|
+
# class. This overrides this.
|
27
|
+
spec.make_concrete 'wxHTMLDataObject'
|
30
28
|
|
31
29
|
end
|
32
30
|
|
@@ -12,7 +12,7 @@ module WXRuby3
|
|
12
12
|
class HtmlListBox < Window
|
13
13
|
|
14
14
|
def setup
|
15
|
-
spec.items << 'wxSimpleHtmlListBox'
|
15
|
+
spec.items << 'wxSimpleHtmlListBox' << 'wxItemContainer'
|
16
16
|
super
|
17
17
|
spec.override_inheritance_chain('wxHtmlListBox', %w[wxVListBox wxVScrolledWindow wxPanel wxWindow wxEvtHandler wxObject])
|
18
18
|
spec.make_abstract 'wxHtmlListBox'
|
@@ -44,8 +44,72 @@ module WXRuby3
|
|
44
44
|
$self->GetFileSystem().ChangePathTo(location, is_dir);
|
45
45
|
}
|
46
46
|
__HEREDOC
|
47
|
+
# make sure protected methods are included
|
48
|
+
spec.regard 'wxHtmlListBox::OnGetItem',
|
49
|
+
'wxHtmlListBox::OnGetItemMarkup',
|
50
|
+
'wxHtmlListBox::GetSelectedTextColour',
|
51
|
+
'wxHtmlListBox::GetSelectedTextBgColour',
|
52
|
+
'wxHtmlListBox::OnLinkClicked'
|
53
|
+
# add missing protected overloads
|
54
|
+
spec.extend_interface 'wxHtmlListBox',
|
55
|
+
'virtual void OnDrawItem(wxDC &dc, const wxRect &rect, size_t n) const',
|
56
|
+
'virtual wxCoord OnMeasureItem(size_t n) const',
|
57
|
+
'virtual void OnDrawBackground(wxDC &dc, const wxRect &rect, size_t n) const',
|
58
|
+
'virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const',
|
59
|
+
visibility: 'protected'
|
60
|
+
|
47
61
|
# override inheritance chain
|
48
62
|
spec.override_inheritance_chain('wxSimpleHtmlListBox', %w[wxHtmlListBox wxVListBox wxVScrolledWindow wxPanel wxWindow wxEvtHandler wxObject])
|
63
|
+
spec.fold_bases('wxSimpleHtmlListBox' => %w[wxItemContainer])
|
64
|
+
# override SWIG's confusion
|
65
|
+
spec.make_concrete 'wxSimpleHtmlListBox'
|
66
|
+
# not useful overload
|
67
|
+
spec.ignore 'wxSimpleHtmlListBox::wxSimpleHtmlListBox(wxWindow *, wxWindowID, const wxPoint &, const wxSize &, int, const wxString[], long, const wxValidator &, const wxString &)'
|
68
|
+
# add missing overloads
|
69
|
+
spec.extend_interface 'wxSimpleHtmlListBox',
|
70
|
+
'virtual wxString GetString(unsigned int n) const',
|
71
|
+
'virtual void SetString(unsigned int n, const wxString &string)'
|
72
|
+
spec.ignore([ 'wxItemContainer::Append(const wxString &, wxClientData *)',
|
73
|
+
'wxItemContainer::Append(const std::vector< wxString > &)',
|
74
|
+
'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
|
75
|
+
'wxItemContainer::Append(unsigned int, const wxString *)',
|
76
|
+
'wxItemContainer::Append(unsigned int, const wxString *, void **)',
|
77
|
+
'wxItemContainer::Append(unsigned int, const wxString *, wxClientData **)',
|
78
|
+
'wxItemContainer::Insert(const wxString &, unsigned int, wxClientData *)',
|
79
|
+
'wxItemContainer::Insert(const std::vector< wxString > &)',
|
80
|
+
'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
|
81
|
+
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int)',
|
82
|
+
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, void **)',
|
83
|
+
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, wxClientData **)',
|
84
|
+
'wxItemContainer::Set(const std::vector< wxString > &)',
|
85
|
+
'wxItemContainer::Set(const wxArrayString &, wxClientData **)',
|
86
|
+
'wxItemContainer::Set(unsigned int, const wxString *)',
|
87
|
+
'wxItemContainer::Set(unsigned int, const wxString *, void **)',
|
88
|
+
'wxItemContainer::Set(unsigned int, const wxString *, wxClientData **)',
|
89
|
+
'wxItemContainer::DetachClientObject',
|
90
|
+
'wxItemContainer::HasClientObjectData',
|
91
|
+
'wxItemContainer::GetClientObject',
|
92
|
+
'wxItemContainer::SetClientObject',
|
93
|
+
'wxItemContainer::HasClientUntypedData',
|
94
|
+
'wxItemContainer::Clear'])
|
95
|
+
spec.ignore([ 'wxItemContainer::Append(const wxArrayString &, void **)',
|
96
|
+
'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
|
97
|
+
'wxItemContainer::Set(const wxArrayString &, void **)'], ignore_doc: false)
|
98
|
+
# for doc only
|
99
|
+
spec.map 'void** clientData' => 'Array', swig: false do
|
100
|
+
map_in code: ''
|
101
|
+
end
|
102
|
+
spec.ignore(%w[wxItemContainer::GetClientData wxItemContainer::SetClientData], ignore_doc: false) # keep docs
|
103
|
+
# Replace the old Wx definition of this method (which segfaults)
|
104
|
+
# Only need the setter as we cache data in Ruby and the getter
|
105
|
+
# therefor can be pure Ruby
|
106
|
+
spec.add_extend_code('wxSimpleHtmlListBox', <<~__HEREDOC
|
107
|
+
VALUE set_client_data(int n, VALUE item_data) {
|
108
|
+
self->SetClientData(n, (void *)item_data);
|
109
|
+
return item_data;
|
110
|
+
}
|
111
|
+
__HEREDOC
|
112
|
+
)
|
49
113
|
end
|
50
114
|
end # class HtmlListBox
|
51
115
|
|
@@ -13,6 +13,8 @@ module WXRuby3
|
|
13
13
|
|
14
14
|
def setup
|
15
15
|
spec.items << 'wxIconBundle'
|
16
|
+
spec.gc_as_untracked 'wxIcon'
|
17
|
+
spec.gc_as_untracked 'wxIconBundle'
|
16
18
|
spec.disable_proxies
|
17
19
|
spec.require_app 'wxIcon', 'wxIconBundle'
|
18
20
|
# disable as there is no way to distinguish char*/[] from wxString in Ruby
|
@@ -14,7 +14,8 @@ module WXRuby3
|
|
14
14
|
spec.disable_proxies
|
15
15
|
spec.items << 'wxLanguageInfo' << 'language.h'
|
16
16
|
spec.gc_as_object('wxLocale')
|
17
|
-
spec.
|
17
|
+
spec.gc_as_untracked('wxLanguageInfo')
|
18
|
+
spec.make_concrete 'wxLanguageInfo'
|
18
19
|
spec.regard %w[
|
19
20
|
wxLanguageInfo::Language
|
20
21
|
wxLanguageInfo::LocaleTag
|
@@ -12,6 +12,7 @@ module WXRuby3
|
|
12
12
|
def setup
|
13
13
|
super
|
14
14
|
spec.disable_proxies
|
15
|
+
spec.gc_as_untracked 'wxPalette'
|
15
16
|
if Config.instance.wx_port == :wxQT
|
16
17
|
# mismatched implementation which does nothing anyway
|
17
18
|
spec.ignore 'wxPalette::wxPalette(int, const unsigned char *, const unsigned char *, const unsigned char *)'
|
data/rakelib/lib/director/pen.rb
CHANGED
@@ -12,7 +12,8 @@ module WXRuby3
|
|
12
12
|
def setup
|
13
13
|
super
|
14
14
|
spec.items << 'wxPenInfo'
|
15
|
-
spec.
|
15
|
+
spec.gc_as_untracked 'wxPenInfo'
|
16
|
+
spec.gc_as_untracked 'wxPen'
|
16
17
|
spec.disable_proxies
|
17
18
|
spec.add_header_code <<~__HEREDOC
|
18
19
|
// special free funcs are needed to clean up Dashes array if it has been
|
@@ -26,7 +26,7 @@ module WXRuby3
|
|
26
26
|
'wxEnumProperty::wxEnumProperty(const wxString &, const wxString &, const wxChar *const *, const long *, wxPGChoices *, int)'
|
27
27
|
spec.ignore 'wxEditEnumProperty::wxEditEnumProperty(const wxString &, const wxString &, const wxChar *const *, const long *, const wxString&)',
|
28
28
|
'wxEditEnumProperty::wxEditEnumProperty(const wxString &, const wxString &, const wxChar *const *, const long *, wxPGChoices *, const wxString&)'
|
29
|
-
spec.
|
29
|
+
spec.gc_as_untracked 'wxColourPropertyValue'
|
30
30
|
spec.regard 'wxColourPropertyValue::m_type',
|
31
31
|
'wxColourPropertyValue::m_colour'
|
32
32
|
spec.regard 'wxSystemColourProperty::Init',
|
@@ -29,7 +29,7 @@ module WXRuby3
|
|
29
29
|
'drawn_height' => 'wxPGPaintData::m_drawnHeight'
|
30
30
|
# wxPGChoices are always returned by value and never transfer ownership
|
31
31
|
# so we do not need tracking or special free function
|
32
|
-
spec.
|
32
|
+
spec.gc_as_untracked 'wxPGChoices'
|
33
33
|
# prevent exposure of wxPGChoicesData; not of any real use in wxRuby
|
34
34
|
spec.ignore 'wxPGChoices::wxPGChoices(wxPGChoicesData*)',
|
35
35
|
'wxPGChoices::AssignData',
|
@@ -12,7 +12,7 @@ module WXRuby3
|
|
12
12
|
def setup
|
13
13
|
super
|
14
14
|
spec.items << 'propgrid/propgrid.h'
|
15
|
-
spec.
|
15
|
+
spec.gc_as_untracked 'wxPGValidationInfo'
|
16
16
|
if Config.instance.wx_version < '3.3.0'
|
17
17
|
spec.ignore 'wxPGVFBFlags' # not a constant but a rather a clumsy typedef
|
18
18
|
end
|
@@ -11,7 +11,7 @@ module WXRuby3
|
|
11
11
|
|
12
12
|
def setup
|
13
13
|
super
|
14
|
-
spec.
|
14
|
+
spec.gc_as_untracked
|
15
15
|
spec.disable_proxies # fixed and final data structures
|
16
16
|
spec.items << 'wxPrintDialogData' << 'wxPageSetupDialogData'
|
17
17
|
spec.ignore 'wxPrintDialogData::SetSetupDialog' # deprecated since 2.5.4
|
@@ -19,7 +19,7 @@ module WXRuby3
|
|
19
19
|
|
20
20
|
def setup
|
21
21
|
super
|
22
|
-
spec.
|
22
|
+
spec.gc_as_untracked 'wxPropertyGridInterface' # actually no GC control necessary as this is a mixin only
|
23
23
|
# turn wxPropertyGridInterface into a mixin module
|
24
24
|
spec.make_mixin 'wxPropertyGridInterface'
|
25
25
|
# add typedef to work around flaky define in wxWidgets
|
@@ -13,7 +13,7 @@ module WXRuby3
|
|
13
13
|
super
|
14
14
|
spec.items << 'wxPropertyGridHitTestResult'
|
15
15
|
spec.gc_never 'wxPropertyGridPageState'
|
16
|
-
spec.
|
16
|
+
spec.gc_as_untracked 'wxPropertyGridHitTestResult'
|
17
17
|
spec.make_abstract 'wxPropertyGridPageState'
|
18
18
|
spec.disable_proxies
|
19
19
|
spec.ignore 'wxPropertyGridPageState::DoDelete',
|
@@ -13,7 +13,7 @@ module WXRuby3
|
|
13
13
|
spec.items << 'wxRibbonPageTabInfo' << 'wxRibbonMSWArtProvider' << 'wxRibbonAUIArtProvider'
|
14
14
|
super
|
15
15
|
spec.gc_as_object 'wxRibbonArtProvider'
|
16
|
-
spec.
|
16
|
+
spec.gc_as_untracked 'wxRibbonPageTabInfo'
|
17
17
|
spec.suppress_warning(473,
|
18
18
|
'wxRibbonArtProvider::Clone',
|
19
19
|
'wxRibbonMSWArtProvider::Clone',
|
@@ -20,13 +20,11 @@ module WXRuby3
|
|
20
20
|
# we only allow Ruby derivatives from wxDataObject but not of any of the C++ implemented
|
21
21
|
# specializations
|
22
22
|
spec.no_proxy 'wxRichTextBufferDataObject'
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
%feature("notabstract") wxRichTextBufferDataObject;
|
29
|
-
__HEREDOC
|
23
|
+
# SWIG gets confused and doesn't realise that various virtual methods
|
24
|
+
# from wxDataObject are implemented fully in this subclass, and so,
|
25
|
+
# believing it to be abstract doesn't provide an allocator for this
|
26
|
+
# class. This overrides this.
|
27
|
+
spec.make_concrete 'wxRichTextBufferDataObject'
|
30
28
|
|
31
29
|
# ignore overrrides (will be available through base class)
|
32
30
|
spec.ignore 'wxRichTextBufferDataObject::GetPreferredFormat'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
###
|
2
|
+
# wxRuby3 wxWidgets interface director
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
4
|
+
###
|
5
|
+
|
6
|
+
require_relative './window'
|
7
|
+
|
8
|
+
module WXRuby3
|
9
|
+
|
10
|
+
class Director
|
11
|
+
|
12
|
+
class SearchCtrl < Window
|
13
|
+
|
14
|
+
def setup
|
15
|
+
super
|
16
|
+
# mixin TextEntry
|
17
|
+
spec.include_mixin 'wxSearchCtrl', 'Wx::TextEntry'
|
18
|
+
spec.override_inheritance_chain('wxSearchCtrl', %w[wxControl wxWindow wxEvtHandler wxObject])
|
19
|
+
end
|
20
|
+
end # class SearchCtrl
|
21
|
+
|
22
|
+
end # class Director
|
23
|
+
|
24
|
+
end # module WXRuby3
|
@@ -15,7 +15,7 @@ module WXRuby3
|
|
15
15
|
case spec.module_name
|
16
16
|
when 'wxSizer'
|
17
17
|
spec.items << 'wxSizerFlags'
|
18
|
-
spec.
|
18
|
+
spec.gc_as_untracked('wxSizerFlags')
|
19
19
|
spec.make_abstract('wxSizer')
|
20
20
|
spec.ignore %w[wxSizer::IsShown wxSizer::SetVirtualSizeHints]
|
21
21
|
# cannot use these with wxRuby
|
@@ -44,7 +44,7 @@ module WXRuby3
|
|
44
44
|
spec.suppress_warning(517, 'wxSizer')
|
45
45
|
when 'wxGridBagSizer'
|
46
46
|
spec.items << 'wxGBSpan' << 'wxGBPosition'
|
47
|
-
spec.
|
47
|
+
spec.gc_as_untracked 'wxGBSpan', 'wxGBPosition'
|
48
48
|
# cannot use this with wxRuby
|
49
49
|
spec.ignore 'wxGridBagSizer::Add(wxGBSizerItem *)'
|
50
50
|
end
|
@@ -14,6 +14,8 @@ module WXRuby3
|
|
14
14
|
def setup
|
15
15
|
super
|
16
16
|
spec.override_inheritance_chain('wxStyledTextCtrl', %w[wxControl wxWindow wxEvtHandler wxObject])
|
17
|
+
# mixin TextEntry
|
18
|
+
spec.include_mixin 'wxStyledTextCtrl', 'Wx::TextEntry'
|
17
19
|
spec.map 'int *', 'long *', as: 'Integer' do
|
18
20
|
map_in ignore: true, temp: '$*1_ltype a', code: '$1 = &a;'
|
19
21
|
map_argout code: <<~__CODE
|
@@ -12,8 +12,8 @@ module WXRuby3
|
|
12
12
|
def setup
|
13
13
|
super
|
14
14
|
spec.items << 'wxTextCompleter' << 'wxTextCompleterSimple'
|
15
|
-
spec.
|
16
|
-
spec.
|
15
|
+
spec.gc_as_untracked 'wxTextCompleter', 'wxTextCompleterSimple'
|
16
|
+
spec.gc_as_untracked 'wxTextEntry' # actually no GC control necessary as this is a mixin only
|
17
17
|
# turn wxTextEntry into a mixin module
|
18
18
|
spec.make_mixin 'wxTextEntry'
|
19
19
|
spec.disown 'wxTextCompleter *completer' # managed by wxWidgets after passing in
|
@@ -194,10 +194,13 @@ module WXRuby3
|
|
194
194
|
else // Find the top-left most item, then recurse over it and siblings
|
195
195
|
{
|
196
196
|
wxTreeItemId base_id = FindFirstRoot(tree_ctrl);
|
197
|
-
|
198
|
-
|
199
|
-
|
197
|
+
if (base_id.IsOk())
|
198
|
+
{
|
199
|
+
// now do recursion
|
200
200
|
RecurseOverTreeIds(tree_ctrl, base_id, *rec_func);
|
201
|
+
while ((base_id = tree_ctrl->GetNextSibling(base_id)).IsOk())
|
202
|
+
RecurseOverTreeIds(tree_ctrl, base_id, *rec_func);
|
203
|
+
}
|
201
204
|
return;
|
202
205
|
}
|
203
206
|
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
###
|
2
|
+
# wxRuby3 wxWidgets interface director
|
3
|
+
# Copyright (c) M.J.N. Corino, The Netherlands
|
4
|
+
###
|
5
|
+
|
6
|
+
module WXRuby3
|
7
|
+
|
8
|
+
class Director
|
9
|
+
|
10
|
+
class UIActionSimulator < Director
|
11
|
+
|
12
|
+
def setup
|
13
|
+
super
|
14
|
+
spec.gc_as_untracked # no tracking
|
15
|
+
end
|
16
|
+
end # class UIActionSimulator
|
17
|
+
|
18
|
+
end # class Director
|
19
|
+
|
20
|
+
end # module WXRuby3
|
@@ -15,7 +15,7 @@ module WXRuby3
|
|
15
15
|
super
|
16
16
|
# variants are (almost) always returned by value and never transfer ownership
|
17
17
|
# so we do not need tracking or special free function
|
18
|
-
spec.
|
18
|
+
spec.gc_as_untracked 'wxVariant'
|
19
19
|
spec.disable_proxies
|
20
20
|
# add custom wxVariant extensions so to be
|
21
21
|
# able to handle all PGProperty specific value types
|
@@ -38,6 +38,31 @@ module WXRuby3
|
|
38
38
|
__HEREDOC
|
39
39
|
# make Ruby director and wrappers use custom implementation
|
40
40
|
spec.use_class_implementation('wxVListBox', 'wxRubyVListBox')
|
41
|
+
# make sure protected methods are included
|
42
|
+
spec.regard 'wxVListBox::OnDrawItem',
|
43
|
+
'wxVListBox::OnMeasureItem',
|
44
|
+
'wxVListBox::OnDrawSeparator',
|
45
|
+
'wxVListBox::OnDrawBackground'
|
46
|
+
# ignore these very un-Ruby methods
|
47
|
+
spec.ignore 'wxVListBox::GetFirstSelected',
|
48
|
+
'wxVListBox::GetNextSelected'
|
49
|
+
# add rubified API (finish in pure Ruby)
|
50
|
+
spec.add_extend_code 'wxVListBox', <<~__HEREDOC
|
51
|
+
VALUE each_selected()
|
52
|
+
{
|
53
|
+
VALUE rc = Qnil;
|
54
|
+
if (rb_block_given_p())
|
55
|
+
{
|
56
|
+
unsigned long cookie;
|
57
|
+
int sel = $self->GetFirstSelected(cookie);
|
58
|
+
for (; sel != wxNOT_FOUND ;sel = $self->GetNextSelected(cookie))
|
59
|
+
{
|
60
|
+
rc = rb_yield (INT2NUM(sel));
|
61
|
+
}
|
62
|
+
}
|
63
|
+
return rc;
|
64
|
+
}
|
65
|
+
__HEREDOC
|
41
66
|
end
|
42
67
|
end # class VListBox
|
43
68
|
|
@@ -172,8 +172,6 @@ module WXRuby3
|
|
172
172
|
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
|
173
173
|
VALUE rb_dc = SWIG_NewPointerObj(SWIG_as_voidptr(ptr_dc), swig_type, 0);
|
174
174
|
rc = rb_yield(rb_dc);
|
175
|
-
SWIG_RubyRemoveTracking((void *)ptr_dc);
|
176
|
-
DATA_PTR(rb_dc) = NULL;
|
177
175
|
|
178
176
|
return rc;
|
179
177
|
}
|
@@ -201,16 +199,12 @@ module WXRuby3
|
|
201
199
|
wxPaintDC dc(ptr);
|
202
200
|
VALUE dcVal = SWIG_NewPointerObj((void *) &dc,SWIGTYPE_p_wxPaintDC, 0);
|
203
201
|
rc = rb_yield(dcVal);
|
204
|
-
SWIG_RubyRemoveTracking((void *) &dc);
|
205
|
-
DATA_PTR(dcVal) = NULL;
|
206
202
|
}
|
207
203
|
else // supply a ClientDC
|
208
204
|
{
|
209
205
|
wxClientDC dc(ptr);
|
210
206
|
VALUE dcVal = SWIG_NewPointerObj((void *) &dc,SWIGTYPE_p_wxClientDC, 0);
|
211
207
|
rc = rb_yield(dcVal);
|
212
|
-
SWIG_RubyRemoveTracking((void *) &dc);
|
213
|
-
DATA_PTR(dcVal) = NULL;
|
214
208
|
}
|
215
209
|
|
216
210
|
return rc;
|
@@ -11,7 +11,7 @@ module WXRuby3
|
|
11
11
|
|
12
12
|
def setup
|
13
13
|
super
|
14
|
-
spec.
|
14
|
+
spec.gc_as_untracked 'wxWithImages' # actually no GC control necessary as this is a mixin only
|
15
15
|
# turn wxWithImages into a mixin module
|
16
16
|
spec.make_mixin 'wxWithImages'
|
17
17
|
# Avoid premature deletion of ImageList providing icons for notebook
|
@@ -12,7 +12,7 @@ module WXRuby3
|
|
12
12
|
def setup
|
13
13
|
super
|
14
14
|
spec.disable_proxies
|
15
|
-
spec.
|
15
|
+
spec.gc_as_untracked
|
16
16
|
spec.disown 'wxXmlNode *child'
|
17
17
|
# ignore this; only allow adding child node by explicitly calling Add/Insert-child methods (easier on the GC handling and avoids wxXmlAttribute)
|
18
18
|
spec.ignore 'wxXmlNode::wxXmlNode(wxXmlNode *, wxXmlNodeType, const wxString &, const wxString &, wxXmlAttribute *, wxXmlNode *, int)'
|
@@ -91,9 +91,9 @@ module WXRuby3
|
|
91
91
|
# unlink params_doc if any
|
92
92
|
params_doc.unlink if params_doc
|
93
93
|
# get brief doc
|
94
|
-
doc = xml_trans.to_doc(@brief_doc)
|
94
|
+
doc = xml_trans.to_doc(@brief_doc, item: self)
|
95
95
|
# add detailed doc text without params doc
|
96
|
-
doc << xml_trans.to_doc(@detailed_doc)
|
96
|
+
doc << xml_trans.to_doc(@detailed_doc, item: self, desc: :detail)
|
97
97
|
# get mapped ruby parameter list
|
98
98
|
params = []
|
99
99
|
mapped_ret_args = nil
|
@@ -130,7 +130,9 @@ module WXRuby3
|
|
130
130
|
# look up matching mapped param entry
|
131
131
|
if (param = params.detect { |p| p[:name] == pinm })
|
132
132
|
# add doc
|
133
|
-
param[:doc] = xml_trans.to_doc(pi.xpath('parameterdescription')
|
133
|
+
param[:doc] = xml_trans.to_doc(pi.xpath('parameterdescription'),
|
134
|
+
item: "#{name}.#{param[:name]}",
|
135
|
+
desc: :brief).lstrip
|
134
136
|
end
|
135
137
|
end
|
136
138
|
end if params_doc
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
:wxAboutBox:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:para:
|
6
|
+
- :pattern: !ruby/regexp /<programlisting>.*MyFrame::ShowSimpleAboutDialog/
|
7
|
+
:replace: |
|
8
|
+
```ruby
|
9
|
+
def show_simple_about_dialog(event)
|
10
|
+
info = Wx::AboutDialogInfo.new
|
11
|
+
info.name = 'My Program'
|
12
|
+
info.version = '1.2.3 Beta'
|
13
|
+
info.description = 'This program does something great.'
|
14
|
+
info.copyright = '(C) 2007 Me <my@email.addre.ss>'
|
15
|
+
|
16
|
+
Wx.about_box(info)
|
17
|
+
end
|
18
|
+
```
|
19
|
+
|
20
|
+
:wxAboutDialogInfo:
|
21
|
+
:detail:
|
22
|
+
:pre:
|
23
|
+
:para:
|
24
|
+
- :pattern: !ruby/regexp /Example of usage:/
|
25
|
+
:replace: |
|
26
|
+
|
27
|
+
Example of usage:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
def on_about(event)
|
31
|
+
info = Wx::AboutDialogInfo.new
|
32
|
+
info.name = 'MyApp'
|
33
|
+
info.version = MY_APP_VERSION_STRING
|
34
|
+
info.description = 'My wxWidgets-based application!'
|
35
|
+
info.copyright = '(C) 1992-2023'
|
36
|
+
info.add_developer('My Self')
|
37
|
+
|
38
|
+
Wx.about_box(info)
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
:post:
|
43
|
+
- :pattern: !ruby/regexp /Example of appearance of a simple about dialog:(.|\s)+\<\/table>\<\/div>/
|
44
|
+
:subst: ''
|
45
|
+
- :pattern: !ruby/regexp /And that of a dialog using a web site link,(.|\s)+\<\/table>\<\/div>/
|
46
|
+
:subst: ''
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
:wxAcceleratorTable:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:para:
|
6
|
+
- :pattern: !ruby/regexp /<programlisting>.*/
|
7
|
+
:replace: |
|
8
|
+
```ruby
|
9
|
+
entries = [
|
10
|
+
Wx::AcceleratorEntry.new(Wx::ACCEL_CTRL, 'N', ID_NEW_WINDOW),
|
11
|
+
Wx::AcceleratorEntry.new(Wx::ACCEL_CTRL, 'X', Wx::ID_EXIT),
|
12
|
+
Wx::AcceleratorEntry.new(Wx::ACCEL_CTRL, 'A', Wx::ID_ABOUT),
|
13
|
+
Wx::AcceleratorEntry.new(Wx::ACCEL_CTRL, 'N', Wx::ID_CUT)
|
14
|
+
]
|
15
|
+
frame.accelerator_table = Wx::AcceleratorTable[entries]
|
16
|
+
```
|
17
|
+
:wxAcceleratorEntry.wxAcceleratorEntry.keyCode:
|
18
|
+
:brief:
|
19
|
+
:post:
|
20
|
+
- :pattern: !ruby/regexp /The\s+keycode\s+to\s+be\s+detected/
|
21
|
+
:subst: 'The keycode (or character) to be detected'
|