fxruby 1.2.2

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 (692) hide show
  1. data/ANNOUNCE +25 -0
  2. data/ChangeLog +10606 -0
  3. data/INSTALL +50 -0
  4. data/LICENSE +456 -0
  5. data/README +39 -0
  6. data/doc/apes02.html +21 -0
  7. data/doc/apes03.html +39 -0
  8. data/doc/book.html +3 -0
  9. data/doc/build.html +144 -0
  10. data/doc/ch03s02.html +24 -0
  11. data/doc/ch03s03.html +53 -0
  12. data/doc/ch03s04.html +37 -0
  13. data/doc/ch03s05.html +61 -0
  14. data/doc/ch04s02.html +72 -0
  15. data/doc/ch04s03.html +37 -0
  16. data/doc/ch04s04.html +72 -0
  17. data/doc/ch05s02.html +262 -0
  18. data/doc/ch05s03.html +128 -0
  19. data/doc/changes.html +75 -0
  20. data/doc/clipboardtut.html +68 -0
  21. data/doc/cvs.html +35 -0
  22. data/doc/differences.html +11 -0
  23. data/doc/dragdroptut.html +266 -0
  24. data/doc/events.html +36 -0
  25. data/doc/examples.html +104 -0
  26. data/doc/gems.html +73 -0
  27. data/doc/goals.html +39 -0
  28. data/doc/images/babelfish.png +0 -0
  29. data/doc/images/browser.png +0 -0
  30. data/doc/images/button.png +0 -0
  31. data/doc/images/call-chain-example.png +0 -0
  32. data/doc/images/colordialog.png +0 -0
  33. data/doc/images/datatarget.png +0 -0
  34. data/doc/images/dialog.png +0 -0
  35. data/doc/images/dilbert.png +0 -0
  36. data/doc/images/dirlist.png +0 -0
  37. data/doc/images/dropsite-droprejected.png +0 -0
  38. data/doc/images/foursplit.png +0 -0
  39. data/doc/images/gltest.png +0 -0
  40. data/doc/images/glviewer.png +0 -0
  41. data/doc/images/groupbox.png +0 -0
  42. data/doc/images/header.png +0 -0
  43. data/doc/images/hello-with-button.png +0 -0
  44. data/doc/images/hello-with-icon-1.png +0 -0
  45. data/doc/images/hello-with-icon-2.png +0 -0
  46. data/doc/images/hello-with-icon-3.png +0 -0
  47. data/doc/images/hello-with-tooltip.png +0 -0
  48. data/doc/images/hello-without-button.png +0 -0
  49. data/doc/images/hello.png +0 -0
  50. data/doc/images/hello2.png +0 -0
  51. data/doc/images/iconlist-bigicons.png +0 -0
  52. data/doc/images/iconlist-details.png +0 -0
  53. data/doc/images/image.png +0 -0
  54. data/doc/images/imageviewer.png +0 -0
  55. data/doc/images/inheritance.png +0 -0
  56. data/doc/images/mditest.png +0 -0
  57. data/doc/images/raabrowser.png +0 -0
  58. data/doc/images/scribble.png +0 -0
  59. data/doc/images/shutter.png +0 -0
  60. data/doc/images/splitter.png +0 -0
  61. data/doc/images/tabbook.png +0 -0
  62. data/doc/images/table.png +0 -0
  63. data/doc/images/tutorial1.png +0 -0
  64. data/doc/implementation.html +16 -0
  65. data/doc/infosources.html +33 -0
  66. data/doc/library.html +30 -0
  67. data/doc/opengl.html +73 -0
  68. data/doc/pt01.html +3 -0
  69. data/doc/pt02.html +3 -0
  70. data/doc/scintilla.html +36 -0
  71. data/doc/todo.html +40 -0
  72. data/doc/tutorial1.html +97 -0
  73. data/examples/RAA.rb +25 -0
  74. data/examples/README +53 -0
  75. data/examples/babelfish.rb +107 -0
  76. data/examples/bounce.rb +159 -0
  77. data/examples/browser.rb +191 -0
  78. data/examples/button.rb +160 -0
  79. data/examples/datatarget.rb +223 -0
  80. data/examples/dctest.rb +702 -0
  81. data/examples/dialog.rb +148 -0
  82. data/examples/dilbert.rb +105 -0
  83. data/examples/dirlist.rb +63 -0
  84. data/examples/dragdrop.rb +101 -0
  85. data/examples/dragsource.rb +81 -0
  86. data/examples/dropsite.rb +61 -0
  87. data/examples/foursplit.rb +103 -0
  88. data/examples/gltest.rb +342 -0
  89. data/examples/glviewer.rb +579 -0
  90. data/examples/groupbox.rb +422 -0
  91. data/examples/header.rb +150 -0
  92. data/examples/hello.rb +12 -0
  93. data/examples/hello2.rb +51 -0
  94. data/examples/iRAA.rb +153 -0
  95. data/examples/iconlist.rb +104 -0
  96. data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
  97. data/examples/icons/FatBot.ico +0 -0
  98. data/examples/icons/FlippedySwitch.ico +0 -0
  99. data/examples/icons/LeGoon.ico +0 -0
  100. data/examples/icons/Net.ico +0 -0
  101. data/examples/icons/RedMacOS.ico +0 -0
  102. data/examples/icons/SawBlade.ico +0 -0
  103. data/examples/icons/backview.png +0 -0
  104. data/examples/icons/big.png +0 -0
  105. data/examples/icons/bigfolder.png +0 -0
  106. data/examples/icons/bigpenguin.png +0 -0
  107. data/examples/icons/bottomview.png +0 -0
  108. data/examples/icons/camera.png +0 -0
  109. data/examples/icons/capbutt.png +0 -0
  110. data/examples/icons/capnotlast.png +0 -0
  111. data/examples/icons/capproj.png +0 -0
  112. data/examples/icons/capround.png +0 -0
  113. data/examples/icons/colorpal.png +0 -0
  114. data/examples/icons/copy.png +0 -0
  115. data/examples/icons/cut.png +0 -0
  116. data/examples/icons/delimit.png +0 -0
  117. data/examples/icons/dippy.png +0 -0
  118. data/examples/icons/double_dash.png +0 -0
  119. data/examples/icons/filenew.png +0 -0
  120. data/examples/icons/fileopen.png +0 -0
  121. data/examples/icons/filesave.png +0 -0
  122. data/examples/icons/filesaveas.png +0 -0
  123. data/examples/icons/fonts.png +0 -0
  124. data/examples/icons/fox.png +0 -0
  125. data/examples/icons/foxicon.png +0 -0
  126. data/examples/icons/frontview.png +0 -0
  127. data/examples/icons/gem_big.png +0 -0
  128. data/examples/icons/gem_small.png +0 -0
  129. data/examples/icons/hello2.png +0 -0
  130. data/examples/icons/help.png +0 -0
  131. data/examples/icons/indent.png +0 -0
  132. data/examples/icons/jbevel.png +0 -0
  133. data/examples/icons/jmiter.png +0 -0
  134. data/examples/icons/jround.png +0 -0
  135. data/examples/icons/kill.png +0 -0
  136. data/examples/icons/leftview.png +0 -0
  137. data/examples/icons/light.png +0 -0
  138. data/examples/icons/minidoc.png +0 -0
  139. data/examples/icons/minifolder.png +0 -0
  140. data/examples/icons/minifolderopen.png +0 -0
  141. data/examples/icons/newfolder.png +0 -0
  142. data/examples/icons/nolight.png +0 -0
  143. data/examples/icons/onoff_dash.png +0 -0
  144. data/examples/icons/palette.png +0 -0
  145. data/examples/icons/parallel.png +0 -0
  146. data/examples/icons/paste.png +0 -0
  147. data/examples/icons/pattern.png +0 -0
  148. data/examples/icons/penguin.png +0 -0
  149. data/examples/icons/perspective.png +0 -0
  150. data/examples/icons/printicon.png +0 -0
  151. data/examples/icons/prop.png +0 -0
  152. data/examples/icons/redo.png +0 -0
  153. data/examples/icons/rightview.png +0 -0
  154. data/examples/icons/saveas.png +0 -0
  155. data/examples/icons/shutter1.png +0 -0
  156. data/examples/icons/shutter2.png +0 -0
  157. data/examples/icons/small.png +0 -0
  158. data/examples/icons/smoothlight.png +0 -0
  159. data/examples/icons/solid_line.png +0 -0
  160. data/examples/icons/tbuplevel.png +0 -0
  161. data/examples/icons/topview.png +0 -0
  162. data/examples/icons/undo.png +0 -0
  163. data/examples/icons/winapp.png +0 -0
  164. data/examples/icons/zoom.png +0 -0
  165. data/examples/image.rb +281 -0
  166. data/examples/imageviewer.rb +513 -0
  167. data/examples/inputs.rb +84 -0
  168. data/examples/mditest.rb +180 -0
  169. data/examples/pig.rb +77 -0
  170. data/examples/raabrowser.rb +132 -0
  171. data/examples/scintilla-test.rb +81 -0
  172. data/examples/scribble-orig.rb +186 -0
  173. data/examples/scribble.rb +166 -0
  174. data/examples/shutter.rb +158 -0
  175. data/examples/splitter.rb +211 -0
  176. data/examples/styledtext.rb +92 -0
  177. data/examples/tabbook.rb +124 -0
  178. data/examples/table.rb +187 -0
  179. data/examples/textedit/commands.rb +117 -0
  180. data/examples/textedit/helpwindow.rb +295 -0
  181. data/examples/textedit/prefdialog.rb +235 -0
  182. data/examples/textedit/textedit.rb +1767 -0
  183. data/ext/fox12/FXRbApp.cpp +127 -0
  184. data/ext/fox12/FXRbDataTarget.cpp +106 -0
  185. data/ext/fox12/FXRbGLViewer.cpp +89 -0
  186. data/ext/fox12/FXRuby.cpp +1818 -0
  187. data/ext/fox12/MANIFEST +189 -0
  188. data/ext/fox12/core_wrap.cpp +10119 -0
  189. data/ext/fox12/dc_wrap.cpp +2638 -0
  190. data/ext/fox12/dialogs_wrap.cpp +6244 -0
  191. data/ext/fox12/extconf.rb +176 -0
  192. data/ext/fox12/frames_wrap.cpp +8274 -0
  193. data/ext/fox12/fx3d_wrap.cpp +9315 -0
  194. data/ext/fox12/iconlist_wrap.cpp +3742 -0
  195. data/ext/fox12/icons_wrap.cpp +4040 -0
  196. data/ext/fox12/image_wrap.cpp +4026 -0
  197. data/ext/fox12/impl.cpp +1064 -0
  198. data/ext/fox12/include/FXMemoryBuffer.h +52 -0
  199. data/ext/fox12/include/FXRb4Splitter.h +54 -0
  200. data/ext/fox12/include/FXRbAccelTable.h +46 -0
  201. data/ext/fox12/include/FXRbApp.h +137 -0
  202. data/ext/fox12/include/FXRbAppVirtuals.h +15 -0
  203. data/ext/fox12/include/FXRbArrowButton.h +51 -0
  204. data/ext/fox12/include/FXRbBMPIcon.h +54 -0
  205. data/ext/fox12/include/FXRbBMPImage.h +54 -0
  206. data/ext/fox12/include/FXRbBitmap.h +115 -0
  207. data/ext/fox12/include/FXRbBitmapFrame.h +56 -0
  208. data/ext/fox12/include/FXRbBitmapView.h +52 -0
  209. data/ext/fox12/include/FXRbBitmapVirtuals.h +27 -0
  210. data/ext/fox12/include/FXRbButton.h +51 -0
  211. data/ext/fox12/include/FXRbCURCursor.h +60 -0
  212. data/ext/fox12/include/FXRbCanvas.h +51 -0
  213. data/ext/fox12/include/FXRbCheckButton.h +51 -0
  214. data/ext/fox12/include/FXRbColorBar.h +51 -0
  215. data/ext/fox12/include/FXRbColorDialog.h +53 -0
  216. data/ext/fox12/include/FXRbColorSelector.h +51 -0
  217. data/ext/fox12/include/FXRbColorWell.h +51 -0
  218. data/ext/fox12/include/FXRbColorWheel.h +51 -0
  219. data/ext/fox12/include/FXRbComboBox.h +56 -0
  220. data/ext/fox12/include/FXRbCommon.h +86 -0
  221. data/ext/fox12/include/FXRbComposite.h +51 -0
  222. data/ext/fox12/include/FXRbCursor.h +87 -0
  223. data/ext/fox12/include/FXRbCursorVirtuals.h +6 -0
  224. data/ext/fox12/include/FXRbDC.h +385 -0
  225. data/ext/fox12/include/FXRbDCPrint.h +49 -0
  226. data/ext/fox12/include/FXRbDCVirtuals.h +166 -0
  227. data/ext/fox12/include/FXRbDCWindow.h +64 -0
  228. data/ext/fox12/include/FXRbDataTarget.h +65 -0
  229. data/ext/fox12/include/FXRbDebugTarget.h +46 -0
  230. data/ext/fox12/include/FXRbDelegator.h +46 -0
  231. data/ext/fox12/include/FXRbDial.h +51 -0
  232. data/ext/fox12/include/FXRbDialogBox.h +68 -0
  233. data/ext/fox12/include/FXRbDialogBoxVirtuals.h +3 -0
  234. data/ext/fox12/include/FXRbDict.h +46 -0
  235. data/ext/fox12/include/FXRbDirBox.h +51 -0
  236. data/ext/fox12/include/FXRbDirDialog.h +53 -0
  237. data/ext/fox12/include/FXRbDirList.h +79 -0
  238. data/ext/fox12/include/FXRbDirSelector.h +51 -0
  239. data/ext/fox12/include/FXRbDocument.h +46 -0
  240. data/ext/fox12/include/FXRbDragCorner.h +51 -0
  241. data/ext/fox12/include/FXRbDrawable.h +64 -0
  242. data/ext/fox12/include/FXRbDrawableVirtuals.h +3 -0
  243. data/ext/fox12/include/FXRbDriveBox.h +51 -0
  244. data/ext/fox12/include/FXRbFileDialog.h +56 -0
  245. data/ext/fox12/include/FXRbFileDict.h +104 -0
  246. data/ext/fox12/include/FXRbFileDictVirtuals.h +9 -0
  247. data/ext/fox12/include/FXRbFileList.h +81 -0
  248. data/ext/fox12/include/FXRbFileSelector.h +51 -0
  249. data/ext/fox12/include/FXRbFoldingItemVirtuals.h +45 -0
  250. data/ext/fox12/include/FXRbFoldingList.h +183 -0
  251. data/ext/fox12/include/FXRbFont.h +70 -0
  252. data/ext/fox12/include/FXRbFontDialog.h +53 -0
  253. data/ext/fox12/include/FXRbFontSelector.h +51 -0
  254. data/ext/fox12/include/FXRbFrame.h +51 -0
  255. data/ext/fox12/include/FXRbGIFCursor.h +60 -0
  256. data/ext/fox12/include/FXRbGIFIcon.h +54 -0
  257. data/ext/fox12/include/FXRbGIFImage.h +54 -0
  258. data/ext/fox12/include/FXRbGLCanvas.h +92 -0
  259. data/ext/fox12/include/FXRbGLCanvasVirtuals.h +13 -0
  260. data/ext/fox12/include/FXRbGLContext.h +58 -0
  261. data/ext/fox12/include/FXRbGLObject.h +103 -0
  262. data/ext/fox12/include/FXRbGLObjectVirtuals.h +22 -0
  263. data/ext/fox12/include/FXRbGLShape.h +81 -0
  264. data/ext/fox12/include/FXRbGLShapeVirtuals.h +8 -0
  265. data/ext/fox12/include/FXRbGLViewer.h +83 -0
  266. data/ext/fox12/include/FXRbGLViewerVirtuals.h +6 -0
  267. data/ext/fox12/include/FXRbGLVisual.h +56 -0
  268. data/ext/fox12/include/FXRbGradientBar.h +55 -0
  269. data/ext/fox12/include/FXRbGroupBox.h +51 -0
  270. data/ext/fox12/include/FXRbHeader.h +125 -0
  271. data/ext/fox12/include/FXRbHeaderItemVirtuals.h +22 -0
  272. data/ext/fox12/include/FXRbHorizontalFrame.h +51 -0
  273. data/ext/fox12/include/FXRbICOIcon.h +54 -0
  274. data/ext/fox12/include/FXRbICOImage.h +54 -0
  275. data/ext/fox12/include/FXRbIcon.h +57 -0
  276. data/ext/fox12/include/FXRbIconItemVirtuals.h +71 -0
  277. data/ext/fox12/include/FXRbIconList.h +266 -0
  278. data/ext/fox12/include/FXRbIconListVirtuals.h +21 -0
  279. data/ext/fox12/include/FXRbId.h +74 -0
  280. data/ext/fox12/include/FXRbIdVirtuals.h +9 -0
  281. data/ext/fox12/include/FXRbImage.h +162 -0
  282. data/ext/fox12/include/FXRbImageFrame.h +56 -0
  283. data/ext/fox12/include/FXRbImageView.h +52 -0
  284. data/ext/fox12/include/FXRbImageVirtuals.h +51 -0
  285. data/ext/fox12/include/FXRbInputDialog.h +53 -0
  286. data/ext/fox12/include/FXRbJPGIcon.h +54 -0
  287. data/ext/fox12/include/FXRbJPGImage.h +54 -0
  288. data/ext/fox12/include/FXRbLabel.h +51 -0
  289. data/ext/fox12/include/FXRbList.h +204 -0
  290. data/ext/fox12/include/FXRbListBox.h +56 -0
  291. data/ext/fox12/include/FXRbListItemVirtuals.h +36 -0
  292. data/ext/fox12/include/FXRbListVirtuals.h +18 -0
  293. data/ext/fox12/include/FXRbMDIButton.h +162 -0
  294. data/ext/fox12/include/FXRbMDIChild.h +82 -0
  295. data/ext/fox12/include/FXRbMDIChildVirtuals.h +12 -0
  296. data/ext/fox12/include/FXRbMDIClient.h +80 -0
  297. data/ext/fox12/include/FXRbMDIClientVirtuals.h +12 -0
  298. data/ext/fox12/include/FXRbMainWindow.h +54 -0
  299. data/ext/fox12/include/FXRbMatrix.h +51 -0
  300. data/ext/fox12/include/FXRbMenuBar.h +63 -0
  301. data/ext/fox12/include/FXRbMenuButton.h +51 -0
  302. data/ext/fox12/include/FXRbMenuCaption.h +51 -0
  303. data/ext/fox12/include/FXRbMenuCascade.h +51 -0
  304. data/ext/fox12/include/FXRbMenuCheck.h +49 -0
  305. data/ext/fox12/include/FXRbMenuCommand.h +49 -0
  306. data/ext/fox12/include/FXRbMenuPane.h +52 -0
  307. data/ext/fox12/include/FXRbMenuRadio.h +49 -0
  308. data/ext/fox12/include/FXRbMenuSeparator.h +51 -0
  309. data/ext/fox12/include/FXRbMenuTitle.h +51 -0
  310. data/ext/fox12/include/FXRbMessageBox.h +56 -0
  311. data/ext/fox12/include/FXRbObject.h +67 -0
  312. data/ext/fox12/include/FXRbObjectVirtuals.h +9 -0
  313. data/ext/fox12/include/FXRbOptionMenu.h +73 -0
  314. data/ext/fox12/include/FXRbPCXIcon.h +54 -0
  315. data/ext/fox12/include/FXRbPCXImage.h +54 -0
  316. data/ext/fox12/include/FXRbPNGIcon.h +54 -0
  317. data/ext/fox12/include/FXRbPNGImage.h +54 -0
  318. data/ext/fox12/include/FXRbPPMIcon.h +54 -0
  319. data/ext/fox12/include/FXRbPPMImage.h +54 -0
  320. data/ext/fox12/include/FXRbPacker.h +51 -0
  321. data/ext/fox12/include/FXRbPicker.h +51 -0
  322. data/ext/fox12/include/FXRbPopup.h +70 -0
  323. data/ext/fox12/include/FXRbPopupVirtuals.h +6 -0
  324. data/ext/fox12/include/FXRbPrintDialog.h +53 -0
  325. data/ext/fox12/include/FXRbProgressBar.h +51 -0
  326. data/ext/fox12/include/FXRbProgressDialog.h +53 -0
  327. data/ext/fox12/include/FXRbRGBIcon.h +54 -0
  328. data/ext/fox12/include/FXRbRGBImage.h +54 -0
  329. data/ext/fox12/include/FXRbRadioButton.h +51 -0
  330. data/ext/fox12/include/FXRbRealSlider.h +51 -0
  331. data/ext/fox12/include/FXRbRealSpinner.h +64 -0
  332. data/ext/fox12/include/FXRbRealSpinnerVirtuals.h +3 -0
  333. data/ext/fox12/include/FXRbRecentFiles.h +49 -0
  334. data/ext/fox12/include/FXRbRegistry.h +46 -0
  335. data/ext/fox12/include/FXRbReplaceDialog.h +53 -0
  336. data/ext/fox12/include/FXRbRootWindow.h +51 -0
  337. data/ext/fox12/include/FXRbRuler.h +56 -0
  338. data/ext/fox12/include/FXRbScintilla.h +52 -0
  339. data/ext/fox12/include/FXRbScrollArea.h +82 -0
  340. data/ext/fox12/include/FXRbScrollAreaVirtuals.h +13 -0
  341. data/ext/fox12/include/FXRbScrollBar.h +73 -0
  342. data/ext/fox12/include/FXRbScrollPane.h +52 -0
  343. data/ext/fox12/include/FXRbScrollWindow.h +52 -0
  344. data/ext/fox12/include/FXRbSearchDialog.h +53 -0
  345. data/ext/fox12/include/FXRbSeparator.h +95 -0
  346. data/ext/fox12/include/FXRbSettings.h +46 -0
  347. data/ext/fox12/include/FXRbShell.h +56 -0
  348. data/ext/fox12/include/FXRbShutter.h +86 -0
  349. data/ext/fox12/include/FXRbShutterVirtuals.h +3 -0
  350. data/ext/fox12/include/FXRbSlider.h +51 -0
  351. data/ext/fox12/include/FXRbSpinner.h +64 -0
  352. data/ext/fox12/include/FXRbSpinnerVirtuals.h +3 -0
  353. data/ext/fox12/include/FXRbSplitter.h +54 -0
  354. data/ext/fox12/include/FXRbSpring.h +51 -0
  355. data/ext/fox12/include/FXRbStatusBar.h +51 -0
  356. data/ext/fox12/include/FXRbStatusLine.h +51 -0
  357. data/ext/fox12/include/FXRbStream.h +101 -0
  358. data/ext/fox12/include/FXRbStreamVirtuals.h +9 -0
  359. data/ext/fox12/include/FXRbStringDict.h +46 -0
  360. data/ext/fox12/include/FXRbSwitcher.h +51 -0
  361. data/ext/fox12/include/FXRbTGAIcon.h +54 -0
  362. data/ext/fox12/include/FXRbTGAImage.h +54 -0
  363. data/ext/fox12/include/FXRbTIFIcon.h +54 -0
  364. data/ext/fox12/include/FXRbTIFImage.h +54 -0
  365. data/ext/fox12/include/FXRbTabBar.h +64 -0
  366. data/ext/fox12/include/FXRbTabBarVirtuals.h +3 -0
  367. data/ext/fox12/include/FXRbTabBook.h +52 -0
  368. data/ext/fox12/include/FXRbTabItem.h +51 -0
  369. data/ext/fox12/include/FXRbTable.h +416 -0
  370. data/ext/fox12/include/FXRbTableItemVirtuals.h +68 -0
  371. data/ext/fox12/include/FXRbTableVirtuals.h +73 -0
  372. data/ext/fox12/include/FXRbText.h +89 -0
  373. data/ext/fox12/include/FXRbTextField.h +51 -0
  374. data/ext/fox12/include/FXRbTextVirtuals.h +9 -0
  375. data/ext/fox12/include/FXRbToggleButton.h +51 -0
  376. data/ext/fox12/include/FXRbToolBar.h +80 -0
  377. data/ext/fox12/include/FXRbToolBarGrip.h +51 -0
  378. data/ext/fox12/include/FXRbToolBarShell.h +52 -0
  379. data/ext/fox12/include/FXRbToolBarTab.h +51 -0
  380. data/ext/fox12/include/FXRbToolBarVirtuals.h +6 -0
  381. data/ext/fox12/include/FXRbToolTip.h +51 -0
  382. data/ext/fox12/include/FXRbTopWindow.h +91 -0
  383. data/ext/fox12/include/FXRbTopWindowVirtuals.h +15 -0
  384. data/ext/fox12/include/FXRbTreeItemVirtuals.h +42 -0
  385. data/ext/fox12/include/FXRbTreeList.h +249 -0
  386. data/ext/fox12/include/FXRbTreeListBox.h +53 -0
  387. data/ext/fox12/include/FXRbTreeListVirtuals.h +30 -0
  388. data/ext/fox12/include/FXRbTriStateButton.h +51 -0
  389. data/ext/fox12/include/FXRbVerticalFrame.h +51 -0
  390. data/ext/fox12/include/FXRbVisual.h +56 -0
  391. data/ext/fox12/include/FXRbWindow.h +200 -0
  392. data/ext/fox12/include/FXRbWindowVirtuals.h +69 -0
  393. data/ext/fox12/include/FXRbWizard.h +60 -0
  394. data/ext/fox12/include/FXRbXBMIcon.h +54 -0
  395. data/ext/fox12/include/FXRbXBMImage.h +54 -0
  396. data/ext/fox12/include/FXRbXPMIcon.h +54 -0
  397. data/ext/fox12/include/FXRbXPMImage.h +54 -0
  398. data/ext/fox12/include/FXRuby.h +728 -0
  399. data/ext/fox12/include/impl.h +201 -0
  400. data/ext/fox12/include/inlinestubs.h +1063 -0
  401. data/ext/fox12/label_wrap.cpp +4945 -0
  402. data/ext/fox12/layout_wrap.cpp +5061 -0
  403. data/ext/fox12/librb.c +636 -0
  404. data/ext/fox12/list_wrap.cpp +2212 -0
  405. data/ext/fox12/markfuncs.cpp +1568 -0
  406. data/ext/fox12/mdi_wrap.cpp +4521 -0
  407. data/ext/fox12/menu_wrap.cpp +4673 -0
  408. data/ext/fox12/scintilla_wrap.cpp +2245 -0
  409. data/ext/fox12/table_wrap.cpp +3581 -0
  410. data/ext/fox12/text_wrap.cpp +3539 -0
  411. data/ext/fox12/treelist_wrap.cpp +5609 -0
  412. data/ext/fox12/ui_wrap.cpp +10017 -0
  413. data/index.html +14 -0
  414. data/lib/fox12/aliases.rb +5211 -0
  415. data/lib/fox12/calendar.rb +218 -0
  416. data/lib/fox12/chore.rb +51 -0
  417. data/lib/fox12/colors.rb +282 -0
  418. data/lib/fox12/core.rb +249 -0
  419. data/lib/fox12/dict.rb +35 -0
  420. data/lib/fox12/glgroup.rb +165 -0
  421. data/lib/fox12/glshapes.rb +457 -0
  422. data/lib/fox12/input.rb +56 -0
  423. data/lib/fox12/irb.rb +179 -0
  424. data/lib/fox12/iterators.rb +331 -0
  425. data/lib/fox12/keys.rb +1376 -0
  426. data/lib/fox12/missingdep.rb +16 -0
  427. data/lib/fox12/pseudokeyboard.rb +36 -0
  428. data/lib/fox12/pseudomouse.rb +84 -0
  429. data/lib/fox12/responder.rb +72 -0
  430. data/lib/fox12/responder2.rb +122 -0
  431. data/lib/fox12/scintilla.rb +2629 -0
  432. data/lib/fox12/settings.rb +18 -0
  433. data/lib/fox12/signal.rb +68 -0
  434. data/lib/fox12/timeout.rb +58 -0
  435. data/lib/fox12/undolist.rb +456 -0
  436. data/lib/fox12/version.rb +11 -0
  437. data/rdoc-sources/FX4Splitter.rb +138 -0
  438. data/rdoc-sources/FXAccelTable.rb +67 -0
  439. data/rdoc-sources/FXApp.rb +557 -0
  440. data/rdoc-sources/FXArrowButton.rb +69 -0
  441. data/rdoc-sources/FXBMPIcon.rb +45 -0
  442. data/rdoc-sources/FXBMPImage.rb +20 -0
  443. data/rdoc-sources/FXBitmap.rb +78 -0
  444. data/rdoc-sources/FXBitmapFrame.rb +29 -0
  445. data/rdoc-sources/FXBitmapView.rb +41 -0
  446. data/rdoc-sources/FXButton.rb +43 -0
  447. data/rdoc-sources/FXCURCursor.rb +13 -0
  448. data/rdoc-sources/FXCanvas.rb +18 -0
  449. data/rdoc-sources/FXCheckButton.rb +57 -0
  450. data/rdoc-sources/FXColorBar.rb +43 -0
  451. data/rdoc-sources/FXColorDialog.rb +36 -0
  452. data/rdoc-sources/FXColorSelector.rb +65 -0
  453. data/rdoc-sources/FXColorWell.rb +57 -0
  454. data/rdoc-sources/FXColorWheel.rb +35 -0
  455. data/rdoc-sources/FXComboBox.rb +153 -0
  456. data/rdoc-sources/FXComposite.rb +34 -0
  457. data/rdoc-sources/FXCursor.rb +67 -0
  458. data/rdoc-sources/FXDC.rb +667 -0
  459. data/rdoc-sources/FXDCPrint.rb +127 -0
  460. data/rdoc-sources/FXDCWindow.rb +37 -0
  461. data/rdoc-sources/FXDataTarget.rb +41 -0
  462. data/rdoc-sources/FXDebugTarget.rb +25 -0
  463. data/rdoc-sources/FXDelegator.rb +23 -0
  464. data/rdoc-sources/FXDial.rb +68 -0
  465. data/rdoc-sources/FXDialogBox.rb +36 -0
  466. data/rdoc-sources/FXDict.rb +79 -0
  467. data/rdoc-sources/FXDirBox.rb +49 -0
  468. data/rdoc-sources/FXDirDialog.rb +18 -0
  469. data/rdoc-sources/FXDirList.rb +143 -0
  470. data/rdoc-sources/FXDirSelector.rb +30 -0
  471. data/rdoc-sources/FXDocument.rb +29 -0
  472. data/rdoc-sources/FXDragCorner.rb +19 -0
  473. data/rdoc-sources/FXDrawable.rb +27 -0
  474. data/rdoc-sources/FXDriveBox.rb +46 -0
  475. data/rdoc-sources/FXFileDialog.rb +132 -0
  476. data/rdoc-sources/FXFileDict.rb +168 -0
  477. data/rdoc-sources/FXFileList.rb +163 -0
  478. data/rdoc-sources/FXFileSelector.rb +148 -0
  479. data/rdoc-sources/FXFileStream.rb +24 -0
  480. data/rdoc-sources/FXFoldingList.rb +453 -0
  481. data/rdoc-sources/FXFont.rb +345 -0
  482. data/rdoc-sources/FXFontDialog.rb +14 -0
  483. data/rdoc-sources/FXFontSelector.rb +37 -0
  484. data/rdoc-sources/FXFrame.rb +47 -0
  485. data/rdoc-sources/FXGIFCursor.rb +38 -0
  486. data/rdoc-sources/FXGIFIcon.rb +21 -0
  487. data/rdoc-sources/FXGIFImage.rb +19 -0
  488. data/rdoc-sources/FXGLCanvas.rb +45 -0
  489. data/rdoc-sources/FXGLContext.rb +41 -0
  490. data/rdoc-sources/FXGLObject.rb +75 -0
  491. data/rdoc-sources/FXGLShape.rb +75 -0
  492. data/rdoc-sources/FXGLViewer.rb +309 -0
  493. data/rdoc-sources/FXGLVisual.rb +94 -0
  494. data/rdoc-sources/FXGradientBar.rb +291 -0
  495. data/rdoc-sources/FXGroupBox.rb +33 -0
  496. data/rdoc-sources/FXHeader.rb +377 -0
  497. data/rdoc-sources/FXHorizontalFrame.rb +29 -0
  498. data/rdoc-sources/FXICOIcon.rb +50 -0
  499. data/rdoc-sources/FXICOImage.rb +21 -0
  500. data/rdoc-sources/FXIcon.rb +38 -0
  501. data/rdoc-sources/FXIconList.rb +418 -0
  502. data/rdoc-sources/FXId.rb +34 -0
  503. data/rdoc-sources/FXImage.rb +198 -0
  504. data/rdoc-sources/FXImageFrame.rb +22 -0
  505. data/rdoc-sources/FXImageView.rb +35 -0
  506. data/rdoc-sources/FXInputDialog.rb +62 -0
  507. data/rdoc-sources/FXJPGIcon.rb +52 -0
  508. data/rdoc-sources/FXJPGImage.rb +25 -0
  509. data/rdoc-sources/FXLabel.rb +66 -0
  510. data/rdoc-sources/FXList.rb +412 -0
  511. data/rdoc-sources/FXListBox.rb +158 -0
  512. data/rdoc-sources/FXMDIButton.rb +67 -0
  513. data/rdoc-sources/FXMDIChild.rb +145 -0
  514. data/rdoc-sources/FXMDIClient.rb +67 -0
  515. data/rdoc-sources/FXMainWindow.rb +20 -0
  516. data/rdoc-sources/FXMat4.rb +171 -0
  517. data/rdoc-sources/FXMatrix.rb +57 -0
  518. data/rdoc-sources/FXMemoryBuffer.rb +19 -0
  519. data/rdoc-sources/FXMemoryStream.rb +45 -0
  520. data/rdoc-sources/FXMenuBar.rb +23 -0
  521. data/rdoc-sources/FXMenuButton.rb +84 -0
  522. data/rdoc-sources/FXMenuCaption.rb +47 -0
  523. data/rdoc-sources/FXMenuCascade.rb +18 -0
  524. data/rdoc-sources/FXMenuCheck.rb +30 -0
  525. data/rdoc-sources/FXMenuCommand.rb +27 -0
  526. data/rdoc-sources/FXMenuPane.rb +13 -0
  527. data/rdoc-sources/FXMenuRadio.rb +30 -0
  528. data/rdoc-sources/FXMenuSeparator.rb +21 -0
  529. data/rdoc-sources/FXMenuTitle.rb +27 -0
  530. data/rdoc-sources/FXMessageBox.rb +77 -0
  531. data/rdoc-sources/FXObject.rb +22 -0
  532. data/rdoc-sources/FXOptionMenu.rb +76 -0
  533. data/rdoc-sources/FXPCXIcon.rb +48 -0
  534. data/rdoc-sources/FXPCXImage.rb +21 -0
  535. data/rdoc-sources/FXPNGIcon.rb +48 -0
  536. data/rdoc-sources/FXPNGImage.rb +21 -0
  537. data/rdoc-sources/FXPPMIcon.rb +21 -0
  538. data/rdoc-sources/FXPPMImage.rb +21 -0
  539. data/rdoc-sources/FXPacker.rb +62 -0
  540. data/rdoc-sources/FXPicker.rb +27 -0
  541. data/rdoc-sources/FXPopup.rb +53 -0
  542. data/rdoc-sources/FXPrintDialog.rb +36 -0
  543. data/rdoc-sources/FXProgressBar.rb +57 -0
  544. data/rdoc-sources/FXProgressDialog.rb +36 -0
  545. data/rdoc-sources/FXQuatd.rb +1 -0
  546. data/rdoc-sources/FXQuatf.rb +1 -0
  547. data/rdoc-sources/FXRGBIcon.rb +49 -0
  548. data/rdoc-sources/FXRGBImage.rb +21 -0
  549. data/rdoc-sources/FXRadioButton.rb +64 -0
  550. data/rdoc-sources/FXRanged.rb +97 -0
  551. data/rdoc-sources/FXRangef.rb +97 -0
  552. data/rdoc-sources/FXRealSlider.rb +99 -0
  553. data/rdoc-sources/FXRealSpinner.rb +133 -0
  554. data/rdoc-sources/FXRecentFiles.rb +73 -0
  555. data/rdoc-sources/FXRectangle.rb +137 -0
  556. data/rdoc-sources/FXRegion.rb +64 -0
  557. data/rdoc-sources/FXRegistry.rb +39 -0
  558. data/rdoc-sources/FXReplaceDialog.rb +56 -0
  559. data/rdoc-sources/FXRootWindow.rb +17 -0
  560. data/rdoc-sources/FXRuler.rb +60 -0
  561. data/rdoc-sources/FXScintilla.rb +121 -0
  562. data/rdoc-sources/FXScrollArea.rb +86 -0
  563. data/rdoc-sources/FXScrollBar.rb +101 -0
  564. data/rdoc-sources/FXScrollPane.rb +23 -0
  565. data/rdoc-sources/FXScrollWindow.rb +38 -0
  566. data/rdoc-sources/FXSearchDialog.rb +24 -0
  567. data/rdoc-sources/FXSeparator.rb +64 -0
  568. data/rdoc-sources/FXSettings.rb +222 -0
  569. data/rdoc-sources/FXShell.rb +7 -0
  570. data/rdoc-sources/FXShutter.rb +97 -0
  571. data/rdoc-sources/FXSize.rb +30 -0
  572. data/rdoc-sources/FXSlider.rb +96 -0
  573. data/rdoc-sources/FXSphered.rb +65 -0
  574. data/rdoc-sources/FXSpheref.rb +65 -0
  575. data/rdoc-sources/FXSpinner.rb +132 -0
  576. data/rdoc-sources/FXSplitter.rb +88 -0
  577. data/rdoc-sources/FXSpring.rb +61 -0
  578. data/rdoc-sources/FXStatusBar.rb +42 -0
  579. data/rdoc-sources/FXStatusLine.rb +60 -0
  580. data/rdoc-sources/FXStream.rb +115 -0
  581. data/rdoc-sources/FXStringDict.rb +38 -0
  582. data/rdoc-sources/FXSwitcher.rb +78 -0
  583. data/rdoc-sources/FXTGAIcon.rb +48 -0
  584. data/rdoc-sources/FXTGAImage.rb +21 -0
  585. data/rdoc-sources/FXTIFIcon.rb +52 -0
  586. data/rdoc-sources/FXTIFImage.rb +24 -0
  587. data/rdoc-sources/FXTabBar.rb +76 -0
  588. data/rdoc-sources/FXTabBook.rb +38 -0
  589. data/rdoc-sources/FXTabItem.rb +51 -0
  590. data/rdoc-sources/FXTable.rb +654 -0
  591. data/rdoc-sources/FXText.rb +533 -0
  592. data/rdoc-sources/FXTextField.rb +141 -0
  593. data/rdoc-sources/FXToggleButton.rb +69 -0
  594. data/rdoc-sources/FXToolBar.rb +121 -0
  595. data/rdoc-sources/FXToolBarGrip.rb +55 -0
  596. data/rdoc-sources/FXToolBarShell.rb +44 -0
  597. data/rdoc-sources/FXToolTip.rb +36 -0
  598. data/rdoc-sources/FXTopWindow.rb +92 -0
  599. data/rdoc-sources/FXTreeList.rb +503 -0
  600. data/rdoc-sources/FXTreeListBox.rb +182 -0
  601. data/rdoc-sources/FXTriStateButton.rb +49 -0
  602. data/rdoc-sources/FXVec.rb +97 -0
  603. data/rdoc-sources/FXVec4.rb +91 -0
  604. data/rdoc-sources/FXVerticalFrame.rb +29 -0
  605. data/rdoc-sources/FXVisual.rb +79 -0
  606. data/rdoc-sources/FXWindow.rb +633 -0
  607. data/rdoc-sources/FXWizard.rb +63 -0
  608. data/rdoc-sources/FXXBMIcon.rb +22 -0
  609. data/rdoc-sources/FXXBMImage.rb +22 -0
  610. data/rdoc-sources/FXXPMIcon.rb +50 -0
  611. data/rdoc-sources/FXXPMImage.rb +21 -0
  612. data/rdoc-sources/README.rdoc +53 -0
  613. data/rdoc-sources/fxdefs.rb +90 -0
  614. data/tests/README +19 -0
  615. data/tests/TC_FXAccelTable.rb +43 -0
  616. data/tests/TC_FXApp.rb +15 -0
  617. data/tests/TC_FXArc.rb +26 -0
  618. data/tests/TC_FXButton.rb +72 -0
  619. data/tests/TC_FXCheckButton.rb +57 -0
  620. data/tests/TC_FXComboBox.rb +36 -0
  621. data/tests/TC_FXDC.rb +372 -0
  622. data/tests/TC_FXDCPrint.rb +102 -0
  623. data/tests/TC_FXDCWindow.rb +23 -0
  624. data/tests/TC_FXDataTarget.rb +24 -0
  625. data/tests/TC_FXDirList.rb +30 -0
  626. data/tests/TC_FXFileAssoc.rb +62 -0
  627. data/tests/TC_FXFileStream.rb +90 -0
  628. data/tests/TC_FXFont.rb +59 -0
  629. data/tests/TC_FXFontDesc.rb +62 -0
  630. data/tests/TC_FXGLGroup.rb +32 -0
  631. data/tests/TC_FXGLShape.rb +28 -0
  632. data/tests/TC_FXGLViewer.rb +18 -0
  633. data/tests/TC_FXGradientBar.rb +89 -0
  634. data/tests/TC_FXHeader.rb +82 -0
  635. data/tests/TC_FXIconDict.rb +52 -0
  636. data/tests/TC_FXIconList.rb +192 -0
  637. data/tests/TC_FXId.rb +19 -0
  638. data/tests/TC_FXImage.rb +144 -0
  639. data/tests/TC_FXLight.rb +33 -0
  640. data/tests/TC_FXList.rb +116 -0
  641. data/tests/TC_FXListBox.rb +49 -0
  642. data/tests/TC_FXMat4f.rb +228 -0
  643. data/tests/TC_FXMaterial.rb +75 -0
  644. data/tests/TC_FXMemoryStream.rb +87 -0
  645. data/tests/TC_FXMenuCommand.rb +26 -0
  646. data/tests/TC_FXPoint.rb +57 -0
  647. data/tests/TC_FXQuatf.rb +77 -0
  648. data/tests/TC_FXRadioButton.rb +57 -0
  649. data/tests/TC_FXRangef.rb +48 -0
  650. data/tests/TC_FXRectangle.rb +88 -0
  651. data/tests/TC_FXRegion.rb +54 -0
  652. data/tests/TC_FXRegistry.rb +27 -0
  653. data/tests/TC_FXScrollArea.rb +28 -0
  654. data/tests/TC_FXScrollWindow.rb +28 -0
  655. data/tests/TC_FXSegment.rb +22 -0
  656. data/tests/TC_FXShell.rb +26 -0
  657. data/tests/TC_FXSize.rb +54 -0
  658. data/tests/TC_FXStream.rb +11 -0
  659. data/tests/TC_FXTable.rb +468 -0
  660. data/tests/TC_FXTableItem.rb +48 -0
  661. data/tests/TC_FXText.rb +81 -0
  662. data/tests/TC_FXTopWindow.rb +32 -0
  663. data/tests/TC_FXTreeList.rb +83 -0
  664. data/tests/TC_FXTreeListBox.rb +23 -0
  665. data/tests/TC_FXUndoList.rb +43 -0
  666. data/tests/TC_FXVec2d.rb +142 -0
  667. data/tests/TC_FXVec2f.rb +137 -0
  668. data/tests/TC_FXVec3d.rb +150 -0
  669. data/tests/TC_FXVec3f.rb +150 -0
  670. data/tests/TC_FXVec4f.rb +158 -0
  671. data/tests/TC_FXViewport.rb +30 -0
  672. data/tests/TC_Misc.rb +157 -0
  673. data/tests/TC_downcast.rb +15 -0
  674. data/tests/TS_All.rb +25 -0
  675. data/tests/blankpage.ps +166 -0
  676. data/tests/doit.rb +5 -0
  677. data/tests/howdypage.ps +181 -0
  678. data/tests/stress1.rb +94 -0
  679. data/tests/stress2.rb +51 -0
  680. data/tests/stress3.rb +117 -0
  681. data/tests/testcase.rb +38 -0
  682. data/web/art/fxrubylogo.png +0 -0
  683. data/web/art/fxrubylogo_small.png +0 -0
  684. data/web/art/line.gif +0 -0
  685. data/web/art/oul_grey.gif +0 -0
  686. data/web/art/our.gif +0 -0
  687. data/web/downloads.html +91 -0
  688. data/web/home.html +109 -0
  689. data/web/menu.html +50 -0
  690. data/web/styles.css +167 -0
  691. data/web/top.html +15 -0
  692. metadata +737 -0
