wxruby3 0.9.2 → 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (379) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +35 -29
  3. data/README.md +24 -15
  4. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  5. data/ext/wxruby3/include/wxruby-Config.h +23 -5
  6. data/ext/wxruby3/include/wxruby-Persistence.h +79 -0
  7. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  8. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  9. data/ext/wxruby3/swig/custom/director.swg +8 -0
  10. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  11. data/ext/wxruby3/swig/memory_management.i +6 -0
  12. data/lib/wx/core/bitmap_combobox.rb +17 -21
  13. data/lib/wx/core/book_ctrl_base.rb +16 -0
  14. data/lib/wx/core/combobox.rb +13 -3
  15. data/lib/wx/core/config.rb +454 -83
  16. data/lib/wx/core/controlwithitems.rb +40 -130
  17. data/lib/wx/core/enum.rb +17 -1
  18. data/lib/wx/core/event.rb +6 -1
  19. data/lib/wx/core/evthandler.rb +8 -2
  20. data/lib/wx/core/generic_validator.rb +312 -0
  21. data/lib/wx/core/listbox.rb +2 -2
  22. data/lib/wx/core/log.rb +1 -1
  23. data/lib/wx/core/notebook.rb +10 -8
  24. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  25. data/lib/wx/core/peristent_object.rb +15 -0
  26. data/lib/wx/core/persistence_manager.rb +39 -0
  27. data/lib/wx/core/persistent_window.rb +16 -0
  28. data/lib/wx/core/size.rb +4 -0
  29. data/lib/wx/core/sizer.rb +1 -2
  30. data/lib/wx/core/standard_paths.rb +22 -0
  31. data/lib/wx/core/text_entry.rb +4 -1
  32. data/lib/wx/core/top_level_window.rb +16 -0
  33. data/lib/wx/core/treebook.rb +18 -0
  34. data/lib/wx/core/validator.rb +70 -5
  35. data/lib/wx/core/window.rb +3 -7
  36. data/lib/wx/core.rb +4 -0
  37. data/lib/wx/doc/art_locator.rb +1 -0
  38. data/lib/wx/doc/book_ctrl_base.rb +19 -0
  39. data/lib/wx/doc/comboctrl.rb +18 -0
  40. data/lib/wx/doc/config.rb +101 -41
  41. data/lib/wx/doc/controlwithitems.rb +16 -0
  42. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  43. data/lib/wx/doc/editable_listbox.rb +44 -0
  44. data/lib/wx/doc/enum.rb +15 -0
  45. data/lib/wx/doc/event.rb +12 -0
  46. data/lib/wx/doc/extra/12_client_data.md +89 -0
  47. data/lib/wx/doc/extra/13_validators.md +139 -0
  48. data/lib/wx/doc/extra/14_config.md +101 -0
  49. data/lib/wx/doc/extra/15_persistence.md +148 -0
  50. data/lib/wx/doc/gdi_common.rb +4 -0
  51. data/lib/wx/doc/generic_validator.rb +95 -0
  52. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  53. data/lib/wx/doc/num_validator.rb +387 -0
  54. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  55. data/lib/wx/doc/persistence_manager.rb +36 -0
  56. data/lib/wx/doc/persistent_object.rb +27 -0
  57. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  58. data/lib/wx/doc/static_bitmap.rb +25 -0
  59. data/lib/wx/doc/text_validator.rb +10 -0
  60. data/lib/wx/doc/top_level_window.rb +19 -0
  61. data/lib/wx/doc/treebook.rb +6 -1
  62. data/lib/wx/doc/validator.rb +113 -0
  63. data/lib/wx/doc/window.rb +30 -0
  64. data/lib/wx/html/simple_html_listbox.rb +24 -91
  65. data/lib/wx/keyword_defs.rb +34 -2
  66. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  67. data/lib/wx/version.rb +1 -1
  68. data/rakelib/build.rb +1 -1
  69. data/rakelib/lib/config/mingw.rb +12 -0
  70. data/rakelib/lib/core/include/client_data.inc +65 -0
  71. data/rakelib/lib/core/include/funcall.inc +1 -1
  72. data/rakelib/lib/core/package.rb +39 -3
  73. data/rakelib/lib/core/parameter.rb +1 -1
  74. data/rakelib/lib/core/spec.rb +10 -0
  75. data/rakelib/lib/core/spec_helper.rb +8 -2
  76. data/rakelib/lib/director/app.rb +18 -0
  77. data/rakelib/lib/director/app_traits.rb +3 -1
  78. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  79. data/rakelib/lib/director/combobox.rb +22 -0
  80. data/rakelib/lib/director/comboctrl.rb +1 -55
  81. data/rakelib/lib/director/config_base.rb +490 -19
  82. data/rakelib/lib/director/ctrl_with_items.rb +88 -21
  83. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  84. data/rakelib/lib/director/editable_listbox.rb +30 -0
  85. data/rakelib/lib/director/event.rb +102 -12
  86. data/rakelib/lib/director/event_filter.rb +1 -1
  87. data/rakelib/lib/director/event_handler.rb +3 -2
  88. data/rakelib/lib/director/event_loop.rb +1 -1
  89. data/rakelib/lib/director/file_dialog_customize_hook.rb +2 -2
  90. data/rakelib/lib/director/functions.rb +4 -2
  91. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  92. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  93. data/rakelib/lib/director/grid_cell_editor.rb +1 -3
  94. data/rakelib/lib/director/grid_cell_renderer.rb +1 -3
  95. data/rakelib/lib/director/header_ctrl.rb +9 -1
  96. data/rakelib/lib/director/html_listbox.rb +97 -22
  97. data/rakelib/lib/director/num_validator.rb +495 -0
  98. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  99. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  100. data/rakelib/lib/director/persistence_manager.rb +410 -0
  101. data/rakelib/lib/director/persistent_object.rb +70 -0
  102. data/rakelib/lib/director/persistent_window.rb +73 -0
  103. data/rakelib/lib/director/pgproperty.rb +3 -29
  104. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  105. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  106. data/rakelib/lib/director/sizer.rb +15 -4
  107. data/rakelib/lib/director/sizer_item.rb +13 -0
  108. data/rakelib/lib/director/static_bitmap.rb +32 -0
  109. data/rakelib/lib/director/text_entry.rb +5 -1
  110. data/rakelib/lib/director/text_validator.rb +124 -13
  111. data/rakelib/lib/director/toggle_button.rb +1 -0
  112. data/rakelib/lib/director/top_level_window.rb +0 -2
  113. data/rakelib/lib/director/tree_ctrl.rb +35 -0
  114. data/rakelib/lib/director/utils.rb +16 -2
  115. data/rakelib/lib/director/validator.rb +196 -21
  116. data/rakelib/lib/director/window.rb +16 -2
  117. data/rakelib/lib/extractor/function.rb +2 -1
  118. data/rakelib/lib/generate/analyzer.rb +44 -44
  119. data/rakelib/lib/generate/doc.rb +11 -5
  120. data/rakelib/lib/specs/interfaces.rb +5 -0
  121. data/rakelib/lib/swig_runner.rb +55 -9
  122. data/rakelib/lib/typemap/client_data.rb +67 -0
  123. data/rakelib/lib/typemap/common.rb +3 -3
  124. data/rakelib/lib/typemap/config.rb +8 -0
  125. data/rakelib/lib/typemap/datetime.rb +1 -1
  126. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  127. data/samples/aui/aui.rb +1237 -1233
  128. data/samples/calendar/calendar.rb +293 -289
  129. data/samples/controls/get_item_sample.rb +83 -79
  130. data/samples/controls/htlbox.rb +331 -327
  131. data/samples/dialogs/dialogs.rb +682 -694
  132. data/samples/dialogs/wizard.rb +52 -55
  133. data/samples/dragdrop/dragdrop.rb +146 -142
  134. data/samples/drawing/bitmap.rb +29 -26
  135. data/samples/drawing/bitmap_image.rb +84 -80
  136. data/samples/drawing/graphics_drawing.rb +209 -205
  137. data/samples/drawing/image_prt.rb +344 -340
  138. data/samples/drawing/maths_images.rb +18 -1
  139. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  140. data/samples/etc/caret.rb +306 -0
  141. data/samples/etc/miniframe.rb +65 -60
  142. data/samples/etc/sash.rb +109 -105
  143. data/samples/etc/scrollwin.rb +86 -80
  144. data/samples/etc/system_settings.rb +216 -209
  145. data/samples/event/activation.rb +72 -67
  146. data/samples/event/event.rb +160 -153
  147. data/samples/event/threaded.rb +8 -1
  148. data/samples/event/update_ui_event.rb +67 -60
  149. data/samples/grid/grid.rb +188 -181
  150. data/samples/grid/gridtablebase.rb +136 -129
  151. data/samples/html/html.rb +208 -204
  152. data/samples/mdi/mdi.rb +59 -54
  153. data/samples/minimal/minimal.rb +54 -51
  154. data/samples/minimal/nothing.rb +1 -0
  155. data/samples/printing/printing.rb +367 -377
  156. data/samples/printing/printing2.rb +203 -198
  157. data/samples/propgrid/propgrid.rb +2312 -2308
  158. data/samples/propgrid/propgrid_minimal.rb +57 -50
  159. data/samples/ribbon/ribbon.rb +780 -774
  160. data/samples/sampler/ext.rb +0 -33
  161. data/samples/sampler/sample.rb +4 -9
  162. data/samples/sampler.rb +1 -1
  163. data/samples/splash/splash.rb +118 -116
  164. data/samples/text/rich_textctrl.rb +207 -201
  165. data/samples/text/richtext.rb +1409 -1405
  166. data/samples/text/scintilla.rb +137 -128
  167. data/samples/text/textctrl.rb +89 -83
  168. data/samples/text/unicode.rb +175 -168
  169. data/samples/treectrl/treectrl.rb +1430 -1426
  170. data/samples/widgets/activityindicator.rb +95 -0
  171. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  172. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  173. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  174. data/samples/widgets/art/widgets/button.xpm +54 -0
  175. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  176. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  177. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  178. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  179. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  180. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  181. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  182. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  183. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  184. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  185. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  186. data/samples/widgets/art/widgets/header.xpm +54 -0
  187. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  188. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  189. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  190. data/samples/widgets/art/widgets/native.xpm +81 -0
  191. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  192. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  193. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  194. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  195. data/samples/widgets/art/widgets/slider.xpm +54 -0
  196. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  197. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  198. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  199. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  200. data/samples/widgets/art/widgets/text.xpm +54 -0
  201. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  202. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  203. data/samples/widgets/art/widgets/toucan.png +0 -0
  204. data/samples/widgets/bmpcombobox.rb +651 -0
  205. data/samples/widgets/button.rb +462 -0
  206. data/samples/widgets/checkbox.rb +211 -0
  207. data/samples/widgets/choice.rb +287 -0
  208. data/samples/widgets/clrpicker.rb +156 -0
  209. data/samples/widgets/combobox.rb +516 -0
  210. data/samples/widgets/datepick.rb +215 -0
  211. data/samples/widgets/dirctrl.rb +265 -0
  212. data/samples/widgets/dirpicker.rb +158 -0
  213. data/samples/widgets/editlbox.rb +122 -0
  214. data/samples/widgets/filectrl.rb +216 -0
  215. data/samples/widgets/filepicker.rb +214 -0
  216. data/samples/widgets/fontpicker.rb +135 -0
  217. data/samples/widgets/gauge.rb +311 -0
  218. data/samples/widgets/headerctrl.rb +236 -0
  219. data/samples/widgets/hyperlink.rb +203 -0
  220. data/samples/widgets/itemcontainer.rb +185 -0
  221. data/samples/widgets/listbox.rb +473 -0
  222. data/samples/widgets/notebook.rb +488 -0
  223. data/samples/widgets/odcombobox.rb +608 -0
  224. data/samples/widgets/radiobox.rb +328 -0
  225. data/samples/widgets/searchctrl.rb +159 -0
  226. data/samples/widgets/slider.rb +594 -0
  227. data/samples/widgets/spinbtn.rb +443 -0
  228. data/samples/widgets/statbmp.rb +130 -0
  229. data/samples/widgets/static.rb +436 -0
  230. data/samples/widgets/textctrl.rb +700 -0
  231. data/samples/widgets/timepick.rb +148 -0
  232. data/samples/widgets/tn_widgets.png +0 -0
  233. data/samples/widgets/toggle.rb +385 -0
  234. data/samples/widgets/widgets.rb +1229 -0
  235. data/samples/xrc/custom_xrc_sample.rb +47 -41
  236. data/samples/xrc/xrc_sample.rb +53 -47
  237. data/tests/test_config.rb +207 -42
  238. data/tests/test_event_handling.rb +52 -34
  239. data/tests/test_events.rb +7 -0
  240. data/tests/test_item_data.rb +24 -0
  241. data/tests/test_persistence.rb +142 -0
  242. data/tests/test_sizer.rb +44 -1
  243. data/tests/test_validators.rb +805 -0
  244. metadata +109 -138
  245. data/lib/wx/core/choice.rb +0 -14
  246. data/lib/wx/core/combo_ctrl.rb +0 -110
  247. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  248. data/samples/bigdemo/About.rbw +0 -39
  249. data/samples/bigdemo/ColorPanel.rbw +0 -23
  250. data/samples/bigdemo/GridSimple.rbw +0 -78
  251. data/samples/bigdemo/MDIDemo.rbw +0 -57
  252. data/samples/bigdemo/PopupMenu.rbw +0 -146
  253. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  254. data/samples/bigdemo/Sizers.rbw +0 -541
  255. data/samples/bigdemo/bigdemo.rb +0 -817
  256. data/samples/bigdemo/demoTemplate.rbw +0 -33
  257. data/samples/bigdemo/helpfile.htb +0 -0
  258. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  259. data/samples/bigdemo/icons/Test 015.png +0 -0
  260. data/samples/bigdemo/icons/choice.bmp +0 -0
  261. data/samples/bigdemo/icons/combo.bmp +0 -0
  262. data/samples/bigdemo/icons/combo.xpm +0 -27
  263. data/samples/bigdemo/icons/copy.xpm +0 -25
  264. data/samples/bigdemo/icons/cut.xpm +0 -24
  265. data/samples/bigdemo/icons/gauge.bmp +0 -0
  266. data/samples/bigdemo/icons/gauge.xpm +0 -27
  267. data/samples/bigdemo/icons/help.xpm +0 -25
  268. data/samples/bigdemo/icons/list.bmp +0 -0
  269. data/samples/bigdemo/icons/list.xpm +0 -27
  270. data/samples/bigdemo/icons/mondrian.ico +0 -0
  271. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  272. data/samples/bigdemo/icons/new.xpm +0 -24
  273. data/samples/bigdemo/icons/ogl.ico +0 -0
  274. data/samples/bigdemo/icons/ogl.xpm +0 -45
  275. data/samples/bigdemo/icons/open.xpm +0 -26
  276. data/samples/bigdemo/icons/paste.bmp +0 -0
  277. data/samples/bigdemo/icons/paste.xpm +0 -38
  278. data/samples/bigdemo/icons/pointy.png +0 -0
  279. data/samples/bigdemo/icons/preview.xpm +0 -26
  280. data/samples/bigdemo/icons/print.xpm +0 -26
  281. data/samples/bigdemo/icons/radio.bmp +0 -0
  282. data/samples/bigdemo/icons/radio.xpm +0 -27
  283. data/samples/bigdemo/icons/robert.xpm +0 -415
  284. data/samples/bigdemo/icons/sashtest.ico +0 -0
  285. data/samples/bigdemo/icons/save.xpm +0 -25
  286. data/samples/bigdemo/icons/smiles.bmp +0 -0
  287. data/samples/bigdemo/icons/smiles.xpm +0 -39
  288. data/samples/bigdemo/icons/smiley.ico +0 -0
  289. data/samples/bigdemo/icons/smiley.xpm +0 -42
  290. data/samples/bigdemo/icons/stattext.xpm +0 -24
  291. data/samples/bigdemo/icons/test2.bmp +0 -0
  292. data/samples/bigdemo/icons/test2.png +0 -0
  293. data/samples/bigdemo/icons/test2.xpm +0 -79
  294. data/samples/bigdemo/icons/text.bmp +0 -0
  295. data/samples/bigdemo/icons/text.xpm +0 -27
  296. data/samples/bigdemo/icons/tog1.bmp +0 -0
  297. data/samples/bigdemo/icons/tog1.xpm +0 -38
  298. data/samples/bigdemo/icons/tog2.bmp +0 -0
  299. data/samples/bigdemo/icons/tog2.xpm +0 -38
  300. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  301. data/samples/bigdemo/icons/wxwin.ico +0 -0
  302. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  303. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  304. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  305. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  306. data/samples/bigdemo/run.rb +0 -98
  307. data/samples/bigdemo/tips.txt +0 -7
  308. data/samples/bigdemo/utils.rb +0 -20
  309. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  310. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  311. data/samples/bigdemo/wxButton.rbw +0 -64
  312. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  313. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  314. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  315. data/samples/bigdemo/wxChoice.rbw +0 -47
  316. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  317. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  318. data/samples/bigdemo/wxComboBox.rbw +0 -77
  319. data/samples/bigdemo/wxCursor.rbw +0 -136
  320. data/samples/bigdemo/wxDialog.rbw +0 -74
  321. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  322. data/samples/bigdemo/wxDragImage.rbw +0 -70
  323. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  324. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  325. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  326. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  327. data/samples/bigdemo/wxFrame.rbw +0 -53
  328. data/samples/bigdemo/wxGauge.rbw +0 -65
  329. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  330. data/samples/bigdemo/wxGrid.rbw +0 -66
  331. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  332. data/samples/bigdemo/wxListBox.rbw +0 -140
  333. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  334. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  335. data/samples/bigdemo/wxMenu.rbw +0 -247
  336. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  337. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  338. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  339. data/samples/bigdemo/wxNotebook.rbw +0 -136
  340. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  341. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  342. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  343. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  344. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  345. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  346. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  347. data/samples/bigdemo/wxSlider.rbw +0 -42
  348. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  349. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  350. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  351. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  352. data/samples/bigdemo/wxStaticText.rbw +0 -55
  353. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  354. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  355. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  356. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  357. data/samples/bigdemo/wxToolBar.rbw +0 -131
  358. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  359. data/samples/caret/caret.rb +0 -298
  360. data/samples/caret/mondrian.xpm +0 -44
  361. data/samples/controls/books.rb +0 -189
  362. data/samples/controls/choice.xpm +0 -27
  363. data/samples/controls/combo.xpm +0 -27
  364. data/samples/controls/controls.rb +0 -1099
  365. data/samples/controls/gauge.xpm +0 -27
  366. data/samples/controls/list.xpm +0 -27
  367. data/samples/controls/mondrian.ico +0 -0
  368. data/samples/controls/mondrian.xpm +0 -44
  369. data/samples/controls/radio.xpm +0 -27
  370. data/samples/controls/stattext.xpm +0 -24
  371. data/samples/controls/test2.bmp +0 -0
  372. data/samples/controls/text.xpm +0 -27
  373. data/samples/controls/tn_books.png +0 -0
  374. data/samples/controls/tn_controls.png +0 -0
  375. data/samples/etc/choice.rb +0 -87
  376. data/samples/etc/tn_choice.png +0 -0
  377. data/samples/text/mondrian.ico +0 -0
  378. data/samples/text/mondrian.xpm +0 -44
  379. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -1,817 +0,0 @@
