fxruby 1.2.6 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (437) hide show
  1. data/ChangeLog +0 -90
  2. data/doc/apes02.html +2 -2
  3. data/doc/apes03.html +1 -1
  4. data/doc/book.html +1 -1
  5. data/doc/build.html +26 -26
  6. data/doc/ch03s02.html +1 -2
  7. data/doc/ch03s03.html +1 -2
  8. data/doc/ch03s04.html +1 -2
  9. data/doc/ch03s05.html +1 -2
  10. data/doc/changes.html +12 -7
  11. data/doc/cvs.html +2 -2
  12. data/doc/differences.html +3 -3
  13. data/doc/gems.html +44 -44
  14. data/doc/implementation.html +1 -1
  15. data/doc/library.html +5 -5
  16. data/doc/opengl.html +5 -5
  17. data/doc/pt02.html +1 -1
  18. data/doc/scintilla.html +6 -6
  19. data/doc/tutorial1.html +8 -15
  20. data/examples/babelfish.rb +6 -16
  21. data/examples/bounce.rb +1 -1
  22. data/examples/browser.rb +1 -1
  23. data/examples/button.rb +1 -1
  24. data/examples/datatarget.rb +2 -2
  25. data/examples/dctest.rb +1 -1
  26. data/examples/dialog.rb +1 -1
  27. data/examples/dilbert.rb +2 -2
  28. data/examples/dirlist.rb +1 -1
  29. data/examples/dragdrop.rb +1 -1
  30. data/examples/dragsource.rb +1 -1
  31. data/examples/dropsite.rb +1 -1
  32. data/examples/foursplit.rb +1 -1
  33. data/examples/gltest.rb +2 -2
  34. data/examples/glviewer.rb +4 -4
  35. data/examples/groupbox.rb +2 -2
  36. data/examples/header.rb +3 -3
  37. data/examples/hello.rb +1 -1
  38. data/examples/hello2.rb +1 -1
  39. data/examples/iconlist.rb +16 -1
  40. data/examples/image.rb +2 -2
  41. data/examples/imageviewer.rb +1 -1
  42. data/examples/inputs.rb +1 -1
  43. data/examples/mditest.rb +2 -2
  44. data/examples/pig.rb +1 -1
  45. data/examples/raabrowser.rb +2 -2
  46. data/examples/ratio.rb +2 -2
  47. data/examples/scintilla-test.rb +2 -2
  48. data/examples/scribble-orig.rb +3 -3
  49. data/examples/scribble.rb +1 -1
  50. data/examples/shutter.rb +1 -1
  51. data/examples/splitter.rb +1 -1
  52. data/examples/styledtext.rb +2 -2
  53. data/examples/tabbook.rb +1 -1
  54. data/examples/table.rb +1 -1
  55. data/ext/{fox12 → fox14}/FXRbApp.cpp +7 -13
  56. data/ext/{fox12 → fox14}/FXRbDataTarget.cpp +5 -1
  57. data/ext/{fox12 → fox14}/FXRbGLViewer.cpp +1 -1
  58. data/ext/{fox12 → fox14}/FXRuby.cpp +49 -14
  59. data/ext/{fox12 → fox14}/MANIFEST +0 -0
  60. data/ext/{fox12 → fox14}/core_wrap.cpp +1098 -390
  61. data/ext/{fox12 → fox14}/dc_wrap.cpp +61 -1
  62. data/ext/{fox12 → fox14}/dialogs_wrap.cpp +2293 -939
  63. data/ext/{fox12 → fox14}/extconf.rb +8 -8
  64. data/ext/{fox12 → fox14}/frames_wrap.cpp +1396 -395
  65. data/ext/{fox12 → fox14}/fx3d_wrap.cpp +884 -363
  66. data/ext/{fox12 → fox14}/iconlist_wrap.cpp +338 -117
  67. data/ext/{fox12 → fox14}/icons_wrap.cpp +668 -61
  68. data/ext/{fox12 → fox14}/image_wrap.cpp +245 -164
  69. data/ext/{fox12 → fox14}/impl.cpp +58 -2
  70. data/ext/{fox12 → fox14}/include/FXMemoryBuffer.h +1 -1
  71. data/ext/{fox12 → fox14}/include/FXRb4Splitter.h +1 -1
  72. data/ext/fox14/include/FXRb7Segment.h +51 -0
  73. data/ext/{fox12 → fox14}/include/FXRbAccelTable.h +1 -1
  74. data/ext/{fox12 → fox14}/include/FXRbApp.h +1 -2
  75. data/ext/{fox12 → fox14}/include/FXRbAppVirtuals.h +0 -0
  76. data/ext/{fox12 → fox14}/include/FXRbArrowButton.h +1 -1
  77. data/ext/{fox12 → fox14}/include/FXRbBMPIcon.h +1 -1
  78. data/ext/{fox12 → fox14}/include/FXRbBMPImage.h +1 -1
  79. data/ext/{fox12 → fox14}/include/FXRbBitmap.h +5 -5
  80. data/ext/{fox12 → fox14}/include/FXRbBitmapFrame.h +1 -1
  81. data/ext/{fox12 → fox14}/include/FXRbBitmapView.h +1 -1
  82. data/ext/{fox12 → fox14}/include/FXRbBitmapVirtuals.h +1 -1
  83. data/ext/{fox12 → fox14}/include/FXRbButton.h +1 -1
  84. data/ext/{fox12 → fox14}/include/FXRbCURCursor.h +1 -1
  85. data/ext/{fox12 → fox14}/include/FXRbCanvas.h +1 -1
  86. data/ext/{fox12 → fox14}/include/FXRbCheckButton.h +1 -1
  87. data/ext/fox14/include/FXRbChoiceBox.h +56 -0
  88. data/ext/{fox12 → fox14}/include/FXRbColorBar.h +1 -1
  89. data/ext/{fox12 → fox14}/include/FXRbColorDialog.h +1 -1
  90. data/ext/{fox12 → fox14}/include/FXRbColorSelector.h +1 -1
  91. data/ext/{fox12 → fox14}/include/FXRbColorWell.h +1 -1
  92. data/ext/{fox12 → fox14}/include/FXRbColorWheel.h +1 -1
  93. data/ext/{fox12 → fox14}/include/FXRbComboBox.h +1 -1
  94. data/ext/{fox12 → fox14}/include/FXRbCommon.h +1 -1
  95. data/ext/{fox12 → fox14}/include/FXRbComposite.h +1 -1
  96. data/ext/{fox12 → fox14}/include/FXRbCursor.h +1 -1
  97. data/ext/{fox12 → fox14}/include/FXRbCursorVirtuals.h +0 -0
  98. data/ext/{fox12 → fox14}/include/FXRbDC.h +25 -1
  99. data/ext/{fox12 → fox14}/include/FXRbDCPrint.h +1 -1
  100. data/ext/{fox12 → fox14}/include/FXRbDCVirtuals.h +12 -0
  101. data/ext/{fox12 → fox14}/include/FXRbDCWindow.h +1 -1
  102. data/ext/{fox12 → fox14}/include/FXRbDataTarget.h +1 -1
  103. data/ext/{fox12 → fox14}/include/FXRbDebugTarget.h +1 -1
  104. data/ext/{fox12 → fox14}/include/FXRbDelegator.h +1 -1
  105. data/ext/{fox12 → fox14}/include/FXRbDial.h +1 -1
  106. data/ext/{fox12 → fox14}/include/FXRbDialogBox.h +1 -1
  107. data/ext/{fox12 → fox14}/include/FXRbDialogBoxVirtuals.h +0 -0
  108. data/ext/{fox12 → fox14}/include/FXRbDict.h +1 -1
  109. data/ext/{fox12 → fox14}/include/FXRbDirBox.h +2 -1
  110. data/ext/{fox12 → fox14}/include/FXRbDirDialog.h +4 -1
  111. data/ext/{fox12 → fox14}/include/FXRbDirList.h +1 -1
  112. data/ext/{fox12 → fox14}/include/FXRbDirSelector.h +1 -1
  113. data/ext/fox14/include/FXRbDockBar.h +86 -0
  114. data/ext/fox14/include/FXRbDockBarVirtuals.h +10 -0
  115. data/ext/fox14/include/FXRbDockHandler.h +51 -0
  116. data/ext/fox14/include/FXRbDockSite.h +85 -0
  117. data/ext/fox14/include/FXRbDockSiteVirtuals.h +13 -0
  118. data/ext/fox14/include/FXRbDockTitle.h +51 -0
  119. data/ext/{fox12 → fox14}/include/FXRbDocument.h +1 -1
  120. data/ext/{fox12 → fox14}/include/FXRbDragCorner.h +1 -1
  121. data/ext/{fox12 → fox14}/include/FXRbDrawable.h +1 -1
  122. data/ext/{fox12 → fox14}/include/FXRbDrawableVirtuals.h +0 -0
  123. data/ext/{fox12 → fox14}/include/FXRbDriveBox.h +2 -1
  124. data/ext/{fox12 → fox14}/include/FXRbFileDialog.h +1 -1
  125. data/ext/{fox12 → fox14}/include/FXRbFileDict.h +1 -1
  126. data/ext/{fox12 → fox14}/include/FXRbFileDictVirtuals.h +0 -0
  127. data/ext/{fox12 → fox14}/include/FXRbFileList.h +1 -1
  128. data/ext/{fox12 → fox14}/include/FXRbFileSelector.h +1 -1
  129. data/ext/{fox12 → fox14}/include/FXRbFoldingItemVirtuals.h +2 -5
  130. data/ext/{fox12 → fox14}/include/FXRbFoldingList.h +98 -15
  131. data/ext/fox14/include/FXRbFoldingListVirtuals.h +43 -0
  132. data/ext/{fox12 → fox14}/include/FXRbFont.h +1 -1
  133. data/ext/{fox12 → fox14}/include/FXRbFontDialog.h +1 -1
  134. data/ext/{fox12 → fox14}/include/FXRbFontSelector.h +1 -1
  135. data/ext/{fox12 → fox14}/include/FXRbFrame.h +1 -1
  136. data/ext/{fox12 → fox14}/include/FXRbGIFCursor.h +1 -1
  137. data/ext/{fox12 → fox14}/include/FXRbGIFIcon.h +1 -1
  138. data/ext/{fox12 → fox14}/include/FXRbGIFImage.h +1 -1
  139. data/ext/{fox12 → fox14}/include/FXRbGLCanvas.h +1 -1
  140. data/ext/{fox12 → fox14}/include/FXRbGLCanvasVirtuals.h +0 -0
  141. data/ext/{fox12 → fox14}/include/FXRbGLContext.h +1 -1
  142. data/ext/{fox12 → fox14}/include/FXRbGLObject.h +1 -1
  143. data/ext/{fox12 → fox14}/include/FXRbGLObjectVirtuals.h +0 -0
  144. data/ext/{fox12 → fox14}/include/FXRbGLShape.h +1 -1
  145. data/ext/{fox12 → fox14}/include/FXRbGLShapeVirtuals.h +0 -0
  146. data/ext/{fox12 → fox14}/include/FXRbGLViewer.h +7 -1
  147. data/ext/{fox12 → fox14}/include/FXRbGLViewerVirtuals.h +4 -0
  148. data/ext/{fox12 → fox14}/include/FXRbGLVisual.h +1 -1
  149. data/ext/{fox12 → fox14}/include/FXRbGradientBar.h +1 -1
  150. data/ext/{fox12 → fox14}/include/FXRbGroupBox.h +1 -1
  151. data/ext/{fox12 → fox14}/include/FXRbHeader.h +1 -1
  152. data/ext/{fox12 → fox14}/include/FXRbHeaderItemVirtuals.h +0 -0
  153. data/ext/{fox12 → fox14}/include/FXRbHorizontalFrame.h +1 -1
  154. data/ext/{fox12 → fox14}/include/FXRbICOIcon.h +1 -1
  155. data/ext/{fox12 → fox14}/include/FXRbICOImage.h +1 -1
  156. data/ext/{fox12 → fox14}/include/FXRbIcon.h +1 -1
  157. data/ext/{fox12 → fox14}/include/FXRbIconItemVirtuals.h +2 -5
  158. data/ext/{fox12 → fox14}/include/FXRbIconList.h +33 -15
  159. data/ext/{fox12 → fox14}/include/FXRbIconListVirtuals.h +14 -0
  160. data/ext/fox14/include/FXRbIconSource.h +127 -0
  161. data/ext/fox14/include/FXRbIconSourceVirtuals.h +37 -0
  162. data/ext/{fox12 → fox14}/include/FXRbId.h +1 -1
  163. data/ext/{fox12 → fox14}/include/FXRbIdVirtuals.h +0 -0
  164. data/ext/{fox12 → fox14}/include/FXRbImage.h +5 -5
  165. data/ext/{fox12 → fox14}/include/FXRbImageFrame.h +1 -1
  166. data/ext/{fox12 → fox14}/include/FXRbImageView.h +1 -1
  167. data/ext/{fox12 → fox14}/include/FXRbImageVirtuals.h +1 -1
  168. data/ext/{fox12 → fox14}/include/FXRbInputDialog.h +4 -1
  169. data/ext/{fox12 → fox14}/include/FXRbJPGIcon.h +1 -1
  170. data/ext/{fox12 → fox14}/include/FXRbJPGImage.h +1 -1
  171. data/ext/{fox12 → fox14}/include/FXRbLabel.h +1 -1
  172. data/ext/{fox12 → fox14}/include/FXRbList.h +29 -11
  173. data/ext/{fox12 → fox14}/include/FXRbListBox.h +12 -1
  174. data/ext/fox14/include/FXRbListBoxVirtuals.h +4 -0
  175. data/ext/{fox12 → fox14}/include/FXRbListItemVirtuals.h +1 -4
  176. data/ext/{fox12 → fox14}/include/FXRbListVirtuals.h +12 -0
  177. data/ext/{fox12 → fox14}/include/FXRbMDIButton.h +1 -1
  178. data/ext/{fox12 → fox14}/include/FXRbMDIChild.h +1 -1
  179. data/ext/{fox12 → fox14}/include/FXRbMDIChildVirtuals.h +0 -0
  180. data/ext/{fox12 → fox14}/include/FXRbMDIClient.h +1 -1
  181. data/ext/{fox12 → fox14}/include/FXRbMDIClientVirtuals.h +0 -0
  182. data/ext/{fox12 → fox14}/include/FXRbMainWindow.h +1 -1
  183. data/ext/{fox12 → fox14}/include/FXRbMatrix.h +1 -1
  184. data/ext/{fox12 → fox14}/include/FXRbMenuBar.h +2 -2
  185. data/ext/{fox12 → fox14}/include/FXRbMenuButton.h +1 -1
  186. data/ext/{fox12 → fox14}/include/FXRbMenuCaption.h +1 -1
  187. data/ext/{fox12 → fox14}/include/FXRbMenuCascade.h +1 -1
  188. data/ext/{fox12 → fox14}/include/FXRbMenuCheck.h +1 -1
  189. data/ext/{fox12 → fox14}/include/FXRbMenuCommand.h +1 -1
  190. data/ext/{fox12 → fox14}/include/FXRbMenuPane.h +1 -1
  191. data/ext/{fox12 → fox14}/include/FXRbMenuRadio.h +1 -1
  192. data/ext/{fox12 → fox14}/include/FXRbMenuSeparator.h +1 -1
  193. data/ext/{fox12 → fox14}/include/FXRbMenuTitle.h +1 -1
  194. data/ext/{fox12 → fox14}/include/FXRbMessageBox.h +1 -1
  195. data/ext/{fox12 → fox14}/include/FXRbObject.h +1 -1
  196. data/ext/{fox12 → fox14}/include/FXRbObjectVirtuals.h +0 -0
  197. data/ext/{fox12 → fox14}/include/FXRbOptionMenu.h +1 -1
  198. data/ext/{fox12 → fox14}/include/FXRbPCXIcon.h +1 -1
  199. data/ext/{fox12 → fox14}/include/FXRbPCXImage.h +1 -1
  200. data/ext/{fox12 → fox14}/include/FXRbPNGIcon.h +1 -1
  201. data/ext/{fox12 → fox14}/include/FXRbPNGImage.h +1 -1
  202. data/ext/{fox12 → fox14}/include/FXRbPPMIcon.h +1 -1
  203. data/ext/{fox12 → fox14}/include/FXRbPPMImage.h +1 -1
  204. data/ext/{fox12 → fox14}/include/FXRbPacker.h +1 -1
  205. data/ext/{fox12 → fox14}/include/FXRbPicker.h +1 -1
  206. data/ext/{fox12 → fox14}/include/FXRbPopup.h +1 -1
  207. data/ext/{fox12 → fox14}/include/FXRbPopupVirtuals.h +0 -0
  208. data/ext/{fox12 → fox14}/include/FXRbPrintDialog.h +1 -1
  209. data/ext/{fox12 → fox14}/include/FXRbProgressBar.h +1 -1
  210. data/ext/{fox12 → fox14}/include/FXRbProgressDialog.h +1 -1
  211. data/ext/{fox12 → fox14}/include/FXRbRGBIcon.h +1 -1
  212. data/ext/{fox12 → fox14}/include/FXRbRGBImage.h +1 -1
  213. data/ext/{fox12 → fox14}/include/FXRbRadioButton.h +1 -1
  214. data/ext/{fox12 → fox14}/include/FXRbRealSlider.h +1 -1
  215. data/ext/{fox12 → fox14}/include/FXRbRealSpinner.h +1 -1
  216. data/ext/{fox12 → fox14}/include/FXRbRealSpinnerVirtuals.h +0 -0
  217. data/ext/{fox12 → fox14}/include/FXRbRecentFiles.h +1 -1
  218. data/ext/{fox12 → fox14}/include/FXRbRegistry.h +1 -1
  219. data/ext/{fox12 → fox14}/include/FXRbReplaceDialog.h +1 -1
  220. data/ext/{fox12 → fox14}/include/FXRbRootWindow.h +1 -1
  221. data/ext/{fox12 → fox14}/include/FXRbRuler.h +1 -1
  222. data/ext/{fox12 → fox14}/include/FXRbScintilla.h +1 -1
  223. data/ext/{fox12 → fox14}/include/FXRbScrollArea.h +1 -1
  224. data/ext/{fox12 → fox14}/include/FXRbScrollAreaVirtuals.h +0 -0
  225. data/ext/{fox12 → fox14}/include/FXRbScrollBar.h +1 -1
  226. data/ext/{fox12 → fox14}/include/FXRbScrollPane.h +1 -1
  227. data/ext/{fox12 → fox14}/include/FXRbScrollWindow.h +1 -1
  228. data/ext/{fox12 → fox14}/include/FXRbSearchDialog.h +1 -1
  229. data/ext/{fox12 → fox14}/include/FXRbSeparator.h +1 -1
  230. data/ext/{fox12 → fox14}/include/FXRbSettings.h +1 -1
  231. data/ext/{fox12 → fox14}/include/FXRbShell.h +1 -1
  232. data/ext/{fox12 → fox14}/include/FXRbShutter.h +1 -1
  233. data/ext/{fox12 → fox14}/include/FXRbShutterVirtuals.h +0 -0
  234. data/ext/{fox12 → fox14}/include/FXRbSlider.h +1 -1
  235. data/ext/{fox12 → fox14}/include/FXRbSpinner.h +1 -1
  236. data/ext/{fox12 → fox14}/include/FXRbSpinnerVirtuals.h +0 -0
  237. data/ext/fox14/include/FXRbSplashWindow.h +57 -0
  238. data/ext/{fox12 → fox14}/include/FXRbSplitter.h +1 -1
  239. data/ext/{fox12 → fox14}/include/FXRbSpring.h +1 -1
  240. data/ext/{fox12 → fox14}/include/FXRbStatusBar.h +1 -1
  241. data/ext/{fox12 → fox14}/include/FXRbStatusLine.h +1 -1
  242. data/ext/{fox12 → fox14}/include/FXRbStream.h +3 -3
  243. data/ext/{fox12 → fox14}/include/FXRbStreamVirtuals.h +1 -1
  244. data/ext/{fox12 → fox14}/include/FXRbStringDict.h +1 -1
  245. data/ext/{fox12 → fox14}/include/FXRbSwitcher.h +1 -1
  246. data/ext/{fox12 → fox14}/include/FXRbTGAIcon.h +1 -1
  247. data/ext/{fox12 → fox14}/include/FXRbTGAImage.h +1 -1
  248. data/ext/{fox12 → fox14}/include/FXRbTIFIcon.h +1 -1
  249. data/ext/{fox12 → fox14}/include/FXRbTIFImage.h +1 -1
  250. data/ext/{fox12 → fox14}/include/FXRbTabBar.h +1 -1
  251. data/ext/{fox12 → fox14}/include/FXRbTabBarVirtuals.h +0 -0
  252. data/ext/{fox12 → fox14}/include/FXRbTabBook.h +1 -1
  253. data/ext/{fox12 → fox14}/include/FXRbTabItem.h +1 -1
  254. data/ext/{fox12 → fox14}/include/FXRbTable.h +96 -36
  255. data/ext/{fox12 → fox14}/include/FXRbTableItemVirtuals.h +24 -3
  256. data/ext/{fox12 → fox14}/include/FXRbTableVirtuals.h +19 -6
  257. data/ext/{fox12 → fox14}/include/FXRbText.h +2 -2
  258. data/ext/{fox12 → fox14}/include/FXRbTextField.h +1 -1
  259. data/ext/{fox12 → fox14}/include/FXRbTextVirtuals.h +0 -0
  260. data/ext/{fox12 → fox14}/include/FXRbToggleButton.h +1 -1
  261. data/ext/{fox12 → fox14}/include/FXRbToolBar.h +2 -19
  262. data/ext/{fox12 → fox14}/include/FXRbToolBarGrip.h +1 -1
  263. data/ext/{fox12 → fox14}/include/FXRbToolBarShell.h +1 -1
  264. data/ext/{fox12 → fox14}/include/FXRbToolBarTab.h +1 -1
  265. data/ext/{fox12 → fox14}/include/FXRbToolTip.h +1 -1
  266. data/ext/{fox12 → fox14}/include/FXRbTopWindow.h +1 -1
  267. data/ext/{fox12 → fox14}/include/FXRbTopWindowVirtuals.h +0 -0
  268. data/ext/{fox12 → fox14}/include/FXRbTreeItemVirtuals.h +2 -2
  269. data/ext/{fox12 → fox14}/include/FXRbTreeList.h +33 -9
  270. data/ext/{fox12 → fox14}/include/FXRbTreeListBox.h +12 -1
  271. data/ext/fox14/include/FXRbTreeListBoxVirtuals.h +4 -0
  272. data/ext/{fox12 → fox14}/include/FXRbTreeListVirtuals.h +12 -0
  273. data/ext/{fox12 → fox14}/include/FXRbTriStateButton.h +1 -1
  274. data/ext/{fox12 → fox14}/include/FXRbVerticalFrame.h +1 -1
  275. data/ext/{fox12 → fox14}/include/FXRbVisual.h +1 -1
  276. data/ext/{fox12 → fox14}/include/FXRbWindow.h +35 -5
  277. data/ext/{fox12 → fox14}/include/FXRbWindowVirtuals.h +17 -1
  278. data/ext/{fox12 → fox14}/include/FXRbWizard.h +1 -1
  279. data/ext/{fox12 → fox14}/include/FXRbXBMIcon.h +1 -1
  280. data/ext/{fox12 → fox14}/include/FXRbXBMImage.h +1 -1
  281. data/ext/{fox12 → fox14}/include/FXRbXPMIcon.h +1 -1
  282. data/ext/{fox12 → fox14}/include/FXRbXPMImage.h +1 -1
  283. data/ext/{fox12 → fox14}/include/FXRuby.h +78 -7
  284. data/ext/{fox12 → fox14}/include/impl.h +7 -0
  285. data/ext/{fox12 → fox14}/include/inlinestubs.h +58 -2
  286. data/ext/{fox12 → fox14}/label_wrap.cpp +524 -68
  287. data/ext/{fox12 → fox14}/layout_wrap.cpp +1025 -90
  288. data/ext/{fox12 → fox14}/librb.c +0 -0
  289. data/ext/{fox12 → fox14}/list_wrap.cpp +328 -234
  290. data/ext/{fox12 → fox14}/markfuncs.cpp +29 -4
  291. data/ext/{fox12 → fox14}/mdi_wrap.cpp +553 -99
  292. data/ext/{fox12 → fox14}/menu_wrap.cpp +967 -404
  293. data/ext/{fox12 → fox14}/scintilla_wrap.cpp +754 -635
  294. data/ext/{fox12 → fox14}/table_wrap.cpp +501 -284
  295. data/ext/{fox12 → fox14}/text_wrap.cpp +765 -629
  296. data/ext/{fox12 → fox14}/treelist_wrap.cpp +859 -661
  297. data/ext/{fox12 → fox14}/ui_wrap.cpp +3025 -627
  298. data/ext/{fox12 → fox14}/unregisterOwnedObjects.cpp +1 -1
  299. data/lib/{fox12 → fox14}/aliases.rb +252 -45
  300. data/lib/{fox12 → fox14}/calendar.rb +2 -2
  301. data/lib/{fox12 → fox14}/chore.rb +1 -1
  302. data/lib/{fox12 → fox14}/colors.rb +1 -1
  303. data/lib/{fox12 → fox14}/core.rb +126 -52
  304. data/lib/{fox12 → fox14}/dict.rb +0 -0
  305. data/lib/{fox12 → fox14}/execute_nonmodal.rb +0 -0
  306. data/lib/{fox12 → fox14}/glgroup.rb +1 -1
  307. data/lib/{fox12 → fox14}/glshapes.rb +1 -1
  308. data/lib/{fox12 → fox14}/input.rb +1 -1
  309. data/lib/{fox12 → fox14}/irb.rb +1 -1
  310. data/lib/{fox12 → fox14}/iterators.rb +1 -1
  311. data/lib/{fox12 → fox14}/keys.rb +1 -1
  312. data/lib/{fox12 → fox14}/missingdep.rb +1 -1
  313. data/lib/{fox12 → fox14}/pseudokeyboard.rb +1 -1
  314. data/lib/{fox12 → fox14}/pseudomouse.rb +1 -1
  315. data/lib/{fox12 → fox14}/responder.rb +1 -1
  316. data/lib/{fox12 → fox14}/responder2.rb +5 -5
  317. data/lib/{fox12 → fox14}/scintilla.rb +0 -0
  318. data/lib/{fox12 → fox14}/settings.rb +0 -0
  319. data/lib/{fox12 → fox14}/signal.rb +1 -1
  320. data/lib/{fox12 → fox14}/splashscreen.rb +2 -2
  321. data/lib/{fox12 → fox14}/timeout.rb +1 -1
  322. data/lib/{fox12 → fox14}/undolist.rb +2 -2
  323. data/lib/{fox12 → fox14}/version.rb +2 -2
  324. data/rdoc-sources/FX7Segment.rb +48 -0
  325. data/rdoc-sources/FXApp.rb +51 -31
  326. data/rdoc-sources/FXBMPIcon.rb +18 -1
  327. data/rdoc-sources/FXBMPImage.rb +5 -0
  328. data/rdoc-sources/FXBitmap.rb +18 -3
  329. data/rdoc-sources/FXBitmapFrame.rb +3 -1
  330. data/rdoc-sources/FXBitmapView.rb +4 -1
  331. data/rdoc-sources/FXButton.rb +16 -0
  332. data/rdoc-sources/FXCheckButton.rb +25 -1
  333. data/rdoc-sources/FXChoiceBox.rb +82 -0
  334. data/rdoc-sources/FXColorBar.rb +6 -1
  335. data/rdoc-sources/FXColorDialog.rb +1 -0
  336. data/rdoc-sources/FXColorWell.rb +14 -6
  337. data/rdoc-sources/FXColorWheel.rb +6 -4
  338. data/rdoc-sources/FXComboBox.rb +53 -5
  339. data/rdoc-sources/FXCursor.rb +2 -2
  340. data/rdoc-sources/FXDC.rb +36 -2
  341. data/rdoc-sources/FXDial.rb +10 -4
  342. data/rdoc-sources/FXDirBox.rb +7 -1
  343. data/rdoc-sources/FXDirDialog.rb +33 -0
  344. data/rdoc-sources/FXDirList.rb +8 -3
  345. data/rdoc-sources/FXDirSelector.rb +36 -2
  346. data/rdoc-sources/FXDockBar.rb +136 -0
  347. data/rdoc-sources/FXDockHandler.rb +19 -0
  348. data/rdoc-sources/FXDockSite.rb +86 -0
  349. data/rdoc-sources/FXDockTitle.rb +26 -0
  350. data/rdoc-sources/FXFileDialog.rb +33 -0
  351. data/rdoc-sources/FXFileDict.rb +29 -56
  352. data/rdoc-sources/FXFileList.rb +39 -16
  353. data/rdoc-sources/FXFileSelector.rb +28 -2
  354. data/rdoc-sources/FXFileStream.rb +3 -0
  355. data/rdoc-sources/FXFoldingList.rb +104 -62
  356. data/rdoc-sources/FXFont.rb +2 -9
  357. data/rdoc-sources/FXFrame.rb +7 -1
  358. data/rdoc-sources/FXGIFCursor.rb +17 -5
  359. data/rdoc-sources/FXGIFIcon.rb +5 -0
  360. data/rdoc-sources/FXGIFImage.rb +5 -0
  361. data/rdoc-sources/FXHeader.rb +24 -4
  362. data/rdoc-sources/FXICOIcon.rb +10 -0
  363. data/rdoc-sources/FXICOImage.rb +5 -0
  364. data/rdoc-sources/FXIconList.rb +37 -13
  365. data/rdoc-sources/FXIconSource.rb +100 -0
  366. data/rdoc-sources/FXImage.rb +8 -2
  367. data/rdoc-sources/FXInputDialog.rb +6 -0
  368. data/rdoc-sources/FXJPGIcon.rb +13 -0
  369. data/rdoc-sources/FXJPGImage.rb +8 -0
  370. data/rdoc-sources/FXLabel.rb +4 -1
  371. data/rdoc-sources/FXList.rb +19 -9
  372. data/rdoc-sources/FXListBox.rb +22 -4
  373. data/rdoc-sources/FXMDIChild.rb +21 -2
  374. data/rdoc-sources/FXMDIClient.rb +15 -11
  375. data/rdoc-sources/FXMainWindow.rb +7 -1
  376. data/rdoc-sources/FXMemoryStream.rb +2 -0
  377. data/rdoc-sources/FXMenuBar.rb +1 -1
  378. data/rdoc-sources/FXMessageBox.rb +17 -7
  379. data/rdoc-sources/FXObject.rb +7 -1
  380. data/rdoc-sources/FXPCXIcon.rb +10 -0
  381. data/rdoc-sources/FXPCXImage.rb +5 -0
  382. data/rdoc-sources/FXPNGIcon.rb +15 -2
  383. data/rdoc-sources/FXPNGImage.rb +8 -0
  384. data/rdoc-sources/FXPPMIcon.rb +10 -0
  385. data/rdoc-sources/FXPPMImage.rb +5 -0
  386. data/rdoc-sources/FXQuatd.rb +1 -1
  387. data/rdoc-sources/FXQuatf.rb +1 -1
  388. data/rdoc-sources/FXRGBIcon.rb +12 -2
  389. data/rdoc-sources/FXRGBImage.rb +5 -0
  390. data/rdoc-sources/FXRegistry.rb +19 -2
  391. data/rdoc-sources/FXRuler.rb +47 -5
  392. data/rdoc-sources/FXScrollArea.rb +4 -4
  393. data/rdoc-sources/FXScrollPane.rb +3 -1
  394. data/rdoc-sources/FXSeparator.rb +20 -10
  395. data/rdoc-sources/FXSettings.rb +3 -3
  396. data/rdoc-sources/FXShell.rb +2 -1
  397. data/rdoc-sources/FXShutter.rb +7 -2
  398. data/rdoc-sources/FXSphered.rb +5 -2
  399. data/rdoc-sources/FXSpheref.rb +5 -2
  400. data/rdoc-sources/FXSplashWindow.rb +31 -0
  401. data/rdoc-sources/FXSplitter.rb +2 -1
  402. data/rdoc-sources/FXStream.rb +11 -2
  403. data/rdoc-sources/FXTGAIcon.rb +12 -2
  404. data/rdoc-sources/FXTGAImage.rb +5 -0
  405. data/rdoc-sources/FXTIFIcon.rb +15 -2
  406. data/rdoc-sources/FXTIFImage.rb +8 -0
  407. data/rdoc-sources/FXTable.rb +92 -15
  408. data/rdoc-sources/FXText.rb +11 -2
  409. data/rdoc-sources/FXTextField.rb +6 -2
  410. data/rdoc-sources/FXToolBar.rb +5 -65
  411. data/rdoc-sources/FXToolBarGrip.rb +5 -10
  412. data/rdoc-sources/FXToolBarTab.rb +8 -3
  413. data/rdoc-sources/FXTopWindow.rb +4 -0
  414. data/rdoc-sources/FXTreeList.rb +56 -50
  415. data/rdoc-sources/FXTreeListBox.rb +49 -30
  416. data/rdoc-sources/FXWindow.rb +30 -11
  417. data/rdoc-sources/FXXBMIcon.rb +10 -0
  418. data/rdoc-sources/FXXBMImage.rb +5 -0
  419. data/rdoc-sources/FXXPMIcon.rb +11 -1
  420. data/rdoc-sources/FXXPMImage.rb +5 -0
  421. data/rdoc-sources/README.rdoc +1 -1
  422. data/tests/TC_FXBMPIcon.rb +15 -0
  423. data/tests/TC_FXBMPImage.rb +15 -0
  424. data/tests/TC_FXFont.rb +0 -10
  425. data/tests/TC_FXXBMIcon.rb +15 -0
  426. data/tests/TC_FXXBMImage.rb +15 -0
  427. data/tests/TC_FXXPMIcon.rb +15 -0
  428. data/tests/TC_FXXPMImage.rb +15 -0
  429. data/web/downloads.html +3 -1
  430. data/web/home.html +3 -1
  431. metadata +290 -268
  432. data/ANNOUNCE +0 -25
  433. data/examples/mditest2.rb +0 -195
  434. data/ext/fox12/include/FXRbToolBarVirtuals.h +0 -6
  435. data/lib/fox12/dialogs.rb +0 -72
  436. data/tests/TC_FXSettings.rb +0 -34
  437. data/tests/doit.rb +0 -5
