wxruby 1.9.2-i386-mswin32 → 1.9.3-i386-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +53 -53
- data/README +299 -299
- data/lib/wx/classes/app.rb +6 -0
- data/lib/wx/classes/checklistbox.rb +45 -30
- data/lib/wx/classes/clipboard.rb +16 -0
- data/lib/wx/classes/event.rb +5 -0
- data/lib/wx/classes/evthandler.rb +20 -10
- data/lib/wx/classes/grid.rb +38 -39
- data/lib/wx/classes/listctrl.rb +12 -0
- data/lib/wx/classes/mediactrl.rb +22 -0
- data/lib/wx/classes/menu.rb +6 -6
- data/lib/wx/classes/sound.rb +23 -0
- data/lib/wx/classes/styledtextctrl.rb +2 -2
- data/lib/wx/classes/treectrl.rb +26 -0
- data/lib/wx/keyword_ctors.rb +19 -5
- data/lib/wx/keyword_defs.rb +20 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx.rb +42 -42
- data/lib/wxruby2.exp +0 -0
- data/lib/wxruby2.lib +0 -0
- data/lib/wxruby2.so +0 -0
- data/samples/SAMPLES-LICENSE.TXT +17 -17
- data/samples/aui/aui.rb +8 -1
- data/samples/bigdemo/About.rbw +39 -39
- data/samples/bigdemo/ColorPanel.rbw +25 -25
- data/samples/bigdemo/GridSimple.rbw +80 -80
- data/samples/bigdemo/MDIDemo.rbw +59 -59
- data/samples/bigdemo/PopupMenu.rbw +151 -151
- data/samples/bigdemo/Sizers.rbw +545 -545
- data/samples/bigdemo/bigdemo.rb +826 -826
- data/samples/bigdemo/demoTemplate.rbw +37 -37
- data/samples/bigdemo/icons/choice.xpm +27 -27
- data/samples/bigdemo/icons/combo.xpm +27 -27
- data/samples/bigdemo/icons/copy.xpm +25 -25
- data/samples/bigdemo/icons/cut.xpm +24 -24
- data/samples/bigdemo/icons/gauge.xpm +27 -27
- data/samples/bigdemo/icons/help.xpm +25 -25
- data/samples/bigdemo/icons/list.xpm +27 -27
- data/samples/bigdemo/icons/mondrian.xpm +44 -44
- data/samples/bigdemo/icons/new.xpm +24 -24
- data/samples/bigdemo/icons/ogl.ico +0 -0
- data/samples/bigdemo/icons/ogl.xpm +45 -45
- data/samples/bigdemo/icons/open.xpm +26 -26
- data/samples/bigdemo/icons/paste.xpm +38 -38
- data/samples/bigdemo/icons/preview.xpm +26 -26
- data/samples/bigdemo/icons/print.xpm +26 -26
- data/samples/bigdemo/icons/radio.xpm +27 -27
- data/samples/bigdemo/icons/robert.xpm +415 -415
- data/samples/bigdemo/icons/save.xpm +25 -25
- data/samples/bigdemo/icons/smiles.xpm +39 -39
- data/samples/bigdemo/icons/smiley.xpm +42 -42
- data/samples/bigdemo/icons/stattext.xpm +24 -24
- data/samples/bigdemo/icons/test2.bmp +0 -0
- data/samples/bigdemo/icons/test2.xpm +79 -79
- data/samples/bigdemo/icons/text.xpm +27 -27
- data/samples/bigdemo/icons/tog1.xpm +38 -38
- data/samples/bigdemo/icons/tog2.xpm +38 -38
- data/samples/bigdemo/icons/wxwin16x16.xpm +25 -25
- data/samples/bigdemo/tips.txt +7 -7
- data/samples/bigdemo/utils.rb +11 -11
- data/samples/bigdemo/wxButton.rbw +66 -66
- data/samples/bigdemo/wxCalendarCtrl.rbw +72 -72
- data/samples/bigdemo/wxCheckBox.rbw +52 -52
- data/samples/bigdemo/wxCheckListBox.rbw +77 -77
- data/samples/bigdemo/wxChoice.rbw +49 -49
- data/samples/bigdemo/wxColourDialog.rbw +34 -34
- data/samples/bigdemo/wxComboBox.rbw +79 -79
- data/samples/bigdemo/wxDialog.rbw +92 -92
- data/samples/bigdemo/wxDirDialog.rbw +32 -32
- data/samples/bigdemo/wxFileDialog.rbw +39 -39
- data/samples/bigdemo/wxFileDialog_Save.rbw +38 -38
- data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -85
- data/samples/bigdemo/wxFontDialog.rbw +176 -176
- data/samples/bigdemo/wxFrame.rbw +55 -55
- data/samples/bigdemo/wxGauge.rbw +73 -73
- data/samples/bigdemo/wxGrid.rbw +68 -68
- data/samples/bigdemo/wxListBox.rbw +142 -142
- data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -109
- data/samples/bigdemo/wxMDIWindows.rbw +52 -52
- data/samples/bigdemo/wxMenu.rbw +238 -238
- data/samples/bigdemo/wxMessageDialog.rbw +30 -30
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -34
- data/samples/bigdemo/wxNotebook.rbw +138 -138
- data/samples/bigdemo/wxProgressDialog.rbw +45 -45
- data/samples/bigdemo/wxRadioBox.rbw +74 -74
- data/samples/bigdemo/wxRadioButton.rbw +127 -127
- data/samples/bigdemo/wxSashWindow.rbw +94 -104
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -59
- data/samples/bigdemo/wxScrolledWindow.rbw +201 -201
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -35
- data/samples/bigdemo/wxSlider.rbw +44 -44
- data/samples/bigdemo/wxSpinButton.rbw +52 -52
- data/samples/bigdemo/wxSpinCtrl.rbw +53 -53
- data/samples/bigdemo/wxSplitterWindow.rbw +65 -65
- data/samples/bigdemo/wxStaticBitmap.rbw +53 -53
- data/samples/bigdemo/wxStaticText.rbw +57 -57
- data/samples/bigdemo/wxStatusBar.rbw +128 -128
- data/samples/bigdemo/wxTextCtrl.rbw +151 -151
- data/samples/bigdemo/wxTextEntryDialog.rbw +34 -34
- data/samples/bigdemo/wxToggleButton.rbw +51 -51
- data/samples/bigdemo/wxToolBar.rbw +133 -133
- data/samples/bigdemo/wxTreeCtrl.rbw +192 -192
- data/samples/calendar/calendar.rb +275 -275
- data/samples/caret/caret.rb +286 -286
- data/samples/caret/mondrian.xpm +44 -44
- data/samples/controls/controls.rb +1140 -1140
- data/samples/controls/get_item_sample.rb +87 -87
- data/samples/controls/icons/choice.xpm +27 -27
- data/samples/controls/icons/combo.xpm +27 -27
- data/samples/controls/icons/gauge.xpm +27 -27
- data/samples/controls/icons/list.xpm +27 -27
- data/samples/controls/icons/radio.xpm +27 -27
- data/samples/controls/icons/stattext.xpm +24 -24
- data/samples/controls/icons/text.xpm +27 -27
- data/samples/controls/mondrian.xpm +44 -44
- data/samples/dialogs/dialogs.rb +724 -724
- data/samples/dialogs/tips.txt +18 -18
- data/samples/drawing/graphics_drawing.rb +232 -0
- data/samples/{images → drawing}/images.rb +48 -48
- data/samples/{images → drawing}/paperclip.png +0 -0
- data/samples/etc/activation.rb +108 -108
- data/samples/etc/choice.rb +72 -72
- data/samples/etc/miniframe.rb +84 -84
- data/samples/etc/sash.rb +135 -135
- data/samples/etc/scrollwin.rb +116 -116
- data/samples/etc/system_settings.rb +258 -258
- data/samples/etc/wizard.rb +79 -79
- data/samples/grid/grid.rb +1 -0
- data/samples/listbook/listbook.rb +181 -181
- data/samples/listbook/listbook.xrc +370 -370
- data/samples/mdi/mdi.rb +87 -87
- data/samples/media/mediactrl.rb +173 -0
- data/samples/minimal/minimal.rb +85 -85
- data/samples/minimal/nothing.rb +21 -21
- data/samples/opengl/cube.rb +123 -0
- data/samples/sockets/SocketPackets.rb +27 -0
- data/samples/sockets/res/message-new.png +0 -0
- data/samples/sockets/res/user.png +0 -0
- data/samples/sockets/wxClient.rb +395 -0
- data/samples/sockets/wxServer.rb +422 -0
- data/samples/sockets/wxSocketGUI.rb +97 -0
- data/samples/text/textctrl.rb +124 -124
- data/samples/text/unicode.rb +238 -238
- data/samples/text/utf8.txt +14 -14
- data/samples/treectrl/treectrl.rb +1180 -1181
- data/samples/xrc/samples.xrc +46 -46
- data/samples/xrc/xrc_sample.rb +107 -107
- metadata +26 -9
- data/samples/images/Thumbs.db +0 -0
@@ -1,30 +1,45 @@
|
|
1
|
-
#
|
2
|
-
class Wx::CheckListBox
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
|
1
|
+
# A ListBox, where each item has a checkbox next to it
|
2
|
+
class Wx::CheckListBox
|
3
|
+
# wxRuby redefinitions of core methods to add item data support (not
|
4
|
+
# available in wxWidgets). Use a private method to initialize and
|
5
|
+
# access the data, rather than in initialize(), b/c can't guarantee
|
6
|
+
# that initialize will be called (eg when loaded from XRC)
|
7
|
+
def __wx_item_data
|
8
|
+
@__wx_item_data ||= []
|
9
|
+
end
|
10
|
+
private :__wx_item_data
|
11
|
+
|
12
|
+
# Call method in ControlWithItems, then sync item data
|
13
|
+
def append(item, data = nil)
|
14
|
+
super(item)
|
15
|
+
__wx_item_data[count - 1] = data
|
16
|
+
end
|
17
|
+
|
18
|
+
# Call method in ControlWithItems, then sync item data
|
19
|
+
def clear
|
20
|
+
super
|
21
|
+
__wx_item_data.clear
|
22
|
+
end
|
23
|
+
|
24
|
+
# delete is defined in Wx::CheckListBox, so must be called in this class
|
25
|
+
wx_delete = self.instance_method(:delete)
|
26
|
+
define_method(:delete) do | n |
|
27
|
+
wx_delete.bind(self).call(n)
|
28
|
+
__wx_item_data.delete_at(n)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Returns an array of indices of items that are currently checked.
|
32
|
+
def get_checked_items
|
33
|
+
find_all { | i | checked?(i) }
|
34
|
+
end
|
35
|
+
|
36
|
+
# Wholly redefined here
|
37
|
+
def get_item_data(n)
|
38
|
+
__wx_item_data[n]
|
39
|
+
end
|
40
|
+
|
41
|
+
# Wholly redefined here
|
42
|
+
def set_item_data(n, data)
|
43
|
+
__wx_item_data[n] = data
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Wx::Clipboard
|
2
|
+
class << self
|
3
|
+
# Class method to provide access to the clipboard within a ruby
|
4
|
+
# block. Tests that the clipboard could be accessed, and ensures
|
5
|
+
# that it is closed when the block is finished.
|
6
|
+
def open
|
7
|
+
clip = Wx::Clipboard.new
|
8
|
+
unless clip.open
|
9
|
+
Kernel.raise "Could not open clipboard"
|
10
|
+
end
|
11
|
+
yield clip
|
12
|
+
ensure
|
13
|
+
clip.close
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -113,9 +113,9 @@ class Wx::EvtHandler
|
|
113
113
|
return block
|
114
114
|
elsif meth and not block
|
115
115
|
h_meth = case meth
|
116
|
-
when Symbol, String
|
117
|
-
when Proc
|
118
|
-
when Method
|
116
|
+
when Symbol, String then self.method(meth)
|
117
|
+
when Proc then meth
|
118
|
+
when Method then meth.to_proc
|
119
119
|
end
|
120
120
|
if h_meth.arity == 1
|
121
121
|
return lambda { | evt | h_meth.call(evt) }
|
@@ -133,8 +133,8 @@ class Wx::EvtHandler
|
|
133
133
|
# parameter or by calling the wx_id method of a passed Window.
|
134
134
|
def acquire_id(window_or_id)
|
135
135
|
case window_or_id
|
136
|
-
when Fixnum
|
137
|
-
when Wx::Window, Wx::MenuItem
|
136
|
+
when Fixnum then window_or_id
|
137
|
+
when Wx::Window, Wx::MenuItem then window_or_id.wx_id
|
138
138
|
else Kernel.raise ArgumentError,
|
139
139
|
"Must specify Wx::Window event source or its Wx id, " +
|
140
140
|
"not '#{window_or_id.inspect}'",
|
@@ -145,9 +145,13 @@ class Wx::EvtHandler
|
|
145
145
|
|
146
146
|
# Definitions for all event types that are part by core wxRuby. Events
|
147
147
|
# that are mapped to class Wx::Event are TODO as they are not
|
148
|
-
# currently wrapped by the correct class.
|
149
|
-
|
150
|
-
#
|
148
|
+
# currently wrapped by the correct class.
|
149
|
+
|
150
|
+
# All StyledTextCtrl (Scintilla) events with prefix EVT_STC are dealt
|
151
|
+
# with in the separate styledtextctrl.rb file.
|
152
|
+
#
|
153
|
+
# All MediaCtrl events with prefix EVT_MEDIA are dealt with in the
|
154
|
+
# separate mediactrl.rb file
|
151
155
|
EVENT_DEFINITIONS = [
|
152
156
|
EventType['evt_activate', 0,
|
153
157
|
Wx::EVT_ACTIVATE,
|
@@ -202,7 +206,7 @@ class Wx::EvtHandler
|
|
202
206
|
Wx::CommandEvent],
|
203
207
|
EventType['evt_calculate_layout', 0,
|
204
208
|
Wx::EVT_CALCULATE_LAYOUT,
|
205
|
-
Wx::
|
209
|
+
Wx::CalculateLayoutEvent],
|
206
210
|
EventType['evt_calendar', 1,
|
207
211
|
Wx::EVT_CALENDAR_DOUBLECLICKED,
|
208
212
|
Wx::CalendarEvent],
|
@@ -589,7 +593,7 @@ class Wx::EvtHandler
|
|
589
593
|
Wx::Event],
|
590
594
|
EventType['evt_query_layout_info', 0,
|
591
595
|
Wx::EVT_QUERY_LAYOUT_INFO,
|
592
|
-
Wx::
|
596
|
+
Wx::QueryLayoutInfoEvent],
|
593
597
|
EventType['evt_radiobox', 1,
|
594
598
|
Wx::EVT_COMMAND_RADIOBOX_SELECTED,
|
595
599
|
Wx::CommandEvent],
|
@@ -662,6 +666,12 @@ class Wx::EvtHandler
|
|
662
666
|
EventType['evt_scroll_top', 0,
|
663
667
|
Wx::EVT_SCROLL_TOP,
|
664
668
|
Wx::ScrollEvent],
|
669
|
+
EventType['evt_searchctrl_cancel_btn', 1,
|
670
|
+
Wx::EVT_COMMAND_SEARCHCTRL_CANCEL_BTN,
|
671
|
+
Wx::CommandEvent],
|
672
|
+
EventType['evt_searchctrl_search_btn', 1,
|
673
|
+
Wx::EVT_COMMAND_SEARCHCTRL_SEARCH_BTN,
|
674
|
+
Wx::CommandEvent],
|
665
675
|
EventType['evt_set_cursor', 0,
|
666
676
|
Wx::EVT_SET_CURSOR,
|
667
677
|
Wx::SetCursorEvent],
|
data/lib/wx/classes/grid.rb
CHANGED
@@ -13,21 +13,19 @@ class Wx::Grid
|
|
13
13
|
# The code below stores Ruby redefines all methods that may
|
14
14
|
# potentially set an Editor or Renderer, and stores a reference to
|
15
15
|
# it in an instance variable, so they are not disposed of up when GC sweeps.
|
16
|
-
wx_init = self.instance_method(:initialize)
|
17
|
-
define_method(:initialize) do | *args |
|
18
|
-
wx_init.bind(self).call(*args)
|
19
|
-
@__default_editor = nil
|
20
|
-
@__default_renderer = nil
|
21
|
-
|
22
|
-
@__cell_editors = []
|
23
|
-
@__cell_renderers = []
|
24
|
-
|
25
|
-
@__col_renderers = []
|
26
|
-
@__col_editors = []
|
27
|
-
@__row_renderers = []
|
28
|
-
@__row_editors = []
|
29
|
-
end
|
30
16
|
|
17
|
+
# These all need to be set up as private methods which default to an
|
18
|
+
# array. This can't be done in initialize b/c that may not be called
|
19
|
+
# when a Grid is loaded from XRC
|
20
|
+
%w| __cell_editors __col_editors __row_editors
|
21
|
+
__cell_renderers __col_renderers __row_renderers |.each do | meth |
|
22
|
+
define_method(meth) do
|
23
|
+
instance_variable_get("@#{meth}") ||
|
24
|
+
instance_variable_set("@#{meth}", [])
|
25
|
+
end
|
26
|
+
private meth
|
27
|
+
end
|
28
|
+
|
31
29
|
# store default editor
|
32
30
|
wx_set_default_editor = self.instance_method(:set_default_editor)
|
33
31
|
define_method(:set_default_editor) do | editr |
|
@@ -46,38 +44,39 @@ class Wx::Grid
|
|
46
44
|
wx_set_cell_editor = self.instance_method(:set_cell_editor)
|
47
45
|
define_method(:set_cell_editor) do | row, col, editr |
|
48
46
|
wx_set_cell_editor.bind(self).call(row, col, editr)
|
49
|
-
|
50
|
-
|
47
|
+
__cell_editors[row] ||= []
|
48
|
+
__cell_editors[row][col] = editr
|
51
49
|
end
|
52
50
|
|
53
51
|
# store cell renderer
|
54
52
|
wx_set_cell_renderer = self.instance_method(:set_cell_renderer)
|
55
53
|
define_method(:set_cell_renderer) do | row, col, rendr |
|
56
54
|
wx_set_cell_renderer.bind(self).call(row, col, rendr)
|
57
|
-
|
58
|
-
|
55
|
+
__cell_renderers[row] ||= []
|
56
|
+
__cell_renderers[row][col] = rendr
|
59
57
|
end
|
60
58
|
|
59
|
+
# Store an editor and/or renderer for a whole column
|
61
60
|
wx_set_col_attr = self.instance_method(:set_col_attr)
|
62
61
|
define_method(:set_col_attr) do | col, attr |
|
63
62
|
wx_set_col_attr.bind(self).call(col, attr)
|
64
63
|
if attr.has_editor
|
65
|
-
|
64
|
+
__col_editors[col] = attr.get_editor(self, 0, col)
|
66
65
|
end
|
67
66
|
if attr.has_renderer
|
68
|
-
|
67
|
+
__col_renderers[col] = attr.get_renderer(self, 0, col)
|
69
68
|
end
|
70
69
|
end
|
71
70
|
|
71
|
+
# Store an editor and/or renderer for a whole row
|
72
72
|
wx_set_row_attr = self.instance_method(:set_row_attr)
|
73
73
|
define_method(:set_row_attr) do | row, attr |
|
74
74
|
wx_set_row_attr.bind(self).call(row, attr)
|
75
75
|
if attr.has_editor
|
76
|
-
|
76
|
+
__row_editors[row] = attr.get_editor(self, row, 0)
|
77
77
|
end
|
78
|
-
|
79
78
|
if attr.has_renderer
|
80
|
-
|
79
|
+
__row_renderers[row] = attr.get_renderer(self, row, 0)
|
81
80
|
end
|
82
81
|
end
|
83
82
|
|
@@ -87,44 +86,44 @@ class Wx::Grid
|
|
87
86
|
alias :__insert_rows :insert_rows
|
88
87
|
def insert_rows(pos = 0, num = 1, update_labels = true)
|
89
88
|
__insert_rows(pos, num, update_labels)
|
90
|
-
num.times {
|
91
|
-
num.times {
|
92
|
-
num.times {
|
93
|
-
num.times {
|
89
|
+
num.times { __row_editors.insert(pos, nil) }
|
90
|
+
num.times { __row_renderers.insert(pos, nil) }
|
91
|
+
num.times { __cell_editors.insert(pos, []) }
|
92
|
+
num.times { __cell_renderers.insert(pos, []) }
|
94
93
|
end
|
95
94
|
|
96
95
|
alias :__insert_cols :insert_cols
|
97
96
|
def insert_cols(pos = 0, num = 1, update_labels = true)
|
98
97
|
__insert_cols(pos, num, update_labels)
|
99
|
-
num.times {
|
100
|
-
num.times {
|
98
|
+
num.times { __col_editors.insert(pos, nil) }
|
99
|
+
num.times { __col_renderers.insert(pos, nil) }
|
101
100
|
num.times do
|
102
|
-
|
101
|
+
__cell_editors.map { | col | col.insert(pos, []) if col }
|
103
102
|
end
|
104
103
|
num.times do
|
105
|
-
|
104
|
+
__cell_renderers.map { | col | col.insert(pos, []) if col }
|
106
105
|
end
|
107
106
|
end
|
108
107
|
|
109
108
|
alias :__delete_rows :delete_rows
|
110
109
|
def delete_rows(pos = 0, num = 1, update_labels = true)
|
111
110
|
__delete_rows(pos, num, update_labels)
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
111
|
+
__row_editors.slice!(pos, num)
|
112
|
+
__row_renderers.slice!(pos, num)
|
113
|
+
__cell_editors.slice!(pos, num)
|
114
|
+
__cell_renderers.slice!(pos, num)
|
116
115
|
end
|
117
116
|
|
118
117
|
alias :__delete_cols :delete_cols
|
119
118
|
def delete_cols(pos = 0, num = 1, update_labels = true)
|
120
119
|
__delete_cols(pos, num, update_labels)
|
121
|
-
|
122
|
-
|
120
|
+
__col_editors.slice!(pos, num)
|
121
|
+
__col_renderers.slice!(pos, num)
|
123
122
|
num.times do
|
124
|
-
|
123
|
+
__cell_editors.map { | col | col.slice!(pos, num) if col }
|
125
124
|
end
|
126
125
|
num.times do
|
127
|
-
|
126
|
+
__cell_renderers.map { | col | col.slice!(pos, num) if col }
|
128
127
|
end
|
129
128
|
end
|
130
129
|
end
|
data/lib/wx/classes/listctrl.rb
CHANGED
@@ -6,4 +6,16 @@ class Wx::ListCtrl
|
|
6
6
|
def each
|
7
7
|
0.upto(item_count - 1) { | i | yield i }
|
8
8
|
end
|
9
|
+
|
10
|
+
# Stub version for LC_VIRTUAL controls that does nothing; may be
|
11
|
+
# overridden in subclasses.
|
12
|
+
def on_get_item_attr(i)
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
|
16
|
+
# Stub version for LC_VIRTUAL|LC_REPORT controls that does nothing;
|
17
|
+
# may be overridden in subclasses.
|
18
|
+
def on_get_item_column_image(i, col)
|
19
|
+
-1
|
20
|
+
end
|
9
21
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Functionality here must be loaded first to add custom events
|
2
|
+
require 'wx/classes/evthandler'
|
3
|
+
|
4
|
+
# These event handlers should only be defined if MediaCtrl is actually
|
5
|
+
# available; some builds may not include it
|
6
|
+
if defined?(Wx::MediaCtrl)
|
7
|
+
evt_type = Wx::EvtHandler::EventType
|
8
|
+
mediactrl_event_types = [
|
9
|
+
evt_type['evt_media_finished', 1,
|
10
|
+
Wx::EVT_MEDIA_FINISHED,
|
11
|
+
Wx::MediaEvent],
|
12
|
+
evt_type['evt_media_stop', 1,
|
13
|
+
Wx::EVT_MEDIA_STOP,
|
14
|
+
Wx::MediaEvent],
|
15
|
+
evt_type['evt_media_loaded', 1,
|
16
|
+
Wx::EVT_MEDIA_LOADED,
|
17
|
+
Wx::MediaEvent]
|
18
|
+
]
|
19
|
+
mediactrl_event_types.each do | ev_type |
|
20
|
+
Wx::EvtHandler.register_event_type(ev_type)
|
21
|
+
end
|
22
|
+
end
|
data/lib/wx/classes/menu.rb
CHANGED
@@ -23,9 +23,9 @@ class Wx::Menu
|
|
23
23
|
old_meth = instance_method(meth)
|
24
24
|
define_method(meth) do | *args |
|
25
25
|
case args.first
|
26
|
-
when Fixnum
|
27
|
-
when String
|
28
|
-
when Wx::MenuItem
|
26
|
+
when Fixnum then old_meth.bind(self).call(*args)
|
27
|
+
when String then old_meth.bind(self).call(Wx::ID_ANY, *args)
|
28
|
+
when Wx::MenuItem then old_meth.bind(self).call(args.first)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -46,9 +46,9 @@ class Wx::Menu
|
|
46
46
|
old_meth = instance_method(meth)
|
47
47
|
define_method(meth) do | pos, *args |
|
48
48
|
case args.first
|
49
|
-
when Fixnum
|
50
|
-
when String
|
51
|
-
when Wx::MenuItem
|
49
|
+
when Fixnum then old_meth.bind(self).call(pos, *args)
|
50
|
+
when String then old_meth.bind(self).call(pos, Wx::ID_ANY, *args)
|
51
|
+
when Wx::MenuItem then old_meth.bind(self).call(pos, args.first)
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Plays simple sounds from .wav files
|
2
|
+
class Wx::Sound
|
3
|
+
class << self
|
4
|
+
# Shortcut class method, as per the wxWidgets docs, but easier to do
|
5
|
+
# in Ruby
|
6
|
+
def play(file, flags = Wx::SOUND_ASYNC)
|
7
|
+
new(file).play(flags)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# Test if newly created Sound is valid; if not, raise an exception
|
12
|
+
# rather than failing silently.
|
13
|
+
wx_init = self.instance_method(:initialize)
|
14
|
+
define_method(:initialize) do | *args |
|
15
|
+
if not File.exist?( File.expand_path(args[0]) )
|
16
|
+
Kernel.raise(ArgumentError, "Sound file does not exist: #{args[0]}")
|
17
|
+
end
|
18
|
+
wx_init.bind(self).call(*args)
|
19
|
+
if not ok?
|
20
|
+
Kernel.raise(ArgumentError, "Error loading sound file #{args[0]}")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -8,7 +8,7 @@ require 'wx/classes/evthandler'
|
|
8
8
|
if defined?(Wx::StyledTextCtrl)
|
9
9
|
EventType = Wx::EvtHandler::EventType
|
10
10
|
|
11
|
-
|
11
|
+
stc_event_types = [
|
12
12
|
EventType['evt_stc_calltip_click', 1,
|
13
13
|
Wx::EVT_STC_CALLTIP_CLICK,
|
14
14
|
Wx::StyledTextEvent],
|
@@ -86,7 +86,7 @@ if defined?(Wx::StyledTextCtrl)
|
|
86
86
|
Wx::StyledTextEvent]
|
87
87
|
]
|
88
88
|
|
89
|
-
|
89
|
+
stc_event_types.each do | ev_type |
|
90
90
|
Wx::EvtHandler.register_event_type(ev_type)
|
91
91
|
end
|
92
92
|
end
|
data/lib/wx/classes/treectrl.rb
CHANGED
@@ -15,4 +15,30 @@ class Wx::TreeCtrl
|
|
15
15
|
end
|
16
16
|
kids
|
17
17
|
end
|
18
|
+
|
19
|
+
# Returns a Wx::Rect corresponding to the edges of an individual tree
|
20
|
+
# item, including the button, identified by id. The standard wxWidgets
|
21
|
+
# API for getting the pixel location of an item is unrubyish, using an
|
22
|
+
# input/output parameter. But since the underlying get_bounding_rect
|
23
|
+
# method works, it's easier to fix the API in Ruby than adding more to
|
24
|
+
# the already-toxic swig interface TreeCtrl.i file.
|
25
|
+
def get_item_rect(tree_item_id)
|
26
|
+
rect = Wx::Rect.new
|
27
|
+
if get_bounding_rect(tree_item_id, rect, false)
|
28
|
+
return rect
|
29
|
+
else
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns a Wx::Rect corresponding to the edges of an individual tree
|
35
|
+
# item's text label. See above.
|
36
|
+
def get_label_rect(tree_item_id)
|
37
|
+
rect = Wx::Rect.new
|
38
|
+
if get_bounding_rect(tree_item_id, rect, true)
|
39
|
+
return rect
|
40
|
+
else
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
end
|
18
44
|
end
|
data/lib/wx/keyword_ctors.rb
CHANGED
@@ -135,8 +135,8 @@ module Wx
|
|
135
135
|
# get keyword arguments from mixed args if supplied, else empty
|
136
136
|
kwa = mixed_args.last.kind_of?(Hash) ? mixed_args.pop : {}
|
137
137
|
out_args = []
|
138
|
-
param_spec.
|
139
|
-
if arg # use the supplied list arg
|
138
|
+
param_spec.each_with_index do | param, i |
|
139
|
+
if arg = mixed_args[i] # use the supplied list arg
|
140
140
|
out_args << arg
|
141
141
|
elsif kwa.key?(param.name) # use the keyword arg
|
142
142
|
out_args << kwa[param.name]
|
@@ -171,7 +171,10 @@ module Wx
|
|
171
171
|
|
172
172
|
alias :pre_wx_kwctor_init :initialize
|
173
173
|
|
174
|
-
|
174
|
+
# The new definition of initialize; accepts a parent arg
|
175
|
+
# mixed_args, which may zero or more position args, optionally
|
176
|
+
# terminated with hash keyword args, and an optional block
|
177
|
+
def initialize(parent = :default_ctor, *mixed_args, &block)
|
175
178
|
# allow zero-args ctor for use with XRC
|
176
179
|
if parent == :default_ctor
|
177
180
|
pre_wx_kwctor_init()
|
@@ -188,8 +191,19 @@ module Wx
|
|
188
191
|
self.class.describe_constructor()
|
189
192
|
Kernel.raise ArgumentError, msg
|
190
193
|
end
|
191
|
-
|
192
|
-
|
194
|
+
|
195
|
+
# If a block was given, pass the newly created Window instance
|
196
|
+
# into it; use block
|
197
|
+
if block
|
198
|
+
if block.arity == -1 or block.arity == 0
|
199
|
+
self.instance_eval(&block)
|
200
|
+
elsif block.arity == 1
|
201
|
+
block.call(self)
|
202
|
+
else
|
203
|
+
Kernel.raise ArgumentError,
|
204
|
+
"Block to initialize accepts zero or one arg"
|
205
|
+
end
|
206
|
+
end
|
193
207
|
end
|
194
208
|
end
|
195
209
|
|
data/lib/wx/keyword_defs.rb
CHANGED
@@ -428,6 +428,13 @@ Wx::define_keyword_ctors('SpinButton') do
|
|
428
428
|
wx_ctor_params :name => 'spinButton'
|
429
429
|
end
|
430
430
|
|
431
|
+
# wxScrollBar - standalone scrollbar with arrows and thumb
|
432
|
+
Wx::define_keyword_ctors('ScrollBar') do
|
433
|
+
wx_ctor_params :id, :pos, :size, :style => Wx::SB_HORIZONTAL
|
434
|
+
wx_ctor_params :validator, :name => 'scrollBar'
|
435
|
+
end
|
436
|
+
|
437
|
+
|
431
438
|
# wxVListBox A listbox supporting variable height rows
|
432
439
|
|
433
440
|
# wxTextCtrl Single or multiline text editing control
|
@@ -463,3 +470,16 @@ Wx::define_keyword_ctors('CollapsiblePane') do
|
|
463
470
|
wx_ctor_params :validator, :name => 'collapsiblePane'
|
464
471
|
end
|
465
472
|
|
473
|
+
Wx::define_keyword_ctors('MediaCtrl') do
|
474
|
+
wx_ctor_params :id, :filename => ''
|
475
|
+
wx_ctor_params :pos, :size, :style => 0
|
476
|
+
wx_ctor_params :backend => ''
|
477
|
+
wx_ctor_params :validator, :name => 'mediaCtrl'
|
478
|
+
end
|
479
|
+
|
480
|
+
Wx::define_keyword_ctors('SearchCtrl') do
|
481
|
+
wx_ctor_params :id, :value => ''
|
482
|
+
wx_ctor_params :pos, :size, :style => 0
|
483
|
+
wx_ctor_params :validator, :name => 'searchCtrl'
|
484
|
+
end
|
485
|
+
|
data/lib/wx/version.rb
CHANGED
data/lib/wx.rb
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
-
# Copyright 2004-2006 by Kevin Smith
|
2
|
-
# released under the MIT-style wxruby2 license
|
3
|
-
|
4
|
-
# This wrapper serves three functions:
|
5
|
-
# 1. It loads the binary library 'wxruby2.so' or 'wxruby.dll', while
|
6
|
-
# still allowing applications to just require 'wx'.
|
7
|
-
# 2. It sets up the version information
|
8
|
-
# 3. It loads in ruby extensions to the core Wx classes.
|
9
|
-
|
10
|
-
|
11
|
-
# load the binary library
|
12
|
-
require 'wxruby2'
|
13
|
-
|
14
|
-
# alias the module
|
15
|
-
Wx = Wxruby2
|
16
|
-
|
17
|
-
# Load the version information (should be bundled with all released versions)
|
18
|
-
begin
|
19
|
-
require 'wx/version'
|
20
|
-
rescue LoadError
|
21
|
-
Wx::WXRUBY_VERSION = '0.0.0'
|
22
|
-
end
|
23
|
-
# Convenience string for WxWidgets version info
|
24
|
-
Wx::WXWIDGETS_VERSION = '%i.%i.%i' % [ Wx::WXWIDGETS_MAJOR_VERSION,
|
25
|
-
Wx::WXWIDGETS_MINOR_VERSION,
|
26
|
-
Wx::WXWIDGETS_RELEASE_NUMBER ]
|
27
|
-
|
28
|
-
|
29
|
-
# Load in all the class extension methods written in ruby
|
30
|
-
# evthandler must be required first b/c it sets up methods modified elsewhere
|
31
|
-
require 'wx/classes/evthandler.rb'
|
32
|
-
class_files = File.join( File.dirname(__FILE__), 'wx', 'classes', '*.rb')
|
33
|
-
Dir.glob(class_files) do | class_file |
|
34
|
-
require 'wx/classes/' + class_file[/\w+\.rb$/]
|
35
|
-
end
|
36
|
-
|
37
|
-
# Load in syntax sweetner
|
38
|
-
require 'wx/accessors'
|
39
|
-
require 'wx/keyword_ctors'
|
40
|
-
require 'wx/keyword_defs'
|
41
|
-
|
42
|
-
|
1
|
+
# Copyright 2004-2006 by Kevin Smith
|
2
|
+
# released under the MIT-style wxruby2 license
|
3
|
+
|
4
|
+
# This wrapper serves three functions:
|
5
|
+
# 1. It loads the binary library 'wxruby2.so' or 'wxruby.dll', while
|
6
|
+
# still allowing applications to just require 'wx'.
|
7
|
+
# 2. It sets up the version information
|
8
|
+
# 3. It loads in ruby extensions to the core Wx classes.
|
9
|
+
|
10
|
+
|
11
|
+
# load the binary library
|
12
|
+
require 'wxruby2'
|
13
|
+
|
14
|
+
# alias the module
|
15
|
+
Wx = Wxruby2
|
16
|
+
|
17
|
+
# Load the version information (should be bundled with all released versions)
|
18
|
+
begin
|
19
|
+
require 'wx/version'
|
20
|
+
rescue LoadError
|
21
|
+
Wx::WXRUBY_VERSION = '0.0.0'
|
22
|
+
end
|
23
|
+
# Convenience string for WxWidgets version info
|
24
|
+
Wx::WXWIDGETS_VERSION = '%i.%i.%i' % [ Wx::WXWIDGETS_MAJOR_VERSION,
|
25
|
+
Wx::WXWIDGETS_MINOR_VERSION,
|
26
|
+
Wx::WXWIDGETS_RELEASE_NUMBER ]
|
27
|
+
|
28
|
+
|
29
|
+
# Load in all the class extension methods written in ruby
|
30
|
+
# evthandler must be required first b/c it sets up methods modified elsewhere
|
31
|
+
require 'wx/classes/evthandler.rb'
|
32
|
+
class_files = File.join( File.dirname(__FILE__), 'wx', 'classes', '*.rb')
|
33
|
+
Dir.glob(class_files) do | class_file |
|
34
|
+
require 'wx/classes/' + class_file[/\w+\.rb$/]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Load in syntax sweetner
|
38
|
+
require 'wx/accessors'
|
39
|
+
require 'wx/keyword_ctors'
|
40
|
+
require 'wx/keyword_defs'
|
41
|
+
|
42
|
+
|
data/lib/wxruby2.exp
ADDED
Binary file
|
data/lib/wxruby2.lib
ADDED
Binary file
|
data/lib/wxruby2.so
CHANGED
Binary file
|
data/samples/SAMPLES-LICENSE.TXT
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
wxRuby2 Sample Code
|
2
|
-
Copyright (c) 2004-2006 Kevin B. Smith
|
3
|
-
|
4
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
-
a copy of this software, to deal in the Software without restriction,
|
6
|
-
including without limitation the rights to use, copy, modify, merge,
|
7
|
-
publish, distribute, sublicense, and/or sell copies of any portion of
|
8
|
-
this Software, and to permit persons to whom the Software is furnished
|
9
|
-
to do so. This copyright notice need not be retained in any derived
|
10
|
-
work.
|
11
|
-
|
12
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
13
|
-
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
14
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
15
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
16
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
17
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
1
|
+
wxRuby2 Sample Code
|
2
|
+
Copyright (c) 2004-2006 Kevin B. Smith
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software, to deal in the Software without restriction,
|
6
|
+
including without limitation the rights to use, copy, modify, merge,
|
7
|
+
publish, distribute, sublicense, and/or sell copies of any portion of
|
8
|
+
this Software, and to permit persons to whom the Software is furnished
|
9
|
+
to do so. This copyright notice need not be retained in any derived
|
10
|
+
work.
|
11
|
+
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
13
|
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
14
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
15
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
16
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
17
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
18
18
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|