wxruby 1.9.3-universal-darwin

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 (226) hide show
  1. data/LICENSE +53 -0
  2. data/README +299 -0
  3. data/lib/wx.rb +42 -0
  4. data/lib/wx/accessors.rb +52 -0
  5. data/lib/wx/classes/app.rb +45 -0
  6. data/lib/wx/classes/artprovider.rb +31 -0
  7. data/lib/wx/classes/bitmap.rb +23 -0
  8. data/lib/wx/classes/checklistbox.rb +45 -0
  9. data/lib/wx/classes/choice.rb +4 -0
  10. data/lib/wx/classes/clientdc.rb +13 -0
  11. data/lib/wx/classes/clipboard.rb +16 -0
  12. data/lib/wx/classes/colour.rb +47 -0
  13. data/lib/wx/classes/combobox.rb +4 -0
  14. data/lib/wx/classes/commandevent.rb +7 -0
  15. data/lib/wx/classes/controlwithitems.rb +10 -0
  16. data/lib/wx/classes/event.rb +5 -0
  17. data/lib/wx/classes/evthandler.rb +894 -0
  18. data/lib/wx/classes/font.rb +118 -0
  19. data/lib/wx/classes/grid.rb +129 -0
  20. data/lib/wx/classes/helpcontroller.rb +5 -0
  21. data/lib/wx/classes/htmlhelpcontroller.rb +5 -0
  22. data/lib/wx/classes/htmlwindow.rb +6 -0
  23. data/lib/wx/classes/icon.rb +14 -0
  24. data/lib/wx/classes/image.rb +14 -0
  25. data/lib/wx/classes/listbox.rb +4 -0
  26. data/lib/wx/classes/listctrl.rb +21 -0
  27. data/lib/wx/classes/locale.rb +28 -0
  28. data/lib/wx/classes/mediactrl.rb +22 -0
  29. data/lib/wx/classes/menu.rb +62 -0
  30. data/lib/wx/classes/menuitem.rb +7 -0
  31. data/lib/wx/classes/object.rb +7 -0
  32. data/lib/wx/classes/paintdc.rb +12 -0
  33. data/lib/wx/classes/point.rb +48 -0
  34. data/lib/wx/classes/previewframe.rb +13 -0
  35. data/lib/wx/classes/rect.rb +5 -0
  36. data/lib/wx/classes/size.rb +49 -0
  37. data/lib/wx/classes/sound.rb +23 -0
  38. data/lib/wx/classes/styledtextctrl.rb +92 -0
  39. data/lib/wx/classes/textctrl.rb +14 -0
  40. data/lib/wx/classes/texturlevent.rb +6 -0
  41. data/lib/wx/classes/timer.rb +69 -0
  42. data/lib/wx/classes/treectrl.rb +44 -0
  43. data/lib/wx/classes/window.rb +49 -0
  44. data/lib/wx/classes/xmlresource.rb +16 -0
  45. data/lib/wx/keyword_ctors.rb +219 -0
  46. data/lib/wx/keyword_defs.rb +485 -0
  47. data/lib/wx/version.rb +3 -0
  48. data/lib/wxruby2.bundle +0 -0
  49. data/samples/SAMPLES-LICENSE.TXT +18 -0
  50. data/samples/aui/aui.rb +1360 -0
  51. data/samples/bigdemo/About.rbw +39 -0
  52. data/samples/bigdemo/ColorPanel.rbw +25 -0
  53. data/samples/bigdemo/GridSimple.rbw +80 -0
  54. data/samples/bigdemo/MDIDemo.rbw +59 -0
  55. data/samples/bigdemo/PopupMenu.rbw +151 -0
  56. data/samples/bigdemo/ShapedWindow.rbw +135 -0
  57. data/samples/bigdemo/Sizers.rbw +545 -0
  58. data/samples/bigdemo/bigdemo.rb +826 -0
  59. data/samples/bigdemo/demoTemplate.rbw +37 -0
  60. data/samples/bigdemo/helpfile.htb +0 -0
  61. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  62. data/samples/bigdemo/icons/Test 015.png +0 -0
  63. data/samples/bigdemo/icons/choice.bmp +0 -0
  64. data/samples/bigdemo/icons/choice.xpm +27 -0
  65. data/samples/bigdemo/icons/combo.bmp +0 -0
  66. data/samples/bigdemo/icons/combo.xpm +27 -0
  67. data/samples/bigdemo/icons/copy.xpm +25 -0
  68. data/samples/bigdemo/icons/cut.xpm +24 -0
  69. data/samples/bigdemo/icons/gauge.bmp +0 -0
  70. data/samples/bigdemo/icons/gauge.xpm +27 -0
  71. data/samples/bigdemo/icons/help.xpm +25 -0
  72. data/samples/bigdemo/icons/list.bmp +0 -0
  73. data/samples/bigdemo/icons/list.xpm +27 -0
  74. data/samples/bigdemo/icons/mondrian.ico +0 -0
  75. data/samples/bigdemo/icons/mondrian.xpm +44 -0
  76. data/samples/bigdemo/icons/new.xpm +24 -0
  77. data/samples/bigdemo/icons/ogl.ico +0 -0
  78. data/samples/bigdemo/icons/ogl.xpm +45 -0
  79. data/samples/bigdemo/icons/open.xpm +26 -0
  80. data/samples/bigdemo/icons/paste.bmp +0 -0
  81. data/samples/bigdemo/icons/paste.xpm +38 -0
  82. data/samples/bigdemo/icons/pointy.png +0 -0
  83. data/samples/bigdemo/icons/preview.xpm +26 -0
  84. data/samples/bigdemo/icons/print.xpm +26 -0
  85. data/samples/bigdemo/icons/radio.bmp +0 -0
  86. data/samples/bigdemo/icons/radio.xpm +27 -0
  87. data/samples/bigdemo/icons/robert.xpm +415 -0
  88. data/samples/bigdemo/icons/ruby.png +0 -0
  89. data/samples/bigdemo/icons/sashtest.ico +0 -0
  90. data/samples/bigdemo/icons/save.xpm +25 -0
  91. data/samples/bigdemo/icons/smiles.bmp +0 -0
  92. data/samples/bigdemo/icons/smiles.xpm +39 -0
  93. data/samples/bigdemo/icons/smiley.ico +0 -0
  94. data/samples/bigdemo/icons/smiley.xpm +42 -0
  95. data/samples/bigdemo/icons/stattext.xpm +24 -0
  96. data/samples/bigdemo/icons/test2.bmp +0 -0
  97. data/samples/bigdemo/icons/test2.png +0 -0
  98. data/samples/bigdemo/icons/test2.xpm +79 -0
  99. data/samples/bigdemo/icons/text.bmp +0 -0
  100. data/samples/bigdemo/icons/text.xpm +27 -0
  101. data/samples/bigdemo/icons/tog1.bmp +0 -0
  102. data/samples/bigdemo/icons/tog1.xpm +38 -0
  103. data/samples/bigdemo/icons/tog2.bmp +0 -0
  104. data/samples/bigdemo/icons/tog2.xpm +38 -0
  105. data/samples/bigdemo/icons/wxwin.ico +0 -0
  106. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  107. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
  108. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  109. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  110. data/samples/bigdemo/run.rb +94 -0
  111. data/samples/bigdemo/tips.txt +7 -0
  112. data/samples/bigdemo/utils.rb +12 -0
  113. data/samples/bigdemo/wxArtProvider.rbw +285 -0
  114. data/samples/bigdemo/wxBitmapButton.rbw +64 -0
  115. data/samples/bigdemo/wxButton.rbw +66 -0
  116. data/samples/bigdemo/wxCalendarCtrl.rbw +72 -0
  117. data/samples/bigdemo/wxCheckBox.rbw +52 -0
  118. data/samples/bigdemo/wxCheckListBox.rbw +77 -0
  119. data/samples/bigdemo/wxChoice.rbw +49 -0
  120. data/samples/bigdemo/wxChoicebook.rbw +80 -0
  121. data/samples/bigdemo/wxColourDialog.rbw +34 -0
  122. data/samples/bigdemo/wxComboBox.rbw +79 -0
  123. data/samples/bigdemo/wxCursor.rbw +140 -0
  124. data/samples/bigdemo/wxDialog.rbw +92 -0
  125. data/samples/bigdemo/wxDirDialog.rbw +32 -0
  126. data/samples/bigdemo/wxDragImage.rbw +74 -0
  127. data/samples/bigdemo/wxFileDialog.rbw +39 -0
  128. data/samples/bigdemo/wxFileDialog_Save.rbw +38 -0
  129. data/samples/bigdemo/wxFindReplaceDialog.rbw +85 -0
  130. data/samples/bigdemo/wxFontDialog.rbw +176 -0
  131. data/samples/bigdemo/wxFrame.rbw +55 -0
  132. data/samples/bigdemo/wxGauge.rbw +73 -0
  133. data/samples/bigdemo/wxGenericDirCtrl.rbw +78 -0
  134. data/samples/bigdemo/wxGrid.rbw +68 -0
  135. data/samples/bigdemo/wxHtmlHelpController.rbw +57 -0
  136. data/samples/bigdemo/wxListBox.rbw +142 -0
  137. data/samples/bigdemo/wxListCtrl_virtual.rbw +109 -0
  138. data/samples/bigdemo/wxMDIWindows.rbw +52 -0
  139. data/samples/bigdemo/wxMenu.rbw +238 -0
  140. data/samples/bigdemo/wxMessageDialog.rbw +30 -0
  141. data/samples/bigdemo/wxMiniFrame.rbw +74 -0
  142. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +34 -0
  143. data/samples/bigdemo/wxNotebook.rbw +138 -0
  144. data/samples/bigdemo/wxProgressDialog.rbw +45 -0
  145. data/samples/bigdemo/wxRadioBox.rbw +74 -0
  146. data/samples/bigdemo/wxRadioButton.rbw +127 -0
  147. data/samples/bigdemo/wxSashWindow.rbw +145 -0
  148. data/samples/bigdemo/wxScrolledMessageDialog.rbw +59 -0
  149. data/samples/bigdemo/wxScrolledWindow.rbw +201 -0
  150. data/samples/bigdemo/wxSingleChoiceDialog.rbw +35 -0
  151. data/samples/bigdemo/wxSlider.rbw +44 -0
  152. data/samples/bigdemo/wxSpinButton.rbw +52 -0
  153. data/samples/bigdemo/wxSpinCtrl.rbw +53 -0
  154. data/samples/bigdemo/wxSplitterWindow.rbw +65 -0
  155. data/samples/bigdemo/wxStaticBitmap.rbw +53 -0
  156. data/samples/bigdemo/wxStaticText.rbw +57 -0
  157. data/samples/bigdemo/wxStatusBar.rbw +128 -0
  158. data/samples/bigdemo/wxTextCtrl.rbw +151 -0
  159. data/samples/bigdemo/wxTextEntryDialog.rbw +34 -0
  160. data/samples/bigdemo/wxToggleButton.rbw +51 -0
  161. data/samples/bigdemo/wxToolBar.rbw +133 -0
  162. data/samples/bigdemo/wxTreeCtrl.rbw +192 -0
  163. data/samples/calendar/calendar.rb +275 -0
  164. data/samples/caret/caret.rb +286 -0
  165. data/samples/caret/mondrian.xpm +44 -0
  166. data/samples/controls/controls.rb +1140 -0
  167. data/samples/controls/get_item_sample.rb +87 -0
  168. data/samples/controls/icons/choice.xpm +27 -0
  169. data/samples/controls/icons/combo.xpm +27 -0
  170. data/samples/controls/icons/gauge.xpm +27 -0
  171. data/samples/controls/icons/list.xpm +27 -0
  172. data/samples/controls/icons/radio.xpm +27 -0
  173. data/samples/controls/icons/stattext.xpm +24 -0
  174. data/samples/controls/icons/text.xpm +27 -0
  175. data/samples/controls/mondrian.ico +0 -0
  176. data/samples/controls/mondrian.xpm +44 -0
  177. data/samples/controls/test2.bmp +0 -0
  178. data/samples/dialogs/dialogs.rb +724 -0
  179. data/samples/dialogs/tips.txt +18 -0
  180. data/samples/drawing/graphics_drawing.rb +232 -0
  181. data/samples/drawing/images.rb +48 -0
  182. data/samples/drawing/paperclip.png +0 -0
  183. data/samples/etc/activation.rb +108 -0
  184. data/samples/etc/choice.rb +72 -0
  185. data/samples/etc/miniframe.rb +84 -0
  186. data/samples/etc/sash.rb +135 -0
  187. data/samples/etc/scrollwin.rb +116 -0
  188. data/samples/etc/system_settings.rb +258 -0
  189. data/samples/etc/threaded.rb +81 -0
  190. data/samples/etc/wizard.rb +79 -0
  191. data/samples/event/event.rb +184 -0
  192. data/samples/grid/grid.rb +202 -0
  193. data/samples/html/html.rb +264 -0
  194. data/samples/listbook/listbook.rb +181 -0
  195. data/samples/listbook/listbook.xrc +370 -0
  196. data/samples/mdi/mdi.rb +87 -0
  197. data/samples/media/mediactrl.rb +173 -0
  198. data/samples/minimal/minimal.rb +85 -0
  199. data/samples/minimal/mondrian.ico +0 -0
  200. data/samples/minimal/mondrian.png +0 -0
  201. data/samples/minimal/nothing.rb +21 -0
  202. data/samples/opengl/cube.rb +123 -0
  203. data/samples/printing/mondrian.ico +0 -0
  204. data/samples/printing/mondrian.xpm +44 -0
  205. data/samples/printing/printing.rb +484 -0
  206. data/samples/sockets/SocketPackets.rb +27 -0
  207. data/samples/sockets/res/message-new.png +0 -0
  208. data/samples/sockets/res/user.png +0 -0
  209. data/samples/sockets/wxClient.rb +395 -0
  210. data/samples/sockets/wxServer.rb +422 -0
  211. data/samples/sockets/wxSocketGUI.rb +97 -0
  212. data/samples/text/mondrian.ico +0 -0
  213. data/samples/text/mondrian.xpm +44 -0
  214. data/samples/text/scintilla.rb +174 -0
  215. data/samples/text/textctrl.rb +124 -0
  216. data/samples/text/unicode.rb +238 -0
  217. data/samples/text/utf8.txt +15 -0
  218. data/samples/treectrl/icon1.xpm +79 -0
  219. data/samples/treectrl/icon2.xpm +53 -0
  220. data/samples/treectrl/icon3.xpm +79 -0
  221. data/samples/treectrl/icon4.xpm +43 -0
  222. data/samples/treectrl/icon5.xpm +79 -0
  223. data/samples/treectrl/treectrl.rb +1180 -0
  224. data/samples/xrc/samples.xrc +46 -0
  225. data/samples/xrc/xrc_sample.rb +107 -0
  226. metadata +296 -0
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+
16
+ require 'net/http'
17
+ require 'uri'
18
+
19
+ class MyHtmlWindow < Wx::HtmlWindow
20
+ attr_reader :html_src
21
+ def load_page_from_uri(uri)
22
+ case uri
23
+ when URI::HTTP
24
+ Wx::BusyCursor.busy do
25
+ begin
26
+ res = Net::HTTP.start(uri.host, uri.port) do | http |
27
+ http.get(uri.path)
28
+ end
29
+ @loaded_uri = uri
30
+ set_page(res.body)
31
+ rescue => err
32
+ msg = "Could not load page:\n#{err}"
33
+ Wx::MessageDialog.new(nil, msg, 'Error loading page',
34
+ Wx::OK|Wx::ICON_ERROR).show_modal
35
+ return ''
36
+ end
37
+ end
38
+ return @loaded_uri
39
+ when URI::Generic
40
+ if @loaded_uri and @loaded_uri.kind_of?(URI::HTTP)
41
+ return load_page_from_uri( @loaded_uri.merge(uri) )
42
+ elsif @loaded_uri # current viewing a file
43
+ if uri.to_s =~ /^\//
44
+ return load_file(uri.path)
45
+ elsif not uri.path.empty?
46
+ local_file = File.join( File.dirname(@loaded_uri.path), uri.path)
47
+ return load_file( local_file )
48
+ end
49
+ end
50
+ end
51
+
52
+ dlg = Wx::MessageDialog.new(nil, "Can't load link",
53
+ "Unable to load the link #{uri}",
54
+ Wx::ICON_ERROR)
55
+ dlg.show_modal
56
+ end
57
+
58
+ def load_file(file)
59
+ @loaded_uri = URI.parse("file:////" + file)
60
+ super file
61
+ @loaded_uri
62
+ end
63
+
64
+ def set_page(html)
65
+ super html
66
+ @html_src = html
67
+ get_related_frame.addr_bar.set_value(@loaded_uri.to_s)
68
+ end
69
+
70
+ def on_link_clicked(link)
71
+ href = link.get_href
72
+ if href =~ /^#/
73
+ super(link)
74
+ end
75
+ link_uri = URI.parse(href)
76
+ @loaded_uri = load_page_from_uri(link_uri)
77
+ end
78
+
79
+ def on_cell_mouse_hover(cell, x, y)
80
+ if link = cell.get_link
81
+ related_frame.status_text = link.get_href, 1
82
+ else
83
+ related_frame.status_text = ''
84
+ end
85
+ end
86
+ end
87
+
88
+ # The frame or self-contained window for this application
89
+ class HtmlFrame < Wx::Frame
90
+ attr_reader :html_win, :addr_bar
91
+
92
+ def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE)
93
+ # A main application frame has no parent (nil)
94
+ # -1 means this frame will be supplied a default id
95
+ super(nil, -1, title, pos, size, style)
96
+ setup_menus
97
+ setup_panel
98
+ create_status_bar
99
+ self.status_text = "Welcome to wxRuby!"
100
+ end
101
+
102
+ def setup_panel
103
+ panel = Wx::Panel.new(self, -1)
104
+
105
+ sizer = Wx::BoxSizer.new(Wx::VERTICAL)
106
+ top_sizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
107
+
108
+ @go_butt = Wx::StaticText.new(panel, -1, 'Location:')
109
+ top_sizer.add(@go_butt, 0, Wx::ALL, 4)
110
+ @addr_bar = Wx::TextCtrl.new(panel, -1, 'HOME', Wx::DEFAULT_POSITION,
111
+ Wx::DEFAULT_SIZE, Wx::TE_READONLY)
112
+ top_sizer.add(@addr_bar, 1, Wx::ALL, 4)
113
+ sizer.add(top_sizer, 0, Wx::EXPAND|Wx::TOP|Wx::BOTTOM, 4)
114
+
115
+ @html_win = MyHtmlWindow.new(panel, -1)
116
+ @html_win.set_related_frame(self, 'HTML Window: %s')
117
+ @html_win.set_related_status_bar(2)
118
+ @html_win.set_page(DATA.read)
119
+ sizer.add(@html_win, 1, Wx::ALL|Wx::GROW, 4)
120
+ panel.set_sizer(sizer)
121
+ end
122
+
123
+ def setup_menus
124
+ menu_file = Wx::Menu.new()
125
+ menu_help = Wx::Menu.new()
126
+ # Using Wx::ID_ABOUT default id means the menu item will be placed
127
+ # in the correct platform-specific place
128
+ menu_help.append(Wx::ID_ABOUT, "&About...\tF1", "Show about dialog")
129
+ menu_file.append(Wx::ID_OPEN, "&Open File...\tCtrl-O", "Open File")
130
+ menu_file.append(Wx::ID_HIGHEST + 1, "&Open URL...\tCtrl-U", "Open URL")
131
+ menu_file.append(Wx::ID_PRINT, "&Print...\tCtrl-P", "Print")
132
+
133
+ menu_file.append(Wx::ID_PREVIEW, "&Preview...\tCtrl-Shift-P",
134
+ "Print Preview")
135
+ menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit this program")
136
+
137
+ menu_bar = Wx::MenuBar.new()
138
+ menu_bar.append(menu_file, "&File")
139
+ menu_bar.append(menu_help, "&Help")
140
+ # Assign the menus to this frame
141
+ self.menu_bar = menu_bar
142
+ # handle menu events
143
+ evt_menu Wx::ID_OPEN, :on_open_file
144
+ evt_menu Wx::ID_HIGHEST + 1, :on_open_url
145
+ evt_menu Wx::ID_PRINT, :on_print
146
+ evt_menu Wx::ID_PREVIEW, :on_preview
147
+ evt_menu Wx::ID_EXIT, :on_quit
148
+ evt_menu Wx::ID_ABOUT, :on_about
149
+ end
150
+
151
+ # end the application
152
+ def on_quit
153
+ close
154
+ end
155
+
156
+ def on_open_file
157
+ f_dlg = Wx::FileDialog.new(self, "Open an HTML file", "", "",
158
+ "HTML files (*.html;*.htm)|*.html;*.htm)",
159
+ Wx::OPEN)
160
+ if not f_dlg.show_modal == Wx::ID_OK
161
+ return
162
+ end
163
+ html_file = f_dlg.get_path
164
+ if html_file.index("\\")
165
+ html_file = html_file.split("\\").join("/")
166
+ end
167
+ @html_win.load_file(html_file)
168
+ end
169
+
170
+ def on_open_url
171
+ url = Wx::get_text_from_user('Enter URL to open', 'Enter URL')
172
+ if not url.empty?
173
+ uri = URI.parse(url)
174
+ uri.path = '/' if uri.path.empty?
175
+ @html_win.load_page_from_uri(uri)
176
+ end
177
+ end
178
+
179
+ # show an 'About' dialog
180
+ def on_about
181
+ msg = sprintf("This is the About dialog of the HTML sample.\n" \
182
+ "Welcome to wxRuby, version %s", Wx::WXRUBY_VERSION)
183
+
184
+ # create a simple message dialog with OK button
185
+ about_dlg = Wx::MessageDialog.new( self, msg, 'About WxRuby HTML',
186
+ Wx::OK|Wx::ICON_INFORMATION )
187
+ about_dlg.show_modal()
188
+ about_dlg.destroy()
189
+ end
190
+
191
+ def on_preview
192
+ print = Wx::HtmlEasyPrinting.new('Print HTML', self)
193
+ print.preview_text(@html_win.html_src)
194
+ end
195
+
196
+ def on_print
197
+ print = Wx::HtmlEasyPrinting.new('Print HTML', self)
198
+ print.print_text(@html_win.html_src)
199
+ end
200
+
201
+ # utility function to find an icon relative to this ruby script
202
+ def local_icon_file(icon_name)
203
+ File.join( File.dirname(__FILE__), icon_name)
204
+ end
205
+ end
206
+
207
+ # Wx::App is the container class for any wxruby app - only a single
208
+ # instance is required
209
+ class HtmlApp < Wx::App
210
+ def on_init
211
+ frame = HtmlFrame.new("Minimal wxRuby App",
212
+ Wx::Point.new(50, 50),
213
+ Wx::Size.new(450, 340))
214
+ set_app_name('HtmlDemo')
215
+ # required
216
+ frame.show()
217
+ end
218
+ end
219
+
220
+ # Create an instance ...
221
+ app = HtmlApp.new
222
+ # ... and run the application
223
+ app.main_loop()
224
+
225
+ __END__
226
+ <html>
227
+ <head>
228
+ <title>WxRuby HTML Demo</title>
229
+ </head>
230
+
231
+ <body bgcolor="#ffffff">
232
+ <h1>The HtmlWindow widget</h1>
233
+ <p>This is a very simple demonstration of
234
+ <strong>Wx::HtmlWindow</strong>, a control for displaying hypertext. The
235
+ control understands most HTML tags, including links, tables, images,
236
+ lists and the venerable FONT tag. It does not know about CSS or
237
+ Javascript; it is not really intended for building a general-purpose
238
+ web browser.</p>
239
+ <h2>This demo</h2>
240
+ <p>In this demo you can open local files for viewing (by choosing the
241
+ File / Open). If you have an internet connection http:// links will be
242
+ downloaded as well. Its features are otherwise limited - for example,
243
+ this example doesn't know about HTML anchor targets, because it has
244
+ over-ridden default link handling to show how to subclass and
245
+ specialise HtmlWindow in Ruby.</a>
246
+ <h2>Html Easy Printing</h2>
247
+ <p>A useful feature included with WxRuby is a simple interface for
248
+ printing HTML. You can see this in action by choosing 'Print' or
249
+ 'Preview' from the File menu.</p>
250
+ <h3>Further information</h3>
251
+ <p>Here's a table with some links</p>
252
+ <table border="1">
253
+ <tr>
254
+ <td>WxRuby online documentation</td>
255
+ <td><a href="http://wxruby.rubyforge.org/doc/">http://wxruby.rubyforge.org/doc/</a></td>
256
+ </tr>
257
+ <tr>
258
+ <td>WxRuby Wiki</td>
259
+ <td><a href="http://wxruby.rubyforge.org/wiki/wiki.pl">http://wxruby.rubyforge.org/wiki/wiki.pl</a></td>
260
+ </tr>
261
+ </table>
262
+
263
+ </body>
264
+ </html>
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env ruby
2
+ # wxRuby2 Sample Code. Copyright (c) 2004-2006 Kevin B. Smith
3
+ # Freely reusable code: see SAMPLES-LICENSE.TXT for details
4
+
5
+ begin
6
+ require 'wx'
7
+ rescue LoadError => no_wx_err
8
+ begin
9
+ require 'rubygems'
10
+ require 'wx'
11
+ rescue LoadError
12
+ raise no_wx_err
13
+ end
14
+ end
15
+
16
+ #
17
+ # Basic Frame Class. This creates the dialog window
18
+ #
19
+ class SimpleFrame < Wx::Frame
20
+
21
+ FILE_DIALOG, FILE_ABOUT, FILE_QUIT = [0,Wx::ID_ABOUT,Wx::ID_EXIT]
22
+
23
+ def initialize(parent)
24
+ # To load a layout defined in XRC into a Ruby subclass of Frame,
25
+ # first call the empty constructor. All the details of size,
26
+ # title, position and so on are loaded from the XRC by the call to
27
+ # load_frame_subclass. Using a non-empty constructor will cause
28
+ # errors on GTK.
29
+ super()
30
+ $xml.load_frame_subclass(self,nil,'ID_FRAME')
31
+
32
+ # Create a new menu
33
+ bar = Wx::MenuBar.new
34
+ menu = Wx::Menu.new
35
+ menu.append(FILE_ABOUT,"About...")
36
+ menu.append_separator
37
+ menu.append(FILE_QUIT,"Quit")
38
+ bar.append(menu,"File")
39
+
40
+ set_menu_bar(bar)
41
+
42
+ # Assign the menu events
43
+ evt_menu(FILE_ABOUT) do
44
+ Wx::message_box("wxRuby Listbook sample\nby Sean Long", "About Listbook", Wx::OK | Wx::ICON_INFORMATION, self)
45
+ end
46
+ evt_menu(FILE_QUIT) do
47
+ Wx::get_app.exit_main_loop()
48
+ end
49
+ evt_close() do
50
+ Wx::get_app.exit_main_loop()
51
+ end
52
+
53
+ # Variables not in tabs
54
+ @listbook = xrcid_to_window('ID_LISTBOOK')
55
+ @text_output = xrcid_to_window('ID_ORDER_TEXTCTRL')
56
+
57
+ # Variables for widgets in Pizza tab
58
+ @pizza_size = xrcid_to_window('ID_PIZZA_SIZE_CHOICE')
59
+ @pizza_crust = xrcid_to_window('ID_PIZZA_CRUST_CHOICE')
60
+ @pizza_sauce = xrcid_to_window('ID_PIZZA_SAUCE_CHOICE')
61
+ @pizza_cheese = xrcid_to_window('ID_PIZZA_CHEESE_CHOICE')
62
+ @pizza_toppings = []
63
+ 3.times do |i|
64
+ @pizza_toppings << xrcid_to_window("ID_PIZZA_TOPPING_#{i+1}_CHOICE")
65
+ end
66
+
67
+ # fill in toppings
68
+ toppings = ['pepperoni','sausage','italian sausage','olives',
69
+ 'mushrooms','artichoke','extra cheese','']
70
+ toppings.each do |top_name|
71
+ @pizza_toppings.each do |top_obj|
72
+ top_obj.append(top_name)
73
+ end
74
+ end
75
+
76
+ index = 0
77
+ @pizza_toppings.each do |obj|
78
+ obj.set_selection(index)
79
+ index += 1
80
+ end
81
+
82
+ # Events for pizza tab
83
+ evt_button( Wx::xrcid('ID_PIZZA_BUTTON') ) do |event|
84
+ #get selections and add to order
85
+ order_string = @text_output.get_value
86
+ if order_string != "" then order_string << "\n" end
87
+ order_string << "One #{@pizza_size.get_string_selection} pizza with:\n"
88
+ order_string << @pizza_crust.get_string_selection + " crust" + "\n"
89
+ order_string << @pizza_sauce.get_string_selection + " sauce" +"\n"
90
+ order_string << @pizza_cheese.get_string_selection + " and" + "\n"
91
+ @pizza_toppings.each { |obj| order_string << obj.get_string_selection + "\n" }
92
+
93
+ @text_output.set_value(order_string)
94
+ end
95
+
96
+
97
+ # Variables for widgets in Drink tab
98
+ @drink_size = xrcid_to_window('ID_DRINK_SIZE_CHOICE')
99
+ @drink_type = xrcid_to_window('ID_DRINK_TYPE_CHOICE')
100
+
101
+ # Events for drink tab
102
+ evt_button(Wx::xrcid('ID_DRINK_BUTTON')) do |event|
103
+ #get selections and add to order
104
+ order_string = @text_output.get_value
105
+ if order_string != "" then order_string << "\n" end
106
+
107
+ order_string << "One #{@drink_size.get_string_selection} #{@drink_type.get_string_selection }.\n"
108
+
109
+ @text_output.set_value(order_string)
110
+ end
111
+
112
+ # Variables for widgets in Ice Cream tab
113
+ @ice_cream_size = xrcid_to_window('ID_ICE_CREAM_SIZE_CHOICE')
114
+ @ice_cream_type = xrcid_to_window('ID_ICE_CREAM_TYPE_CHOICE')
115
+ @ice_cream_toppings = []
116
+ 4.times do |i|
117
+ @ice_cream_toppings <<
118
+ xrcid_to_window("ID_ICE_CREAM_TOPPING_#{i+1}_CHOICE")
119
+ end
120
+
121
+ toppings = ['','m&m\'s','chocolate chips','fudge','nuts','cherry','whip cream']
122
+ toppings.each do |top_name|
123
+ @ice_cream_toppings.each do |top_obj|
124
+ top_obj.append(top_name)
125
+ end
126
+ end
127
+ @ice_cream_toppings.each { |obj| obj.set_selection(0) }
128
+
129
+ # Events for ice cream tab
130
+ evt_button(Wx::xrcid('ID_ICE_CREAM_BUTTON')) do |event|
131
+ #get selections and add to order
132
+ order_string = @text_output.get_value
133
+ if order_string != "" then order_string << "\n" end
134
+
135
+ order_string << "One #{@ice_cream_size.get_string_selection} #{@ice_cream_type.get_string_selection} ice cream:\n"
136
+ @ice_cream_toppings.each { |obj| order_string << obj.get_string_selection + "\n" }
137
+
138
+ @text_output.set_value(order_string)
139
+ end
140
+
141
+ evt_listbook_page_changed(Wx::xrcid('ID_LISTBOOK')) do |event|
142
+ tab_number = event.get_selection
143
+ order_string = @text_output.get_value
144
+ order_string << "moved to tab = #{@listbook.get_page_text(tab_number)} \n"
145
+ @text_output.set_value(order_string)
146
+ end
147
+ end
148
+
149
+ # Converts a XRCID id - as used in wxWidget's XML format - into the
150
+ # correct ruby window
151
+ def xrcid_to_window(xrc_id)
152
+ Wx::Window.find_window_by_id(Wx::xrcid(xrc_id), self)
153
+ end
154
+
155
+ end
156
+
157
+ #
158
+ # Application class.
159
+ #
160
+ class XrcApp < Wx::App
161
+
162
+ def on_init
163
+ # Create a resource handler
164
+ $xml = Wx::XmlResource.get();
165
+ $xml.init_all_handlers();
166
+
167
+ # Load a resource file from the script's directory
168
+ xrc_file = File.join( File.dirname( __FILE__ ), 'listbook.xrc' )
169
+
170
+ $xml.load(xrc_file)
171
+
172
+
173
+ # Show the main frame.
174
+ $main = SimpleFrame.new(self)
175
+ $main.show(true)
176
+
177
+ end
178
+ end
179
+
180
+
181
+ XrcApp.new().main_loop()
@@ -0,0 +1,370 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <resource version="2.3.0.1" xmlns="http://www.wxwidgets.org/wxxrc">
3
+ <object class="wxFrame" name="ID_FRAME" subclass="MyFrame">
4
+ <style>wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX</style>
5
+ <size>400,300d</size>
6
+ <title>Pizza Palace</title>
7
+ <object class="wxPanel" name="ID_MAIN_PANEL">
8
+ <style>wxSUNKEN_BORDER|wxTAB_TRAVERSAL</style>
9
+ <object class="wxBoxSizer">
10
+ <orient>wxVERTICAL</orient>
11
+ <object class="sizeritem">
12
+ <flag>wxGROW|wxALL</flag>
13
+ <border>5</border>
14
+ <option>2</option>
15
+ <object class="wxListbook" name="ID_LISTBOOK">
16
+ <pos>200,200d</pos>
17
+ <style>wxLB_LEFT</style>
18
+ <object class="listbookpage">
19
+ <label>Pizza</label>
20
+ <object class="wxPanel" name="ID_PANEL_PIZZA">
21
+ <style>wxSUNKEN_BORDER|wxTAB_TRAVERSAL</style>
22
+ <object class="wxFlexGridSizer">
23
+ <cols>2</cols>
24
+ <rows>2</rows>
25
+ <vgap>0</vgap>
26
+ <hgap>0</hgap>
27
+ <growablecols>1</growablecols>
28
+ <growablerows>7</growablerows>
29
+ <object class="sizeritem">
30
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
31
+ <border>5</border>
32
+ <object class="wxStaticText" name="wxID_STATIC">
33
+ <label>Your pizza size:</label>
34
+ </object>
35
+ </object>
36
+ <object class="sizeritem">
37
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
38
+ <border>5</border>
39
+ <object class="wxChoice" name="ID_PIZZA_SIZE_CHOICE">
40
+ <content>
41
+ <item>small</item>
42
+ <item>medium</item>
43
+ <item>large</item>
44
+ <item>x-large</item>
45
+ </content>
46
+ <selection>1</selection>
47
+ </object>
48
+ </object>
49
+ <object class="sizeritem">
50
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
51
+ <border>5</border>
52
+ <object class="wxStaticText" name="wxID_STATIC">
53
+ <label>Your preferred crust style:</label>
54
+ </object>
55
+ </object>
56
+ <object class="sizeritem">
57
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
58
+ <border>5</border>
59
+ <object class="wxChoice" name="ID_PIZZA_CRUST_CHOICE">
60
+ <content>
61
+ <item>thin</item>
62
+ <item>thick</item>
63
+ <item>stuffed</item>
64
+ </content>
65
+ <selection>1</selection>
66
+ </object>
67
+ </object>
68
+ <object class="sizeritem">
69
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
70
+ <border>5</border>
71
+ <object class="wxStaticText" name="wxID_STATIC">
72
+ <label>Your sauce type:</label>
73
+ </object>
74
+ </object>
75
+ <object class="sizeritem">
76
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
77
+ <border>5</border>
78
+ <object class="wxChoice" name="ID_PIZZA_SAUCE_CHOICE">
79
+ <content>
80
+ <item>red mild</item>
81
+ <item>red spicy</item>
82
+ <item>pesto</item>
83
+ <item>creamy garlic</item>
84
+ </content>
85
+ <selection>0</selection>
86
+ </object>
87
+ </object>
88
+ <object class="sizeritem">
89
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
90
+ <border>5</border>
91
+ <object class="wxStaticText" name="wxID_STATIC">
92
+ <label>Cheese style:</label>
93
+ </object>
94
+ </object>
95
+ <object class="sizeritem">
96
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
97
+ <border>5</border>
98
+ <object class="wxChoice" name="ID_PIZZA_CHEESE_CHOICE">
99
+ <content>
100
+ <item>no cheese</item>
101
+ <item>normal cheese</item>
102
+ <item>lots of cheese</item>
103
+ <item>I am a mouse</item>
104
+ </content>
105
+ <selection>1</selection>
106
+ </object>
107
+ </object>
108
+ <object class="sizeritem">
109
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
110
+ <border>5</border>
111
+ <object class="wxStaticText" name="wxID_STATIC">
112
+ <label>Topping 1:</label>
113
+ </object>
114
+ </object>
115
+ <object class="sizeritem">
116
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
117
+ <border>5</border>
118
+ <object class="wxChoice" name="ID_PIZZA_TOPPING_1_CHOICE">
119
+ </object>
120
+ </object>
121
+ <object class="sizeritem">
122
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
123
+ <border>5</border>
124
+ <object class="wxStaticText" name="wxID_STATIC">
125
+ <label>Topping 2:</label>
126
+ </object>
127
+ </object>
128
+ <object class="sizeritem">
129
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
130
+ <border>5</border>
131
+ <object class="wxChoice" name="ID_PIZZA_TOPPING_2_CHOICE">
132
+ </object>
133
+ </object>
134
+ <object class="sizeritem">
135
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
136
+ <border>5</border>
137
+ <object class="wxStaticText" name="wxID_STATIC">
138
+ <label>Topping 3:</label>
139
+ </object>
140
+ </object>
141
+ <object class="sizeritem">
142
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
143
+ <border>5</border>
144
+ <object class="wxChoice" name="ID_PIZZA_TOPPING_3_CHOICE">
145
+ </object>
146
+ </object>
147
+ <object class="spacer">
148
+ <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>
149
+ <border>5</border>
150
+ <size>5,5d</size>
151
+ </object>
152
+ <object class="sizeritem">
153
+ <flag>wxALIGN_RIGHT|wxALIGN_BOTTOM|wxALL</flag>
154
+ <border>5</border>
155
+ <object class="wxButton" name="ID_PIZZA_BUTTON">
156
+ <label>Add to order</label>
157
+ </object>
158
+ </object>
159
+ </object>
160
+ </object>
161
+ </object>
162
+ <object class="listbookpage">
163
+ <label>Drink</label>
164
+ <object class="wxPanel" name="ID_PANEL_DRINK">
165
+ <style>wxSUNKEN_BORDER|wxTAB_TRAVERSAL</style>
166
+ <object class="wxFlexGridSizer">
167
+ <cols>2</cols>
168
+ <rows>2</rows>
169
+ <vgap>0</vgap>
170
+ <hgap>0</hgap>
171
+ <growablecols>1</growablecols>
172
+ <growablerows>2</growablerows>
173
+ <object class="sizeritem">
174
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
175
+ <border>5</border>
176
+ <object class="wxStaticText" name="wxID_STATIC">
177
+ <label>Your drink size:</label>
178
+ </object>
179
+ </object>
180
+ <object class="sizeritem">
181
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
182
+ <border>5</border>
183
+ <object class="wxChoice" name="ID_DRINK_SIZE_CHOICE">
184
+ <content>
185
+ <item>small</item>
186
+ <item>medium</item>
187
+ <item>large</item>
188
+ <item>gut buster</item>
189
+ </content>
190
+ <selection>1</selection>
191
+ </object>
192
+ </object>
193
+ <object class="sizeritem">
194
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
195
+ <border>5</border>
196
+ <object class="wxStaticText" name="wxID_STATIC">
197
+ <label>Your preferred drink:</label>
198
+ </object>
199
+ </object>
200
+ <object class="sizeritem">
201
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
202
+ <border>5</border>
203
+ <object class="wxChoice" name="ID_DRINK_TYPE_CHOICE">
204
+ <content>
205
+ <item>soda</item>
206
+ <item>tea</item>
207
+ <item>lemonade</item>
208
+ <item>coffee</item>
209
+ <item>water</item>
210
+ </content>
211
+ <selection>0</selection>
212
+ </object>
213
+ </object>
214
+ <object class="spacer">
215
+ <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>
216
+ <border>5</border>
217
+ <size>5,5d</size>
218
+ </object>
219
+ <object class="sizeritem">
220
+ <flag>wxALIGN_RIGHT|wxALIGN_BOTTOM|wxALL</flag>
221
+ <border>5</border>
222
+ <object class="wxButton" name="ID_DRINK_BUTTON">
223
+ <label>Add to order</label>
224
+ </object>
225
+ </object>
226
+ </object>
227
+ </object>
228
+ </object>
229
+ <object class="listbookpage">
230
+ <label>Ice Cream</label>
231
+ <object class="wxPanel" name="ID_PANEL_ICE_CREAM">
232
+ <pos>200,200d</pos>
233
+ <style>wxSUNKEN_BORDER|wxTAB_TRAVERSAL</style>
234
+ <object class="wxFlexGridSizer">
235
+ <cols>2</cols>
236
+ <rows>2</rows>
237
+ <vgap>0</vgap>
238
+ <hgap>0</hgap>
239
+ <growablecols>1</growablecols>
240
+ <growablerows>6</growablerows>
241
+ <object class="sizeritem">
242
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
243
+ <border>5</border>
244
+ <object class="wxStaticText" name="wxID_STATIC">
245
+ <label>Your ice cream size:</label>
246
+ </object>
247
+ </object>
248
+ <object class="sizeritem">
249
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
250
+ <border>5</border>
251
+ <object class="wxChoice" name="ID_ICE_CREAM_SIZE_CHOICE">
252
+ <content>
253
+ <item>child</item>
254
+ <item>small</item>
255
+ <item>medium</item>
256
+ <item>large</item>
257
+ </content>
258
+ <selection>2</selection>
259
+ </object>
260
+ </object>
261
+ <object class="sizeritem">
262
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
263
+ <border>5</border>
264
+ <object class="wxStaticText" name="wxID_STATIC">
265
+ <label>Your ice cream:</label>
266
+ </object>
267
+ </object>
268
+ <object class="sizeritem">
269
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
270
+ <border>5</border>
271
+ <object class="wxChoice" name="ID_ICE_CREAM_TYPE_CHOICE">
272
+ <content>
273
+ <item>vanilla</item>
274
+ <item>chocolate</item>
275
+ <item>strawberry</item>
276
+ <item>chocolate chip</item>
277
+ <item>cookie dough</item>
278
+ <item>cherry</item>
279
+ </content>
280
+ <selection>0</selection>
281
+ </object>
282
+ </object>
283
+ <object class="sizeritem">
284
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
285
+ <border>5</border>
286
+ <object class="wxStaticText" name="wxID_STATIC">
287
+ <label>Topping 1:</label>
288
+ </object>
289
+ </object>
290
+ <object class="sizeritem">
291
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
292
+ <border>5</border>
293
+ <object class="wxChoice" name="ID_ICE_CREAM_TOPPING_1_CHOICE">
294
+ </object>
295
+ </object>
296
+ <object class="sizeritem">
297
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
298
+ <border>5</border>
299
+ <object class="wxStaticText" name="wxID_STATIC">
300
+ <label>Topping 2:</label>
301
+ </object>
302
+ </object>
303
+ <object class="sizeritem">
304
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
305
+ <border>5</border>
306
+ <object class="wxChoice" name="ID_ICE_CREAM_TOPPING_2_CHOICE">
307
+ </object>
308
+ </object>
309
+ <object class="sizeritem">
310
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
311
+ <border>5</border>
312
+ <object class="wxStaticText" name="wxID_STATIC">
313
+ <label>Topping 3:</label>
314
+ </object>
315
+ </object>
316
+ <object class="sizeritem">
317
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
318
+ <border>5</border>
319
+ <object class="wxChoice" name="ID_ICE_CREAM_TOPPING_3_CHOICE">
320
+ </object>
321
+ </object>
322
+ <object class="sizeritem">
323
+ <flag>wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxALL|wxADJUST_MINSIZE</flag>
324
+ <border>5</border>
325
+ <object class="wxStaticText" name="wxID_STATIC">
326
+ <label>Topping 4:</label>
327
+ </object>
328
+ </object>
329
+ <object class="sizeritem">
330
+ <flag>wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxALL</flag>
331
+ <border>5</border>
332
+ <object class="wxChoice" name="ID_ICE_CREAM_TOPPING_4_CHOICE">
333
+ </object>
334
+ </object>
335
+ <object class="spacer">
336
+ <flag>wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL</flag>
337
+ <border>5</border>
338
+ <size>5,5d</size>
339
+ </object>
340
+ <object class="sizeritem">
341
+ <flag>wxALIGN_RIGHT|wxALIGN_BOTTOM|wxALL</flag>
342
+ <border>5</border>
343
+ <object class="wxButton" name="ID_ICE_CREAM_BUTTON">
344
+ <label>Add to order</label>
345
+ </object>
346
+ </object>
347
+ </object>
348
+ </object>
349
+ </object>
350
+ </object>
351
+ </object>
352
+ <object class="sizeritem">
353
+ <flag>wxALIGN_LEFT|wxALL|wxADJUST_MINSIZE</flag>
354
+ <border>5</border>
355
+ <object class="wxStaticText" name="wxID_STATIC">
356
+ <label>Order:</label>
357
+ </object>
358
+ </object>
359
+ <object class="sizeritem">
360
+ <flag>wxGROW|wxALL</flag>
361
+ <border>5</border>
362
+ <option>1</option>
363
+ <object class="wxTextCtrl" name="ID_ORDER_TEXTCTRL">
364
+ <style>wxTE_MULTILINE</style>
365
+ </object>
366
+ </object>
367
+ </object>
368
+ </object>
369
+ </object>
370
+ </resource>