data/ChangeLog CHANGED
@@ -1,93 +1,3 @@
1
- 2005-04-15 06:21 lyle
2
-
3
- * Rakefile: [no log message]
4
-
5
- 2005-04-15 05:41 lyle
6
-
7
- * doc/changes.xml: [no log message]
8
-
9
- 2005-04-15 05:33 lyle
10
-
11
- * Rakefile, pre-config.rb: [no log message]
12
-
13
- 2005-04-15 05:16 lyle
14
-
15
- * pre-config.rb: [no log message]
16
-
17
- 2005-04-14 21:18 lyle
18
-
19
- * doap.rdf: Updated release version number in DOAP.
20
-
21
- 2005-04-13 23:35 lyle
22
-
23
- * doc/changes.xml, examples/iconlist.rb: Removed the "Sort"
24
- pulldown menu from the iconlist.rb example program (see RubyForge
25
- Bug #1654).
26
-
27
- 2005-04-13 23:30 lyle
28
-
29
- * doc/changes.xml, rdoc-sources/FXScrollArea.rb: Corrected the
30
- spellings of the horizontalScrollBar and verticalScrollBar
31
- methods for the FXScrollArea class (see RubyForge Bug #1678).
32
-
33
- 2005-04-13 23:24 lyle
34
-
35
- * doc/changes.xml, rdoc-sources/FXImage.rb: Removed documentation
36
- reference to the obsolete IMAGE_ALPHA flag (see RubyForge Bug
37
- #1715).
38
-
39
- 2005-04-13 23:17 lyle
40
-
41
- * doc/changes.xml, examples/groupbox.rb: Fix for RubyForge Bug
42
- #1692.
43
-
44
- 2005-04-13 23:11 lyle
45
-
46
- * doc/changes.xml, swig-interfaces/FXDict.i,
47
- tests/TC_FXSettings.rb: The FXSettings::data(FXint) method wasn't
48
- getting wrapped because we had an %ignore on FXDict::data(FXint).
49
- See RubyForge Bug #1771.
50
-
51
- 2005-04-13 22:47 lyle
52
-
53
- * doc/changes.xml, rdoc-sources/FXFont.rb,
54
- swig-interfaces/FXFont.i, tests/TC_FXFont.rb: Renamed
55
- FXFont#hasChar to hasChar? and added an overloaded version that
56
- accepts a string of length one (a single character). See
57
- RubyForge Bug #1714.
58
-
59
- 2005-04-01 06:08 lyle
60
-
61
- * lib/fox12/aliases.rb: Added hasChar? as an alias for
62
- FXFont#hasChar.
63
-
64
- 2005-03-24 07:30 lyle
65
-
66
- * lib/fox12/aliases.rb, lib/fox12/core.rb,
67
- rdoc-sources/FXCheckButton.rb: Moved the definitions of the
68
- checked?, unchecked? and maybe? methods for the FXCheckButton
69
- class from aliases.rb to core.rb, and added these methods to the
70
- FXMenuCheck class as well.
71
-
72
- 2005-03-24 07:08 lyle
73
-
74
- * rdoc-sources/FXDC.rb: Corrected the name of the "font" attribute
75
- for the FXDC class (was "textFont").
76
-
77
- 2005-03-21 19:53 lyle
78
-
79
- * ChangeLog: [no log message]
80
-
81
- 2005-03-21 19:50 lyle
82
-
83
- * doc/Makefile: Updated the path to Saxon (was for version 6.5.2,
84
- now for version 6.5.3).
85
-
86
- 2005-03-21 19:49 lyle
87
-
88
- * rdoc-sources/FXTreeList.rb: Added missing RDoc for
89
- FXTreeList#getItemAt.
90
-
91
1
  2005-03-18 21:10 lyle
92
2
 
93
3
  * doc/changes.xml: [no log message]
@@ -1,6 +1,6 @@
1
1
  <html><head>
2
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="d0e4077"></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
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="d0e4090"></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
4
  the "life cycle" of FOX objects (that is, the actual C++ objects) and
5
5
  their relationship to the associated Ruby instances. Understanding this
6
6
  relationship is critical when dealing with Ruby's garbage collector,
@@ -18,4 +18,4 @@ myButton = FXButton.new(parentWin, "Hello, World!", myIcon)</pre></td></tr></tab
18
18
  returned from most class instance methods; they are references to already-
19
19
  existing objects. For example, <tt class="methodname">FXStatusBar#statusline
20
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="d0e4096"></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>
21
+ instance.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4109"></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>
@@ -1,6 +1,6 @@
1
1
  <html><head>
2
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="d0e4130"></a>Virtual Functions</h2></div></div><div></div></div><p>
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="d0e4143"></a>Virtual Functions</h2></div></div><div></div></div><p>
4
4
  One of the design requirements for FXRuby was to ensure that any
5
5
  virtual function call made on a FOX object (from the C++ library
6
6
  layer) is routed to the proper Ruby instance method, even if that
@@ -1,3 +1,3 @@
1
1
  <html><head>
2
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#d0e4058">Code Generation</a></dt><dt><a href="apes02.html">Object Life Cycles and Garbage Collection</a></dt><dd><dl><dt><a href="apes02.html#d0e4096">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>
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.4</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-2005 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#d0e4071">Code Generation</a></dt><dt><a href="apes02.html">Object Life Cycles and Garbage Collection</a></dt><dd><dl><dt><a href="apes02.html#d0e4109">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>
@@ -1,22 +1,22 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
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
4
+ <a href="http://rubyinstaller.rubyforge.org" target="_top">Ruby Installer for
5
+ Windows</a>, you may wish to just download the pre-compiled binaries
6
+ from the <a href="http://rubyforge.org/projects/fxruby" target="_top">RubyForge
7
+ project 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
8
  consult <a href="http://www.fox-toolkit.net/cgi-bin/wiki.pl?Mac_OS_X" target="_top">this
9
9
  page</a> from the <a href="http://www.fox-toolkit.net" target="_top">FOX
10
10
  Community Wiki</a>, in addition to the standard build instructions
11
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
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
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.4.0.tar.gz</b></pre></td></tr></table><p>This will create a new directory called <tt class="filename">FXRuby-1.4.0</tt>. Change to the top-level
14
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
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
16
  can override these locations by passing a few additional arguments to
17
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
18
+ --with-fox-include=/home/lyle/fox-1.4.17/include \
19
+ --with-fox-lib=/home/lyle/fox-1.4.17/src/.libs</b></pre></td></tr></table><p>Once the build has been configured, you can start the build by
20
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
21
  so this might be a good time to take a coffee break. If you run into
22
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
@@ -34,10 +34,10 @@ irb(main):002:0&gt;</pre></td></tr></table><p>If the import failed (usually with
34
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
35
  instructions and build files distributed with the standard Ruby source
36
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>
37
+ tarball, changing into the top-level source code directory (e.g. <tt class="filename">C:\ruby-1.8.2</tt>) and then typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\ruby-1.8.2&gt;<b class="command">win32\configure</b>
38
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
39
+ C:\ruby-1.8.2&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.8.2&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
41
  Developer Studio project files distributed with the standard FOX source
42
42
  code distribution. Although it's possible to build FXRuby against either
43
43
  the static library build of FOX (<tt class="filename">fox.lib</tt>) or the DLL
@@ -49,11 +49,11 @@ C:\ruby-1.6.8&gt;<b class="command">nmake</b></pre></td></tr></table><p>After th
49
49
  little quirk in Microsoft's LINK utility and the fact that the eventual
50
50
  output name for the FXRuby DLL is also <tt class="filename">fox.so</tt>; for
51
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,
52
+ build are found in the <tt class="filename">C:\fox-1.4.17</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.4.17\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.4.0&gt;<b class="command">ruby install.rb config --make-prog=nmake -- \
54
+ --with-fox-include=C:\fox-1.4.17\include \
55
+ --with-fox-lib=C:\fox-1.4.17\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.4.0&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
57
  so this might be a good time to take a coffee break. Because Visual C++ is
58
58
  such a strict compiler (usually a good thing), you will probably run into
59
59
  a few problems with non-ANSI declarations in the Ruby header files. If you
@@ -61,9 +61,9 @@ C:\ruby-1.6.8&gt;<b class="command">nmake</b></pre></td></tr></table><p>After th
61
61
  for a list of things that could go wrong, and workarounds for those
62
62
  problems. None of them are showstoppers and none require you to restart
63
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>
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.4.0&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.4.0&gt; <b class="command">irb</b>
66
+ irb(main):001:0&gt; <b class="userinput"><tt>require 'fox14'</tt></b>
67
67
  true
68
68
  irb(main):002:0&gt;</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
69
69
  "Cannot load library"), check the list of things that can go wrong for
@@ -80,7 +80,7 @@ irb(main):002:0&gt;</pre></td></tr></table><p>If the import failed (usually with
80
80
  C-style function prototypes, code that attempts to call one of these
81
81
  functions will fail to compile under some compilers. For example, the
82
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 ()'
83
+ /usr/local/lib/ruby/1.8/i686-linux/intern.h:172: too many arguments to function `void rb_thread_wait_for ()'
84
84
  FXRbApp.cpp:100: at this point in file
85
85
  make: *** [FXRbApp.o] Error 1</pre></td></tr></table><p>while the error message from Microsoft's Visual C++ compiler looks
86
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
@@ -110,13 +110,13 @@ core_wrap.cpp:108596: virtual memory exhausted</pre></td></tr></table><p>This fa
110
110
  (<tt class="constant">CFLAGS</tt>) in the <tt class="filename">Makefile</tt> by hand
111
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
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
113
+ <tt class="filename">libFOX-1.4.so</tt>. After all of the source files for
114
+ FXRuby are compiled, the last step is to link all of the FXRuby object
115
+ files together with the FOX library (and possibly other system libraries)
116
+ to produce a new shared library, named <tt class="filename">fox14.so</tt>, that
117
+ Ruby can import as an extension module.</p><p>There are a few things that can go wrong when you try to import this
118
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
119
+ locate the FOX shared library (<tt class="filename">libFOX-1.4.so</tt>) when it
120
120
  tries to dynamically load the FXRuby extension module; when this happens,
121
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
122
  irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
@@ -126,7 +126,7 @@ LoadError: libFOX-0.99.so.173: cannot open shared object file: No such file or d
126
126
  </pre></td></tr></table><p>One workaround for this problem is to modify the
127
127
  <tt class="constant">LD_LIBRARY_PATH</tt> environment variable to include the
128
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>
129
+ if <tt class="filename">libFOX-1.4.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
130
  $ <b class="command">irb</b>
131
131
  irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
132
132
  </pre></td></tr></table><p>If this works, you can of course permanently add the
@@ -3,8 +3,7 @@
3
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
4
  Let's start by putting a button inside the main window. The
5
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'
6
+ widget:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'fox14'
8
7
 
9
8
  include Fox
10
9
 
@@ -6,8 +6,7 @@
6
6
  manager's "close window" option, or to just kill the program outright. We
7
7
  can do better than that. Let's add a message handler for the
8
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'
9
+ causes the program to exit:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'fox14'
11
10
 
12
11
  include Fox
13
12
 
@@ -4,8 +4,7 @@
4
4
  touches to the program. The first addition is to add a tool tip to the
5
5
  button, such that when the mouse cursor hovers over the button for a short
6
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'
7
+ does:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'fox14'
9
8
 
10
9
  include Fox
11
10
 
@@ -5,8 +5,7 @@
5
5
  (e.g. BMP, GIF, JPEG, PNG and TIFF) and you can use any of them as icons
6
6
  on buttons and labels. For this example, we'll use the one of the "Powered
7
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'
8
+ Wiki</a>):</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'fox14'
10
9
 
11
10
  include Fox
12
11
 
@@ -1,6 +1,11 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Chapter&nbsp;10.&nbsp;Change History</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="infosources.html" title="Chapter&nbsp;9.&nbsp;Other Sources of Information"><link rel="next" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"></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;10.&nbsp;Change History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="infosources.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="pt02.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="changes"></a>Chapter&nbsp;10.&nbsp;Change History</h2></div></div><div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2403"></a>Changes For Version 1.2.6 (April 15, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>Some additional problems related to calling the
3
+ <title>Chapter&nbsp;10.&nbsp;Change History</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="infosources.html" title="Chapter&nbsp;9.&nbsp;Other Sources of Information"><link rel="next" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"></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;10.&nbsp;Change History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="infosources.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="pt02.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="changes"></a>Chapter&nbsp;10.&nbsp;Change History</h2></div></div><div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2403"></a>Changes For Version 1.4.0 (August 19, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>This is the first release of FXRuby which is compatible with FOX
4
+ 1.4, and as such should be considered an "unstable" release. For a
5
+ history of the changes made during the FOX 1.3 and 1.4 development,
6
+ see the <a href="http://www.fox-toolkit.com/news.html" target="_top">News</a>
7
+ page at the FOX Web site.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.4.17 and
8
+ FXScintilla version 1.63.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2416"></a>Changes For Version 1.2.6 (April 15, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>Some additional problems related to calling the
4
9
  <tt class="methodname">setTableSize</tt> method for an
5
10
  <tt class="classname">FXTable</tt> were discovered (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1597&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
6
11
  Bug #1597</a>). This problem has been corrected. Thanks to Joel
@@ -48,7 +53,7 @@
48
53
  to be unavailable as well (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1771&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
49
54
  Bug #1771</a>). This error has been corrected. Thanks to Jannis
50
55
  Pohlmann for reporting this problem.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.2.16 and
51
- FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2539"></a>Changes For Version 1.2.5 (March 1, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>The change made for FXRuby version 1.2.4 regarding garbage
56
+ FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2552"></a>Changes For Version 1.2.5 (March 1, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>The change made for FXRuby version 1.2.4 regarding garbage
52
57
  collection for table items corrected only one of the problems
53
58
  described in <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1445&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
54
59
  Bug #1445</a>; There was still a problem related to the
@@ -78,7 +83,7 @@
78
83
  <tt class="methodname">selectRange</tt> method under the hood (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1562&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
79
84
  Bug #1562</a>). Thanks to Joel VanderWerf for this
80
85
  suggestion.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.2.13 and
81
- FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2624"></a>Changes For Version 1.2.4 (February 23, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>Due to a change in some of the internal Ruby C APIs, a
86
+ FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2637"></a>Changes For Version 1.2.4 (February 23, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>Due to a change in some of the internal Ruby C APIs, a
82
87
  compile-time error for FXRuby was introduced in some of the Ruby 1.8.2
83
88
  preview releases (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1039&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
84
89
  Bug #1039</a>). One should not see any compile-time errors when
@@ -128,7 +133,7 @@
128
133
  <tt class="classname">FXTable</tt> class (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1426&amp;group_id=300&amp;atid=1226" target="_top">RubyForge
129
134
  Feature Request #1295</a>). Thanks to Brett Hallett for this
130
135
  suggestion.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.2.13 and
131
- FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2727"></a>Changes For Version 1.2.3 (January 22, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>Since group boxes containing radio buttons no longer enforce the
136
+ FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2740"></a>Changes For Version 1.2.3 (January 22, 2005)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>Since group boxes containing radio buttons no longer enforce the
132
137
  radio behavior of radio buttons (i.e. keeping only one radio button
133
138
  selected at a time), some of the example programs were no longer
134
139
  working as desired (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=751&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
@@ -191,7 +196,7 @@
191
196
  documented incorrectly (see <a href="http://rubyforge.org/tracker/index.php?func=detail&amp;aid=1325&amp;group_id=300&amp;atid=1223" target="_top">RubyForge
192
197
  Bug #1325</a>). These have been corrected. Thanks to Karl El-Koura
193
198
  for reporting this problem.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.2.13 and
194
- FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2899"></a>Changes For Version 1.2.2 (October 1, 2004)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>In order to avoid versioning problems when dealing with a mix of
199
+ FXScintilla version 1.62.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2912"></a>Changes For Version 1.2.2 (October 1, 2004)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>In order to avoid versioning problems when dealing with a mix of
195
200
  applications based on either FXRuby 1.0 or 1.2, the feature name for
196
201
  FXRuby has been changed from "fox" to "fox12". For most application
197
202
  developers, this means that you will need to modify the source code
@@ -199,7 +204,7 @@
199
204
  changes should be required for legacy applications targeted at FXRuby
200
205
  1.0.</p></li><li style="list-style-type: disc"><p>Made a number of updates to the documentation, to reflect API
201
206
  changes for FXRuby 1.2.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.2.9 and
202
- FXScintilla version 1.61.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2916"></a>Changes For Version 1.2a2 (July 10, 2004)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>This is the second "alpha" release of FXRuby 1.2. This release
207
+ FXScintilla version 1.61.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e2929"></a>Changes For Version 1.2a2 (July 10, 2004)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>This is the second "alpha" release of FXRuby 1.2. This release
203
208
  should be compatible with any FOX library version 1.2; it is not
204
209
  compatible with any previous FOX library versions. As this is an alpha
205
210
  release, users should expect a certain amount of instability, bugs,
@@ -241,7 +246,7 @@
241
246
  or JPEG image support built-in (see <a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=986180&amp;group_id=20243&amp;atid=120243" target="_top">SourceForge
242
247
  Bug #986180</a>). This has been fixed. Thanks to Bil Bas for
243
248
  reporting this problem.</p></li><li style="list-style-type: disc"><p>The binary gem for Windows was built with FOX version 1.2.7 and
244
- FXScintilla version 1.61.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3025"></a>Changes For Version 1.2a1 (June 28, 2004)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>This is the first "alpha" release of FXRuby 1.2. This release
249
+ FXScintilla version 1.61.</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3038"></a>Changes For Version 1.2a1 (June 28, 2004)</h2></div></div><div></div></div><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>This is the first "alpha" release of FXRuby 1.2. This release
245
250
  should be compatible with any FOX library version 1.2; it is not
246
251
  compatible with any previous FOX library versions. As this is an alpha
247
252
  release, users should expect a certain amount of instability, bugs,
@@ -19,13 +19,13 @@
19
19
  modified SWIG interface files. I always use the latest development version
20
20
  of <a href="http://www.swig.org" target="_top">SWIG</a>, but any release after,
21
21
  say, SWIG 1.3.15 should work fine. The older SWIG 1.1 releases will
22
- definitely <span class="emphasis"><em>not</em></span> work.</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4239"></a>Checking out the stable version</h2></div></div><div></div></div><p>The stable version of FXRuby is the 1.0.x branch and is compatible
22
+ definitely <span class="emphasis"><em>not</em></span> work.</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4252"></a>Checking out the stable version</h2></div></div><div></div></div><p>The stable version of FXRuby is the 1.0.x branch and is compatible
23
23
  with any of the FOX 1.0.x releases. It is <span class="emphasis"><em>not</em></span>
24
24
  compatible with any other release branches of FOX (e.g. the FOX 1.2.x or
25
25
  1.3.x series of releases).</p><p>To check out the stable version of FXRuby, do the following:</p><div class="orderedlist"><ol type="1"><li><p>Log in to the CVS server by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">cvs -d:pserver:anonymous@rubyforge.org:/var/cvs/fxruby login</pre></td></tr></table><p>When prompted for a password for <span class="emphasis"><em>anonymous</em></span>,
26
26
  simply press the <b class="keycap">Enter</b> key.</p></li><li><p>Check out the stable branch of FXRuby by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">cvs -z3 -d:pserver:anonymous@rubyforge.org:/var/cvs/fxruby co -rrelease10 FXRuby</pre></td></tr></table></li></ol></div><p>At this point, you should be ready to change to the top-level
27
27
  directory and go through the normal build and installation process, as
28
- described in an earlier chapter.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4272"></a>Regenerating wrapper code with SWIG</h2></div></div><div></div></div><p>If you make changes to any of the SWIG interface files (the files
28
+ described in an earlier chapter.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e4285"></a>Regenerating wrapper code with SWIG</h2></div></div><div></div></div><p>If you make changes to any of the SWIG interface files (the files
29
29
  ending with a <tt class="filename">.i</tt> extension, in the <tt class="filename">swig-interfaces</tt> subdirectory) you will need
30
30
  to re-run SWIG to regenerate parts of the FXRuby source code:</p><div class="orderedlist"><ol type="1"><li><p>Change directories to the <tt class="filename">swig-interfaces</tt> subdirectory of the
31
31
  FXRuby source tree.</p></li><li><p>Type the following command to create a "bootstrap"
@@ -1,11 +1,11 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
- <title>Appendix&nbsp;C.&nbsp;Differences between FOX and 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="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="previous" href="scintilla.html" title="Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby"><link rel="next" href="library.html" title="Appendix&nbsp;D.&nbsp;The FXRuby Standard Library"></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">Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="scintilla.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="library.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="differences"></a>Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby</h2></div></div><div></div></div><p>The FXRuby API follows the FOX API very closely and for the most part, you should be able to use the standard FOX class documentation as a reference. In some cases, however, fundamental differences between Ruby and C++ necessitated slight changes in the API. For some other cases, FOX classes were enhanced to take advantage of Ruby language features (such as iterators). The purpose of this chapter is to identify some of the differences between the C++ and Ruby interfaces to FOX.</p><p>One difference that should be easy to cope with is the substitution of Ruby Strings for FXStrings. Any function that would normally expect an <span class="type">FXString</span> input argument insteads takes a Ruby String. Similarly, functions that would return an <span class="type">FXString</span> will instead return a Ruby string. For functions that would normally accept a <tt class="constant">NULL</tt> or empty string argument, just pass <tt class="constant">nil</tt> or an empty string ("").</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3320"></a>Functions that expect arrays of objects</h2></div></div><div></div></div><p>One common pattern in FOX member function argument lists is to expect a pointer to an array of values, followed by an integer indicating the number of values in the array. This of course isn't necessary in Ruby, where <tt class="classname">Array</tt> objects "know" their lengths. As a result, functions such as <tt class="methodname">FXWindow::acquireClipboard()</tt>, whose C++ declaration looks like this:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXbool acquireClipboard(const FXDragType *types, FXuint numTypes);</pre></td></tr></table><p>are called from Ruby code by passing in a single <tt class="classname">Array</tt> argument, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">myWindow.acquireClipboard(typesArray)</pre></td></tr></table></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3340"></a>Functions that return values by reference</h2></div></div><div></div></div><p>Many FOX methods take advantage of the C++ language feature of returning values by reference. For example, the <tt class="methodname">getCursorPos()</tt> member function for class <tt class="classname">FXWindow</tt> has the declaration:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXint getCursorPos(FXint&amp; x, FXint&amp; y, FXint&amp; buttons) const;</pre></td></tr></table><p>which indicates that the function takes references to three integers (x, y and buttons). To call this function from a C++ program, you'd write code like this:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXint x, y;
3
+ <title>Appendix&nbsp;C.&nbsp;Differences between FOX and 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="up" href="pt02.html" title="Part&nbsp;II.&nbsp;Appendices"><link rel="previous" href="scintilla.html" title="Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby"><link rel="next" href="library.html" title="Appendix&nbsp;D.&nbsp;The FXRuby Standard Library"></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">Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="scintilla.html">Prev</a>&nbsp;</td><th width="60%" align="center">Part&nbsp;II.&nbsp;Appendices</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="library.html">Next</a></td></tr></table><hr></div><div class="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="differences"></a>Appendix&nbsp;C.&nbsp;Differences between FOX and FXRuby</h2></div></div><div></div></div><p>The FXRuby API follows the FOX API very closely and for the most part, you should be able to use the standard FOX class documentation as a reference. In some cases, however, fundamental differences between Ruby and C++ necessitated slight changes in the API. For some other cases, FOX classes were enhanced to take advantage of Ruby language features (such as iterators). The purpose of this chapter is to identify some of the differences between the C++ and Ruby interfaces to FOX.</p><p>One difference that should be easy to cope with is the substitution of Ruby Strings for FXStrings. Any function that would normally expect an <span class="type">FXString</span> input argument insteads takes a Ruby String. Similarly, functions that would return an <span class="type">FXString</span> will instead return a Ruby string. For functions that would normally accept a <tt class="constant">NULL</tt> or empty string argument, just pass <tt class="constant">nil</tt> or an empty string ("").</p><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3333"></a>Functions that expect arrays of objects</h2></div></div><div></div></div><p>One common pattern in FOX member function argument lists is to expect a pointer to an array of values, followed by an integer indicating the number of values in the array. This of course isn't necessary in Ruby, where <tt class="classname">Array</tt> objects "know" their lengths. As a result, functions such as <tt class="methodname">FXWindow::acquireClipboard()</tt>, whose C++ declaration looks like this:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXbool acquireClipboard(const FXDragType *types, FXuint numTypes);</pre></td></tr></table><p>are called from Ruby code by passing in a single <tt class="classname">Array</tt> argument, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">myWindow.acquireClipboard(typesArray)</pre></td></tr></table></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3353"></a>Functions that return values by reference</h2></div></div><div></div></div><p>Many FOX methods take advantage of the C++ language feature of returning values by reference. For example, the <tt class="methodname">getCursorPos()</tt> member function for class <tt class="classname">FXWindow</tt> has the declaration:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXint getCursorPos(FXint&amp; x, FXint&amp; y, FXint&amp; buttons) const;</pre></td></tr></table><p>which indicates that the function takes references to three integers (x, y and buttons). To call this function from a C++ program, you'd write code like this:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">FXint x, y;
4
4
  FXuint buttons;
5
5
 
6
6
  if (window-&gt;getCursorPosition(x, y, buttons))
7
- fprintf(stderr, "Current position is (%d, %d)\n", x, y);</pre></td></tr></table><p>Since this idiom doesn't translate well to Ruby, some functions' interfaces have been slightly modified. For example, the FXRuby implementation of <tt class="methodname">getCursorPos()</tt> returns the three values as an <tt class="classname">Array</tt>, e.g.:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">x, y, buttons = aWindow.getCursorPos()</pre></td></tr></table><p>The following table shows how these kinds of functions are implemented in FXRuby:</p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Instance Method</th><th align="center">Return Value</th></tr></thead><tbody><tr><td><tt class="methodname">FXDial#range</tt></td><td>Returns a <tt class="classname">Range</tt> instance.</td></tr><tr><td><tt class="methodname">FXDial#range=(aRange)</tt></td><td>Accepts a <tt class="classname">Range</tt> instance as its input.</td></tr><tr><td><tt class="methodname">FXFontDialog#fontSelection</tt></td><td>Returns the <tt class="classname">FXFontDesc</tt> instance</td></tr><tr><td><tt class="methodname">FXFontSelector#fontSelection</tt></td><td>Returns the <tt class="classname">FXFontDesc</tt> instance</td></tr><tr><td><tt class="methodname">FXGLObject#bounds(range)</tt></td><td>Takes an <tt class="classname">FXRange</tt> instance as its input and returns a (possibly modified) <tt class="classname">FXRange</tt> instance.</td></tr><tr><td><tt class="methodname">FXGLViewer#eyeToScreen(eye)</tt></td><td>Takes an array of eye coordinates (floats) as its input and returns the screen point coordinate as an array of integers [sx, sy]</td></tr><tr><td><tt class="methodname">FXGLViewer#getBoreVector(sx, sy)</tt></td><td>Returns the endpoint and direction vector as an array of arrays [point, dir]</td></tr><tr><td><tt class="methodname">FXGLViewer#light</tt></td><td>Returns a <tt class="classname">FXLight</tt> instance</td></tr><tr><td><tt class="methodname">FXGLViewer#viewport</tt></td><td>Returns an <tt class="classname">FXViewport</tt> instance.</td></tr><tr><td><tt class="methodname">FXPrinterDialog#printer</tt></td><td>Returns the <tt class="classname">FXPrinter</tt> instance</td></tr><tr><td><tt class="methodname">FXScrollArea#position</tt></td><td>Returns the position as an array of integers [x, y]</td></tr><tr><td><tt class="methodname">FXSlider#range</tt></td><td>Returns a <tt class="classname">Range</tt> instance.</td></tr><tr><td><tt class="methodname">FXSlider#range=(aRange)</tt></td><td>Accepts a <tt class="classname">Range</tt> instance as its input.</td></tr><tr><td><tt class="methodname">FXSpinner#range</tt></td><td>Returns a <tt class="classname">Range</tt> instance.</td></tr><tr><td><tt class="methodname">FXSpinner#range=(aRange)</tt></td><td>Accepts a <tt class="classname">Range</tt> instance as its input.</td></tr><tr><td><tt class="methodname">FXText#appendText(text, notify=false)</tt></td><td>Append text to the end of the buffer.</td></tr><tr><td><tt class="methodname">FXText#appendStyledText(text, style=0, notify=false)</tt></td><td>Append styled text to the end of the buffer.</td></tr><tr><td><tt class="methodname">FXText#extractText(pos, n)</tt></td><td>Extracts <span class="emphasis"><em>n</em></span> characters from the buffer beginning at position <span class="emphasis"><em>pos</em></span> and returns the result as a String.</td></tr><tr><td><tt class="methodname">FXText#extractStyle(pos, n)</tt></td><td>Extracts <span class="emphasis"><em>n</em></span> style characters from the buffer beginning at position <span class="emphasis"><em>pos</em></span> and returns the result as a String.</td></tr><tr><td><tt class="methodname">FXText#insertText(pos, text, notify=false)</tt></td><td>Insert <span class="emphasis"><em>text</em></span> at position <span class="emphasis"><em>pos</em></span> in the buffer.</td></tr><tr><td><tt class="methodname">FXText#insertStyledText(pos, text, style=0, notify=false)</tt></td><td>Insert <span class="emphasis"><em>text</em></span> at position <span class="emphasis"><em>pos</em></span> in the buffer.</td></tr><tr><td><tt class="methodname">FXText#replaceText(pos, m, text, notify=false)</tt></td><td>Replace <span class="emphasis"><em>m</em></span> characters at <span class="emphasis"><em>pos</em></span> by <span class="emphasis"><em>text</em></span>.</td></tr><tr><td><tt class="methodname">FXText#replaceStyledText(pos, m, text, style=0, notify=false)</tt></td><td>Replace <span class="emphasis"><em>m</em></span> characters at <span class="emphasis"><em>pos</em></span> by <span class="emphasis"><em>text</em></span>.</td></tr><tr><td><tt class="methodname">FXText#setDelimiters(delimiters)</tt></td><td>Change delimiters of words (<span class="emphasis"><em>delimiters</em></span> is a string).</td></tr><tr><td><tt class="methodname">FXText#getDelimiters()</tt></td><td>Return word delimiters as a string.</td></tr><tr><td><tt class="methodname">FXWindow#cursorPosition</tt></td><td>Returns an array of integers [x, y, buttons]</td></tr><tr><td><tt class="methodname">FXWindow#translateCoordinatesFrom(window, x, y)</tt></td><td>Returns the translated coordinates as an array [x, y]</td></tr><tr><td><tt class="methodname">FXWindow#translateCoordinatesTo(window, x, y)</tt></td><td>Returns the translated coordinates as an array [x, y]</td></tr></tbody></table></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3630"></a>Iterators</h2></div></div><div></div></div><p>Several classes have been extended with an <tt class="methodname">each</tt> method to provide Ruby-style iterators. These classes include <tt class="classname">FXComboBox</tt>, <tt class="classname">FXGLGroup</tt>, <tt class="classname">FXHeader</tt>, <tt class="classname">FXIconList</tt>, <tt class="classname">FXList</tt>, <tt class="classname">FXListBox</tt>, <tt class="classname">FXTreeItem</tt>, <tt class="classname">FXTreeList</tt> and <tt class="classname">FXTreeListBox</tt>. These classes also mix-in Ruby's <tt class="classname">Enumerable</tt> module so that you can take full advantage of the iterators.</p><p>The block parameters passed to your code block vary depending on the class. For example, iterating over an <tt class="classname">FXList</tt> instance yields <tt class="classname">FXListItem</tt> parameters:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aList.each { |aListItem|
7
+ fprintf(stderr, "Current position is (%d, %d)\n", x, y);</pre></td></tr></table><p>Since this idiom doesn't translate well to Ruby, some functions' interfaces have been slightly modified. For example, the FXRuby implementation of <tt class="methodname">getCursorPos()</tt> returns the three values as an <tt class="classname">Array</tt>, e.g.:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">x, y, buttons = aWindow.getCursorPos()</pre></td></tr></table><p>The following table shows how these kinds of functions are implemented in FXRuby:</p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Instance Method</th><th align="center">Return Value</th></tr></thead><tbody><tr><td><tt class="methodname">FXDial#range</tt></td><td>Returns a <tt class="classname">Range</tt> instance.</td></tr><tr><td><tt class="methodname">FXDial#range=(aRange)</tt></td><td>Accepts a <tt class="classname">Range</tt> instance as its input.</td></tr><tr><td><tt class="methodname">FXFontDialog#fontSelection</tt></td><td>Returns the <tt class="classname">FXFontDesc</tt> instance</td></tr><tr><td><tt class="methodname">FXFontSelector#fontSelection</tt></td><td>Returns the <tt class="classname">FXFontDesc</tt> instance</td></tr><tr><td><tt class="methodname">FXGLObject#bounds(range)</tt></td><td>Takes an <tt class="classname">FXRange</tt> instance as its input and returns a (possibly modified) <tt class="classname">FXRange</tt> instance.</td></tr><tr><td><tt class="methodname">FXGLViewer#eyeToScreen(eye)</tt></td><td>Takes an array of eye coordinates (floats) as its input and returns the screen point coordinate as an array of integers [sx, sy]</td></tr><tr><td><tt class="methodname">FXGLViewer#getBoreVector(sx, sy)</tt></td><td>Returns the endpoint and direction vector as an array of arrays [point, dir]</td></tr><tr><td><tt class="methodname">FXGLViewer#light</tt></td><td>Returns a <tt class="classname">FXLight</tt> instance</td></tr><tr><td><tt class="methodname">FXGLViewer#viewport</tt></td><td>Returns an <tt class="classname">FXViewport</tt> instance.</td></tr><tr><td><tt class="methodname">FXPrinterDialog#printer</tt></td><td>Returns the <tt class="classname">FXPrinter</tt> instance</td></tr><tr><td><tt class="methodname">FXScrollArea#position</tt></td><td>Returns the position as an array of integers [x, y]</td></tr><tr><td><tt class="methodname">FXSlider#range</tt></td><td>Returns a <tt class="classname">Range</tt> instance.</td></tr><tr><td><tt class="methodname">FXSlider#range=(aRange)</tt></td><td>Accepts a <tt class="classname">Range</tt> instance as its input.</td></tr><tr><td><tt class="methodname">FXSpinner#range</tt></td><td>Returns a <tt class="classname">Range</tt> instance.</td></tr><tr><td><tt class="methodname">FXSpinner#range=(aRange)</tt></td><td>Accepts a <tt class="classname">Range</tt> instance as its input.</td></tr><tr><td><tt class="methodname">FXText#appendText(text, notify=false)</tt></td><td>Append text to the end of the buffer.</td></tr><tr><td><tt class="methodname">FXText#appendStyledText(text, style=0, notify=false)</tt></td><td>Append styled text to the end of the buffer.</td></tr><tr><td><tt class="methodname">FXText#extractText(pos, n)</tt></td><td>Extracts <span class="emphasis"><em>n</em></span> characters from the buffer beginning at position <span class="emphasis"><em>pos</em></span> and returns the result as a String.</td></tr><tr><td><tt class="methodname">FXText#extractStyle(pos, n)</tt></td><td>Extracts <span class="emphasis"><em>n</em></span> style characters from the buffer beginning at position <span class="emphasis"><em>pos</em></span> and returns the result as a String.</td></tr><tr><td><tt class="methodname">FXText#insertText(pos, text, notify=false)</tt></td><td>Insert <span class="emphasis"><em>text</em></span> at position <span class="emphasis"><em>pos</em></span> in the buffer.</td></tr><tr><td><tt class="methodname">FXText#insertStyledText(pos, text, style=0, notify=false)</tt></td><td>Insert <span class="emphasis"><em>text</em></span> at position <span class="emphasis"><em>pos</em></span> in the buffer.</td></tr><tr><td><tt class="methodname">FXText#replaceText(pos, m, text, notify=false)</tt></td><td>Replace <span class="emphasis"><em>m</em></span> characters at <span class="emphasis"><em>pos</em></span> by <span class="emphasis"><em>text</em></span>.</td></tr><tr><td><tt class="methodname">FXText#replaceStyledText(pos, m, text, style=0, notify=false)</tt></td><td>Replace <span class="emphasis"><em>m</em></span> characters at <span class="emphasis"><em>pos</em></span> by <span class="emphasis"><em>text</em></span>.</td></tr><tr><td><tt class="methodname">FXText#setDelimiters(delimiters)</tt></td><td>Change delimiters of words (<span class="emphasis"><em>delimiters</em></span> is a string).</td></tr><tr><td><tt class="methodname">FXText#getDelimiters()</tt></td><td>Return word delimiters as a string.</td></tr><tr><td><tt class="methodname">FXWindow#cursorPosition</tt></td><td>Returns an array of integers [x, y, buttons]</td></tr><tr><td><tt class="methodname">FXWindow#translateCoordinatesFrom(window, x, y)</tt></td><td>Returns the translated coordinates as an array [x, y]</td></tr><tr><td><tt class="methodname">FXWindow#translateCoordinatesTo(window, x, y)</tt></td><td>Returns the translated coordinates as an array [x, y]</td></tr></tbody></table></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3643"></a>Iterators</h2></div></div><div></div></div><p>Several classes have been extended with an <tt class="methodname">each</tt> method to provide Ruby-style iterators. These classes include <tt class="classname">FXComboBox</tt>, <tt class="classname">FXGLGroup</tt>, <tt class="classname">FXHeader</tt>, <tt class="classname">FXIconList</tt>, <tt class="classname">FXList</tt>, <tt class="classname">FXListBox</tt>, <tt class="classname">FXTreeItem</tt>, <tt class="classname">FXTreeList</tt> and <tt class="classname">FXTreeListBox</tt>. These classes also mix-in Ruby's <tt class="classname">Enumerable</tt> module so that you can take full advantage of the iterators.</p><p>The block parameters passed to your code block vary depending on the class. For example, iterating over an <tt class="classname">FXList</tt> instance yields <tt class="classname">FXListItem</tt> parameters:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aList.each { |aListItem|
8
8
  puts "text for this item = #{aListItem.getText()}"
9
9
  }</pre></td></tr></table><p>whereas iterating over an <tt class="classname">FXComboBox</tt> instance yields two parameters, the item text (a string) and the item data:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aComboBox.each { |itemText, itemData|
10
10
  puts "text for this item = #{itemText}"
11
- }</pre></td></tr></table><p>The following table shows the block parameters for each of these classes' iterators:</p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Class</th><th align="center">Block Parameters</th></tr></thead><tbody><tr><td><tt class="classname">FXComboBox</tt></td><td>the item text (a string) and user data</td></tr><tr><td><tt class="classname">FXGLGroup</tt></td><td>an <tt class="classname">FXGLObject</tt> instance</td></tr><tr><td><tt class="classname">FXHeader</tt></td><td>an <tt class="classname">FXHeaderItem</tt> instance</td></tr><tr><td><tt class="classname">FXIconList</tt></td><td>an <tt class="classname">FXIconItem</tt> instance</td></tr><tr><td><tt class="classname">FXList</tt></td><td>an <tt class="classname">FXListItem</tt> instance</td></tr><tr><td><tt class="classname">FXListBox</tt></td><td>the item text (a string), icon (an <tt class="classname">FXIcon</tt> instance) and user data</td></tr><tr><td><tt class="classname">FXTreeItem</tt></td><td>an <tt class="classname">FXTreeItem</tt> instance</td></tr><tr><td><tt class="classname">FXTreeList</tt></td><td>an <tt class="classname">FXTreeItem</tt> instance</td></tr><tr><td><tt class="classname">FXTreeListBox</tt></td><td>an <tt class="classname">FXTreeItem</tt> instance</td></tr></tbody></table></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3774"></a>Attribute Accessors</h2></div></div><div></div></div><p>FOX strictly handles access to all object attributes through member functions, e.g. <tt class="methodname">setBackgroundColor</tt> and <tt class="methodname">getBackgroundColor</tt> or <tt class="methodname">setText</tt> and <tt class="methodname">getText</tt>. FXRuby exposes all of these functions but also provides aliases that look more like regular Ruby attribute accessors. The names for these accessors are based on the FOX method names; for example, <tt class="methodname">setBackgroundColor</tt> and <tt class="methodname">getBackgroundColor</tt> are aliased to <tt class="methodname">backgroundColor=</tt> and <tt class="methodname">backgroundColor</tt>, respectively.</p><p>In many cases these aliases allow you to write more compact and legible code. For example, consider this code snippet:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aLabel.setText(aLabel.getText() + " (modified)")</pre></td></tr></table><p>Now consider a different code snippet, using the aliased accessor method names:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aLabel.text += " (modified)"</pre></td></tr></table><p>While these two are functionally equivalent, the latter is a bit easier to read and understand at first glance.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3813"></a>Message Passing</h2></div></div><div></div></div><p>FOX message maps are implemented as static C++ class members. With FXRuby, you just associate messages with message handlers in the class <tt class="methodname">initialize</tt> method using the <tt class="methodname">FXMAPFUNC()</tt>, <tt class="methodname">FXMAPTYPE()</tt>, <tt class="methodname">FXMAPTYPES()</tt> or <tt class="methodname">FXMAPFUNCS()</tt> methods. See almost any of the example programs for examples of how this is done.</p><p>As in C++ FOX, the last argument passed to your message handler functions contains message-specific data. For instance, all <tt class="constant">SEL_PAINT</tt> messages pass an <tt class="classname">FXEvent</tt> object through this argument to give you some information about the size of the exposed rectangle. On the other hand, a <tt class="constant">SEL_COMMAND</tt> message from an <tt class="classname">FXHeader</tt> object passes the index of the selected header item through this argument. Instead of guessing what's in this last argument, your best bet is to instead invoke a member function on the sending object to find out what you need, instead of relying on the data passed through this pointer. For example, if you get a <tt class="constant">SEL_COMMAND</tt> message from an <tt class="classname">FXColorWell</tt> object, the data passed through that last argument is supposed to be the new RGB color value. Instead of trying to interpret the argument's contents, just turn around and call the color well's <tt class="methodname">getRGBA()</tt> member function to retrieve its color. Similarly, if you get a <tt class="constant">SEL_COMMAND</tt> message from a tree list, call its <tt class="methodname">getCurrentItem()</tt> method to find out which item was selected.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3862"></a>Catching Operating System Signals</h2></div></div><div></div></div><p>The <tt class="methodname">FXApp#addSignal</tt> and <tt class="methodname">FXApp#removeSignal</tt> methods have been enhanced to accept either a string or integer as their first argument. If it's a string (e.g. "SIGINT" or just "INT") the code will determine the corresponding signal number for you (similar to the standard Ruby library's <tt class="methodname">Process.kill</tt> module method). For examples of how to use this, see the <tt class="filename">datatarget.rb</tt> or <tt class="filename">imageviewer.rb</tt> example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3882"></a>Support for Multithreaded Applications</h2></div></div><div></div></div><p>There is some support for multithreaded FXRuby applications, but it's not wonderful. The current implementation does what is also done in Ruby/GTK; it turns over some idle processing time to the Ruby thread scheduler to let other threads do their thing. As I learn more about Ruby's threading implementation I may try something different, but this seems to work OK for now. For a simple example, see the <tt class="filename">groupbox.rb</tt> example program, in which the clock label that appears in the lower right-hand corner is continuously updated (by a separate thread).</p><p>If you suspect that FXRuby's threads support is interfering with your application's performance, you may want to try tweaking the amount of time that the main application thread "sleeps" during idle processing; do this by setting the <tt class="classname">FXApp</tt> object's <i class="structfield"><tt>sleepTime</tt></i> attribute. The default value for <i class="structfield"><tt>FXApp#sleepTime</tt></i> is 100 milliseconds. You can also disable the threads support completely by calling <tt class="methodname">FXApp#threadsEnabled=false</tt> (and subsequently re-enable it with <tt class="methodname">FXApp#threadsEnabled=true</tt>).</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3907"></a>Debugging Tricks</h2></div></div><div></div></div><p>As a debugging tool, you can optionally catch exceptions raised in message handlers. To turn on this feature, call the <tt class="methodname">setIgnoreExceptions(true)</tt> module method. When this is enabled, any exceptions raised in message handler functions will cause a standard stack trace to be dumped to the standard output, but then your application will, for better or worse, proceed normally. Thanks to Ted Meng for this suggestion.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="scintilla.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="library.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby&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;D.&nbsp;The FXRuby Standard Library</td></tr></table></div></body></html>
11
+ }</pre></td></tr></table><p>The following table shows the block parameters for each of these classes' iterators:</p><div class="informaltable"><table border="1"><colgroup><col><col></colgroup><thead><tr><th align="center">Class</th><th align="center">Block Parameters</th></tr></thead><tbody><tr><td><tt class="classname">FXComboBox</tt></td><td>the item text (a string) and user data</td></tr><tr><td><tt class="classname">FXGLGroup</tt></td><td>an <tt class="classname">FXGLObject</tt> instance</td></tr><tr><td><tt class="classname">FXHeader</tt></td><td>an <tt class="classname">FXHeaderItem</tt> instance</td></tr><tr><td><tt class="classname">FXIconList</tt></td><td>an <tt class="classname">FXIconItem</tt> instance</td></tr><tr><td><tt class="classname">FXList</tt></td><td>an <tt class="classname">FXListItem</tt> instance</td></tr><tr><td><tt class="classname">FXListBox</tt></td><td>the item text (a string), icon (an <tt class="classname">FXIcon</tt> instance) and user data</td></tr><tr><td><tt class="classname">FXTreeItem</tt></td><td>an <tt class="classname">FXTreeItem</tt> instance</td></tr><tr><td><tt class="classname">FXTreeList</tt></td><td>an <tt class="classname">FXTreeItem</tt> instance</td></tr><tr><td><tt class="classname">FXTreeListBox</tt></td><td>an <tt class="classname">FXTreeItem</tt> instance</td></tr></tbody></table></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3787"></a>Attribute Accessors</h2></div></div><div></div></div><p>FOX strictly handles access to all object attributes through member functions, e.g. <tt class="methodname">setBackgroundColor</tt> and <tt class="methodname">getBackgroundColor</tt> or <tt class="methodname">setText</tt> and <tt class="methodname">getText</tt>. FXRuby exposes all of these functions but also provides aliases that look more like regular Ruby attribute accessors. The names for these accessors are based on the FOX method names; for example, <tt class="methodname">setBackgroundColor</tt> and <tt class="methodname">getBackgroundColor</tt> are aliased to <tt class="methodname">backgroundColor=</tt> and <tt class="methodname">backgroundColor</tt>, respectively.</p><p>In many cases these aliases allow you to write more compact and legible code. For example, consider this code snippet:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aLabel.setText(aLabel.getText() + " (modified)")</pre></td></tr></table><p>Now consider a different code snippet, using the aliased accessor method names:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">aLabel.text += " (modified)"</pre></td></tr></table><p>While these two are functionally equivalent, the latter is a bit easier to read and understand at first glance.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3826"></a>Message Passing</h2></div></div><div></div></div><p>FOX message maps are implemented as static C++ class members. With FXRuby, you just associate messages with message handlers in the class <tt class="methodname">initialize</tt> method using the <tt class="methodname">FXMAPFUNC()</tt>, <tt class="methodname">FXMAPTYPE()</tt>, <tt class="methodname">FXMAPTYPES()</tt> or <tt class="methodname">FXMAPFUNCS()</tt> methods. See almost any of the example programs for examples of how this is done.</p><p>As in C++ FOX, the last argument passed to your message handler functions contains message-specific data. For instance, all <tt class="constant">SEL_PAINT</tt> messages pass an <tt class="classname">FXEvent</tt> object through this argument to give you some information about the size of the exposed rectangle. On the other hand, a <tt class="constant">SEL_COMMAND</tt> message from an <tt class="classname">FXHeader</tt> object passes the index of the selected header item through this argument. Instead of guessing what's in this last argument, your best bet is to instead invoke a member function on the sending object to find out what you need, instead of relying on the data passed through this pointer. For example, if you get a <tt class="constant">SEL_COMMAND</tt> message from an <tt class="classname">FXColorWell</tt> object, the data passed through that last argument is supposed to be the new RGB color value. Instead of trying to interpret the argument's contents, just turn around and call the color well's <tt class="methodname">getRGBA()</tt> member function to retrieve its color. Similarly, if you get a <tt class="constant">SEL_COMMAND</tt> message from a tree list, call its <tt class="methodname">getCurrentItem()</tt> method to find out which item was selected.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3875"></a>Catching Operating System Signals</h2></div></div><div></div></div><p>The <tt class="methodname">FXApp#addSignal</tt> and <tt class="methodname">FXApp#removeSignal</tt> methods have been enhanced to accept either a string or integer as their first argument. If it's a string (e.g. "SIGINT" or just "INT") the code will determine the corresponding signal number for you (similar to the standard Ruby library's <tt class="methodname">Process.kill</tt> module method). For examples of how to use this, see the <tt class="filename">datatarget.rb</tt> or <tt class="filename">imageviewer.rb</tt> example programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3895"></a>Support for Multithreaded Applications</h2></div></div><div></div></div><p>There is some support for multithreaded FXRuby applications, but it's not wonderful. The current implementation does what is also done in Ruby/GTK; it turns over some idle processing time to the Ruby thread scheduler to let other threads do their thing. As I learn more about Ruby's threading implementation I may try something different, but this seems to work OK for now. For a simple example, see the <tt class="filename">groupbox.rb</tt> example program, in which the clock label that appears in the lower right-hand corner is continuously updated (by a separate thread).</p><p>If you suspect that FXRuby's threads support is interfering with your application's performance, you may want to try tweaking the amount of time that the main application thread "sleeps" during idle processing; do this by setting the <tt class="classname">FXApp</tt> object's <i class="structfield"><tt>sleepTime</tt></i> attribute. The default value for <i class="structfield"><tt>FXApp#sleepTime</tt></i> is 100 milliseconds. You can also disable the threads support completely by calling <tt class="methodname">FXApp#threadsEnabled=false</tt> (and subsequently re-enable it with <tt class="methodname">FXApp#threadsEnabled=true</tt>).</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e3920"></a>Debugging Tricks</h2></div></div><div></div></div><p>As a debugging tool, you can optionally catch exceptions raised in message handlers. To turn on this feature, call the <tt class="methodname">setIgnoreExceptions(true)</tt> module method. When this is enabled, any exceptions raised in message handler functions will cause a standard stack trace to be dumped to the standard output, but then your application will, for better or worse, proceed normally. Thanks to Ted Meng for this suggestion.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="scintilla.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="pt02.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="library.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix&nbsp;B.&nbsp;Using Scintilla with FXRuby&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;D.&nbsp;The FXRuby Standard Library</td></tr></table></div></body></html>
@@ -1,53 +1,52 @@
1
1
  <html><head>
2
2
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
3
3
  <title>Chapter&nbsp;2.&nbsp;Installing from Gems</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="build.html" title="Chapter&nbsp;1.&nbsp;Building from Source Code"><link rel="next" href="tutorial1.html" title="Chapter&nbsp;3.&nbsp;Hello, World!"></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;2.&nbsp;Installing from Gems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="build.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="tutorial1.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="gems"></a>Chapter&nbsp;2.&nbsp;Installing from Gems</h2></div></div><div></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e435"></a>Introduction</h2></div></div><div></div></div><p>Starting with FXRuby version 1.2, FXRuby uses <a href="http://rubygems.rubyforge.org" target="_top">RubyGems</a> as its packaging and
4
- distribution method. The code is available both as</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>a "source" gem, which contains source code that must be
5
- compiled on your computer before it's installed; and,</p></li><li style="list-style-type: disc"><p>a "binary" gem, which contains a precompiled version of
6
- the code for a specific operating system (such as Windows).</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e450"></a>Installing from a Source Gem</h2></div></div><div></div></div><p>If you've already downloaded the source gem, you can install it
7
- by typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">sudo gem install fxruby-1.2.2.gem</b></pre></td></tr></table><p>Note the use of the <b class="command">sudo</b> command to invoke
8
- superuser privileges, since you'll typically need superuser privileges
9
- to install the library files. By default, the source gem will look for
10
- your FOX (and optionally, FXScintilla) installation in a few standard
11
- places, such as the <tt class="filename">/usr</tt>, <tt class="filename">/usr/local</tt>
12
- and <tt class="filename">/sw</tt> directories. If you've installed those
13
- libraries under some other directory (for example, in your home directory)
14
- you might need to pass some additional arguments on the command line, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">sudo gem install fxruby-1.2.2.gem --force -- --with-fox-include=/home/lyle/include/fox-1.2 --with-fox-lib=/home/lyle/lib</b></pre></td></tr></table><p>If you're installing a source gem on a Windows box, you'd
15
- instead type something like:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">gem install fxruby-1.2.2.gem --force -- --with-fox-include=C:\include\fox-1.2 --with-fox-lib=C:\lib</b></pre></td></tr></table><p>If you're installing a source gem, it can take quite awhile to
16
- build FXRuby, so this might be a good time to take a coffee break. You
17
- won't see any compiler output appear on the screen while the gem is
18
- compiling, but rest assured that the output is being saved into the
4
+ distribution method. The code is available both as</p><div class="itemizedlist"><ul type="bullet"><li style="list-style-type: disc"><p>a "source" gem, which contains source code that must be compiled
5
+ on your computer before it's installed; and,</p></li><li style="list-style-type: disc"><p>a "binary" gem, which contains a precompiled version of the code
6
+ for a specific operating system (such as Windows).</p></li></ul></div></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e450"></a>Installing from a Source Gem</h2></div></div><div></div></div><p>If you've already downloaded the source gem, you can install it by
7
+ typing:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">sudo gem install fxruby-1.4.0.gem</b></pre></td></tr></table><p>Note the use of the <b class="command">sudo</b> command to invoke
8
+ superuser privileges, since you'll typically need superuser privileges to
9
+ install the library files. By default, the source gem will look for your
10
+ FOX (and optionally, FXScintilla) installation in a few standard places,
11
+ such as the <tt class="filename">/usr</tt>, <tt class="filename">/usr/local</tt> and
12
+ <tt class="filename">/sw</tt> directories. If you've installed those libraries
13
+ under some other directory (for example, in your home directory) you might
14
+ need to pass some additional arguments on the command line, e.g.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">sudo gem install fxruby-1.4.0.gem --force -- --with-fox-include=/home/lyle/include/fox-1.4 --with-fox-lib=/home/lyle/lib</b></pre></td></tr></table><p>If you're installing a source gem on a Windows box, you'd instead
15
+ type something like:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">gem install fxruby-1.4.0.gem --force -- --with-fox-include=C:\include\fox-1.4 --with-fox-lib=C:\lib</b></pre></td></tr></table><p>If you're installing a source gem, it can take quite awhile to build
16
+ FXRuby, so this might be a good time to take a coffee break. You won't see
17
+ any compiler output appear on the screen while the gem is compiling, but
18
+ rest assured that the output is being saved into the
19
19
  <tt class="filename">gem_make.out</tt> file.</p><p>As a quick sanity check, to make sure that all is well, you should
20
20
  probably fire up <tt class="filename">irb</tt> and try to require the FXRuby
21
21
  gem once the installation is complete:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">$ <b class="command">irb</b>
22
22
  irb(main):001:0&gt; <b class="userinput"><tt><b class="command">require 'rubygems'</b></tt></b>
23
23
  trues
24
- irb(main):002:0&gt; <b class="command">require 'fox12'</b>
24
+ irb(main):002:0&gt; <b class="command">require 'fox14'</b>
25
25
  true</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
26
- "Cannot load library"), first check the "Things That Can Go
27
- Wrong" section of this chapter. If that doesn't help, drop me an
28
- e-mail or ask around on the Ruby newsgroup or mailing list; it's quite
29
- likely that someone else has run into this problem too. Once you do have a
30
- working FXRuby installation, you're ready to check out the example
31
- programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e507"></a>Installing from a Binary Gem</h2></div></div><div></div></div><p>To install a binary gem for Windows, just type:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">gem install fxruby-1.2.2-mswin32.gem</b></pre></td></tr></table><p>As a quick sanity check, to make sure that all is well, you should
26
+ "Cannot load library"), first check the "Things That Can Go Wrong" section
27
+ of this chapter. If that doesn't help, drop me an e-mail or ask around on
28
+ the Ruby newsgroup or mailing list; it's quite likely that someone else
29
+ has run into this problem too. Once you do have a working FXRuby
30
+ installation, you're ready 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="d0e507"></a>Installing from a Binary Gem</h2></div></div><div></div></div><p>To install a binary gem for Windows, just type:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">gem install fxruby-1.4.0-mswin32.gem</b></pre></td></tr></table><p>As a quick sanity check, to make sure that all is well, you should
32
31
  probably fire up <tt class="filename">irb</tt> and try to require the FXRuby
33
32
  gem once the installation is complete:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="screen">C:\&gt; <b class="command">irb</b>
34
33
  irb(main):001:0&gt; <b class="userinput"><tt><b class="command">require 'rubygems'</b></tt></b>
35
34
  true
36
- irb(main):002:0&gt; <b class="command">require 'fox12'</b>
35
+ irb(main):002:0&gt; <b class="command">require 'fox14'</b>
37
36
  true</pre></td></tr></table><p>If the import failed (usually with a message along the lines of
38
- "Cannot load library"), first check the "Things That Can Go
39
- Wrong" section of this chapter. If that doesn't help, drop me an
40
- e-mail or ask around on the Ruby newsgroup or mailing list; it's quite
41
- likely that someone else has run into this problem too. Once you do have a
42
- working FXRuby installation, you're ready to check out the example
43
- programs.</p></div><div class="simplesect" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e535"></a>Things That Can Go Wrong</h2></div></div><div></div></div><p><span class="emphasis"><em>"Cannot load library"</em></span></p><p>On Linux and other Unix systems that support shared libraries, FOX
44
- is typically installed as a shared library named <tt class="filename">libFOX-1.2.so</tt>.
45
- After all of the source files for FXRuby are compiled, the last step is to
46
- link all of the FXRuby object files together with the FOX library (and
47
- possibly other system libraries) to produce a new shared object that Ruby
48
- can import as an extension module.</p><p>There are a few things that can go wrong when you try to import this
37
+ "Cannot load library"), first check the "Things That Can Go Wrong" section
38
+ of this chapter. If that doesn't help, drop me an e-mail or ask around on
39
+ the Ruby newsgroup or mailing list; it's quite likely that someone else
40
+ has run into this problem too. Once you do have a working FXRuby
41
+ installation, you're ready 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="d0e535"></a>Things That Can Go Wrong</h2></div></div><div></div></div><p><span class="emphasis"><em>"Cannot load library"</em></span></p><p>On Linux and other Unix systems that support shared libraries, FOX
42
+ is typically installed as a shared library named
43
+ <tt class="filename">libFOX-1.4.so</tt>. After all of the source files for
44
+ FXRuby are compiled, the last step is to link all of the FXRuby object
45
+ files together with the FOX library (and possibly other system libraries)
46
+ to produce a new shared object that Ruby can import as an extension
47
+ module.</p><p>There are a few things that can go wrong when you try to import this
49
48
  extension into Ruby. A common problem is that the operating system cannot
50
- locate the FOX shared library (<tt class="filename">libFOX-1.2.so</tt>) when it
49
+ locate the FOX shared library (<tt class="filename">libFOX-1.4.so</tt>) when it
51
50
  tries to dynamically load the FXRuby extension module; when this happens,
52
51
  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>
53
52
  irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
@@ -57,17 +56,18 @@ LoadError: libFOX-0.99.so.173: cannot open shared object file: No such file or d
57
56
  </pre></td></tr></table><p>Note that the wording of this error message may be slightly
58
57
  different, depending on your operating environment. One workaround for
59
58
  this problem is to modify the <tt class="constant">LD_LIBRARY_PATH</tt>
60
- environment variable to include the directory where <tt class="filename">libFOX-1.2.so</tt>
61
- is installed. For example, if <tt class="filename">libFOX-1.2.so</tt> is
62
- installed in <tt class="filename">/usr/local/lib</tt>, try
63
- 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>
59
+ environment variable to include the directory where
60
+ <tt class="filename">libFOX-1.4.so</tt> is installed. For example, if
61
+ <tt class="filename">libFOX-1.4.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>
64
62
  $ <b class="command">irb</b>
65
- irb(main):001:0&gt; <b class="userinput"><tt>require 'fox'</tt></b>
63
+ irb(main):001:0&gt; <b class="userinput"><tt>require 'fox14'</tt></b>
66
64
  </pre></td></tr></table><p>If this works, you can of course permanently add the
67
65
  <tt class="constant">LD_LIBRARY_PATH</tt> setting to your login file(s) so that
68
66
  you don't have to remember to type it each time. Another approach that
69
- should work for Linux is to modify your <tt class="filename">/etc/ld.so.conf</tt>
70
- file to include the installation directory (e.g. <tt class="filename">/usr/local/lib</tt>).
71
- If you'd like to do 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
72
- directory where <tt class="filename">libFOX.so</tt> is installed; and,</p></li><li><p>At the shell prompt, type <b class="command">ldconfig</b> to reload
67
+ should work for Linux is to modify your
68
+ <tt class="filename">/etc/ld.so.conf</tt> file to include the installation
69
+ directory (e.g. <tt class="filename">/usr/local/lib</tt>). If you'd like to do
70
+ 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
71
+ directory where <tt class="filename">libFOX.so</tt> is installed;
72
+ and,</p></li><li><p>At the shell prompt, type <b class="command">ldconfig</b> to reload
73
73
  the linker configuration.</p></li></ol></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="build.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="tutorial1.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;1.&nbsp;Building from Source Code&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;3.&nbsp;Hello, World!</td></tr></table></div></body></html>