wxruby-ruby19 1.9.8-x86-darwin-9 → 1.9.10-x86-darwin-9

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.
Files changed (220) hide show
  1. data/LICENSE +53 -0
  2. data/README +297 -0
  3. data/lib/wx.rb +2 -2
  4. data/lib/wx/accessors.rb +7 -1
  5. data/lib/wx/classes/app.rb +10 -4
  6. data/lib/wx/classes/bitmap.rb +29 -1
  7. data/lib/wx/classes/clipboard.rb +19 -3
  8. data/lib/wx/classes/colour.rb +6 -4
  9. data/lib/wx/classes/data_object.rb +14 -0
  10. data/lib/wx/classes/data_object_simple.rb +6 -0
  11. data/lib/wx/classes/dataformat.rb +23 -0
  12. data/lib/wx/classes/evthandler.rb +79 -4
  13. data/lib/wx/classes/genericdirctrl.rb +36 -0
  14. data/lib/wx/classes/grid.rb +8 -0
  15. data/lib/wx/classes/hboxsizer.rb +6 -0
  16. data/lib/wx/classes/icon.rb +12 -1
  17. data/lib/wx/classes/image.rb +13 -1
  18. data/lib/wx/classes/listctrl.rb +12 -0
  19. data/lib/wx/classes/point.rb +8 -0
  20. data/lib/wx/classes/rect.rb +10 -1
  21. data/lib/wx/classes/richtextctrl.rb +63 -0
  22. data/lib/wx/classes/size.rb +9 -0
  23. data/lib/wx/classes/sizer.rb +18 -3
  24. data/lib/wx/classes/standardpaths.rb +9 -0
  25. data/lib/wx/classes/texturlevent.rb +14 -2
  26. data/lib/wx/classes/toolbar.rb +4 -6
  27. data/lib/wx/classes/vboxsizer.rb +6 -0
  28. data/lib/wx/classes/window.rb +7 -0
  29. data/lib/wx/classes/xmlresource.rb +17 -0
  30. data/lib/wx/helpers.rb +16 -1
  31. data/lib/wx/keyword_ctors.rb +3 -2
  32. data/lib/wx/keyword_defs.rb +56 -5
  33. data/lib/wx/version.rb +1 -1
  34. data/lib/wxruby2.bundle +0 -0
  35. data/samples/SAMPLES-LICENSE.TXT +18 -0
  36. data/samples/aui/aui.rb +1356 -0
  37. data/samples/bigdemo/About.rbw +39 -0
  38. data/samples/bigdemo/ColorPanel.rbw +23 -0
  39. data/samples/bigdemo/GridSimple.rbw +78 -0
  40. data/samples/bigdemo/MDIDemo.rbw +57 -0
  41. data/samples/bigdemo/PopupMenu.rbw +149 -0
  42. data/samples/bigdemo/ShapedWindow.rbw +131 -0
  43. data/samples/bigdemo/Sizers.rbw +543 -0
  44. data/samples/bigdemo/bigdemo.rb +823 -0
  45. data/samples/bigdemo/demoTemplate.rbw +33 -0
  46. data/samples/bigdemo/helpfile.htb +0 -0
  47. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  48. data/samples/bigdemo/icons/Test 015.png +0 -0
  49. data/samples/bigdemo/icons/choice.bmp +0 -0
  50. data/samples/bigdemo/icons/choice.xpm +27 -0
  51. data/samples/bigdemo/icons/combo.bmp +0 -0
  52. data/samples/bigdemo/icons/combo.xpm +27 -0
  53. data/samples/bigdemo/icons/copy.xpm +25 -0
  54. data/samples/bigdemo/icons/cut.xpm +24 -0
  55. data/samples/bigdemo/icons/gauge.bmp +0 -0
  56. data/samples/bigdemo/icons/gauge.xpm +27 -0
  57. data/samples/bigdemo/icons/help.xpm +25 -0
  58. data/samples/bigdemo/icons/list.bmp +0 -0
  59. data/samples/bigdemo/icons/list.xpm +27 -0
  60. data/samples/bigdemo/icons/mondrian.ico +0 -0
  61. data/samples/bigdemo/icons/mondrian.xpm +44 -0
  62. data/samples/bigdemo/icons/new.xpm +24 -0
  63. data/samples/bigdemo/icons/ogl.ico +0 -0
  64. data/samples/bigdemo/icons/ogl.xpm +45 -0
  65. data/samples/bigdemo/icons/open.xpm +26 -0
  66. data/samples/bigdemo/icons/paste.bmp +0 -0
  67. data/samples/bigdemo/icons/paste.xpm +38 -0
  68. data/samples/bigdemo/icons/pointy.png +0 -0
  69. data/samples/bigdemo/icons/preview.xpm +26 -0
  70. data/samples/bigdemo/icons/print.xpm +26 -0
  71. data/samples/bigdemo/icons/radio.bmp +0 -0
  72. data/samples/bigdemo/icons/radio.xpm +27 -0
  73. data/samples/bigdemo/icons/robert.xpm +415 -0
  74. data/samples/bigdemo/icons/ruby.png +0 -0
  75. data/samples/bigdemo/icons/sashtest.ico +0 -0
  76. data/samples/bigdemo/icons/save.xpm +25 -0
  77. data/samples/bigdemo/icons/smiles.bmp +0 -0
  78. data/samples/bigdemo/icons/smiles.xpm +39 -0
  79. data/samples/bigdemo/icons/smiley.ico +0 -0
  80. data/samples/bigdemo/icons/smiley.xpm +42 -0
  81. data/samples/bigdemo/icons/stattext.xpm +24 -0
  82. data/samples/bigdemo/icons/test2.bmp +0 -0
  83. data/samples/bigdemo/icons/test2.png +0 -0
  84. data/samples/bigdemo/icons/test2.xpm +79 -0
  85. data/samples/bigdemo/icons/text.bmp +0 -0
  86. data/samples/bigdemo/icons/text.xpm +27 -0
  87. data/samples/bigdemo/icons/tog1.bmp +0 -0
  88. data/samples/bigdemo/icons/tog1.xpm +38 -0
  89. data/samples/bigdemo/icons/tog2.bmp +0 -0
  90. data/samples/bigdemo/icons/tog2.xpm +38 -0
  91. data/samples/bigdemo/icons/wxwin.ico +0 -0
  92. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  93. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
  94. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  95. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  96. data/samples/bigdemo/run.rb +90 -0
  97. data/samples/bigdemo/tips.txt +7 -0
  98. data/samples/bigdemo/utils.rb +12 -0
  99. data/samples/bigdemo/wxArtProvider.rbw +281 -0
  100. data/samples/bigdemo/wxBitmapButton.rbw +65 -0
  101. data/samples/bigdemo/wxButton.rbw +64 -0
  102. data/samples/bigdemo/wxCalendarCtrl.rbw +60 -0
  103. data/samples/bigdemo/wxCheckBox.rbw +50 -0
  104. data/samples/bigdemo/wxCheckListBox.rbw +65 -0
  105. data/samples/bigdemo/wxChoice.rbw +47 -0
  106. data/samples/bigdemo/wxChoicebook.rbw +78 -0
  107. data/samples/bigdemo/wxColourDialog.rbw +31 -0
  108. data/samples/bigdemo/wxComboBox.rbw +77 -0
  109. data/samples/bigdemo/wxCursor.rbw +136 -0
  110. data/samples/bigdemo/wxDialog.rbw +74 -0
  111. data/samples/bigdemo/wxDirDialog.rbw +29 -0
  112. data/samples/bigdemo/wxDragImage.rbw +70 -0
  113. data/samples/bigdemo/wxFileDialog.rbw +37 -0
  114. data/samples/bigdemo/wxFileDialog_Save.rbw +35 -0
  115. data/samples/bigdemo/wxFindReplaceDialog.rbw +82 -0
  116. data/samples/bigdemo/wxFontDialog.rbw +173 -0
  117. data/samples/bigdemo/wxFrame.rbw +53 -0
  118. data/samples/bigdemo/wxGauge.rbw +71 -0
  119. data/samples/bigdemo/wxGenericDirCtrl.rbw +74 -0
  120. data/samples/bigdemo/wxGrid.rbw +66 -0
  121. data/samples/bigdemo/wxHtmlHelpController.rbw +52 -0
  122. data/samples/bigdemo/wxListBox.rbw +140 -0
  123. data/samples/bigdemo/wxListCtrl_virtual.rbw +112 -0
  124. data/samples/bigdemo/wxMDIWindows.rbw +50 -0
  125. data/samples/bigdemo/wxMenu.rbw +236 -0
  126. data/samples/bigdemo/wxMessageDialog.rbw +27 -0
  127. data/samples/bigdemo/wxMiniFrame.rbw +70 -0
  128. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +32 -0
  129. data/samples/bigdemo/wxNotebook.rbw +136 -0
  130. data/samples/bigdemo/wxProgressDialog.rbw +43 -0
  131. data/samples/bigdemo/wxRadioBox.rbw +72 -0
  132. data/samples/bigdemo/wxRadioButton.rbw +125 -0
  133. data/samples/bigdemo/wxSashWindow.rbw +141 -0
  134. data/samples/bigdemo/wxScrolledMessageDialog.rbw +57 -0
  135. data/samples/bigdemo/wxScrolledWindow.rbw +199 -0
  136. data/samples/bigdemo/wxSingleChoiceDialog.rbw +33 -0
  137. data/samples/bigdemo/wxSlider.rbw +42 -0
  138. data/samples/bigdemo/wxSpinButton.rbw +50 -0
  139. data/samples/bigdemo/wxSpinCtrl.rbw +51 -0
  140. data/samples/bigdemo/wxSplitterWindow.rbw +63 -0
  141. data/samples/bigdemo/wxStaticBitmap.rbw +51 -0
  142. data/samples/bigdemo/wxStaticText.rbw +55 -0
  143. data/samples/bigdemo/wxStatusBar.rbw +126 -0
  144. data/samples/bigdemo/wxTextCtrl.rbw +149 -0
  145. data/samples/bigdemo/wxTextEntryDialog.rbw +31 -0
  146. data/samples/bigdemo/wxToggleButton.rbw +49 -0
  147. data/samples/bigdemo/wxToolBar.rbw +131 -0
  148. data/samples/bigdemo/wxTreeCtrl.rbw +191 -0
  149. data/samples/calendar/calendar.rb +256 -0
  150. data/samples/caret/caret.rb +282 -0
  151. data/samples/caret/mondrian.xpm +44 -0
  152. data/samples/controls/controls.rb +1136 -0
  153. data/samples/controls/get_item_sample.rb +87 -0
  154. data/samples/controls/icons/choice.xpm +27 -0
  155. data/samples/controls/icons/combo.xpm +27 -0
  156. data/samples/controls/icons/gauge.xpm +27 -0
  157. data/samples/controls/icons/list.xpm +27 -0
  158. data/samples/controls/icons/radio.xpm +27 -0
  159. data/samples/controls/icons/stattext.xpm +24 -0
  160. data/samples/controls/icons/text.xpm +27 -0
  161. data/samples/controls/mondrian.ico +0 -0
  162. data/samples/controls/mondrian.xpm +44 -0
  163. data/samples/controls/test2.bmp +0 -0
  164. data/samples/dialogs/dialogs.rb +797 -0
  165. data/samples/dialogs/tips.txt +18 -0
  166. data/samples/dragdrop/dragdrop.rb +177 -0
  167. data/samples/drawing/graphics_drawing.rb +235 -0
  168. data/samples/drawing/images.rb +37 -0
  169. data/samples/drawing/paperclip.png +0 -0
  170. data/samples/etc/activation.rb +102 -0
  171. data/samples/etc/choice.rb +67 -0
  172. data/samples/etc/miniframe.rb +79 -0
  173. data/samples/etc/sash.rb +130 -0
  174. data/samples/etc/scrollwin.rb +110 -0
  175. data/samples/etc/system_settings.rb +252 -0
  176. data/samples/etc/threaded.rb +72 -0
  177. data/samples/etc/toolbar_sizer_additem.rb +55 -0
  178. data/samples/etc/wizard.rb +74 -0
  179. data/samples/event/event.rb +182 -0
  180. data/samples/event/update_ui_event.rb +70 -0
  181. data/samples/grid/grid.rb +198 -0
  182. data/samples/grid/gridtablebase.rb +148 -0
  183. data/samples/html/html.rb +262 -0
  184. data/samples/listbook/listbook.rb +174 -0
  185. data/samples/listbook/listbook.xrc +370 -0
  186. data/samples/mdi/mdi.rb +85 -0
  187. data/samples/media/mediactrl.rb +167 -0
  188. data/samples/minimal/minimal.rb +77 -0
  189. data/samples/minimal/mondrian.ico +0 -0
  190. data/samples/minimal/mondrian.png +0 -0
  191. data/samples/minimal/nothing.rb +16 -0
  192. data/samples/opengl/cube.rb +117 -0
  193. data/samples/printing/mondrian.ico +0 -0
  194. data/samples/printing/mondrian.xpm +44 -0
  195. data/samples/printing/printing.rb +487 -0
  196. data/samples/sockets/SocketPackets.rb +27 -0
  197. data/samples/sockets/res/message-new.png +0 -0
  198. data/samples/sockets/res/user.png +0 -0
  199. data/samples/sockets/wxClient.rb +395 -0
  200. data/samples/sockets/wxServer.rb +422 -0
  201. data/samples/sockets/wxSocketGUI.rb +97 -0
  202. data/samples/text/format-text-bold.png +0 -0
  203. data/samples/text/format-text-italic.png +0 -0
  204. data/samples/text/format-text-underline.png +0 -0
  205. data/samples/text/mondrian.ico +0 -0
  206. data/samples/text/mondrian.xpm +44 -0
  207. data/samples/text/rich_textctrl.rb +98 -0
  208. data/samples/text/scintilla.rb +169 -0
  209. data/samples/text/textctrl.rb +111 -0
  210. data/samples/text/unicode.rb +242 -0
  211. data/samples/text/utf8.txt +15 -0
  212. data/samples/treectrl/icon1.xpm +79 -0
  213. data/samples/treectrl/icon2.xpm +53 -0
  214. data/samples/treectrl/icon3.xpm +79 -0
  215. data/samples/treectrl/icon4.xpm +43 -0
  216. data/samples/treectrl/icon5.xpm +79 -0
  217. data/samples/treectrl/treectrl.rb +1166 -0
  218. data/samples/xrc/samples.xrc +46 -0
  219. data/samples/xrc/xrc_sample.rb +76 -0
  220. metadata +17 -3