data/README ADDED
@@ -0,0 +1,39 @@
1
+ This is FXRuby, the Ruby language bindings for the FOX GUI toolkit. For
2
+ instructions on building FXRuby from the source code, please see the build
3
+ instructions from the FXRuby User's Guide:
4
+
5
+ doc/build.html
6
+
7
+ The directory structure is:
8
+
9
+ doc/
10
+ Contains the documentation (a.k.a. the FXRuby User's Guide) in
11
+ HTML format.
12
+ examples/
13
+ Contains example programs demonstrating how to use FXRuby and
14
+ its many wonderful features.
15
+ ext/fox
16
+ Contains the C++ source code for the shared library part of FXRuby.
17
+ These files are required to build FXRuby from the source code.
18
+ lib/fox
19
+ Contains the Ruby source code for the rest of FXRuby. These files
20
+ are not required to "build" FXRuby, but they are a part of the
21
+ standard FXRuby runtime environment and must be installed along with
22
+ the shared library part.
23
+ tests/
24
+ Contains the beginnings of a test battery for FXRuby. Not much to
25
+ see here.
26
+
27
+ If you're looking at a checkout of the source code from its CVS repository,
28
+ you might see some additional directories of interest:
29
+
30
+ fox-includes/
31
+ An archive of the FOX library header files corresponding to this
32
+ release of FXRuby.
33
+ rdoc-sources/
34
+ The beginnings of a set of "fake" Ruby source files for the various
35
+ FXRuby classes, which are used to generate RDoc-style documentation.
36
+ Not quite ready for prime time, but should be soon.
37
+ swig-interfaces/
38
+ The SWIG interface files used to generate the C++ wrapper code (i.e.
39
+ the code found in the ext/fox directory).
@@ -0,0 +1,21 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Object Life Cycles and Garbage Collection</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="implementation.html" title="Appendix&nbsp;E.&nbsp;Implementation"><link rel="previous" href="implementation.html" title="Appendix&nbsp;E.&nbsp;Implementation"><link rel="next" href="apes03.html" title="Virtual Functions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Object Life Cycles and Garbage Collection</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="implementation.html">Prev</a>&nbsp;</td><th width="60%" align="center">Appendix&nbsp;E.&nbsp;Implementation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="apes03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3581"></a>Object Life Cycles and Garbage Collection</h2></div></div><div></div></div><p>One of the more difficult issues to deal with was understanding
4
+ the "life cycle" of FOX objects (that is, the actual C++ objects) and
5
+ their relationship to the associated Ruby instances. Understanding this
6
+ relationship is critical when dealing with Ruby's garbage collector,
7
+ to ensure that objects are disposed of at the right time.</p><p>For our purposes, we can divide the set of all objects in an FXRuby
8
+ program into two groups, those objects that Ruby "owns" and those that
9
+ it doesn't. The first group (the "owned" objects) includes those that you
10
+ create explicitly from Ruby code. This is usually done by calling a class'
11
+ <tt class="methodname">new</tt> method, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">myIcon = FXPNGIcon.new(myApp, File.open("icon.png", "rb").read)
12
+ myButton = FXButton.new(parentWin, "Hello, World!", myIcon)</pre></td></tr></table><p>It's important to keep in mind that when you create an object like
13
+ this you're not only creating the Ruby instance part (i.e. whatever
14
+ overhead is usually associated with a Ruby instance) but a C++ FOX object
15
+ as well. Because we created these objects, we would reasonably expect them
16
+ to be destroyed when they are garbage-collected so that our programs
17
+ don't leak memory.</p><p>The other group of objects (those not owned by Ruby) are those
18
+ returned from most class instance methods; they are references to already-
19
+ existing objects. For example, <tt class="methodname">FXStatusBar#statusline
20
+ </tt> returns a reference to the status bar's enclosed status line
21
+ instance.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e3600"></a>GL Objects</h3></div></div><div></div></div><p>A C++ <tt class="classname">FXGLGroup</tt> object owns all of the <tt class="classname">FXGLObject</tt> objects it "contains". In other words, when that <tt class="classname">FXGLGroup</tt> object is destroyed, it will also destroy all of the <tt class="classname">FXGLObject</tt> objects for which it holds pointers.</p><p>In order to keep track of <span class="emphasis"><em>which</em></span> GL objects have been added to an <tt class="classname">FXGLGroup</tt>, all of the FXRuby C++ classes derived from <tt class="classname">FXGLObject</tt> have a boolean member variable <i class="structfield"><tt>owned</tt></i> that indicates whether this object is "owned" or not. Until an <tt class="classname">FXGLObject</tt> object is added to a group, this member variable should stay false.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="implementation.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="implementation.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="apes03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;E.&nbsp;Implementation&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Virtual Functions</td></tr></table></div></body></html>
@@ -0,0 +1,39 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Virtual Functions</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="implementation.html" title="Appendix&nbsp;E.&nbsp;Implementation"><link rel="previous" href="apes02.html" title="Object Life Cycles and Garbage Collection"><link rel="next" href="cvs.html" title="Appendix&nbsp;F.&nbsp;Getting the Sources from CVS"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Virtual Functions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="apes02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Appendix&nbsp;E.&nbsp;Implementation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cvs.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3634"></a>Virtual Functions</h2></div></div><div></div></div><p>
4
+ One of the design requirements for FXRuby was to ensure that any
5
+ virtual function call made on a FOX object (from the C++ library
6
+ layer) is routed to the proper Ruby instance method, even if that
7
+ method has been overridden in a derived class.
8
+ </p><p>
9
+ For example, many of the FXRuby example programs are structured with a
10
+ main window class that subclasses <tt class="classname">FXMainWindow</tt>
11
+ and then overrides its <tt class="methodname">create</tt> instance method:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">class MyMainWindow &lt; Fox::FXMainWindow
12
+ # overrides the base class version, FXMainWindow#create
13
+ def create
14
+ end
15
+ end</pre></td></tr></table><p>This <tt class="methodname">create</tt> method isn't called directly from Ruby code, however; it's called as a side effect of calling <tt class="methodname">FXApp#create</tt>. Inside the C++ FOX library, the <tt class="methodname">FXApp::create()</tt> member function recursively calls <tt class="methodname">create()</tt> on all of the application's windows and eventually calls the virtual <tt class="methodname">FXMainWindow::create()</tt> member function as well:
16
+ </p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/call-chain-example.png" align="middle"></div></div><p>
17
+ To ensure that our main window's overridden <tt class="methodname">create
18
+ </tt> method is invoked instead of the base class implementation,
19
+ we need some special machinery in place.
20
+ </p><p>
21
+ For every C++ class that declares virtual member functions, we derive
22
+ a new C++ class that overrides all of those virtual functions with special
23
+ stubs that know how to make method calls on Ruby instances. The naming
24
+ convention for these classes is that the "FX" prefix is replaced with
25
+ "FXRb"; for example, our <tt class="classname">FXRbButton</tt> C++ class is
26
+ derived from FOX's <tt class="classname">FXButton</tt>:
27
+ </p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/inheritance.png" align="middle"></div></div><p>
28
+ Although the implementation of these "stubs" varies from function to function, the
29
+ basic requirements are always the same:
30
+ </p><div class="orderedlist"><ol type="1"><li><p>Look up the Ruby object associated with this C++ object.</p></li><li><p>Convert each of the function's arguments to their Ruby
31
+ representation. For example, arguments of type <span class="type">FXint</span> are
32
+ converted to Ruby <tt class="classname">Fixnum</tt>s.</p></li><li><p>Call the Ruby object's method, using the <tt class="function">
33
+ rb_funcall()</tt> function from Ruby's C API, and capture its
34
+ result (which is itself a Ruby object).</p></li><li><p>Convert the method call's result back to the virtual
35
+ function's C++ return type, and then return that result from the C++
36
+ function. For example, if the C++ function has a <span class="type"> FXbool</span>
37
+ return type, we would expect the corresponding Ruby method to return
38
+ either <tt class="constant">Qtrue</tt> or <tt class="constant">Qfalse</tt>.</p></li></ol></div><p>
39
+ </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="apes02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="implementation.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="cvs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Object Life Cycles and Garbage Collection&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;F.&nbsp;Getting the Sources from CVS</td></tr></table></div></body></html>
@@ -0,0 +1,3 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Developing Graphical User Interfaces with FXRuby</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="next" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developing Graphical User Interfaces with FXRuby</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="pt01.html">Next</a></td></tr></table><hr></div><div class="book" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="book"></a>Developing Graphical User Interfaces with FXRuby</h1></div><div><h2 class="subtitle">Covers FXRuby Version 1.2</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Lyle</span> <span class="surname">Johnson</span></h3></div></div><div><p class="copyright">Copyright &copy; 2001-2004 J. Lyle Johnson</p></div></div><div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt>I. <a href="pt01.html">The Basics</a></dt><dd><dl><dt><a href="goals.html">History and Goals</a></dt><dt>1. <a href="build.html">Building from Source Code</a></dt><dt>2. <a href="gems.html">Installing from Gems</a></dt><dt>3. <a href="tutorial1.html">Hello, World!</a></dt><dd><dl><dt><a href="tutorial1.html#d0e619">First Things First</a></dt><dt><a href="ch03s02.html">Better living through buttons</a></dt><dt><a href="ch03s03.html">Messages</a></dt><dt><a href="ch03s04.html">Adding a tool tip</a></dt><dt><a href="ch03s05.html">Adding an icon</a></dt></dl></dd><dt>4. <a href="clipboardtut.html">Working With the Clipboard</a></dt><dd><dl><dt><a href="clipboardtut.html#d0e1008">Basic Application</a></dt><dt><a href="ch04s02.html">Acquiring the Clipboard</a></dt><dt><a href="ch04s03.html">Sending Data to the Clipboard</a></dt><dt><a href="ch04s04.html">Pasting Data from the Clipboard</a></dt></dl></dd><dt>5. <a href="dragdroptut.html">Drag and Drop</a></dt><dd><dl><dt><a href="dragdroptut.html#d0e1223">Drop Sites</a></dt><dt><a href="ch05s02.html">Drag Sources</a></dt><dt><a href="ch05s03.html">Putting It All Together</a></dt></dl></dd><dt>6. <a href="examples.html">Examples</a></dt><dt>7. <a href="events.html">FXRuby's Message-Target System</a></dt><dt>8. <a href="todo.html">To-do list</a></dt><dt>9. <a href="infosources.html">Other Sources of Information</a></dt><dt>10. <a href="changes.html">Change History</a></dt></dl></dd><dt>II. <a href="pt02.html">Appendices</a></dt><dd><dl><dt>A. <a href="opengl.html">Using OpenGL with FXRuby</a></dt><dt>B. <a href="scintilla.html">Using Scintilla with FXRuby</a></dt><dt>C. <a href="differences.html">Differences between FOX and FXRuby</a></dt><dt>D. <a href="library.html">The FXRuby Standard Library</a></dt><dt>E. <a href="implementation.html">Implementation</a></dt><dd><dl><dt><a href="implementation.html#d0e3562">Code Generation</a></dt><dt><a href="apes02.html">Object Life Cycles and Garbage Collection</a></dt><dd><dl><dt><a href="apes02.html#d0e3600">GL Objects</a></dt></dl></dd><dt><a href="apes03.html">Virtual Functions</a></dt></dl></dd><dt>F. <a href="cvs.html">Getting the Sources from CVS</a></dt></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="pt01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;I.&nbsp;The Basics</td></tr></table></div></body></html>
@@ -0,0 +1,144 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Chapter&nbsp;1.&nbsp;Building from Source Code</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="pt01.html" title="Part&nbsp;I.&nbsp;The Basics"><link rel="previous" href="goals.html" title="History and Goals"><link rel="next" href="gems.html" title="Chapter&nbsp;2.&nbsp;Installing from Gems"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&nbsp;1.&nbsp;Building from Source Code</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="goals.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;I.&nbsp;The Basics</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="gems.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="build"></a>Chapter&nbsp;1.&nbsp;Building from Source Code</h2></div></div><div></div></div><p>A few words of advice, before getting started:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>If you're planning to use FXRuby on Windows, with the standard
4
+ <a href="http://rubyinstaller.rubyforge.org" target="_top">Ruby
5
+ Installer for Windows</a>, you may wish to just download the
6
+ pre-compiled binaries from the <a href="http://rubyforge.org/projects/fxruby" target="_top">RubyForge project
7
+ page</a> for FXRuby.</p></li><li style="list-style-type: disc"><p>If you're planning to use FXRuby on Mac OS X, you may want to
8
+ consult <a href="http://www.fox-toolkit.net/cgi-bin/wiki.pl?Mac_OS_X" target="_top">this
9
+ page</a> from the <a href="http://www.fox-toolkit.net" target="_top">FOX
10
+ Community Wiki</a>, in addition to the standard build instructions
11
+ listed below.</p></li></ul></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e92"></a>Building From Source on Unix/Linux</h2></div></div><div></div></div><p>These instructions assume that you've already downloaded, compiled
12
+ and installed FOX. Next, you'll need to download the FXRuby source code
13
+ tarball and unpack it by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">tar xzf FXRuby-1.0.21.tar.gz</b></pre></td></tr></table><p>This will create a new directory called <tt class="filename">FXRuby-1.0.21</tt>. Change to the top-level
14
+ directory and configure the build by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">ruby install.rb config</b></pre></td></tr></table><p>By default, the <tt class="filename">install.rb</tt> script will look for
15
+ the FOX include files and library in the standard <tt class="filename">/usr/local/include/fox</tt> and <tt class="filename">/usr/local/lib</tt> directories, respectively. You
16
+ can override these locations by passing a few additional arguments to
17
+ <tt class="filename">install.rb</tt> during this step, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">ruby install.rb config -- \
18
+ --with-fox-include=/home/lyle/fox-1.0.34/include \
19
+ --with-fox-lib=/home/lyle/fox-1.0.34/src/.libs</b></pre></td></tr></table><p>Once the build has been configured, you can start the build by
20
+ typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">ruby install.rb setup</b></pre></td></tr></table><p>It will take quite awhile to build FXRuby, even on a fast machine,
21
+ so this might be a good time to take a coffee break. If you run into
22
+ problems during the compilation, please check the <a href="build.html#tragedies" title="Things That Can Go Wrong">list of things that can go wrong</a> for
23
+ workarounds for those problems.</p><p>Once it's finished compiling, install FXRuby by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">ruby install.rb install</b></pre></td></tr></table><p>As a quick sanity check, to make sure that all is well, you should
24
+ probably fire up <tt class="filename">irb</tt> and try to import FXRuby:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">irb</b>
25
+ irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
26
+ true
27
+ irb(main):002:0&gt;</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
28
+ "Cannot load library"), check the <a href="build.html#tragedies" title="Things That Can Go Wrong">list of things
29
+ that can go wrong</a> for known problems. If that still doesn't solve
30
+ your problem, drop me an e-mail or ask around on the Ruby newsgroup or
31
+ mailing list; it's quite likely that someone else has run into this
32
+ problem too. Once you do have a working FXRuby installation, you're ready
33
+ to check out the example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e163"></a>Building From Source on Windows (Using Visual C++)</h2></div></div><div></div></div><p>This section describes how to compile FXRuby using Microsoft Visual
34
+ C++, for use with a Ruby that was also compiled using Visual C++.</p><p>This discussion assumes that you've built Ruby using the
35
+ instructions and build files distributed with the standard Ruby source
36
+ code. To review, you should have started by unpacking the source code
37
+ tarball, changing into the top-level source code directory (e.g. <tt class="filename">C:\ruby-1.6.8</tt>) and then typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\ruby-1.6.8&gt;<b class="command">win32\configure</b>
38
+ type 'nmake' to make ruby for mswin32.
39
+ C:\ruby-1.6.8&gt;<b class="command">nmake</b></pre></td></tr></table><p>After the compilation finished, you installed Ruby somewhere by
40
+ typing, e.g.,</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\ruby-1.6.8&gt;<b class="command">nmake DESTDIR=C:\ruby install</b></pre></td></tr></table><p>Similarly, I'm assuming that you built the FOX library using the
41
+ Developer Studio project files distributed with the standard FOX source
42
+ code distribution. Although it's possible to build FXRuby against either
43
+ the static library build of FOX (<tt class="filename">fox.lib</tt>) or the DLL
44
+ build (<tt class="filename">foxdll.dll</tt>), these instructions currently
45
+ cover only the static library build. Before you get started building
46
+ FXRuby itself, you'll need to rename the static FOX library from its
47
+ default filename (<tt class="filename">fox.lib</tt>) to
48
+ <tt class="filename">foxst.lib</tt>. The reason for this rename is a charming
49
+ little quirk in Microsoft's LINK utility and the fact that the eventual
50
+ output name for the FXRuby DLL is also <tt class="filename">fox.so</tt>; for
51
+ now, just take my word for it. So if your FOX source code distribution and
52
+ build are found in the <tt class="filename">C:\fox-1.0.34</tt> directory, you'd need to rename
53
+ the file:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\fox-1.0.34\lib&gt;<b class="command">rename fox.lib foxst.lib</b></pre></td></tr></table><p>Now you can configure the FXRuby build by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\FXRuby-1.0.21&gt;<b class="command">ruby install.rb config --make-prog=nmake -- \
54
+ --with-fox-include=C:\fox-1.0.21\include \
55
+ --with-fox-lib=C:\fox-1.0.21\lib</b></pre></td></tr></table><p>Once the build has been configured, you can start the build by
56
+ typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\FXRuby-1.0.21&gt; <b class="command">ruby install.rb setup</b></pre></td></tr></table><p>It will take quite awhile to build FXRuby, even on a fast machine,
57
+ so this might be a good time to take a coffee break. Because Visual C++ is
58
+ such a strict compiler (usually a good thing), you will probably run into
59
+ a few problems with non-ANSI declarations in the Ruby header files. If you
60
+ do run into problems during the compilation, just check the next section
61
+ for a list of things that could go wrong, and workarounds for those
62
+ problems. None of them are showstoppers and none require you to restart
63
+ the compile from scratch (just type <b class="command">ruby install.rb
64
+ setup</b> to pick up where you left off).</p><p>Once it's finished compiling, install FXRuby by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\FXRuby-1.0.21&gt; <b class="command">ruby install.rb install</b></pre></td></tr></table><p>As a quick sanity check, to make sure that all is well, you should
65
+ probably fire up <tt class="filename">irb</tt> and try to import FXRuby:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\FXRuby-1.0.21&gt; <b class="command">irb</b>
66
+ irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
67
+ true
68
+ irb(main):002:0&gt;</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
69
+ "Cannot load library"), check the list of things that can go wrong for
70
+ known problems. If that still doesn't solve your problem, drop me an
71
+ e-mail or ask around on the Ruby newsgroup or mailing list; it's quite
72
+ likely that someone else has run into this problem too. Once you do have a
73
+ working FXRuby installation, you're ready to check out the example
74
+ programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="tragedies"></a>Things That Can Go Wrong</h2></div></div><div></div></div><p><span class="emphasis"><em>"Too many arguments to function..."</em></span></p><p>The include files for Ruby versions 1.6.7 and earlier still have
75
+ several function prototypes in the older "K &amp; R" C style, where the
76
+ function's argument list is not included; for example, the function
77
+ <tt class="function">rb_thread_wait_for()</tt> takes a single argument of type
78
+ <span class="type">struct timeval</span>, but its prototype in
79
+ <tt class="filename">intern.h</tt> is:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">void rb_thread_wait_for();</pre></td></tr></table><p>Because FXRuby is written in C++, and C++ requires strict ANSI
80
+ C-style function prototypes, code that attempts to call one of these
81
+ functions will fail to compile under some compilers. For example, the
82
+ error message from gcc will look something like this:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">FXRbApp.cpp: In method `long int FXRbApp::onChoreThreads (FXObject *, unsigned int, void *)':
83
+ /usr/local/lib/ruby/1.6/i686-linux/intern.h:172: too many arguments to function `void rb_thread_wait_for ()'
84
+ FXRbApp.cpp:100: at this point in file
85
+ make: *** [FXRbApp.o] Error 1</pre></td></tr></table><p>while the error message from Microsoft's Visual C++ compiler looks
86
+ something like this:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">FXRbApp.cpp(109): error C2660: 'rb_thread_wait_for' : function does not take 1 parameters
87
+ NMAKE : fatal error U1077: 'cl' : return code '0x2'
88
+ Stop.</pre></td></tr></table><p>This problem with the Ruby header files has been corrected for Ruby
89
+ versions 1.6.8 (and later), but if you're building for an older version of
90
+ Ruby you can do one of two things to work around the problem:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>If you're using gcc version 2.95 or earlier, try modifying the
91
+ compiler flags (<tt class="constant">CFLAGS</tt>) in the FXRuby
92
+ <tt class="filename">Makefile</tt> to include the
93
+ <tt class="option">-fno-strict-prototype</tt> option; this should instruct
94
+ the compiler to allow these kinds of discrepancies. Unfortunately,
95
+ this flag is not supported in more recent versions of gcc.</p></li><li style="list-style-type: disc"><p>A more direct approach is to just fix the offending declarations
96
+ in the Ruby include file(s), i.e. change the declaration for
97
+ <tt class="function">rb_thread_wait_for()</tt> in
98
+ <tt class="filename">intern.h</tt> to read:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">void rb_thread_wait_for(struct timeval);</pre></td></tr></table><p>and change the declaration for <tt class="function">rb_gc_mark()</tt>
99
+ in <tt class="filename">intern.h</tt> to read:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">void rb_gc_mark(VALUE);</pre></td></tr></table></li></ul></div><p><span class="emphasis"><em>"Virtual Memory Exhausted"</em></span></p><p>For FXRuby releases earlier than version 0.99.173 it was common for
100
+ the compiler to run out of memory trying to compile
101
+ <tt class="filename">core_wrap.cpp</tt>, with an error message like:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">core_wrap.cpp: In function 'void Init_core()':
102
+ core_wrap.cpp:108596: virtual memory exhausted</pre></td></tr></table><p>This failure was due to the use of optimizations by the compiler;
103
+ the FXRuby source code makes heavy use of C++ templates and some versions
104
+ of gcc require a lot of memory to process these. Starting with FXRuby
105
+ version 0.99.173, the <tt class="filename">extconf.rb</tt> script
106
+ <span class="emphasis"><em>should</em></span> disable compiler optimizations when it
107
+ generates the FXRuby <tt class="filename">Makefile</tt>. If you suspect that
108
+ it's not disabling optimizations (or can see this by watching the compile
109
+ command lines), try modifying the compiler flags
110
+ (<tt class="constant">CFLAGS</tt>) in the <tt class="filename">Makefile</tt> by hand
111
+ to do so.</p><p><span class="emphasis"><em>"Cannot load library"</em></span></p><p>On Linux and other Unix systems that support shared libraries, FOX
112
+ is typically installed as a shared library named
113
+ <tt class="filename">libFOX.so</tt>. After all of the source files for FXRuby
114
+ are compiled, the last step is to link all of the FXRuby object files
115
+ together with the FOX library (and possibly other system libraries) to
116
+ produce a new shared library, named <tt class="filename">fox.so</tt>, that Ruby
117
+ can import as an extension module.</p><p>There are a few things that can go wrong when you try to import this
118
+ extension into Ruby. A common problem is that the operating system cannot
119
+ locate the FOX shared library (<tt class="filename">libFOX.so</tt>) when it
120
+ tries to dynamically load the FXRuby extension module; when this happens,
121
+ the error message will look something like:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">irb</b>
122
+ irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
123
+ LoadError: libFOX-0.99.so.173: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/1.6/i586-linux/fox.so
124
+ from (irb):1:in 'require'
125
+ from (irb):1
126
+ </pre></td></tr></table><p>One workaround for this problem is to modify the
127
+ <tt class="constant">LD_LIBRARY_PATH</tt> environment variable to include the
128
+ directory where <tt class="filename">libFOX.so</tt> is installed. For example,
129
+ if <tt class="filename">libFOX.so</tt> is installed in <tt class="filename">/usr/local/lib</tt>, try setting:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">export LD_LIBRARY_PATH=/usr/local/lib</b>
130
+ $ <b class="command">irb</b>
131
+ irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
132
+ </pre></td></tr></table><p>If this works, you can of course permanently add the
133
+ <tt class="constant">LD_LIBRARY_PATH</tt> setting to your login file(s) so that
134
+ you don't have to remember to type it each time. Another approach that
135
+ should work for Linux is to modify your
136
+ <tt class="filename">/etc/ld.so.conf</tt> file to include the installation
137
+ directory (e.g. <tt class="filename">/usr/local/lib</tt>). If you'd like to do
138
+ this instead, you'll need to (as root):</p><div class="orderedlist"><ol type="1" compact><li><p>Edit your <tt class="filename">/etc/ld.so.conf</tt> file and add the
139
+ directory where <tt class="filename">libFOX.so</tt> is installed;
140
+ and,</p></li><li><p>At the shell prompt, type <b class="command">ldconfig</b> to reload
141
+ the linker configuration.</p></li></ol></div><p><span class="emphasis"><em>"Undefined symbol..."</em></span></p><p>Another problem that has been reported by users of both Debian
142
+ GNU/Linux and NetBSD 1.5 is an error message along the lines of:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">/usr/lib/libstdc++.so.2: Undefined symbol "__vt_9exception"...</pre></td></tr></table><p>The fix for this problem is reported to be to modify the FXRuby
143
+ <tt class="filename">Makefile</tt> and add <tt class="option">-lgcc</tt> to the
144
+ <tt class="constant">LIBS</tt> line.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="goals.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt01.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="gems.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">History and Goals&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;2.&nbsp;Installing from Gems</td></tr></table></div></body></html>
@@ -0,0 +1,24 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Better living through buttons</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"><link rel="previous" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"><link rel="next" href="ch03s03.html" title="Messages"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Better living through buttons</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="tutorial1.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Hello, World!</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e746"></a>Better living through buttons</h2></div></div><div></div></div><p>Obviously, we need to add a few things to make it more interesting.
4
+ Let's start by putting a button inside the main window. The
5
+ <tt class="classname">FXButton</tt> class provides a standard push-button
6
+ widget:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
7
+ require_gem 'fxruby'
8
+
9
+ include Fox
10
+
11
+ theApp = FXApp.new
12
+
13
+ theMainWindow = FXMainWindow.new(theApp, "Hello")
14
+ <span class="bold"><b>FXButton.new(theMainWindow, "Hello, World!")</b></span>
15
+ theApp.create
16
+
17
+ theMainWindow.show
18
+
19
+ theApp.run</pre></td></tr></table><p>As you might guess, passing <i class="parameter"><tt>theMainWindow</tt></i> as
20
+ the first argument to <tt class="methodname">FXButton.new</tt> tells FXRuby
21
+ that the new button is a child of the main window. The second argument to
22
+ <tt class="methodname">FXButton.new</tt> is a string that will be displayed
23
+ on the button. If you run the program <span class="emphasis"><em>now</em></span>, you should
24
+ see this:</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello-with-button.png" align="middle"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="tutorial1.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial1.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;3.&nbsp;Hello, World!&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Messages</td></tr></table></div></body></html>
@@ -0,0 +1,53 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Messages</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"><link rel="previous" href="ch03s02.html" title="Better living through buttons"><link rel="next" href="ch03s04.html" title="Adding a tool tip"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Messages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Hello, World!</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e777"></a>Messages</h2></div></div><div></div></div><p>Now we're cookin' with Crisco, but let's press on and see what other
4
+ things we can do to improve this. You may have noticed by now that the
5
+ only way to quit the program is to close the window using the window
6
+ manager's "close window" option, or to just kill the program outright. We
7
+ can do better than that. Let's add a message handler for the
8
+ <tt class="classname">FXButton</tt> such that when you click the button, it
9
+ causes the program to exit:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
10
+ require_gem 'fxruby'
11
+
12
+ include Fox
13
+
14
+ theApp = FXApp.new
15
+
16
+ theMainWindow = FXMainWindow.new(theApp, "Hello")
17
+ theButton = FXButton.new(theMainWindow, "Hello, World!")
18
+ <span class="bold"><b>theButton.connect(SEL_COMMAND) do |sender, selector, data|
19
+ exit
20
+ end</b></span>
21
+ theApp.create
22
+
23
+ theMainWindow.show
24
+
25
+ theApp.run</pre></td></tr></table><p>Most FOX objects send out messages (also known as
26
+ <span class="emphasis"><em>events</em></span>) when something interesting happens. FOX
27
+ messages have four important elements:</p><div class="orderedlist"><ol type="1"><li><p>The message <span class="emphasis"><em>sender</em></span> is the object that sends
28
+ the message. In this case, the <tt class="classname">FXButton</tt>
29
+ instance is the sender.</p></li><li><p>The message <span class="emphasis"><em>type</em></span> is a predefined integer
30
+ constant that indicates what kind of event has occurred (i.e. why this
31
+ message is being sent). In this case, the message type is
32
+ <tt class="constant">SEL_COMMAND</tt>, which indicates that the command
33
+ associated with this widget should be invoked.</p></li><li><p>The message <span class="emphasis"><em>identifier</em></span> is another integer
34
+ constant that is used to distinguish between different messages of the
35
+ same type. For example, the message that tells a FOX window to make
36
+ itself visible is a <tt class="constant">SEL_COMMAND</tt> message with the
37
+ identifier <tt class="constant">FXWindow::ID_SHOW</tt> (where
38
+ <tt class="constant">ID_SHOW</tt> is a constant defined in the
39
+ <tt class="classname">FXWindow</tt> class). A different message
40
+ identifier, <tt class="constant">FXWindow::ID_HIDE</tt>, tells an
41
+ <tt class="classname">FXWindow</tt> instance to make itself
42
+ invisible.</p></li><li><p>The message <span class="emphasis"><em>data</em></span> is an object containing
43
+ message-specific information. For this case (the
44
+ <tt class="classname">FXButton</tt>'s <tt class="constant">SEL_COMMAND</tt>
45
+ message, there is no interesting message data, but we'll see other
46
+ kinds of messages where the message data is useful.</p></li></ol></div><p>For historical reasons, the message type and identifier are usually
47
+ packed into a single 32-bit unsigned integer known as the
48
+ <span class="emphasis"><em>selector</em></span>, and this is the value that is passed into
49
+ the message handler block. Since we don't actually need to use the
50
+ <i class="parameter"><tt>sender</tt></i>, <i class="parameter"><tt>selector</tt></i> or
51
+ <i class="parameter"><tt>data</tt></i> arguments for this particular message handler,
52
+ we can just ignore them and shorten the code to:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">theButton.connect(SEL_COMMAND) { exit }</pre></td></tr></table><p>Re-run the program and push the button to convince yourself that it
53
+ works.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial1.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Better living through buttons&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Adding a tool tip</td></tr></table></div></body></html>
@@ -0,0 +1,37 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Adding a tool tip</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"><link rel="previous" href="ch03s03.html" title="Messages"><link rel="next" href="ch03s05.html" title="Adding an icon"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Adding a tool tip</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Hello, World!</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s05.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e868"></a>Adding a tool tip</h2></div></div><div></div></div><p>To wrap up this introduction, we'd like to add a few finishing
4
+ touches to the program. The first addition is to add a tool tip to the
5
+ button, such that when the mouse cursor hovers over the button for a short
6
+ while, it will pop up a little message describing what the button
7
+ does:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
8
+ require_gem 'fxruby'
9
+
10
+ include Fox
11
+
12
+ theApp = FXApp.new
13
+
14
+ theMainWindow = FXMainWindow.new(theApp, "Hello")
15
+
16
+ theButton = FXButton.new(theMainWindow, "Hello, World!")
17
+ <span class="bold"><b>theButton.tipText = "Push Me!"</b></span>
18
+ theButton.connect(SEL_COMMAND) { exit }
19
+
20
+ <span class="bold"><b>FXToolTip.new(theApp)</b></span>
21
+
22
+ theApp.create
23
+
24
+ theMainWindow.show
25
+
26
+ theApp.run</pre></td></tr></table><p>There are two changes involved here. The first is to set the tool
27
+ tip text for the button using the <tt class="methodname">tipText</tt>
28
+ accessor, and for this example we're setting the button's tip text to
29
+ "Push Me!". The second change is to create the (single)
30
+ <tt class="classname">FXToolTip</tt> instance for the application. Although
31
+ this program shows the <tt class="classname">FXToolTip</tt> instance being
32
+ created after the <tt class="classname">FXButton</tt>, it doesn't really
33
+ matter when you do it. You just want to have instantiated the
34
+ <tt class="classname">FXToolTip</tt> before you drop into the main event loop
35
+ by calling <tt class="methodname">FXApp#run</tt>. If you run this version and
36
+ hover over the button for a second or so, you should see the tooltip pop
37
+ up:</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello-with-tooltip.png" align="middle"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial1.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Messages&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Adding an icon</td></tr></table></div></body></html>
@@ -0,0 +1,61 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Adding an icon</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"><link rel="previous" href="ch03s04.html" title="Adding a tool tip"><link rel="next" href="clipboardtut.html" title="Chapter&nbsp;4.&nbsp;Working With the Clipboard"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Adding an icon</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s04.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;3.&nbsp;Hello, World!</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="clipboardtut.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e905"></a>Adding an icon</h2></div></div><div></div></div><p>The final change is to add an icon to the button to make things a
4
+ little more festive. FOX supports all of the popular image file formats
5
+ (e.g. BMP, GIF, JPEG, PNG and TIFF) and you can use any of them as icons
6
+ on buttons and labels. For this example, we'll use the one of the "Powered
7
+ By Ruby" images created by Hal Fulton (and posted at the <a href="http://www.rubygarden.org/ruby?PoweredByRubyButtons" target="_top">Ruby Garden
8
+ Wiki</a>):</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
9
+ require_gem 'fxruby'
10
+
11
+ include Fox
12
+
13
+ theApp = FXApp.new
14
+
15
+ theMainWindow = FXMainWindow.new(theApp, "Hello")
16
+
17
+ theButton = FXButton.new(theMainWindow, "Hello, World!")
18
+ theButton.tipText = "Push Me!"
19
+ <span class="bold"><b>iconFile = File.open("pbr.jpg", "rb")
20
+ theButton.icon = FXJPGIcon.new(theApp, iconFile.read)
21
+ iconFile.close</b></span>
22
+ theButton.connect(SEL_COMMAND) { exit }
23
+
24
+ FXToolTip.new(theApp)
25
+
26
+ theApp.create
27
+
28
+ theMainWindow.show
29
+
30
+ theApp.run</pre></td></tr></table><p>Here, <tt class="filename">pbr.jpg</tt> is the file name of the JPEG
31
+ image file. You want to be sure to open the file in
32
+ <span class="emphasis"><em>binary</em></span> mode (i.e. including the "b" mode flag),
33
+ because there is a difference on the Windows platform. Since it's a JPEG
34
+ image, we need to use the <tt class="classname">FXJPGIcon</tt> class to
35
+ instantiate this icon. The first argument to
36
+ <tt class="methodname">FXJPGIcon.new</tt> is just a reference to the
37
+ <tt class="classname">FXApp</tt> instance, and the second argument is the
38
+ contents of the image file. We associate this icon object with our button
39
+ using the button's <tt class="methodname">icon</tt> accessor method. If you
40
+ run this example, you should see:</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello-with-icon-1.png" align="middle"></div></div><p>When you have both text and an icon displayed on a button (or its
41
+ superclass, <tt class="classname">FXLabel</tt>) the default positioning is to
42
+ display the icon to the left of the text. For this particular example,
43
+ however, it would probably be more appropriate to display the icon
44
+ <span class="emphasis"><em>above</em></span> the text. We can achieve this using the
45
+ button's <tt class="methodname">iconPosition</tt> accessor method:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">theButton.iconPosition = ICON_ABOVE_TEXT</pre></td></tr></table><p>If you re-run the program after adding this line, you should
46
+ see:</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello-with-icon-2.png" align="middle"></div></div><p>The last change we're going to make is to make the icon transparent.
47
+ FOX allows you to specify that some regions of an icon should be treated
48
+ as "transparent", meaning that whatever's underneath them shows through.
49
+ FOX distinguishes those transparent regions from the non-transparent ones
50
+ using a transparency color, and any pixels in the original image that have
51
+ that color become transparent. In most cases, FOX can determine this
52
+ transparency color automatically (indeed, for image file formats like GIF
53
+ it's part of the image information). You can also specify the transparency
54
+ color explicitly if you like.</p><p>For the icon we've chosen, it's pretty obvious that the transparency
55
+ color is white, but let's let FOX figure that out for us. We want to
56
+ activate two options for the icon:</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>the <tt class="constant">IMAGE_ALPHACOLOR</tt> option, which tells
57
+ FOX that some regions of this image should be treated as transparent;
58
+ and,</p></li><li style="list-style-type: disc"><p>the <tt class="constant">IMAGE_ALPHAGUESS</tt> option, which tells
59
+ FOX to guess the appropriate transparency color using the colors used
60
+ in the four corners of the image.</p></li></ul></div><p>To set these options, add this line to the program:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">theButton.icon.options = IMAGE_ALPHACOLOR | IMAGE_ALPHAGUESS</pre></td></tr></table><p>and then re-run the program after making this change to see the
61
+ final result:</p><div class="screenshot"><div class="mediaobject" align="center"><img src="images/hello-with-icon-3.png" align="middle"></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s04.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="tutorial1.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="clipboardtut.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Adding a tool tip&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;4.&nbsp;Working With the Clipboard</td></tr></table></div></body></html>
@@ -0,0 +1,72 @@
1
+ <html><head>
2
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
+ <title>Acquiring the Clipboard</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="clipboardtut.html" title="Chapter&nbsp;4.&nbsp;Working With the Clipboard"><link rel="previous" href="clipboardtut.html" title="Chapter&nbsp;4.&nbsp;Working With the Clipboard"><link rel="next" href="ch04s03.html" title="Sending Data to the Clipboard"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acquiring the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="clipboardtut.html">Prev</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;4.&nbsp;Working With the Clipboard</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1027"></a>Acquiring the Clipboard</h2></div></div><div></div></div><p>Let's begin by augmenting the GUI to include a row of buttons along
4
+ the bottom of the main window for copying and pasting:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
5
+ require_gem 'fxruby'
6
+ require 'customer'
7
+
8
+ include Fox
9
+
10
+ class ClipMainWindow &lt; FXMainWindow
11
+ def initialize(anApp)
12
+ # Initialize base class first
13
+ super(anApp, "Clipboard Example", nil, nil, DECOR_ALL, 0, 0, 400, 300)
14
+ <span class="bold"><b>
15
+ # Horizontal frame contains buttons
16
+ buttons = FXHorizontalFrame.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|PACK_UNIFORM_WIDTH)
17
+ </b></span><span class="bold"><b>
18
+ # Cut and paste buttons
19
+ copyButton = FXButton.new(buttons, "Copy")
20
+ pasteButton = FXButton.new(buttons, "Paste")
21
+ </b></span>
22
+ # Place the list in a sunken frame
23
+ sunkenFrame = FXVerticalFrame.new(self, LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_SUNKEN|FRAME_THICK,
24
+ 0, 0, 0, 0, 0, 0, 0, 0)
25
+
26
+ # Customer list
27
+ customerList = FXList.new(sunkenFrame, nil, 0, LIST_BROWSESELECT|LAYOUT_FILL_X|LAYOUT_FILL_Y)
28
+ $customers.each do |customer|
29
+ customerList.appendItem(customer.name, nil, customer)
30
+ end
31
+ end
32
+
33
+ def create
34
+ super
35
+ show(PLACEMENT_SCREEN)
36
+ end
37
+ end
38
+
39
+ if __FILE__ == $0
40
+ FXApp.new("ClipboardExample", "FXRuby") do |theApp|
41
+ ClipMainWindow.new(theApp)
42
+ theApp.create
43
+ theApp.run
44
+ end
45
+ end
46
+ </pre></td></tr></table><p>Note that the lines which appear in bold face are those which have
47
+ been added (or changed) since the previous source code listing.</p><p>The clipboard is a kind of shared resource in the operating system.
48
+ Copying (or cutting) data to the clipboard begins with some window in your
49
+ application requesting "ownership" of the clipboard by calling the
50
+ <tt class="methodname">acquireClipboard()</tt> instance method. Let's add a
51
+ handler for the "Copy" button press which does just that:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting"># User clicks Copy
52
+ copyButton.connect(SEL_COMMAND) do
53
+ customer = customerList.getItemData(customerList.currentItem)
54
+ types = [ FXWindow.stringType ]
55
+ if acquireClipboard(types)
56
+ @clippedCustomer = customer
57
+ end
58
+ end
59
+ </pre></td></tr></table><p>The <tt class="methodname">acquireClipboard()</tt> method takes as its
60
+ input an array of drag types. A <span class="emphasis"><em>drag type</em></span> is just a
61
+ unique value, assigned by the window system, that identifies a particular
62
+ kind of data. In this case, we're using one of FOX's pre-registered drag
63
+ types (<tt class="constant">stringType</tt>) to indicate that we have some
64
+ string data to place on the clipboard. Later, we'll see how to register
65
+ customized, application-specific drag types as well.</p><p>The <tt class="methodname">acquireClipboard()</tt> method returns
66
+ <tt class="constant">true</tt> on success; since we called
67
+ <tt class="methodname">acquireClipboard()</tt> on the main window, this means
68
+ that the main window is now the clipboard owner. At this time, we want to
69
+ save a reference to the currently selected customer in the
70
+ <tt class="varname">@clippedCustomer</tt> instance variable so that if its value
71
+ is requested later, we'll be able to return the
72
+ <span class="emphasis"><em>correct</em></span> customer's information.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="clipboardtut.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="clipboardtut.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;4.&nbsp;Working With the Clipboard&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Sending Data to the Clipboard</td></tr></table></div></body></html>