1
- # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
- #
3
- # This software is released under the MIT license.
4
- #
5
- # Some parts are
6
- # Copyright 2004-2007, wxRuby development team
7
- # released under the MIT-like wxRuby2 license
8
-
9
- # Freely reusable code: see SAMPLES-LICENSE.TXT for details
10
-
11
- begin
12
- require 'rubygems'
13
- rescue LoadError
14
- end
15
- require 'wx'
16
-
17
- # Demo created by Robert Carlin, based on the wxPython demo by Robin Dunn
18
- # Modified by Kevin Smith, Roy Sutton, Alex Fenton
19
-
20
- # TODO:
21
- # Finish Scintilla integration
22
- # Fix 'Find Next'
23
- # Refactor editor pane
24
- # More samples
25
- # Finish 'rubification' of source
26
- # Fix non-scintilla code viewer
27
-
28
- OVR_TEXT = "This is the WxRuby Demo. It was ported from the wxPython Demo, created by Robin Dunn. Many thanks to him for all his hard work - this demo is what it is because of him. Click on any of the items in the tree control to start the demo. Don't forget to check out the Demo Code tab - you can see the source code for each demo!\nHope you like it!"
29
-
30
- $tree_list = [
31
- #new stuff
32
- #['Recent Additions', [
33
- # 'wxMaskedNumCtrl',
34
- # 'FloatCanvas',
35
- # ]],
36
-
37
- # managed windows == things with a [optional] caption you can close
38
- ['Base Frames and Dialogs', %w[wxDialog wxFrame wxMDIWindows wxMiniFrame]],
39
-
40
- # the common dialogs
41
- ['Common Dialogs', [
42
- 'wxColourDialog',
43
- 'wxDirDialog',
44
- 'wxFileDialog',
45
- 'wxFileDialog_Save',
46
- 'wxFindReplaceDialog',
47
- 'wxFontDialog',
48
- 'wxMessageDialog',
49
- #'wxPageSetupDialog',
50
- #'wxPrintDialog',
51
- 'wxProgressDialog',
52
- 'wxSingleChoiceDialog',
53
- 'wxTextEntryDialog',
54
- ]],
55
-
56
- # dialogs from libraries
57
- ['More Dialogs', [
58
- # 'ErrorDialogs',
59
- # 'ImageBrowser',
60
- 'wxMultipleChoiceDialog',
61
- 'wxScrolledMessageDialog'
62
- ]],
63
-
64
- # core controls
65
- ['Core Windows/Controls', [
66
- 'PopupMenu',
67
- 'wxBitmapButton',
68
- 'wxButton',
69
- 'wxCheckBox',
70
- 'wxCheckListBox',
71
- 'wxChoice',
72
- 'wxChoicebook',
73
- 'wxComboBox',
74
- 'wxGauge',
75
- 'wxGenericDirCtrl',
76
- 'wxGrid',
77
- #'wxGrid_MegaExample',
78
- 'wxListBox',
79
- #'wxListCtrl',
80
- 'wxListCtrl_virtual',
81
- 'wxMenu',
82
- 'wxNotebook',
83
- #'wxPopupWindow',
84
- 'wxRadioBox',
85
- 'wxRadioButton',
86
- 'wxSashWindow',
87
- 'wxScrolledWindow',
88
- 'wxSlider',
89
- 'wxSpinButton',
90
- 'wxSpinCtrl',
91
- 'wxSplitterWindow',
92
- 'wxStaticBitmap',
93
- 'wxStaticText',
94
- 'wxStatusBar',
95
- 'wxTextCtrl',
96
- 'wxToggleButton',
97
- 'wxToolBar',
98
- 'wxTreeCtrl',
99
- #'wxValidator',
100
- ]],
101
-
102
- # controls coming from other libraries
103
- ['More Windows/Controls', [
104
- #'wxFloatBar', deprecated
105
- #'wxMVCTree', deprecated
106
- #'wxRightTextCtrl', deprecated as we have wxTE_RIGHT now.
107
- #'AnalogClockWindow',
108
- #'ColourSelect',
109
- #'ContextHelp',
110
- #'FancyText',
111
- #'FloatCanvas',
112
- #'FileBrowseButton',
113
- #'GenericButtons',
114
- #'MaskedEditControls',
115
- #'SplitTree',
116
- #'TablePrint',
117
- #'Throbber',
118
- #'wxCalendar',
119
- 'wxCalendarCtrl',
120
- #'wxDynamicSashWindow',
121
- #'wxEditableListBox',
122
- #'wxEditor',
123
- #'wxHtmlWindow',
124
- #'wxIEHtmlWin',
125
- #'wxIntCtrl',
126
- #'wxLEDNumberCtrl',
127
- #'wxMimeTypesManager',
128
- #'wxMaskedNumCtrl',
129
- #'wxMultiSash',
130
- #'wxPopupControl',
131
- #'wxStyledTextCtrl_1',
132
- #'wxStyledTextCtrl_2',
133
- #'wxTimeCtrl',
134
- #'wxTreeListCtrl',
135
- ]],
136
-
137
- # How to lay out the controls in a frame/dialog
138
- ['Window Layout', [
139
- # 'LayoutAnchors',
140
- # 'Layoutf',
141
- # 'RowColSizer',
142
- 'Sizers',
143
- # 'wxScrolledPanel',
144
- # 'wxXmlResource',
145
- # 'wxXmlResourceHandler',
146
- ]],
147
-
148
- # ditto
149
- #['Process and Events', [
150
- # 'EventManager',
151
- # 'infoframe',
152
- # 'OOR',
153
- # 'PythonEvents',
154
- # 'Threads',
155
- # 'wxKeyEvents',
156
- # 'wxProcess',
157
- # 'wxTimer',
158
- # ]],
159
-
160
- #~ # Clipboard and DnD
161
- #~ ['Clipboard and DnD', [
162
- #~ #'CustomDragAndDrop',
163
- #~ 'DragAndDrop',
164
- #~ 'URLDragAndDrop',
165
- #~ ]],
166
-
167
- # Images
168
- ['Using Images', [
169
- # 'Throbber',
170
- 'wxArtProvider',
171
- 'wxCursor',
172
- 'wxDragImage',
173
- # 'wxImage',
174
- # 'wxImageFromStream',
175
- # 'wxMask',
176
- ]],
177
-
178
- # Other stuff
179
- ['Miscellaneous', [
180
- # 'ColourDB',
181
- # 'DialogUnits',
182
- # 'DrawXXXList',
183
- # 'FontEnumerator',
184
- # 'PrintFramework',
185
- 'ShapedWindow',
186
- # 'Throbber',
187
- # 'Unicode',
188
- # 'wxFileHistory',
189
- # 'wxJoystick',
190
- # 'wxOGL',
191
- # 'wxWave',
192
- ]],
193
-
194
- # need libs not coming with the demo
195
- #['Objects using an external library', [
196
- # 'ActiveXWrapper_Acrobat',
197
- # 'ActiveXWrapper_IE',
198
- # 'wxGLCanvas',
199
- # 'wxPlotCanvas',
200
- # ]],
201
-
202
- ['Check out the samples dir too', [
203
- ]],
204
-
205
- ]
206
-
207
- class DemoCodeViewer < Wx::TextCtrl
208
- def initialize(parent)
209
- super(parent, value: OVR_TEXT,
210
- style: Wx::TE_MULTILINE | Wx::TE_READONLY | Wx::HSCROLL |
211
- Wx::TE_RICH | Wx::TE_RICH2 | Wx::TE_NOHIDESEL)
212
- set_max_length(0) unless Wx::PLATFORM == 'WXGTK'
213
- end
214
-
215
- def clear_all
216
- clear
217
- end
218
- end
219
-
220
- class WxRubyDemo < Wx::Frame
221
- attr_accessor :otherWin
222
-
223
- def initialize(title, pos, size, style = Wx::DEFAULT_FRAME_STYLE)
224
- super(nil, -1, title, pos, size, style)
225
- @demoID = Wx::ID_HIGHEST
226
- @otherWin = nil
227
-
228
- icon_file = File.join(File.dirname(__FILE__), 'icons', 'mondrian.xpm')
229
- icon = Wx::Icon.new(icon_file, Wx::BITMAP_TYPE_XPM)
230
- set_icon(icon)
231
-
232
- @tbicon = DemoTaskBarIcon.new(self)
233
-
234
- evt_idle { |event| on_idle(event) }
235
- evt_close { |event| on_close(event) }
236
- evt_iconize { |event| on_iconize(event) }
237
- evt_maximize { |event| on_maximize(event) }
238
-
239
- centre(Wx::BOTH)
240
- create_status_bar(1, Wx::STB_SIZEGRIP)
241
- set_status_text("Welcome to the WxRuby Demo!")
242
-
243
- splitter = Wx::SplitterWindow.new(self, -1)
244
- splitter2 = Wx::SplitterWindow.new(splitter, -1)
245
-
246
- # Make a File menu
247
-
248
- @mainmenu = Wx::MenuBar.new
249
- menu = Wx::Menu.new
250
- menu.append(Wx::ID_EXIT, "E&xit\tALT-X", "Get the heck outta here!")
251
- evt_menu(Wx::ID_EXIT) { exit }
252
- @mainmenu.append(menu, "&File")
253
-
254
- # Make a Demo menu - thanks to Kevin Smith for figuring the submenus out!
255
- menu = Wx::Menu.new
256
- $tree_list.each do |item|
257
- @submenu = Wx::Menu.new
258
- item[1].each do |childItem|
259
- mID = @demoID += 1
260
- @submenu.append(mID, childItem)
261
- evt_menu(mID) { |event| on_demo_menu(childItem) }
262
- end
263
- @demoID += 1
264
- menuItem = Wx::MenuItem.new(menu, @demoID, item[0], "", Wx::ITEM_NORMAL, @submenu)
265
- menu.append_item(menuItem)
266
- end
267
- @mainmenu.append(menu, "&Demo")
268
-
269
- # Make a Help menu
270
- helpID = Wx::ID_ABOUT
271
- findID = @demoID += 1
272
- findnextID = @demoID += 1
273
- clearID = @demoID += 1
274
- menu = Wx::Menu.new
275
- menu.append(findID, "&Find\tCtrl-F", "Find in the Demo Code")
276
- menu.append(findnextID, "Find &Next\tF3", "Find Next")
277
- menu.append_separator
278
- menu.append(helpID, "&About\tCtrl-H", "wxRuby RULES!!!")
279
- evt_menu(helpID) { |event| on_help_about(event) }
280
- evt_menu(findID) { |event| on_help_find(event) }
281
- evt_menu(findnextID) { |event| on_find_next(event) }
282
- evt_find(-1) { |event| on_find(event) }
283
- evt_find_next(-1) { |event| on_find(event) }
284
- evt_find_close(-1) { |event| on_find_close(event) }
285
- @mainmenu.append(menu, "&Help")
286
- set_menu_bar(@mainmenu)
287
-
288
- @finddata = Wx::FindReplaceData.new
289
-
290
- @treeMap = {}
291
- @tree = Wx::TreeCtrl.new(splitter)
292
- root = @tree.add_root("wxRuby Overview")
293
- firstChild = nil
294
-
295
- $tree_list.each do |item|
296
- child = @tree.append_item(root, item[0])
297
- if not firstChild then
298
- firstChild = child
299
- end
300
- item[1].each do |childItem|
301
- theDemo = @tree.append_item(child, childItem)
302
- @treeMap[childItem] = theDemo
303
- end
304
- end
305
- @tree.expand(root)
306
- @tree.expand(firstChild)
307
-
308
- evt_tree_item_expanded @tree, :on_item_expanded
309
- evt_tree_item_collapsed @tree, :on_item_collapsed
310
- evt_tree_sel_changed @tree, :on_tree_sel_changed
311
- evt_tree_item_activated @tree, :on_tree_sel_changed
312
- @tree.evt_left_down method(:on_tree_left_down)
313
-
314
- # Create a Notebook
315
- @nb = Wx::Notebook.new(splitter2, :style => Wx::CLIP_CHILDREN)
316
-
317
- @ovr = Wx::TextCtrl.new(@nb, :value => OVR_TEXT, :style =>
318
- Wx::TE_MULTILINE | Wx::TE_READONLY |
319
- Wx::TE_RICH | Wx::TE_NOHIDESEL)
320
- @nb.add_page(@ovr, "Overview")
321
-
322
- if Wx.const_defined?(:STC)
323
- panel, @txt = setup_editor(@nb)
324
- @nb.add_page(panel, "Demo Code")
325
- else
326
- @txt = DemoCodeViewer.new(@nb)
327
- @nb.add_page(@txt, "Demo Code")
328
- end
329
-
330
- get_demo_file(__FILE__)
331
-
332
- @log = Wx::TextCtrl.new(splitter2, -1, "", Wx::DEFAULT_POSITION,
333
- Wx::DEFAULT_SIZE,
334
- Wx::TE_MULTILINE | Wx::TE_READONLY | Wx::HSCROLL)
335
- # For some reason when the number of characters entered is
336
- # greater than about 10,700, the text control freezes. I know
337
- # someone mentioned this on the list a while ago...calling
338
- # set_max_length(0) with zero as the argument tells the text
339
- # control to default limit that the underlying native text
340
- # control can handle.
341
- @log.set_max_length(0) unless Wx::PLATFORM == 'WXGTK'
342
- Wx::Log::set_active_target(Wx::LogTextCtrl.new(@log))
343
-
344
- splitter.split_vertically(@tree, splitter2, 220)
345
- splitter2.split_horizontally(@nb, @log, 300)
346
-
347
- splitter.set_minimum_pane_size(20)
348
- splitter2.set_minimum_pane_size(100)
349
-
350
- @nb.set_selection(0)
351
- @tree.select_item(root)
352
-
353
- show_tip
354
- end
355
-
356
- def write_text(text)
357
- Wx::log_message(text)
358
- end
359
-
360
- def on_idle(event)
361
- if @otherWin != nil
362
- @otherWin.raise
363
- @window = @otherWin
364
- @otherWin = nil
365
- end
366
- end
367
-
368
- def on_close(event)
369
- @tbicon.remove_icon
370
- destroy
371
- exit
372
- end
373
-
374
- def on_item_expanded(event)
375
- item = event.get_item
376
- Wx::log_message("on_item_expanded: %s" % @tree.get_item_text(item))
377
- end
378
-
379
- def on_item_collapsed(event)
380
- item = event.get_item
381
- Wx::log_message("on_item_collapsed: %s" % @tree.get_item_text(item))
382
- end
383
-
384
- def on_tree_sel_changed(event)
385
-
386
- item = event.get_item
387
-
388
- if item.ok?
389
- itemText = @tree.get_item_text(item)
390
- run_demo(itemText)
391
- end
392
- end
393
-
394
- def on_tree_left_down(event)
395
- pt = Wx::Point.new(event.get_x, event.get_y)
396
- item = @tree.hit_test(pt)
397
- if item == @tree.get_selection
398
- set_overview(@tree.get_item_text(item) + " Overview", @curOverview)
399
- Wx::log_message(@tree.get_item_text(item) + " Overview")
400
-
401
- end
402
-
403
- event.skip
404
- end
405
-
406
- def run_demo(itemText)
407
- if @nb.get_page_count == 3
408
- if @nb.get_selection == 2
409
- @nb.set_selection(0)
410
- end
411
- unless @window.nil?
412
- @window = nil
413
- end
414
- @nb.delete_page(2)
415
- end
416
-
417
- if itemText == "wxRuby Overview"
418
- get_demo_file(__FILE__)
419
- set_overview("wxRuby Overview", OVR_TEXT)
420
- @nb.refresh
421
- @window = nil
422
- else
423
- demo_file = File.join(File.dirname(__FILE__), itemText + '.rbw')
424
- if File.exist?(demo_file)
425
- Wx::log_message("Running Demo: " + itemText + ".rbw")
426
- get_demo_file(demo_file)
427
- # I use load here because it allows the user to modify
428
- # the underlying file for each sample, so that each time
429
- # They run it any changes made will be reflected without
430
- # having to restart the demo.
431
- begin
432
- load demo_file
433
- set_overview(itemText + " Overview", Demo::overview)
434
- @tree.refresh
435
- @nb.refresh
436
- @window = Demo.run(self, @nb, self)
437
- if Wx::Window === @window
438
- # Check to see if the demo returned a Wx::Window, Wx::Panel or a new class inheriting from them
439
- # if so, create a new tab in the notebook for them
440
- @nb.add_page(@window, "Demo")
441
- @nb.set_selection(2)
442
- @nb.refresh
443
- end
444
- rescue Exception => problem
445
- Wx.MessageDialog(self, "A problem occurred with the %s demo:\n%s\n%s" % [itemText, problem, problem.backtrace.join("\n").to_s()],
446
- "Error!!!", Wx::OK | Wx::ICON_ERROR) do |dlg|
447
- dlg.show_modal
448
- end
449
- end
450
- else
451
- @ovr.set_value("")
452
- @txt.clear_all
453
- @window = nil
454
- end
455
- end
456
- @tree.set_focus()
457
- end
458
-
459
- def get_demo_file(fileName)
460
- @filename = fileName
461
- @txt.clear()
462
- @txt.load_file(fileName)
463
- if @txt.is_a?(Wx::TextCtrl)
464
- @txt.set_insertion_point(0)
465
- @txt.show_position(0)
466
- end
467
- end
468
-
469
- def set_overview(name, text)
470
- text ||= ''
471
- @curOverview = text
472
- @ovr.set_value(text)
473
- @ovr.set_style(0, text.length, Wx::TextAttr.new(Wx::BLUE, Wx::Colour.new("White"), Wx::Font.new(12, Wx::FONTFAMILY_SWISS, Wx::FONTSTYLE_NORMAL, Wx::FONTWEIGHT_BOLD)))
474
- @nb.set_page_text(0, name)
475
- end
476
-
477
- # Menu Methods
478
-
479
- def on_file_exit(event)
480
- close()
481
- end
482
-
483
- def on_help_about(event)
484
- load File.join(File.dirname(__FILE__), "About.rbw")
485
- about = About::MyAboutBox.new(self)
486
- about.show_modal()
487
- about.destroy()
488
- end
489
-
490
- def on_help_find(event)
491
- @nb.set_selection(1)
492
- @finddlg ||= Wx::FindReplaceDialog.new(self, @finddata, "Find", Wx::FR_NOUPDOWN | Wx::FR_NOMATCHCASE | Wx::FR_NOWHOLEWORD)
493
- @finddlg.show
494
- end
495
-
496
- def on_find(event)
497
- # FIXME: These problems are probably resolved now
498
- # Problems
499
- # 1) For some reason, the control is not properly counting EOL characters - it almost seems to be skipping them
500
- # causing the control to incorrectly set the initial insertion point for the the "found" text
501
- # 2) This also is causing problems with the amount of text that is highlighted - the length of the highlighted string
502
- # is less than it should be
503
- # 3) After doing an initial "find" operation, using the "find next" operation causes the program to crash - again, I
504
- # don't know why this is :(
505
- # Example - When I try to find "menu", the text that gets highlighted is the newline on the second line and the "ME" of
506
- # MENU_EXIT - a total of only 3 characters, when it should highlight all of "menu". I don't fully understand
507
- # this problem, but it doesn't appear until after you attempt to find text beyond the first line :(
508
- if @txt.is_a?(Wx::TextCtrl)
509
- @nb.set_selection(1)
510
- myEnd = @txt.get_last_position()
511
- write_text("Last position = %d" % myEnd)
512
- textstring = @txt.get_range(0, myEnd).downcase()
513
- if Wx::PLATFORM == "WXMSW"
514
- textstring.sub!(/\n/, "\r\n")
515
- end
516
- #write_text("textstring - %s" % textstring)
517
- start = @txt.get_insertion_point()
518
- write_text("insertion point = " + start.to_s())
519
- findstring = @finddata.get_find_string().downcase()
520
- write_text("finddata = " + findstring)
521
- loc = textstring.index(findstring, start)
522
- write_text("location = " + loc.to_s())
523
- write_text("findstring.length() = " + findstring.length().to_s())
524
- if loc == nil and start != 0
525
- # string not found, start at beginning
526
- start = 0
527
- loc = textstring.index(findstring, start)
528
- end
529
-
530
- if loc == nil
531
- Wx.MessageDialog(self, 'Find String Not Found', 'Find String Not Found in Demo File',
532
- Wx::OK | Wx::ICON_INFORMATION) do |dlg|
533
- dlg.show_modal
534
- end
535
- end
536
-
537
- if @finddlg
538
- if loc == nil
539
- @finddlg.set_focus
540
- return
541
- else
542
- @finddlg.hide
543
- end
544
- end
545
- @txt.show_position(loc)
546
- @txt.set_selection(loc, loc + findstring.length())
547
- else
548
- # Scintilla
549
- # FIXME: Take into account search direction
550
- @txt.set_target_start(@txt.get_target_end)
551
- @txt.set_target_end(@txt.get_length - 1)
552
- # FIXME: get flags from find dialog
553
- @txt.set_search_flags(0)
554
- loc = @txt.search_in_target(event.get_find_string)
555
- if loc == -1
556
- Wx.MessageDialog(self, 'Find String Not Found', 'Find String Not Found in Demo File',
557
- Wx::OK | Wx::ICON_INFORMATION) do |dlg|
558
- dlg.show_modal
559
- end
560
- end
561
-
562
- if @finddlg
563
- if loc == -1
564
- @finddlg.set_focus()
565
- return
566
- end
567
- end
568
- @txt.ensure_caret_visible
569
- @txt.set_selection(loc, loc + event.get_find_string.length)
570
- end
571
- end
572
-
573
- def on_find_next(event)
574
- # FIXME: Saving an event is probably a bad idea
575
- if @finddata.get_find_string() != ""
576
- on_find(event)
577
- else
578
- on_help_find(event)
579
- end
580
- end
581
-
582
- def on_find_close(event)
583
- event.get_dialog().destroy()
584
- end
585
-
586
- def show_tip()
587
- tips_file = File.join(File.dirname(__FILE__), 'tips.txt')
588
- tp = Wx::create_file_tip_provider(tips_file, rand(6))
589
- Wx::show_tip(self, tp)
590
- end
591
-
592
- def on_demo_menu(childItem)
593
- # Also, for some reason I haven't figured out yet either, the demo executes two times
594
- selectedDemo = @treeMap[childItem]
595
- if selectedDemo
596
- @tree.select_item(selectedDemo)
597
- @tree.ensure_visible(selectedDemo)
598
- end
599
- end
600
-
601
- def on_iconize(event)
602
- Wx::log_message("on_iconize")
603
- hide
604
- event.skip
605
- end
606
-
607
- def on_maximize(event)
608
- Wx::log_message("on_maximize")
609
- event.skip
610
- end
611
-
612
- # FIXME: Refactor into a class
613
- def setup_editor(parent)
614
- panel = Wx::Panel.new(parent)
615
- sci = setup_scintilla(panel)
616
- @save_button = Wx::Button.new(panel, -1, 'Save Changes')
617
- @delete_button = Wx::Button.new(panel, -1, 'Delete Modified')
618
- @save_button.enable(false);
619
- panel.evt_button(@save_button.get_id) { on_save }
620
- panel.evt_button(@delete_button.get_id) { on_delete }
621
- panel.evt_stc_modified(sci) { on_modified }
622
-
623
- radio_buttons = { :original => Wx::RadioButton.new(panel, -1, "Original", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::RB_GROUP),
624
- :modified => Wx::RadioButton.new(panel, -1, "Modified") }
625
-
626
- @control_box = Wx::BoxSizer.new(Wx::HORIZONTAL)
627
- @control_box.add(Wx::StaticText.new(panel, -1, 'Active Version:'), 0, Wx::RIGHT | Wx::LEFT | Wx::ALIGN_CENTER_VERTICAL, 5)
628
- radio_buttons.each_pair { |id, button|
629
- @control_box.add(button, 0, Wx::EXPAND | Wx::RIGHT, 5)
630
- evt_radiobutton(button.get_id) { |event| on_radio_button(event) }
631
- }
632
- @control_box.add(@save_button, 0, Wx::RIGHT, 5)
633
- @control_box.add(@delete_button, 0)
634
-
635
- @box = Wx::BoxSizer.new(Wx::VERTICAL)
636
- @box.add(@control_box, 0, Wx::EXPAND)
637
- @box.add(Wx::StaticLine.new(panel), 0, Wx::EXPAND)
638
-
639
- @box.add(sci, 1, Wx::EXPAND)
640
- @box.fit(panel)
641
- panel.set_sizer(@box)
642
- [panel, sci]
643
- end
644
-
645
- def setup_scintilla(parent)
646
- sci = Wx::STC::StyledTextCtrl.new(parent)
647
- font = Wx::Font.new(10, Wx::FONTFAMILY_TELETYPE, Wx::FONTSTYLE_NORMAL, Wx::FONTWEIGHT_NORMAL)
648
- sci.style_set_font(Wx::STC::STC_STYLE_DEFAULT, font);
649
- sci.set_edge_mode(Wx::STC::STC_EDGE_LINE)
650
- line_num_margin = sci.text_width(Wx::STC::STC_STYLE_LINENUMBER, "_99999")
651
- sci.set_margin_width(0, line_num_margin)
652
-
653
- sci.style_set_foreground(Wx::STC::STC_STYLE_DEFAULT, Wx::BLACK);
654
- sci.style_set_background(Wx::STC::STC_STYLE_DEFAULT, Wx::WHITE);
655
- sci.style_set_foreground(Wx::STC::STC_STYLE_LINENUMBER, Wx::LIGHT_GREY);
656
- sci.style_set_background(Wx::STC::STC_STYLE_LINENUMBER, Wx::WHITE);
657
- sci.style_set_foreground(Wx::STC::STC_STYLE_INDENTGUIDE, Wx::LIGHT_GREY);
658
-
659
- sci.set_tab_width(2)
660
- sci.set_use_tabs(false)
661
- sci.set_tab_indents(true)
662
- sci.set_back_space_un_indents(true)
663
- sci.set_indent(2)
664
- sci.set_edge_column(80)
665
-
666
- sci.set_lexer(Wx::STC::STC_LEX_RUBY)
667
- sci.style_clear_all
668
- sci.style_set_foreground(2, Wx::RED)
669
- sci.style_set_foreground(3, Wx::GREEN)
670
- sci.style_set_foreground(5, Wx::BLUE)
671
- sci.style_set_foreground(6, Wx::BLUE)
672
- sci.style_set_foreground(7, Wx::BLUE)
673
- sci.set_key_words(0, "begin break elsif module retry unless end case next return until class ensure nil self when def false not super while alias defined? for or then yield and do if redo true else in rescue undef")
674
-
675
- sci.set_property("fold", "1")
676
- sci.set_property("fold.compact", "0")
677
- sci.set_property("fold.comment", "1")
678
- sci.set_property("fold.preprocessor", "1")
679
-
680
- sci.set_margin_width(1, 0)
681
- sci.set_margin_type(1, Wx::STC::STC_MARGIN_SYMBOL)
682
- sci.set_margin_mask(1, Wx::STC::STC_MASK_FOLDERS)
683
- sci.set_margin_width(1, 20)
684
-
685
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDER, Wx::STC::STC_MARK_PLUS)
686
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDEROPEN, Wx::STC::STC_MARK_MINUS)
687
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDEREND, Wx::STC::STC_MARK_EMPTY)
688
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDERMIDTAIL, Wx::STC::STC_MARK_EMPTY)
689
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDEROPENMID, Wx::STC::STC_MARK_EMPTY)
690
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDERSUB, Wx::STC::STC_MARK_EMPTY)
691
- sci.marker_define(Wx::STC::STC_MARKNUM_FOLDERTAIL, Wx::STC::STC_MARK_EMPTY)
692
- sci.set_fold_flags(16)
693
-
694
- sci.set_margin_sensitive(1, 1)
695
- sci
696
- end
697
-
698
- def on_save
699
- if not FileTest.directory?(File.dirname(modified_filename))
700
- if not Dir.mkdir(File.dirname(modified_filename))
701
- Wx::log_message("Unable to create directory 'modified'")
702
- return
703
- end
704
- end
705
- File.open(modified_filename, "w") { |file|
706
- file.write(@txt.get_text)
707
- }
708
- # FIXME: Reload module we just saved
709
- end
710
-
711
- def on_delete
712
- if File.exists?(modified_filename)
713
- File.unlink(modified_filename)
714
- end
715
- # FIXME: Update state
716
- end
717
-
718
- def on_modified
719
- @save_button.enable(@txt.get_modify)
720
- end
721
-
722
- def on_radio_button(event)
723
- # FIXME: Can't do anything here yet
724
- end
725
-
726
- def modified_filename
727
- File.join(File.dirname(@filename), "modified", File.basename(@filename))
728
- end
729
- end
730
-
731
- class DemoTaskBarIcon < Wx::TaskBarIcon
732
- # TODO: Need a new_id function like wxPython has
733
- TBMENU_RESTORE = Wx::ID_HIGHEST + 6000
734
- TBMENU_CLOSE = Wx::ID_HIGHEST + 6001
735
- TBMENU_CHANGE = Wx::ID_HIGHEST + 6002
736
- TBMENU_REMOVE = Wx::ID_HIGHEST + 6003
737
-
738
- def initialize(frame)
739
- super()
740
-
741
- @frame = frame
742
-
743
- # starting image
744
- icon = make_icon('wxruby-128x128.png')
745
- set_icon(icon, 'wxRuby Demo')
746
- @image_index = 1
747
-
748
- # events
749
- evt_taskbar_left_dclick { |evt| on_taskbar_activate(evt) }
750
-
751
- evt_menu(TBMENU_RESTORE) { |evt| on_taskbar_activate(evt) }
752
- evt_menu(TBMENU_CLOSE) { @frame.close }
753
- evt_menu(TBMENU_CHANGE) { |evt| on_taskbar_change(evt) }
754
- evt_menu(TBMENU_REMOVE) { remove_icon }
755
- end
756
-
757
- def create_popup_menu
758
- # Called by the base class when it needs to popup the menu
759
- # (the default evt_right_down event). Create and return
760
- # the menu to display.
761
- menu = Wx::Menu.new
762
- menu.append(TBMENU_RESTORE, "Restore wxRuby Demo")
763
- menu.append(TBMENU_CLOSE, "Close wxRuby Demo")
764
- menu.append_separator
765
- menu.append(TBMENU_CHANGE, "Change the TB Icon")
766
- menu.append(TBMENU_REMOVE, "Remove the TB Icon")
767
- return menu
768
- end
769
-
770
- def make_icon(imgname)
771
- # Different platforms have different requirements for the
772
- # taskbar icon size
773
- filename = File.join(File.dirname(__FILE__), 'icons', imgname)
774
- img = Wx::Image.new(filename)
775
- if Wx::PLATFORM == "WXMSW"
776
- img = img.scale(16, 16)
777
- elsif Wx::PLATFORM == "WXGTK"
778
- img = img.scale(22, 22)
779
- end
780
- # WXMAC can be any size up to 128x128, so don't scale
781
- icon = Wx::Icon.new
782
- icon.copy_from_bitmap(Wx::Bitmap.new(img))
783
- return icon
784
- end
785
-
786
- def on_taskbar_activate(evt)
787
- @frame.iconize(false)
788
- @frame.show(true)
789
- @frame.raise
790
- end
791
-
792
- def on_taskbar_change(evt)
793
- names = ["wxruby-128x128.png", "wxwin16x16.xpm", "smiles.xpm", "mondrian.xpm"]
794
- name = names[@image_index]
795
- @image_index += 1
796
- if @image_index >= names.length
797
- @image_index = 0
798
- end
799
-
800
- icon = make_icon(name)
801
- set_icon(icon, 'This is a new icon: ' + name)
802
- end
803
-
804
- end
805
-
806
- class DemoApp < Wx::App
807
- def on_init
808
- frame = WxRubyDemo.new("WxRuby BIG combined demo",
809
- Wx::DEFAULT_POSITION,
810
- Wx::Size.new(750, 550))
811
-
812
- frame.show(true)
813
- end
814
- end
815
-
816
- demo = DemoApp.new
817
- demo.run