@@ -0,0 +1,282 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+ require 'wx'
9
+
10
+
11
+ include Wx
12
+
13
+ # menu items
14
+ Caret_set_blink_time = 3
15
+ Caret_Move = 4
16
+
17
+ # controls start here (the numbers are, of course, arbitrary)
18
+ Caret_Text = 1000
19
+
20
+
21
+ # MyCanvas is a canvas on which you can type
22
+ class MyCanvas < ScrolledWindow
23
+ def initialize(parent)
24
+ super(parent, :style => SUNKEN_BORDER)
25
+
26
+ self.background_colour = WHITE
27
+
28
+ @font = Font.new(12, FONTFAMILY_TELETYPE,
29
+ FONTSTYLE_NORMAL, FONTWEIGHT_NORMAL)
30
+
31
+ @x_caret = @y_caret = @x_chars = @y_chars = 0
32
+ @x_margin = @y_margin = 5
33
+ @text = nil
34
+
35
+ create_caret
36
+
37
+ evt_paint :on_paint
38
+ evt_size :on_size
39
+ evt_char :on_char
40
+ end
41
+
42
+ def [](x,y)
43
+ @text[x + @x_chars * y,1]
44
+ end
45
+
46
+ def []=(x,y,z)
47
+ @text[x + @x_chars * y,1] = z
48
+ end
49
+
50
+ # caret movement
51
+ def home_pos
52
+ @x_caret = 0
53
+ end
54
+
55
+ def end_pos
56
+ @x_caret = @x_chars - 1
57
+ end
58
+
59
+ def first_line
60
+ @y_caret = 0
61
+ end
62
+
63
+ def last_line
64
+ @y_caret = @y_chars - 1
65
+ end
66
+
67
+ def prev_char
68
+ if @x_caret == 0
69
+ end_pos
70
+ prev_line
71
+ else
72
+ @x_caret -= 1
73
+ end
74
+ end
75
+
76
+ def next_char
77
+ @x_caret += 1
78
+ if @x_caret == @x_chars
79
+ home_pos
80
+ next_line
81
+ end
82
+ end
83
+
84
+ def prev_line
85
+ if @y_caret == 0
86
+ last_line
87
+ else
88
+ @y_caret -= 1
89
+ end
90
+ end
91
+
92
+ def next_line
93
+ @y_caret += 1
94
+ if @y_caret == @y_chars
95
+ first_line
96
+ end
97
+ end
98
+
99
+ def create_caret
100
+ paint do | dc |
101
+ dc.font = @font
102
+ @height_char = dc.char_height
103
+ @width_char = dc.char_width
104
+
105
+ my_caret = Caret.new(self, Size.new(@width_char, @height_char))
106
+ self.caret = my_caret
107
+
108
+ caret.move [ @x_margin, @y_margin ]
109
+ caret.show
110
+ end
111
+ end
112
+
113
+ def move_caret(x,y)
114
+ @x_caret = x
115
+ @y_caret = y
116
+
117
+ do_move_caret
118
+ end
119
+
120
+ def do_move_caret
121
+ log_status("Caret is at (%d, %d)", @x_caret, @y_caret)
122
+
123
+ caret.move_xy( @x_margin + @x_caret * @width_char,
124
+ @y_margin + @y_caret * @height_char)
125
+ end
126
+
127
+ def on_size(event)
128
+ @x_chars = (event.size.x - 2 * @x_margin) / @width_char
129
+ @y_chars = (event.size.y - 2 * @y_margin) / @height_char
130
+ if @x_chars <= 0
131
+ @x_chars = 1
132
+ end
133
+ if @y_chars <= 0
134
+ @y_chars = 1
135
+ end
136
+ if @x_caret >= @x_chars
137
+ @x_caret = @x_chars-1
138
+ end
139
+ if @y_caret >= @y_chars
140
+ @y_caret = @y_chars-1
141
+ end
142
+
143
+ @text = " " * @x_chars * @y_chars
144
+
145
+ if parent && parent.status_bar
146
+ msg = sprintf("Panel size is (%d, %d)", @x_chars, @y_chars)
147
+ parent.set_status_text(msg, 1)
148
+ parent.refresh
149
+ end
150
+ event.skip
151
+ end
152
+
153
+ def on_paint
154
+ if caret
155
+ caret.hide
156
+ end
157
+
158
+ paint do | dc |
159
+ dc.clear
160
+ dc.set_font(@font)
161
+
162
+ for y in 0 ... @y_chars
163
+ line = @text[@x_chars * y,@x_chars]
164
+ dc.draw_text( line, @x_margin, @y_margin + y * @height_char )
165
+ end
166
+ end
167
+
168
+ if caret
169
+ caret.show
170
+ end
171
+ end
172
+
173
+ def on_char(event)
174
+ case event.key_code
175
+ when K_LEFT, K_BACK
176
+ prev_char
177
+ when K_RIGHT
178
+ next_char
179
+ when K_UP
180
+ prev_line
181
+ when K_DOWN
182
+ next_line
183
+ when K_HOME
184
+ home_pos
185
+ when K_END
186
+ end_pos
187
+ when K_RETURN
188
+ home_pos
189
+ next_line
190
+ else
191
+ ch = event.key_code
192
+ if !event.alt_down and (ch >= K_SPACE) and (ch < K_DELETE)
193
+ self[@x_caret, @y_caret] = ch.chr
194
+ refresh
195
+ next_char
196
+ else
197
+ event.skip
198
+ end
199
+ end
200
+ do_move_caret
201
+ end
202
+ end
203
+
204
+ class MyFrame < Frame
205
+ def initialize(title, pos, size)
206
+ super(nil, -1, title, pos, size)
207
+ # set the frame icon
208
+ icon_file = File.join(File.dirname(__FILE__), 'mondrian.xpm')
209
+ self.icon = Icon.new(icon_file, BITMAP_TYPE_XPM)
210
+
211
+ # create a menu bar
212
+ menu_file = Menu.new
213
+
214
+ menu_file.append(Caret_set_blink_time, "&Blink time...\tCtrl-B")
215
+ menu_file.append(Caret_Move, "&Move caret\tCtrl-C")
216
+ menu_file.append_separator
217
+ menu_file.append(Wx::ID_ABOUT, "&About...\tCtrl-A", "Show about dialog")
218
+ menu_file.append_separator
219
+ menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit self program")
220
+
221
+ # now append the freshly created menu to the menu bar...
222
+ menu_bar = MenuBar.new
223
+ menu_bar.append(menu_file, "&File")
224
+
225
+ # ... and attach self menu bar to the frame
226
+ self.menu_bar = menu_bar
227
+
228
+ @canvas = MyCanvas.new(self)
229
+
230
+ # This is required to set focus so that key events are directed to
231
+ # this Window, on Linux/GTK in particular
232
+ @canvas.set_focus
233
+
234
+ # create a status bar just for fun (by default with 1 pane only)
235
+ create_status_bar(2)
236
+ self.status_text = "Welcome to Windows!"
237
+
238
+ evt_menu Wx::ID_EXIT, :on_quit
239
+ evt_menu Wx::ID_ABOUT, :on_about
240
+ evt_menu Caret_set_blink_time, :on_set_blink_time
241
+ evt_menu Caret_Move, :on_caret_move
242
+ end
243
+
244
+ def on_quit
245
+ # true is to force the frame to close
246
+ close(true)
247
+ end
248
+
249
+ def on_about
250
+ message_box("The caret Windows sample, adapted for WxRuby",
251
+ "About Caret", OK | ICON_INFORMATION, self)
252
+ end
253
+
254
+ def on_caret_move
255
+ @canvas.move_caret(10, 10)
256
+ end
257
+
258
+ def on_set_blink_time
259
+ blink_time = get_number_from_user(
260
+ "The caret blink time is the time between two blinks",
261
+ "Time in milliseconds:",
262
+ "Caret sample",
263
+ Caret::get_blink_time, 0, 10000,
264
+ self)
265
+ if blink_time != -1
266
+ Caret::set_blink_time(blink_time)
267
+ @canvas.create_caret
268
+ log_status(self,"Blink time set to %d milliseconds.", blink_time)
269
+ end
270
+ end
271
+ end
272
+
273
+ class CaretApp < App
274
+ def on_init
275
+ frame = MyFrame.new("Caret Windows sample",
276
+ Point.new(50, 50), Size.new(450, 340))
277
+ frame.show(true)
278
+ end
279
+ end
280
+
281
+ a = CaretApp.new
282
+ a.main_loop
@@ -0,0 +1,44 @@
1
+ /* XPM */
2
+ static char *mondrian_xpm[] = {
3
+ /* columns rows colors chars-per-pixel */
4
+ "32 32 6 1",
5
+ " c Black",
6
+ ". c Blue",
7
+ "X c #00bf00",
8
+ "o c Red",
9
+ "O c Yellow",
10
+ "+ c Gray100",
11
+ /* pixels */
12
+ " ",
13
+ " oooooo +++++++++++++++++++++++ ",
14
+ " oooooo +++++++++++++++++++++++ ",
15
+ " oooooo +++++++++++++++++++++++ ",
16
+ " oooooo +++++++++++++++++++++++ ",
17
+ " oooooo +++++++++++++++++++++++ ",
18
+ " oooooo +++++++++++++++++++++++ ",
19
+ " oooooo +++++++++++++++++++++++ ",
20
+ " ",
21
+ " ++++++ ++++++++++++++++++ .... ",
22
+ " ++++++ ++++++++++++++++++ .... ",
23
+ " ++++++ ++++++++++++++++++ .... ",
24
+ " ++++++ ++++++++++++++++++ .... ",
25
+ " ++++++ ++++++++++++++++++ .... ",
26
+ " ++++++ ++++++++++++++++++ ",
27
+ " ++++++ ++++++++++++++++++ ++++ ",
28
+ " ++++++ ++++++++++++++++++ ++++ ",
29
+ " ++++++ ++++++++++++++++++ ++++ ",
30
+ " ++++++ ++++++++++++++++++ ++++ ",
31
+ " ++++++ ++++++++++++++++++ ++++ ",
32
+ " ++++++ ++++++++++++++++++ ++++ ",
33
+ " ++++++ ++++++++++++++++++ ++++ ",
34
+ " ++++++ ++++++++++++++++++ ++++ ",
35
+ " ++++++ ++++++++++++++++++ ++++ ",
36
+ " ++++++ ++++ ",
37
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
38
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
39
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
40
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
41
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
42
+ " ++++++ OOOOOOOOOOOO XXXXX ++++ ",
43
+ " "
44
+ };
@@ -0,0 +1,1136 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2008 wxRuby development team
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+ require 'wx'
9
+
10
+
11
+ include Wx
12
+
13
+ CONTROLS_QUIT = ID_EXIT
14
+ CONTROLS_TEXT = 101
15
+ CONTROLS_ABOUT = ID_ABOUT
16
+ CONTROLS_CLEAR_LOG = 103
17
+ # tooltip menu
18
+ CONTROLS_SET_TOOLTIP_DELAY = 200
19
+ CONTROLS_ENABLE_TOOLTIPS = 201
20
+ # panel menu
21
+ CONTROLS_ENABLE_ALL = 202
22
+
23
+
24
+ ID_NOTEBOOK = 1000
25
+
26
+ ID_LISTBOX = 130
27
+ ID_LISTBOX_SEL_NUM = 131
28
+ ID_LISTBOX_SEL_STR = 132
29
+ ID_LISTBOX_CLEAR = 133
30
+ ID_LISTBOX_APPEND = 134
31
+ ID_LISTBOX_DELETE = 135
32
+ ID_LISTBOX_FONT = 136
33
+ ID_LISTBOX_ENABLE = 137
34
+ ID_LISTBOX_SORTED = 138
35
+
36
+ ID_CHOICE = 120
37
+ ID_CHOICE_SEL_NUM = 121
38
+ ID_CHOICE_SEL_STR = 122
39
+ ID_CHOICE_CLEAR = 123
40
+ ID_CHOICE_APPEND = 124
41
+ ID_CHOICE_DELETE = 125
42
+ ID_CHOICE_FONT = 126
43
+ ID_CHOICE_ENABLE = 127
44
+ ID_CHOICE_SORTED = 128
45
+
46
+ ID_COMBO = 140
47
+ ID_COMBO_SEL_NUM = 141
48
+ ID_COMBO_SEL_STR = 142
49
+ ID_COMBO_CLEAR = 143
50
+ ID_COMBO_APPEND = 144
51
+ ID_COMBO_DELETE = 145
52
+ ID_COMBO_FONT = 146
53
+ ID_COMBO_ENABLE = 147
54
+
55
+ ID_RADIOBOX = 160
56
+ ID_RADIOBOX_SEL_NUM = 161
57
+ ID_RADIOBOX_SEL_STR = 162
58
+ ID_RADIOBOX_FONT = 163
59
+ ID_RADIOBOX_ENABLE = 164
60
+
61
+ ID_RADIOBUTTON_1 = 166
62
+ ID_RADIOBUTTON_2 = 167
63
+
64
+ ID_SET_FONT = 170
65
+
66
+ ID_GAUGE = 180
67
+ ID_SLIDER = 181
68
+
69
+ ID_SPIN = 182
70
+ ID_BTNPROGRESS = 183
71
+ ID_BUTTON_LABEL = 184
72
+ ID_SPINCTRL = 185
73
+
74
+ ID_BUTTON_TEST1 = 190
75
+ ID_BUTTON_TEST2 = 191
76
+ ID_BITMAP_BTN = 192
77
+
78
+ ID_CHANGE_COLOUR = 200
79
+
80
+ ID_SIZER_CHECK1 = 201
81
+ ID_SIZER_CHECK2 = 202
82
+ ID_SIZER_CHECK3 = 203
83
+ ID_SIZER_CHECK4 = 204
84
+ ID_SIZER_CHECK14 = 205
85
+ ID_SIZER_CHECKBIG = 206
86
+
87
+ Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max = (0..6).to_a
88
+
89
+
90
+ # a button which intercepts double clicks (for testing...)
91
+ class MyButton < Button
92
+ def initialize(parent,id,label = EmptyString,pos = DEFAULT_POSITION,size = DEFAULT_SIZE)
93
+ super(parent,id,label,pos,size)
94
+
95
+ evt_left_dclick {|event| onDClick(event)}
96
+ end
97
+
98
+ def onDClick(event)
99
+ log_message("MyButton::OnDClick")
100
+ event.skip()
101
+ end
102
+
103
+ end
104
+
105
+ # a combo which intercepts chars (to test Windows behaviour)
106
+ class MyComboBox < ComboBox
107
+ def initialize(parent,id,value = EmptyString,
108
+ pos = DEFAULT_POSITION,
109
+ size = DEFAULT_SIZE,
110
+ choices = [],
111
+ style = 0)
112
+ super(parent, id, value, pos, size, choices)#, style)
113
+
114
+ evt_char {|event| onChar(event)}
115
+ evt_key_down {|event| onKeyDown(event)}
116
+ evt_key_up {|event| onKeyUp(event)}
117
+
118
+ evt_set_focus {|event| onFocusGot(event)}
119
+ end
120
+
121
+ def onChar(event)
122
+ log_message("MyComboBox::OnChar")
123
+ if event.key_code() == ?w
124
+ log_message("MyComboBox: 'w' will be ignored.")
125
+ else
126
+ event.skip()
127
+ end
128
+ end
129
+
130
+ def onKeyDown(event)
131
+ log_message("MyComboBox::OnKeyDown")
132
+ if event.key_code() == ?w
133
+ log_message("MyComboBox: 'w' will be ignored.")
134
+ else
135
+ event.skip()
136
+ end
137
+ end
138
+
139
+ def onKeyUp(event)
140
+ #log_message("MyComboBox::OnKeyUp")
141
+ event.skip()
142
+ end
143
+
144
+ def onFocusGot(event)
145
+ #log_message("MyComboBox::OnFocusGot")
146
+ event.skip()
147
+ end
148
+
149
+ end
150
+
151
+ # a radiobox which handles focus set/kill (for testing)
152
+ class MyRadioBox < RadioBox
153
+ def initialize(parent,
154
+ id,title = EmptyString,
155
+ pos = DEFAULT_POSITION,
156
+ size = DEFAULT_SIZE,
157
+ choices = [],
158
+ majorDim = 1,
159
+ style = RA_HORIZONTAL)
160
+ super(parent, id, title, pos, size, choices, majorDim,style)
161
+ set_foreground_colour(RED)
162
+
163
+ evt_set_focus {|event| onFocusGot(event)}
164
+ evt_kill_focus {|event| onFocusLost(event)}
165
+
166
+ end
167
+
168
+ def onFocusGot(event)
169
+ log_message("MyRadioBox::OnFocusGot")
170
+ event.skip()
171
+ end
172
+
173
+ def onFocusLost(event)
174
+ log_message("MyRadioBox::OnFocusLost")
175
+ event.skip()
176
+ end
177
+
178
+ end
179
+
180
+
181
+ class MyPanel < Panel
182
+
183
+ # delete Log::set_active_target(@m_logTargetOld)
184
+ # delete @m_notebook.GetImageList()
185
+ attr_reader :m_text,:m_logTargetOld
186
+
187
+ def initialize(frame,x,y,w,h)
188
+ super( frame, -1, Point.new(x, y), Size.new(w, h) )
189
+
190
+ @s_colOld = NULL_COLOUR
191
+
192
+ @m_text = TextCtrl.new(self, -1, "This is the log window.\n",
193
+ Point.new(0, 250), Size.new(100, 50), TE_MULTILINE)
194
+ @m_text.set_background_colour(Colour.new("wheat"))
195
+
196
+ #@m_logTargetOld = Log::set_active_target(LogTextCtrl.new(@m_text))
197
+
198
+ @m_notebook = Wx::Notebook.new(self, ID_NOTEBOOK)
199
+
200
+ choices = [
201
+ "This",
202
+ "is one of my",
203
+ "really",
204
+ "wonderful",
205
+ "examples."
206
+ ]
207
+
208
+ # fill the image list
209
+
210
+ imagelist = ImageList.new(16, 16)
211
+
212
+ imagelist.add( Bitmap.new( local_icon_file("list.xpm"),
213
+ Wx::BITMAP_TYPE_XPM))
214
+ imagelist.add( Bitmap.new( local_icon_file("choice.xpm"),
215
+ Wx::BITMAP_TYPE_XPM))
216
+ imagelist.add( Bitmap.new( local_icon_file("combo.xpm"),
217
+ Wx::BITMAP_TYPE_XPM))
218
+ imagelist.add( Bitmap.new( local_icon_file("text.xpm"),
219
+ Wx::BITMAP_TYPE_XPM))
220
+ imagelist.add( Bitmap.new( local_icon_file("radio.xpm"),
221
+ Wx::BITMAP_TYPE_XPM))
222
+ imagelist.add( Bitmap.new( local_icon_file("gauge.xpm"),
223
+ Wx::BITMAP_TYPE_XPM))
224
+
225
+ @m_notebook.set_image_list(imagelist)
226
+
227
+ panel = Panel.new(@m_notebook)
228
+ @m_listbox = ListBox.new( panel, ID_LISTBOX,
229
+ Point.new(10,10), Size.new(120,70),
230
+ choices, LB_ALWAYS_SB )
231
+
232
+ @m_listboxSorted = ListBox.new( panel, ID_LISTBOX_SORTED,
233
+ Point.new(10,90), Size.new(120,70),
234
+ choices, LB_SORT )
235
+
236
+
237
+ @m_listbox.set_cursor(CROSS_CURSOR)
238
+
239
+ @m_listbox.set_tool_tip( "This is a list box" )
240
+
241
+
242
+ @m_lbSelectNum = Button.new( panel, ID_LISTBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
243
+ @m_lbSelectThis = Button.new( panel, ID_LISTBOX_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
244
+ Button.new( panel, ID_LISTBOX_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
245
+ MyButton.new( panel, ID_LISTBOX_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
246
+ Button.new( panel, ID_LISTBOX_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
247
+ button = MyButton.new( panel, ID_LISTBOX_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
248
+
249
+ button.set_default()
250
+
251
+ button.set_foreground_colour(BLUE)
252
+
253
+ button.set_tool_tip( "Press here to set italic font" )
254
+
255
+ @m_checkbox = CheckBox.new( panel, ID_LISTBOX_ENABLE, "&Disable", Point.new(20,170) )
256
+ @m_checkbox.set_value(FALSE)
257
+ @m_checkbox.set_tool_tip( "Click here to disable the listbox" )
258
+ @m_toggle_color = CheckBox.new( panel, ID_CHANGE_COLOUR, "&Toggle colour",
259
+ Point.new(110,170) )
260
+ panel.set_cursor(Cursor.new(CURSOR_HAND))
261
+ @m_notebook.add_page(panel, "ListBox", TRUE, Image_List)
262
+
263
+ panel = Panel.new(@m_notebook)
264
+ @m_choice = Choice.new( panel, ID_CHOICE, Point.new(10,10), Size.new(120,-1), choices )
265
+ @m_choiceSorted = Choice.new( panel, ID_CHOICE_SORTED, Point.new(10,70), Size.new(120,-1),
266
+ choices, CB_SORT )
267
+
268
+ @m_choice.set_selection(2)
269
+ @m_choice.set_background_colour(Colour.new("red"))
270
+ Button.new( panel, ID_CHOICE_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
271
+ Button.new( panel, ID_CHOICE_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
272
+ Button.new( panel, ID_CHOICE_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
273
+ Button.new( panel, ID_CHOICE_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
274
+ Button.new( panel, ID_CHOICE_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
275
+ Button.new( panel, ID_CHOICE_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
276
+ CheckBox.new( panel, ID_CHOICE_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
277
+
278
+ @m_notebook.add_page(panel, "Choice", FALSE, Image_Choice)
279
+
280
+ panel = Panel.new(@m_notebook)
281
+ StaticBox.new( panel, -1, "&Box around combobox",
282
+ Point.new(5, 5), Size.new(150, 100))
283
+ @m_combo = MyComboBox.new( panel, ID_COMBO, "This",
284
+ Point.new(20,25), Size.new(120, -1),
285
+ choices,PROCESS_ENTER)
286
+ # CB_READONLY | PROCESS_ENTER)
287
+
288
+ @m_combo.set_tool_tip("This is a natural\ncombobox - can you believe me?")
289
+
290
+ Button.new( panel, ID_COMBO_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
291
+ Button.new( panel, ID_COMBO_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
292
+ Button.new( panel, ID_COMBO_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
293
+ Button.new( panel, ID_COMBO_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
294
+ Button.new( panel, ID_COMBO_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
295
+ Button.new( panel, ID_COMBO_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
296
+ CheckBox.new( panel, ID_COMBO_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
297
+ @m_notebook.add_page(panel, "ComboBox", FALSE, Image_Combo)
298
+
299
+ choices2 = ["First", "Second"]
300
+ # "Third",
301
+ #"Fourth", "Fifth", "Sixth",
302
+ #"Seventh", "Eighth", "Nineth", "Tenth" */
303
+
304
+ panel = Panel.new(@m_notebook)
305
+ MyRadioBox.new( panel, ID_RADIOBOX, "&That", Point.new(10,160), Size.new(-1,-1), choices2, 1, RA_SPECIFY_ROWS )
306
+ @m_radio = RadioBox.new( panel, ID_RADIOBOX, "T&his", Point.new(10,10), Size.new(-1,-1), choices, 1, RA_SPECIFY_COLS )
307
+ @m_radio.set_foreground_colour(RED)
308
+
309
+ @m_radio.set_tool_tip("Ever seen a radiobox?")
310
+
311
+ Button.new( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
312
+ Button.new( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", Point.new(180,80), Size.new(140,30) )
313
+ @m_fontButton = Button.new( panel, ID_SET_FONT, "Set &more Italic font", Point.new(340,30), Size.new(140,30) )
314
+ Button.new( panel, ID_RADIOBOX_FONT, "Set &Italic font", Point.new(340,80), Size.new(140,30) )
315
+ CheckBox.new( panel, ID_RADIOBOX_ENABLE, "&Disable", Point.new(340,130), DEFAULT_SIZE )
316
+ rb = RadioButton.new( panel, ID_RADIOBUTTON_1, "Radiobutton1", Point.new(210,170), DEFAULT_SIZE, RB_GROUP )
317
+ rb.set_value( FALSE )
318
+ RadioButton.new( panel, ID_RADIOBUTTON_2, "&Radiobutton2", Point.new(340,170), DEFAULT_SIZE )
319
+ @m_notebook.add_page(panel, "RadioBox", FALSE, Image_Radio)
320
+
321
+ panel = Panel.new(@m_notebook)
322
+ StaticBox.new( panel, -1, "&Gauge and Slider", Point.new(10,10), Size.new(222,130) )
323
+ @m_gauge = Gauge.new( panel, -1, 200, Point.new(18,50), Size.new(155, 30), GA_HORIZONTAL|NO_BORDER )
324
+ @m_gauge.set_background_colour(GREEN)
325
+ @m_gauge.set_foreground_colour(RED)
326
+ @m_gaugeVert = Gauge.new( panel, -1, 100,
327
+ Point.new(195,35), Size.new(30, 90),
328
+ GA_VERTICAL | GA_SMOOTH | NO_BORDER )
329
+ @m_slider = Slider.new( panel, ID_SLIDER, 0, 0, 200, Point.new(18,90), Size.new(155,-1),
330
+ SL_AUTOTICKS | SL_LABELS )
331
+ @m_slider.set_tick_freq(40, 0)
332
+ @m_slider.set_tool_tip("This is a sliding slider")
333
+
334
+ StaticBox.new( panel, -1, "&Explanation",
335
+ Point.new(230,10), Size.new(270,130),
336
+ ALIGN_CENTER )
337
+
338
+ StaticText.new( panel, -1,
339
+ "In order see the gauge (aka progress bar)\n"+
340
+ "control do something you have to drag the\n"+
341
+ "handle of the slider to the right.\n"+
342
+ "\n"+
343
+ "This is also supposed to demonstrate how\n"+
344
+ "to use static controls.\n",
345
+ Point.new(250,25),
346
+ Size.new(240, 110))
347
+ initialSpinValue = -5
348
+ s = initialSpinValue.to_s
349
+ @m_spintext = TextCtrl.new( panel, -1, s, Point.new(20,160), Size.new(80,-1) )
350
+ @m_spinbutton = SpinButton.new( panel, ID_SPIN, Point.new(103,160), Size.new(80, -1) )
351
+ @m_spinbutton.set_range(-40,30)
352
+ @m_spinbutton.set_value(initialSpinValue)
353
+
354
+ @m_btnProgress = Button.new( panel, ID_BTNPROGRESS, "&Show progress dialog",
355
+ Point.new(300, 160) )
356
+
357
+ @m_spinctrl = SpinCtrl.new( panel, ID_SPINCTRL, "", Point.new(200, 160), Size.new(80, -1) )
358
+ @m_spinctrl.set_range(10,30)
359
+ @m_spinctrl.set_value(15)
360
+
361
+ @m_notebook.add_page(panel, "Gauge", FALSE, Image_Gauge)
362
+
363
+ panel = Panel.new(@m_notebook)
364
+
365
+ icon = ArtProvider::get_icon(ART_INFORMATION)
366
+ StaticBitmap.new( panel, -1, icon, Point.new(10, 10) )
367
+
368
+ bitmap = Bitmap.new( 100, 100 )
369
+ bitmap.draw do | dc |
370
+ dc.clear()
371
+ dc.set_pen(GREEN_PEN)
372
+ dc.draw_ellipse(5, 5, 90, 90)
373
+ dc.draw_text("Bitmap", 30, 40)
374
+ end
375
+
376
+ BitmapButton.new(panel, ID_BITMAP_BTN, bitmap, Point.new(100, 20))
377
+
378
+ # test for masked bitmap display
379
+ bitmap = Bitmap.new( File.join(File.dirname(__FILE__), "test2.bmp"),
380
+ BITMAP_TYPE_BMP)
381
+ if bitmap.is_ok()
382
+ bitmap.set_mask(Mask.new(bitmap, BLUE))
383
+ StaticBitmap.new(panel, -1, bitmap, Point.new(300, 120))
384
+ end
385
+ # bmp1 = ArtProvider::get_bitmap(ART_INFORMATION)
386
+ # bmp2 = ArtProvider::get_bitmap(ART_WARNING)
387
+ # bmp3 = ArtProvider::get_bitmap(ART_QUESTION)
388
+ # bmpBtn = BitmapButton.new(panel, -1,
389
+ # bmp1,
390
+ # Point.new(30, 70))
391
+
392
+ # bmpBtn.set_bitmap_selected(bmp2)
393
+ # bmpBtn.set_bitmap_focus(bmp3)
394
+ ToggleButton.new(panel, ID_BUTTON_LABEL,
395
+ "&Toggle label", Point.new(250, 20))
396
+ @m_label = StaticText.new(panel, -1, "Label with some long text",
397
+ Point.new(250, 60), DEFAULT_SIZE,
398
+ ALIGN_RIGHT)
399
+ @m_label.set_foreground_colour(BLUE )
400
+
401
+ @m_notebook.add_page(panel, "BitmapXXX")
402
+
403
+ # sizer
404
+
405
+ panel = Panel.new(@m_notebook)
406
+ panel.set_auto_layout( TRUE )
407
+
408
+ sizer = BoxSizer.new( VERTICAL )
409
+
410
+ csizer =
411
+ StaticBoxSizer.new(StaticBox.new(panel, -1, "Show Buttons"),
412
+ HORIZONTAL )
413
+
414
+ check1 = CheckBox.new(panel, ID_SIZER_CHECK1, "1")
415
+ check1.set_value(TRUE)
416
+ csizer.add(check1)
417
+ check2 = CheckBox.new(panel, ID_SIZER_CHECK2, "2")
418
+ check2.set_value(TRUE)
419
+ csizer.add(check2)
420
+ check3 = CheckBox.new(panel, ID_SIZER_CHECK3, "3")
421
+ check3.set_value(TRUE)
422
+ csizer.add(check3)
423
+ check4 = CheckBox.new(panel, ID_SIZER_CHECK4, "4")
424
+ check4.set_value(TRUE)
425
+ csizer.add(check4)
426
+ check14 = CheckBox.new(panel, ID_SIZER_CHECK14, "1-4")
427
+ check14.set_value(TRUE)
428
+ csizer.add(check14)
429
+ checkBig = CheckBox.new(panel, ID_SIZER_CHECKBIG, "Big")
430
+ checkBig.set_value(TRUE)
431
+ csizer.add(checkBig)
432
+
433
+ sizer.add(csizer)
434
+
435
+ @m_hsizer = BoxSizer.new( HORIZONTAL )
436
+
437
+ @m_buttonSizer = BoxSizer.new(VERTICAL)
438
+
439
+ @m_sizerBtn1 = Button.new(panel, -1, "Test Button &1" )
440
+ @m_buttonSizer.add( @m_sizerBtn1, 0, ALL, 10 )
441
+ @m_sizerBtn2 = Button.new(panel, -1, "Test Button &2" )
442
+ @m_buttonSizer.add( @m_sizerBtn2, 0, ALL, 10 )
443
+ @m_sizerBtn3 = Button.new(panel, -1, "Test Button &3" )
444
+ @m_buttonSizer.add( @m_sizerBtn3, 0, ALL, 10 )
445
+ @m_sizerBtn4 = Button.new(panel, -1, "Test Button &4" )
446
+ @m_buttonSizer.add( @m_sizerBtn4, 0, ALL, 10 )
447
+
448
+ @m_hsizer.add(@m_buttonSizer)
449
+ @m_hsizer.add( 20,20, 1 )
450
+ @m_bigBtn = Button.new(panel, -1, "Multiline\nbutton" )
451
+ @m_hsizer.add( @m_bigBtn , 3, GROW|ALL, 10 )
452
+
453
+ sizer.add(@m_hsizer, 1, GROW)
454
+
455
+ panel.set_sizer( sizer )
456
+
457
+ @m_notebook.add_page(panel, "Sizer")
458
+
459
+ evt_size {|event| onSize(event) }
460
+ evt_notebook_page_changing(ID_NOTEBOOK) {|event| onPageChanging(event) }
461
+ evt_notebook_page_changed(ID_NOTEBOOK) {|event| onPageChanged(event) }
462
+ evt_listbox(ID_LISTBOX) {|event| onListBox(event) }
463
+ evt_listbox(ID_LISTBOX_SORTED) {|event| onListBox(event) }
464
+ evt_listbox_dclick(ID_LISTBOX) {|event| onListBoxDoubleClick(event) }
465
+ evt_button(ID_LISTBOX_SEL_NUM) {|event| onListBoxButtons(event) }
466
+ evt_button(ID_LISTBOX_SEL_STR) {|event| onListBoxButtons(event) }
467
+ evt_button(ID_LISTBOX_CLEAR) {|event| onListBoxButtons(event) }
468
+ evt_button(ID_LISTBOX_APPEND) {|event| onListBoxButtons(event) }
469
+ evt_button(ID_LISTBOX_DELETE) {|event| onListBoxButtons(event) }
470
+ evt_button(ID_LISTBOX_FONT) {|event| onListBoxButtons(event) }
471
+ evt_checkbox(ID_LISTBOX_ENABLE) {|event| onListBoxButtons(event) }
472
+ evt_choice(ID_CHOICE) {|event| onChoice(event) }
473
+ evt_choice(ID_CHOICE_SORTED) {|event| onChoice(event) }
474
+ evt_button(ID_CHOICE_SEL_NUM) {|event| onChoiceButtons(event) }
475
+ evt_button(ID_CHOICE_SEL_STR) {|event| onChoiceButtons(event) }
476
+ evt_button(ID_CHOICE_CLEAR) {|event| onChoiceButtons(event) }
477
+ evt_button(ID_CHOICE_APPEND) {|event| onChoiceButtons(event) }
478
+ evt_button(ID_CHOICE_DELETE) {|event| onChoiceButtons(event) }
479
+ evt_button(ID_CHOICE_FONT) {|event| onChoiceButtons(event) }
480
+ evt_checkbox(ID_CHOICE_ENABLE) {|event| onChoiceButtons(event) }
481
+ evt_combobox(ID_COMBO) {|event| onCombo(event) }
482
+ evt_text(ID_COMBO) {|event| onComboTextChanged(event) }
483
+ evt_text_enter(ID_COMBO) {|event| onComboTextEnter(event) }
484
+ evt_button(ID_COMBO_SEL_NUM) {|event| onComboButtons(event) }
485
+ evt_button(ID_COMBO_SEL_STR) {|event| onComboButtons(event) }
486
+ evt_button(ID_COMBO_CLEAR) {|event| onComboButtons(event) }
487
+ evt_button(ID_COMBO_APPEND) {|event| onComboButtons(event) }
488
+ evt_button(ID_COMBO_DELETE) {|event| onComboButtons(event) }
489
+ evt_button(ID_COMBO_FONT) {|event| onComboButtons(event) }
490
+ evt_checkbox(ID_COMBO_ENABLE) {|event| onComboButtons(event) }
491
+ evt_radiobox(ID_RADIOBOX) {|event| onRadio(event) }
492
+ evt_button(ID_RADIOBOX_SEL_NUM) {|event| onRadioButtons(event) }
493
+ evt_button(ID_RADIOBOX_SEL_STR) {|event| onRadioButtons(event) }
494
+ evt_button(ID_RADIOBOX_FONT) {|event| onRadioButtons(event) }
495
+ evt_checkbox(ID_RADIOBOX_ENABLE) {|event| onRadioButtons(event) }
496
+ evt_button(ID_SET_FONT) {|event| onSetFont(event) }
497
+ evt_slider(ID_SLIDER) {|event| onSliderupdate(event) }
498
+ evt_spin(ID_SPIN) {|event| onSpinupdate(event) }
499
+ evt_spin_up(ID_SPIN) {|event| onSpinUp(event) }
500
+ evt_spin_down(ID_SPIN) {|event| onSpinDown(event) }
501
+ evt_update_ui(ID_BTNPROGRESS) {|event| onupdateShowProgress(event) }
502
+ evt_button(ID_BTNPROGRESS) {|event| onShowProgress(event) }
503
+ evt_spinctrl(ID_SPINCTRL) {|event| onSpinCtrl(event) }
504
+ evt_spin_up(ID_SPINCTRL) {|event| onSpinCtrlUp(event) }
505
+ evt_spin_down(ID_SPINCTRL) {|event| onSpinCtrlDown(event) }
506
+ evt_text(ID_SPINCTRL) {|event| onSpinCtrlText(event) }
507
+ if (RUBY_PLATFORM =~ /mswin/)
508
+ evt_togglebutton(ID_BUTTON_LABEL) {|event| onupdateLabel(event) }
509
+ end
510
+ evt_checkbox(ID_CHANGE_COLOUR) {|event| onChangeColour(event) }
511
+ evt_button(ID_BUTTON_TEST1) {|event| onTestButton(event) }
512
+ evt_button(ID_BUTTON_TEST2) {|event| onTestButton(event) }
513
+ evt_button(ID_BITMAP_BTN) {|event| onBmpButton(event) }
514
+
515
+ evt_checkbox(ID_SIZER_CHECK1) {|event| onSizerCheck(event) }
516
+ evt_checkbox(ID_SIZER_CHECK2) {|event| onSizerCheck(event) }
517
+ evt_checkbox(ID_SIZER_CHECK3) {|event| onSizerCheck(event) }
518
+ evt_checkbox(ID_SIZER_CHECK4) {|event| onSizerCheck(event) }
519
+ evt_checkbox(ID_SIZER_CHECK14) {|event| onSizerCheck(event) }
520
+ evt_checkbox(ID_SIZER_CHECKBIG) {|event| onSizerCheck(event) }
521
+
522
+ end
523
+
524
+ # utility function to find an icon relative to this ruby script
525
+ def local_icon_file(icon_name)
526
+ File.join( File.dirname(__FILE__), 'icons', icon_name)
527
+ end
528
+
529
+
530
+ def onSize(event)
531
+ size = get_client_size()
532
+ x = size.get_width
533
+ y = size.get_height
534
+ if @m_notebook
535
+ @m_notebook.set_dimensions( 2, 2, x-4, y*2/3-4 )
536
+ end
537
+ if @m_text
538
+ @m_text.set_dimensions( 2, y*2/3+2, x-4, y/3-4 )
539
+ end
540
+ end
541
+
542
+ def onPageChanging(event)
543
+
544
+ selOld = event.get_old_selection()
545
+ if selOld == 2
546
+ if message_box("This demonstrates how a program may prevent the\n"+
547
+ "page change from taking place - if you select\n"+
548
+ "[No] the current page will stay the third one\n",
549
+ "Control sample",
550
+ ICON_QUESTION | YES_NO, self) != YES
551
+ event.veto()
552
+ return nil
553
+ end
554
+ end
555
+ @m_text << "Notebook selection is being changed from " << selOld \
556
+ << " to " << event.get_selection() \
557
+ << " (current page from notebook is " \
558
+ << @m_notebook.get_selection() << ")\n"
559
+ end
560
+
561
+ def onPageChanged(event)
562
+ @m_text << "Notebook selection is now " << event.get_selection() \
563
+ << " (from notebook: " << @m_notebook.get_selection() \
564
+ << ")\n"
565
+ end
566
+
567
+ def onTestButton(event)
568
+ log_message("Button %s clicked.",
569
+ event.get_id() == ID_BUTTON_TEST1 ? '1' : '2')
570
+ end
571
+
572
+ def onBmpButton(event)
573
+ log_message("Bitmap button clicked.")
574
+ end
575
+
576
+ def onChangeColour(event)
577
+ # test panel colour changing and propagation to the subcontrols
578
+ if @s_colOld.is_ok()
579
+
580
+ set_background_colour(@s_colOld)
581
+ @s_colOld = NULL_COLOUR
582
+
583
+ @m_lbSelectThis.set_foreground_colour(Colour.new("red"))
584
+ @m_lbSelectThis.set_background_colour(Colour.new("white"))
585
+ else
586
+ @s_colOld = Colour.new("red")
587
+ set_background_colour(Colour.new("white"))
588
+
589
+ @m_lbSelectThis.set_foreground_colour(Colour.new("white"))
590
+ @m_lbSelectThis.set_background_colour(Colour.new("red"))
591
+ end
592
+
593
+ @m_lbSelectThis.refresh()
594
+ refresh()
595
+ end
596
+
597
+ def onListBox(event)
598
+ # GetParent().Move(100, 100)
599
+ if event.get_int() == -1
600
+ @m_text.append_text( "ListBox has no selections anymore\n" )
601
+ return Qnil
602
+ end
603
+
604
+ listbox = (event.get_id() == ID_LISTBOX) ? @m_listbox : @m_listboxSorted
605
+
606
+ @m_text.append_text( "ListBox event selection string is: '" )
607
+ @m_text.append_text( event.get_string() )
608
+ @m_text.append_text( "'\n" )
609
+ @m_text.append_text( "ListBox control selection string is: '" )
610
+ @m_text.append_text( listbox.get_string_selection() )
611
+ @m_text.append_text( "'\n" )
612
+
613
+ # NOTE: get_client_data and set_client_data have been removed from wxRuby 0.4
614
+ # because they could cause crashes
615
+ # obj = event.get_client_data()
616
+ # @m_text.append_text( "ListBox event client data string is: '" )
617
+ # if obj
618
+ # @m_text.append_text( obj )
619
+ # else
620
+ # @m_text.append_text( "none" )
621
+ # end
622
+
623
+ # @m_text.append_text( "'\n" )
624
+ # @m_text.append_text( "ListBox control client data string is: '" )
625
+ # obj = listbox.get_client_data(listbox.get_selection())
626
+ # if obj
627
+ # @m_text.append_text( obj )
628
+ # else
629
+ # @m_text.append_text( "none" )
630
+ # end
631
+ # @m_text.append_text( "'\n" )
632
+ end
633
+
634
+ def onListBoxDoubleClick(event)
635
+ @m_text.append_text( "ListBox double click string is: " )
636
+ @m_text.append_text( event.get_string() )
637
+ @m_text.append_text( "\n" )
638
+ end
639
+
640
+ def onListBoxButtons(event)
641
+ case event.get_id()
642
+ when ID_LISTBOX_ENABLE
643
+ @m_text.append_text("Checkbox clicked.\n")
644
+ if event.get_int() != 0
645
+ @m_checkbox.set_tool_tip( "Click to enable listbox" )
646
+ @m_toggle_color.enable(false)
647
+ else
648
+ @m_checkbox.set_tool_tip( "Click to disable listbox" )
649
+ @m_toggle_color.enable(true)
650
+ end
651
+ @m_listbox.enable( event.get_int() == 0 )
652
+ @m_lbSelectThis.enable( event.get_int() == 0 )
653
+ @m_lbSelectNum.enable( event.get_int() == 0 )
654
+ @m_listboxSorted.enable( event.get_int() == 0 )
655
+ #w = Window::find_window_by_id(ID_CHANGE_COLOUR)
656
+ #if(w)
657
+ # w.enable( event.get_int() == 0 )
658
+ #else
659
+ # puts("Window ID_CHANGE_COLOR not found")
660
+ #end
661
+ when ID_LISTBOX_SEL_NUM
662
+ @m_listbox.set_selection( 2 )
663
+ @m_listboxSorted.set_selection( 2 )
664
+ @m_lbSelectThis.warp_pointer( 40, 14 )
665
+ when ID_LISTBOX_SEL_STR
666
+ @m_listbox.set_string_selection( "This" )
667
+ @m_listboxSorted.set_string_selection( "This" )
668
+ @m_lbSelectNum.warp_pointer( 40, 14 )
669
+ when ID_LISTBOX_CLEAR
670
+ @m_listbox.clear()
671
+ @m_listboxSorted.clear()
672
+ when ID_LISTBOX_APPEND
673
+ @m_listbox.append( "Hi!" )
674
+ @m_listboxSorted.append( "Hi!" )
675
+ when ID_LISTBOX_DELETE
676
+ idx = @m_listbox.get_selection()
677
+ if idx != NOT_FOUND
678
+ @m_listbox.delete( idx )
679
+ end
680
+ idx = @m_listboxSorted.get_selection()
681
+ if idx != NOT_FOUND
682
+ @m_listboxSorted.delete( idx )
683
+ end
684
+ when ID_LISTBOX_FONT
685
+ @m_listbox.set_font( ITALIC_FONT )
686
+ @m_listboxSorted.set_font( ITALIC_FONT )
687
+ @m_checkbox.set_font( ITALIC_FONT )
688
+ end
689
+ end
690
+
691
+
692
+ def onChoice(event)
693
+
694
+ choice = (event.get_id() == ID_CHOICE) ? @m_choice : @m_choiceSorted
695
+
696
+ @m_text.append_text( "Choice event selection string is: '" )
697
+ @m_text.append_text( event.get_string() )
698
+ @m_text.append_text( "'\n" )
699
+ @m_text.append_text( "Choice control selection string is: '" )
700
+ @m_text.append_text( choice.get_string_selection() )
701
+ @m_text.append_text( "'\n" )
702
+
703
+ # NOTE: get_client_data and set_client_data have been removed from wxRuby 0.4
704
+ # because they could cause crashes
705
+ # obj = event.get_client_data()
706
+ # @m_text.append_text( "Choice event client data string is: '" )
707
+
708
+ # if obj
709
+ # @m_text.append_text( obj )
710
+ # else
711
+ # @m_text.append_text( "none" )
712
+ # end
713
+
714
+ # @m_text.append_text( "'\n" )
715
+ # @m_text.append_text( "Choice control client data string is: '" )
716
+
717
+ # obj = choice.get_client_data(choice.get_selection())
718
+ # if obj
719
+ # @m_text.append_text( obj )
720
+ # else
721
+ # @m_text.append_text( "none" )
722
+ # end
723
+ # @m_text.append_text( "'\n" )
724
+ end
725
+
726
+ def onChoiceButtons(event)
727
+ case event.get_id()
728
+ when ID_CHOICE_ENABLE
729
+ @m_choice.enable( event.get_int() == 0 )
730
+ @m_choiceSorted.enable( event.get_int() == 0 )
731
+ when ID_CHOICE_SEL_NUM
732
+ @m_choice.set_selection( 2 )
733
+ @m_choiceSorted.set_selection( 2 )
734
+ when ID_CHOICE_SEL_STR
735
+ @m_choice.set_string_selection( "This" )
736
+ @m_choiceSorted.set_string_selection( "This" )
737
+ when ID_CHOICE_CLEAR
738
+ @m_choice.clear()
739
+ @m_choiceSorted.clear()
740
+ when ID_CHOICE_APPEND
741
+ @m_choice.append( "Hi!" )
742
+ @m_choiceSorted.append( "Hi!" )
743
+ when ID_CHOICE_DELETE
744
+ idx = @m_choice.get_selection()
745
+ if idx != NOT_FOUND
746
+ @m_choice.delete( idx )
747
+ end
748
+ idx = @m_choiceSorted.get_selection()
749
+ if idx != NOT_FOUND
750
+ @m_choiceSorted.delete( idx )
751
+ end
752
+ when ID_CHOICE_FONT
753
+ @m_choice.set_font( ITALIC_FONT )
754
+ @m_choiceSorted.set_font( ITALIC_FONT )
755
+ end
756
+ end
757
+
758
+ def onCombo(event)
759
+ @m_text.append_text( "ComboBox event selection string is: " )
760
+ @m_text.append_text( event.get_string() )
761
+ @m_text.append_text( "\n" )
762
+ @m_text.append_text( "ComboBox control selection string is: " )
763
+ @m_text.append_text( @m_combo.get_string_selection() )
764
+ @m_text.append_text( "\n" )
765
+ end
766
+
767
+ def onComboTextChanged(event)
768
+ str = sprintf( "Text in the combobox changed: now is '%s'.",
769
+ event.get_string())
770
+ log_message( str )
771
+ end
772
+
773
+ def onComboTextEnter(event)
774
+ log_message("Enter pressed in the combobox: value is '%s'.",
775
+ @m_combo.get_value())
776
+ end
777
+
778
+ def onComboButtons(event)
779
+ case event.get_id()
780
+ when ID_COMBO_ENABLE
781
+ @m_combo.enable( event.get_int() == 0 )
782
+ when ID_COMBO_SEL_NUM
783
+ @m_combo.set_selection( 2 )
784
+ when ID_COMBO_SEL_STR
785
+ @m_combo.set_string_selection( "This" )
786
+ when ID_COMBO_CLEAR
787
+ @m_combo.clear()
788
+ when ID_COMBO_APPEND
789
+ @m_combo.append( "Hi!" )
790
+ when ID_COMBO_DELETE
791
+ idx = @m_combo.get_selection()
792
+ @m_combo.delete( idx )
793
+ when ID_COMBO_FONT
794
+ @m_combo.set_font( ITALIC_FONT )
795
+ end
796
+ end
797
+
798
+ def onRadio(event)
799
+ @m_text.append_text( "RadioBox selection string is: " )
800
+ @m_text.append_text( event.get_string() )
801
+ @m_text.append_text( "\n" )
802
+ end
803
+
804
+ def onRadioButtons(event)
805
+ case event.get_id()
806
+ when ID_RADIOBOX_ENABLE
807
+ @m_radio.enable( event.get_int() == 0 )
808
+ when ID_RADIOBOX_SEL_NUM
809
+ @m_radio.set_selection( 2 )
810
+ when ID_RADIOBOX_SEL_STR
811
+ @m_radio.set_string_selection( "This" )
812
+ when ID_RADIOBOX_FONT
813
+ @m_radio.set_foreground_colour(GREEN)
814
+ @m_radio.set_font( ITALIC_FONT )
815
+ end
816
+ end
817
+
818
+ def onSetFont(event)
819
+ @m_fontButton.set_font( ITALIC_FONT )
820
+ @m_text.set_font( ITALIC_FONT )
821
+ end
822
+
823
+ def onupdateLabel(event)
824
+ @m_label.set_label(event.get_int() != 0 ? "Very very very very very long text." : "Shorter text.")
825
+ end
826
+
827
+ def onSliderupdate(event)
828
+ @m_gauge.set_value( @m_slider.get_value() )
829
+ @m_gaugeVert.set_value( @m_slider.get_value() / 2 )
830
+ end
831
+
832
+
833
+ def onSpinCtrlText(event)
834
+ if @m_spinctrl
835
+ s = sprintf( "Spin ctrl text changed: now %d (from event: %s)\n",
836
+ @m_spinctrl.get_value(), event.get_string() )
837
+ @m_text.append_text(s)
838
+ end
839
+ end
840
+
841
+ def onSpinCtrl(event)
842
+ if @m_spinctrl
843
+ s = sprintf( "Spin ctrl changed: now %d (from event: %d)\n",
844
+ @m_spinctrl.get_value(), event.get_int() )
845
+ @m_text.append_text(s)
846
+ end
847
+ end
848
+
849
+ def onSpinCtrlUp(event)
850
+ if @m_spinctrl
851
+ @m_text.append_text( sprintf(
852
+ "Spin up: %d (from event: %d)\n",
853
+ @m_spinctrl.get_value(), event.get_int() ) )
854
+ end
855
+ end
856
+
857
+ def onSpinCtrlDown(event)
858
+ if @m_spinctrl
859
+ @m_text.append_text( sprintf(
860
+ "Spin down: %d (from event: %d)\n",
861
+ @m_spinctrl.get_value(), event.get_int() ) )
862
+ end
863
+ end
864
+
865
+
866
+ def onSpinUp(event)
867
+ value = sprintf( "Spin control up: current = %d\n",
868
+ @m_spinbutton.get_value())
869
+
870
+ if event.get_position() > 17
871
+ value += "Preventing the spin button from going above 17.\n"
872
+ event.veto()
873
+ end
874
+
875
+ @m_text.append_text(value)
876
+ end
877
+
878
+ def onSpinDown(event)
879
+ value = sprintf( "Spin control down: current = %d\n",
880
+ @m_spinbutton.get_value())
881
+
882
+ if event.get_position() < -17
883
+ value += "Preventing the spin button from going below -17.\n"
884
+ event.veto()
885
+ end
886
+
887
+ @m_text.append_text(value)
888
+ end
889
+
890
+ def onSpinupdate(event)
891
+ value = sprintf( "%d", event.get_position() )
892
+ @m_spintext.set_value( value )
893
+
894
+ value = sprintf( "Spin control range: (%d, %d), current = %d\n",
895
+ @m_spinbutton.get_min(), @m_spinbutton.get_max(),
896
+ @m_spinbutton.get_value())
897
+
898
+ @m_text.append_text(value)
899
+ end
900
+
901
+ def onupdateShowProgress(event)
902
+ event.enable( @m_spinbutton.get_value() > 0 )
903
+ end
904
+
905
+ def onShowProgress(event)
906
+ max = @m_spinbutton.get_value()
907
+ if max <= 0
908
+ log_error("You must set positive range!")
909
+ return nil
910
+ end
911
+
912
+ dialog = ProgressDialog.new("Progress dialog example",
913
+ "An informative message",
914
+ max, # range
915
+ self, # parent
916
+ PD_CAN_ABORT |
917
+ PD_AUTO_HIDE |
918
+ PD_APP_MODAL |
919
+ PD_ELAPSED_TIME |
920
+ PD_ESTIMATED_TIME |
921
+ PD_REMAINING_TIME)
922
+
923
+ cont = TRUE
924
+ 0.upto(max) {|i|
925
+ break if !cont
926
+ sleep(1)
927
+ if i == max
928
+ cont = dialog.update(i, "That's all, folks!")
929
+ elsif i == max / 2
930
+ cont = dialog.update(i, "Only a half left (very long message)!")
931
+ else
932
+ cont = dialog.update(i)
933
+ end
934
+ }
935
+ dialog.destroy()
936
+ if !cont
937
+ @m_text << "Progress dialog aborted!\n"
938
+ else
939
+ @m_text << "Countdown from " << max << " finished.\n"
940
+ end
941
+ end
942
+
943
+ def onSizerCheck(event)
944
+ case event.get_id()
945
+ when ID_SIZER_CHECK1
946
+ @m_buttonSizer.show(@m_sizerBtn1, event.is_checked())
947
+ @m_buttonSizer.layout()
948
+ when ID_SIZER_CHECK2
949
+ @m_buttonSizer.show(@m_sizerBtn2, event.is_checked())
950
+ @m_buttonSizer.layout()
951
+ when ID_SIZER_CHECK3
952
+ @m_buttonSizer.show(@m_sizerBtn3, event.is_checked())
953
+ @m_buttonSizer.layout()
954
+ when ID_SIZER_CHECK4
955
+ @m_buttonSizer.show(@m_sizerBtn4, event.is_checked())
956
+ @m_buttonSizer.layout()
957
+ when ID_SIZER_CHECK14
958
+ @m_hsizer.show(@m_buttonSizer, event.is_checked())
959
+ @m_hsizer.layout()
960
+ when ID_SIZER_CHECKBIG
961
+ @m_hsizer.show(@m_bigBtn, event.is_checked())
962
+ @m_hsizer.layout()
963
+ end
964
+ end
965
+ end
966
+
967
+
968
+ class MyFrame < Frame
969
+ def initialize(title,x,y)
970
+ super(nil, -1, title, Point.new(x, y), Size.new(500, 430))
971
+
972
+ @s_delay = 5000
973
+ @s_enabled = TRUE
974
+ @s_enable2 = TRUE
975
+ @s_windowFocus = nil
976
+ mondrian_icon =
977
+ case Wx::PLATFORM
978
+ when "WXMSW"
979
+ Icon.new( File.join( File.dirname(__FILE__), "mondrian.ico"),
980
+ Wx::BITMAP_TYPE_ICO )
981
+ else
982
+ Icon.new( File.join( File.dirname(__FILE__), "mondrian.xpm"),
983
+ Wx::BITMAP_TYPE_XPM )
984
+ end
985
+
986
+ set_icon(mondrian_icon)
987
+
988
+ file_menu = Menu.new
989
+
990
+ file_menu.append(CONTROLS_CLEAR_LOG, "&clear log\tCtrl-L")
991
+ file_menu.append_separator()
992
+ file_menu.append(CONTROLS_ABOUT, "&About\tF1")
993
+ file_menu.append_separator()
994
+ file_menu.append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample")
995
+
996
+ menu_bar = MenuBar.new
997
+ menu_bar.append(file_menu, "&File")
998
+
999
+ tooltip_menu = Menu.new
1000
+ tooltip_menu.append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D")
1001
+ tooltip_menu.append_separator()
1002
+ tooltip_menu.append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
1003
+ "enable/disable tooltips", ITEM_CHECK)
1004
+ tooltip_menu.check(CONTROLS_ENABLE_TOOLTIPS, TRUE)
1005
+ menu_bar.append(tooltip_menu, "&Tooltips")
1006
+
1007
+ panel_menu = Menu.new
1008
+ panel_menu.append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
1009
+ "enable/disable all panel controls", ITEM_CHECK)
1010
+ menu_bar.append(panel_menu, "&Panel")
1011
+
1012
+ set_menu_bar(menu_bar)
1013
+
1014
+ create_status_bar(2)
1015
+
1016
+ @m_panel = MyPanel.new( self, 10, 10, 300, 100 )
1017
+
1018
+ set_size_hints( 500, 425 )
1019
+
1020
+ evt_menu(CONTROLS_QUIT) {|event| onQuit(event) }
1021
+ evt_menu(CONTROLS_ABOUT) {|event| onAbout(event) }
1022
+ evt_menu(CONTROLS_CLEAR_LOG) {|event| onClearLog(event) }
1023
+ evt_menu(CONTROLS_SET_TOOLTIP_DELAY) {|event| onSetTooltipDelay(event) }
1024
+ evt_menu(CONTROLS_ENABLE_TOOLTIPS) {|event| onToggleTooltips(event) }
1025
+ evt_menu(CONTROLS_ENABLE_ALL) {|event| onenableAll(event) }
1026
+
1027
+ evt_size() {|event| onSize(event) }
1028
+ evt_move() {|event| onMove(event) }
1029
+ evt_idle() {|event| onIdle(event) }
1030
+ evt_close() {|event| onClose(event) }
1031
+ end
1032
+
1033
+ def onClose(event)
1034
+ Log::set_active_target(@m_panel.m_logTargetOld)
1035
+ destroy()
1036
+ end
1037
+
1038
+ def onQuit(event)
1039
+ close(TRUE)
1040
+ end
1041
+
1042
+ def onAbout(event)
1043
+ BusyCursor.busy do
1044
+ dialog = MessageDialog.new(self, "This is a control sample", "About Controls", OK)
1045
+ dialog.show_modal()
1046
+ end
1047
+ end
1048
+
1049
+ def onClearLog(event)
1050
+ @m_panel.m_text.clear()
1051
+ end
1052
+
1053
+ def onSetTooltipDelay(event)
1054
+ delay = @s_delay.to_s
1055
+
1056
+ delay = get_text_from_user("Enter delay (in milliseconds)",
1057
+ "Set tooltip delay",
1058
+ delay,
1059
+ self)
1060
+ if !delay
1061
+ return Qnil # cancelled
1062
+ end
1063
+
1064
+ @s_delay = delay.to_i
1065
+
1066
+ ToolTip::set_delay(@s_delay)
1067
+
1068
+ log_status(self, "Tooltip delay set to %d milliseconds", @s_delay)
1069
+ end
1070
+
1071
+ def onToggleTooltips(event)
1072
+ @s_enabled = ! @s_enabled
1073
+ ToolTip::enable(@s_enabled)
1074
+ log_status(self, "Tooltips %sabled", @s_enabled ? "en" : "dis" )
1075
+ end
1076
+
1077
+ def onenableAll(event)
1078
+ @s_enable2 = ! @s_enable2
1079
+ @m_panel.enable(@s_enable2)
1080
+ end
1081
+
1082
+ def onMove(event)
1083
+ update_status_bar(event.get_position(), get_size())
1084
+ event.skip()
1085
+ end
1086
+
1087
+ def onSize(event)
1088
+ update_status_bar(get_position(), event.get_size())
1089
+ event.skip()
1090
+ end
1091
+
1092
+ def onIdle(event)
1093
+
1094
+ # track the window which has the focus in the status bar
1095
+ focus = Window::find_focus()
1096
+ if focus && (focus != @s_windowFocus)
1097
+ @s_windowFocus = focus
1098
+ msg = sprintf( "Focus: %s, HWND = %08x",
1099
+ @s_windowFocus.wx_class,
1100
+ @s_windowFocus.get_handle )
1101
+ set_status_text(msg)
1102
+ end
1103
+ end
1104
+
1105
+ def GetPanel()
1106
+ @m_panel
1107
+ end
1108
+
1109
+ def update_status_bar(pos,size)
1110
+ if get_status_bar()
1111
+ sizeAll = get_size()
1112
+ sizeCl = get_client_size()
1113
+ msg = sprintf("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)",
1114
+ pos.x, pos.y,
1115
+ size.x, size.y,
1116
+ sizeAll.x, sizeAll.y,
1117
+ sizeCl.x, sizeCl.y)
1118
+ set_status_text(msg, 1)
1119
+ end
1120
+ end
1121
+
1122
+ end
1123
+
1124
+ class MyApp < App
1125
+ def on_init()
1126
+ # parse the cmd line
1127
+ x = 50
1128
+ y = 50
1129
+ # Create the main frame window
1130
+ frame = MyFrame.new("Controls Windows App", x, y)
1131
+ frame.show(TRUE)
1132
+ end
1133
+ end
1134
+
1135
+ a = MyApp.new
1136
+ a.main_loop