fxruby 1.6.19-x86-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. data/LICENSE +456 -0
  2. data/README +39 -0
  3. data/doc/apes02.html +21 -0
  4. data/doc/apes03.html +39 -0
  5. data/doc/book.html +3 -0
  6. data/doc/build.html +132 -0
  7. data/doc/ch03s02.html +23 -0
  8. data/doc/ch03s03.html +52 -0
  9. data/doc/ch03s04.html +36 -0
  10. data/doc/ch03s05.html +60 -0
  11. data/doc/ch04s02.html +71 -0
  12. data/doc/ch04s03.html +37 -0
  13. data/doc/ch04s04.html +72 -0
  14. data/doc/ch05s02.html +260 -0
  15. data/doc/ch05s03.html +127 -0
  16. data/doc/changes.html +777 -0
  17. data/doc/clipboardtut.html +67 -0
  18. data/doc/differences.html +190 -0
  19. data/doc/dragdroptut.html +263 -0
  20. data/doc/events.html +36 -0
  21. data/doc/examples.html +104 -0
  22. data/doc/gems.html +73 -0
  23. data/doc/goals.html +41 -0
  24. data/doc/images/babelfish.png +0 -0
  25. data/doc/images/browser.png +0 -0
  26. data/doc/images/button.png +0 -0
  27. data/doc/images/call-chain-example.png +0 -0
  28. data/doc/images/colordialog.png +0 -0
  29. data/doc/images/datatarget.png +0 -0
  30. data/doc/images/dialog.png +0 -0
  31. data/doc/images/dilbert.png +0 -0
  32. data/doc/images/dirlist.png +0 -0
  33. data/doc/images/dropsite-droprejected.png +0 -0
  34. data/doc/images/foursplit.png +0 -0
  35. data/doc/images/gltest.png +0 -0
  36. data/doc/images/glviewer.png +0 -0
  37. data/doc/images/groupbox.png +0 -0
  38. data/doc/images/header.png +0 -0
  39. data/doc/images/hello-with-button.png +0 -0
  40. data/doc/images/hello-with-icon-1.png +0 -0
  41. data/doc/images/hello-with-icon-2.png +0 -0
  42. data/doc/images/hello-with-icon-3.png +0 -0
  43. data/doc/images/hello-with-tooltip.png +0 -0
  44. data/doc/images/hello-without-button.png +0 -0
  45. data/doc/images/hello.png +0 -0
  46. data/doc/images/hello2.png +0 -0
  47. data/doc/images/iconlist-bigicons.png +0 -0
  48. data/doc/images/iconlist-details.png +0 -0
  49. data/doc/images/image.png +0 -0
  50. data/doc/images/imageviewer.png +0 -0
  51. data/doc/images/inheritance.png +0 -0
  52. data/doc/images/mditest.png +0 -0
  53. data/doc/images/raabrowser.png +0 -0
  54. data/doc/images/scribble.png +0 -0
  55. data/doc/images/shutter.png +0 -0
  56. data/doc/images/splitter.png +0 -0
  57. data/doc/images/tabbook.png +0 -0
  58. data/doc/images/table.png +0 -0
  59. data/doc/images/tutorial1.png +0 -0
  60. data/doc/implementation.html +16 -0
  61. data/doc/infosources.html +33 -0
  62. data/doc/library.html +30 -0
  63. data/doc/opengl.html +73 -0
  64. data/doc/pt01.html +3 -0
  65. data/doc/pt02.html +3 -0
  66. data/doc/scintilla.html +36 -0
  67. data/doc/style.css +247 -0
  68. data/doc/subversion.html +21 -0
  69. data/doc/tutorial1.html +90 -0
  70. data/doc/unicode.html +56 -0
  71. data/examples/RAA.rb +25 -0
  72. data/examples/README +53 -0
  73. data/examples/babelfish.rb +72 -0
  74. data/examples/bounce.rb +159 -0
  75. data/examples/browser.rb +191 -0
  76. data/examples/button.rb +168 -0
  77. data/examples/charts.rb +35 -0
  78. data/examples/custom_table_item.rb +170 -0
  79. data/examples/datatarget.rb +223 -0
  80. data/examples/dctest.rb +696 -0
  81. data/examples/dialog.rb +143 -0
  82. data/examples/dilbert.rb +66 -0
  83. data/examples/dirlist.rb +63 -0
  84. data/examples/dragdrop.rb +97 -0
  85. data/examples/dragsource.rb +80 -0
  86. data/examples/dropsite.rb +59 -0
  87. data/examples/foursplit.rb +97 -0
  88. data/examples/gltest.rb +330 -0
  89. data/examples/glviewer.rb +576 -0
  90. data/examples/groupbox.rb +392 -0
  91. data/examples/header.rb +149 -0
  92. data/examples/hello.rb +12 -0
  93. data/examples/hello2.rb +51 -0
  94. data/examples/iRAA.rb +153 -0
  95. data/examples/iconlist.rb +92 -0
  96. data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
  97. data/examples/icons/FatBot.ico +0 -0
  98. data/examples/icons/FlippedySwitch.ico +0 -0
  99. data/examples/icons/LeGoon.ico +0 -0
  100. data/examples/icons/Net.ico +0 -0
  101. data/examples/icons/RedMacOS.ico +0 -0
  102. data/examples/icons/SawBlade.ico +0 -0
  103. data/examples/icons/backview.png +0 -0
  104. data/examples/icons/big.png +0 -0
  105. data/examples/icons/bigfolder.png +0 -0
  106. data/examples/icons/bigpenguin.png +0 -0
  107. data/examples/icons/bottomview.png +0 -0
  108. data/examples/icons/camera.png +0 -0
  109. data/examples/icons/capbutt.png +0 -0
  110. data/examples/icons/capnotlast.png +0 -0
  111. data/examples/icons/capproj.png +0 -0
  112. data/examples/icons/capround.png +0 -0
  113. data/examples/icons/colorpal.png +0 -0
  114. data/examples/icons/copy.png +0 -0
  115. data/examples/icons/cut.png +0 -0
  116. data/examples/icons/delimit.png +0 -0
  117. data/examples/icons/dippy.png +0 -0
  118. data/examples/icons/double_dash.png +0 -0
  119. data/examples/icons/filenew.png +0 -0
  120. data/examples/icons/fileopen.png +0 -0
  121. data/examples/icons/filesave.png +0 -0
  122. data/examples/icons/filesaveas.png +0 -0
  123. data/examples/icons/fonts.png +0 -0
  124. data/examples/icons/fox.png +0 -0
  125. data/examples/icons/foxicon.png +0 -0
  126. data/examples/icons/frontview.png +0 -0
  127. data/examples/icons/gem_big.png +0 -0
  128. data/examples/icons/gem_small.png +0 -0
  129. data/examples/icons/hello2.png +0 -0
  130. data/examples/icons/help.png +0 -0
  131. data/examples/icons/indent.png +0 -0
  132. data/examples/icons/jbevel.png +0 -0
  133. data/examples/icons/jmiter.png +0 -0
  134. data/examples/icons/jround.png +0 -0
  135. data/examples/icons/kill.png +0 -0
  136. data/examples/icons/leftview.png +0 -0
  137. data/examples/icons/light.png +0 -0
  138. data/examples/icons/minidoc.png +0 -0
  139. data/examples/icons/minifolder.png +0 -0
  140. data/examples/icons/minifolderopen.png +0 -0
  141. data/examples/icons/newfolder.png +0 -0
  142. data/examples/icons/nolight.png +0 -0
  143. data/examples/icons/onoff_dash.png +0 -0
  144. data/examples/icons/palette.png +0 -0
  145. data/examples/icons/parallel.png +0 -0
  146. data/examples/icons/paste.png +0 -0
  147. data/examples/icons/pattern.png +0 -0
  148. data/examples/icons/penguin.png +0 -0
  149. data/examples/icons/perspective.png +0 -0
  150. data/examples/icons/printicon.png +0 -0
  151. data/examples/icons/prop.png +0 -0
  152. data/examples/icons/redo.png +0 -0
  153. data/examples/icons/rightview.png +0 -0
  154. data/examples/icons/saveas.png +0 -0
  155. data/examples/icons/shutter1.png +0 -0
  156. data/examples/icons/shutter2.png +0 -0
  157. data/examples/icons/small.png +0 -0
  158. data/examples/icons/smoothlight.png +0 -0
  159. data/examples/icons/solid_line.png +0 -0
  160. data/examples/icons/tbuplevel.png +0 -0
  161. data/examples/icons/topview.png +0 -0
  162. data/examples/icons/undo.png +0 -0
  163. data/examples/icons/winapp.png +0 -0
  164. data/examples/icons/zoom.png +0 -0
  165. data/examples/image.rb +279 -0
  166. data/examples/imageviewer.rb +509 -0
  167. data/examples/inputs.rb +83 -0
  168. data/examples/mditest.rb +180 -0
  169. data/examples/pig.rb +77 -0
  170. data/examples/raabrowser.rb +122 -0
  171. data/examples/ratio.rb +80 -0
  172. data/examples/rulerview.rb +27 -0
  173. data/examples/scintilla-test.rb +81 -0
  174. data/examples/scribble-orig.rb +186 -0
  175. data/examples/scribble.rb +162 -0
  176. data/examples/shutter.rb +158 -0
  177. data/examples/splitter.rb +211 -0
  178. data/examples/styledtext.rb +82 -0
  179. data/examples/tabbook.rb +165 -0
  180. data/examples/table.rb +182 -0
  181. data/examples/textedit/commands.rb +114 -0
  182. data/examples/textedit/helpwindow.rb +299 -0
  183. data/examples/textedit/prefdialog.rb +239 -0
  184. data/examples/textedit/textedit.rb +1763 -0
  185. data/examples/unicode.rb +36 -0
  186. data/ext/fox16/fox16.so +0 -0
  187. data/index.html +14 -0
  188. data/lib/fox16/accel_table.rb +70 -0
  189. data/lib/fox16/aliases.rb +5611 -0
  190. data/lib/fox16/calendar.rb +217 -0
  191. data/lib/fox16/chore.rb +105 -0
  192. data/lib/fox16/colors.rb +280 -0
  193. data/lib/fox16/core.rb +700 -0
  194. data/lib/fox16/dict.rb +35 -0
  195. data/lib/fox16/exceptions_for_fxerror.rb +17 -0
  196. data/lib/fox16/execute_nonmodal.rb +70 -0
  197. data/lib/fox16/glgroup.rb +166 -0
  198. data/lib/fox16/glshapes.rb +456 -0
  199. data/lib/fox16/input.rb +59 -0
  200. data/lib/fox16/irb.rb +178 -0
  201. data/lib/fox16/iterators.rb +420 -0
  202. data/lib/fox16/keys.rb +1374 -0
  203. data/lib/fox16/kwargs.rb +2740 -0
  204. data/lib/fox16/missingdep.rb +14 -0
  205. data/lib/fox16/pseudokeyboard.rb +40 -0
  206. data/lib/fox16/pseudomouse.rb +87 -0
  207. data/lib/fox16/responder.rb +70 -0
  208. data/lib/fox16/responder2.rb +132 -0
  209. data/lib/fox16/scintilla.rb +3641 -0
  210. data/lib/fox16/settings.rb +18 -0
  211. data/lib/fox16/signal.rb +71 -0
  212. data/lib/fox16/splashscreen.rb +82 -0
  213. data/lib/fox16/timeout.rb +136 -0
  214. data/lib/fox16/undolist.rb +455 -0
  215. data/lib/fox16/version.rb +9 -0
  216. data/rdoc-sources/FX4Splitter.rb +156 -0
  217. data/rdoc-sources/FX7Segment.rb +54 -0
  218. data/rdoc-sources/FXAccelTable.rb +84 -0
  219. data/rdoc-sources/FXApp.rb +545 -0
  220. data/rdoc-sources/FXArrowButton.rb +69 -0
  221. data/rdoc-sources/FXBMPIcon.rb +67 -0
  222. data/rdoc-sources/FXBMPImage.rb +30 -0
  223. data/rdoc-sources/FXBitmap.rb +115 -0
  224. data/rdoc-sources/FXBitmapFrame.rb +31 -0
  225. data/rdoc-sources/FXBitmapView.rb +44 -0
  226. data/rdoc-sources/FXButton.rb +59 -0
  227. data/rdoc-sources/FXCURCursor.rb +13 -0
  228. data/rdoc-sources/FXCanvas.rb +18 -0
  229. data/rdoc-sources/FXCheckButton.rb +58 -0
  230. data/rdoc-sources/FXChoiceBox.rb +49 -0
  231. data/rdoc-sources/FXColorBar.rb +48 -0
  232. data/rdoc-sources/FXColorDialog.rb +37 -0
  233. data/rdoc-sources/FXColorList.rb +55 -0
  234. data/rdoc-sources/FXColorRing.rb +49 -0
  235. data/rdoc-sources/FXColorSelector.rb +65 -0
  236. data/rdoc-sources/FXColorWell.rb +65 -0
  237. data/rdoc-sources/FXColorWheel.rb +57 -0
  238. data/rdoc-sources/FXComboBox.rb +214 -0
  239. data/rdoc-sources/FXComposite.rb +34 -0
  240. data/rdoc-sources/FXCursor.rb +67 -0
  241. data/rdoc-sources/FXDC.rb +720 -0
  242. data/rdoc-sources/FXDCPrint.rb +127 -0
  243. data/rdoc-sources/FXDCWindow.rb +33 -0
  244. data/rdoc-sources/FXDataTarget.rb +66 -0
  245. data/rdoc-sources/FXDebugTarget.rb +25 -0
  246. data/rdoc-sources/FXDelegator.rb +23 -0
  247. data/rdoc-sources/FXDial.rb +107 -0
  248. data/rdoc-sources/FXDialogBox.rb +32 -0
  249. data/rdoc-sources/FXDict.rb +79 -0
  250. data/rdoc-sources/FXDirBox.rb +55 -0
  251. data/rdoc-sources/FXDirDialog.rb +47 -0
  252. data/rdoc-sources/FXDirList.rb +149 -0
  253. data/rdoc-sources/FXDirSelector.rb +64 -0
  254. data/rdoc-sources/FXDockBar.rb +151 -0
  255. data/rdoc-sources/FXDockHandler.rb +26 -0
  256. data/rdoc-sources/FXDockSite.rb +104 -0
  257. data/rdoc-sources/FXDockTitle.rb +26 -0
  258. data/rdoc-sources/FXDocument.rb +29 -0
  259. data/rdoc-sources/FXDragCorner.rb +19 -0
  260. data/rdoc-sources/FXDrawable.rb +27 -0
  261. data/rdoc-sources/FXDriveBox.rb +46 -0
  262. data/rdoc-sources/FXExtentd.rb +85 -0
  263. data/rdoc-sources/FXExtentf.rb +85 -0
  264. data/rdoc-sources/FXFileDialog.rb +217 -0
  265. data/rdoc-sources/FXFileDict.rb +131 -0
  266. data/rdoc-sources/FXFileList.rb +208 -0
  267. data/rdoc-sources/FXFileSelector.rb +184 -0
  268. data/rdoc-sources/FXFileStream.rb +27 -0
  269. data/rdoc-sources/FXFoldingList.rb +504 -0
  270. data/rdoc-sources/FXFont.rb +361 -0
  271. data/rdoc-sources/FXFontDialog.rb +14 -0
  272. data/rdoc-sources/FXFontSelector.rb +37 -0
  273. data/rdoc-sources/FXFrame.rb +53 -0
  274. data/rdoc-sources/FXGIFCursor.rb +50 -0
  275. data/rdoc-sources/FXGIFIcon.rb +31 -0
  276. data/rdoc-sources/FXGIFImage.rb +29 -0
  277. data/rdoc-sources/FXGLCanvas.rb +45 -0
  278. data/rdoc-sources/FXGLContext.rb +40 -0
  279. data/rdoc-sources/FXGLObject.rb +75 -0
  280. data/rdoc-sources/FXGLShape.rb +69 -0
  281. data/rdoc-sources/FXGLViewer.rb +332 -0
  282. data/rdoc-sources/FXGLVisual.rb +94 -0
  283. data/rdoc-sources/FXGradientBar.rb +301 -0
  284. data/rdoc-sources/FXGroupBox.rb +36 -0
  285. data/rdoc-sources/FXHeader.rb +411 -0
  286. data/rdoc-sources/FXHorizontalFrame.rb +29 -0
  287. data/rdoc-sources/FXICOIcon.rb +65 -0
  288. data/rdoc-sources/FXICOImage.rb +31 -0
  289. data/rdoc-sources/FXIcon.rb +38 -0
  290. data/rdoc-sources/FXIconDict.rb +48 -0
  291. data/rdoc-sources/FXIconList.rb +450 -0
  292. data/rdoc-sources/FXIconSource.rb +100 -0
  293. data/rdoc-sources/FXId.rb +34 -0
  294. data/rdoc-sources/FXImage.rb +292 -0
  295. data/rdoc-sources/FXImageFrame.rb +36 -0
  296. data/rdoc-sources/FXImageView.rb +35 -0
  297. data/rdoc-sources/FXInputDialog.rb +80 -0
  298. data/rdoc-sources/FXJPGIcon.rb +70 -0
  299. data/rdoc-sources/FXJPGImage.rb +38 -0
  300. data/rdoc-sources/FXKnob.rb +76 -0
  301. data/rdoc-sources/FXLabel.rb +72 -0
  302. data/rdoc-sources/FXList.rb +443 -0
  303. data/rdoc-sources/FXListBox.rb +191 -0
  304. data/rdoc-sources/FXMDIButton.rb +67 -0
  305. data/rdoc-sources/FXMDIChild.rb +155 -0
  306. data/rdoc-sources/FXMDIClient.rb +65 -0
  307. data/rdoc-sources/FXMainWindow.rb +26 -0
  308. data/rdoc-sources/FXMatrix.rb +57 -0
  309. data/rdoc-sources/FXMemoryBuffer.rb +28 -0
  310. data/rdoc-sources/FXMemoryStream.rb +50 -0
  311. data/rdoc-sources/FXMenuBar.rb +23 -0
  312. data/rdoc-sources/FXMenuButton.rb +84 -0
  313. data/rdoc-sources/FXMenuCaption.rb +53 -0
  314. data/rdoc-sources/FXMenuCascade.rb +18 -0
  315. data/rdoc-sources/FXMenuCheck.rb +30 -0
  316. data/rdoc-sources/FXMenuCommand.rb +26 -0
  317. data/rdoc-sources/FXMenuPane.rb +13 -0
  318. data/rdoc-sources/FXMenuRadio.rb +33 -0
  319. data/rdoc-sources/FXMenuSeparator.rb +21 -0
  320. data/rdoc-sources/FXMenuTitle.rb +27 -0
  321. data/rdoc-sources/FXMessageBox.rb +73 -0
  322. data/rdoc-sources/FXObject.rb +28 -0
  323. data/rdoc-sources/FXOptionMenu.rb +83 -0
  324. data/rdoc-sources/FXPCXIcon.rb +63 -0
  325. data/rdoc-sources/FXPCXImage.rb +31 -0
  326. data/rdoc-sources/FXPNGIcon.rb +66 -0
  327. data/rdoc-sources/FXPNGImage.rb +34 -0
  328. data/rdoc-sources/FXPPMIcon.rb +36 -0
  329. data/rdoc-sources/FXPPMImage.rb +31 -0
  330. data/rdoc-sources/FXPacker.rb +63 -0
  331. data/rdoc-sources/FXPicker.rb +27 -0
  332. data/rdoc-sources/FXPopup.rb +53 -0
  333. data/rdoc-sources/FXPrintDialog.rb +36 -0
  334. data/rdoc-sources/FXProgressBar.rb +57 -0
  335. data/rdoc-sources/FXProgressDialog.rb +36 -0
  336. data/rdoc-sources/FXQuatd.rb +164 -0
  337. data/rdoc-sources/FXQuatf.rb +173 -0
  338. data/rdoc-sources/FXRGBIcon.rb +64 -0
  339. data/rdoc-sources/FXRGBImage.rb +31 -0
  340. data/rdoc-sources/FXRadioButton.rb +70 -0
  341. data/rdoc-sources/FXRanged.rb +100 -0
  342. data/rdoc-sources/FXRangef.rb +100 -0
  343. data/rdoc-sources/FXRealSlider.rb +101 -0
  344. data/rdoc-sources/FXRealSpinner.rb +140 -0
  345. data/rdoc-sources/FXRecentFiles.rb +77 -0
  346. data/rdoc-sources/FXRectangle.rb +149 -0
  347. data/rdoc-sources/FXRegion.rb +64 -0
  348. data/rdoc-sources/FXRegistry.rb +56 -0
  349. data/rdoc-sources/FXReplaceDialog.rb +56 -0
  350. data/rdoc-sources/FXRootWindow.rb +17 -0
  351. data/rdoc-sources/FXRuler.rb +130 -0
  352. data/rdoc-sources/FXRulerView.rb +225 -0
  353. data/rdoc-sources/FXScintilla.rb +121 -0
  354. data/rdoc-sources/FXScrollArea.rb +86 -0
  355. data/rdoc-sources/FXScrollBar.rb +107 -0
  356. data/rdoc-sources/FXScrollPane.rb +28 -0
  357. data/rdoc-sources/FXScrollWindow.rb +38 -0
  358. data/rdoc-sources/FXSearchDialog.rb +24 -0
  359. data/rdoc-sources/FXSeparator.rb +74 -0
  360. data/rdoc-sources/FXSettings.rb +248 -0
  361. data/rdoc-sources/FXShell.rb +8 -0
  362. data/rdoc-sources/FXShutter.rb +102 -0
  363. data/rdoc-sources/FXSize.rb +95 -0
  364. data/rdoc-sources/FXSlider.rb +98 -0
  365. data/rdoc-sources/FXSphered.rb +80 -0
  366. data/rdoc-sources/FXSpheref.rb +80 -0
  367. data/rdoc-sources/FXSpinner.rb +136 -0
  368. data/rdoc-sources/FXSplashWindow.rb +27 -0
  369. data/rdoc-sources/FXSplitter.rb +89 -0
  370. data/rdoc-sources/FXSpring.rb +61 -0
  371. data/rdoc-sources/FXStatusBar.rb +42 -0
  372. data/rdoc-sources/FXStatusLine.rb +60 -0
  373. data/rdoc-sources/FXStream.rb +142 -0
  374. data/rdoc-sources/FXStringDict.rb +38 -0
  375. data/rdoc-sources/FXSwitcher.rb +78 -0
  376. data/rdoc-sources/FXTGAIcon.rb +63 -0
  377. data/rdoc-sources/FXTGAImage.rb +31 -0
  378. data/rdoc-sources/FXTIFIcon.rb +70 -0
  379. data/rdoc-sources/FXTIFImage.rb +37 -0
  380. data/rdoc-sources/FXTabBar.rb +80 -0
  381. data/rdoc-sources/FXTabBook.rb +41 -0
  382. data/rdoc-sources/FXTabItem.rb +58 -0
  383. data/rdoc-sources/FXTable.rb +975 -0
  384. data/rdoc-sources/FXText.rb +581 -0
  385. data/rdoc-sources/FXTextField.rb +151 -0
  386. data/rdoc-sources/FXToggleButton.rb +70 -0
  387. data/rdoc-sources/FXToolBar.rb +61 -0
  388. data/rdoc-sources/FXToolBarGrip.rb +50 -0
  389. data/rdoc-sources/FXToolBarShell.rb +44 -0
  390. data/rdoc-sources/FXToolBarTab.rb +74 -0
  391. data/rdoc-sources/FXToolTip.rb +39 -0
  392. data/rdoc-sources/FXTopWindow.rb +163 -0
  393. data/rdoc-sources/FXTranslator.rb +32 -0
  394. data/rdoc-sources/FXTreeList.rb +514 -0
  395. data/rdoc-sources/FXTreeListBox.rb +219 -0
  396. data/rdoc-sources/FXTriStateButton.rb +49 -0
  397. data/rdoc-sources/FXVec2d.rb +96 -0
  398. data/rdoc-sources/FXVec2f.rb +96 -0
  399. data/rdoc-sources/FXVec3d.rb +118 -0
  400. data/rdoc-sources/FXVec3f.rb +118 -0
  401. data/rdoc-sources/FXVec4d.rb +139 -0
  402. data/rdoc-sources/FXVec4f.rb +139 -0
  403. data/rdoc-sources/FXVerticalFrame.rb +29 -0
  404. data/rdoc-sources/FXVisual.rb +79 -0
  405. data/rdoc-sources/FXWindow.rb +725 -0
  406. data/rdoc-sources/FXWizard.rb +59 -0
  407. data/rdoc-sources/FXXBMIcon.rb +37 -0
  408. data/rdoc-sources/FXXBMImage.rb +32 -0
  409. data/rdoc-sources/FXXPMIcon.rb +65 -0
  410. data/rdoc-sources/FXXPMImage.rb +31 -0
  411. data/rdoc-sources/README.rdoc +53 -0
  412. data/rdoc-sources/fxdefs.rb +90 -0
  413. data/tests/README +19 -0
  414. data/tests/TC_FXAccelTable.rb +57 -0
  415. data/tests/TC_FXApp.rb +16 -0
  416. data/tests/TC_FXArc.rb +26 -0
  417. data/tests/TC_FXBMPIcon.rb +15 -0
  418. data/tests/TC_FXBMPImage.rb +15 -0
  419. data/tests/TC_FXButton.rb +78 -0
  420. data/tests/TC_FXCheckButton.rb +57 -0
  421. data/tests/TC_FXComboBox.rb +63 -0
  422. data/tests/TC_FXDC.rb +372 -0
  423. data/tests/TC_FXDCPrint.rb +101 -0
  424. data/tests/TC_FXDCWindow.rb +23 -0
  425. data/tests/TC_FXDataTarget.rb +24 -0
  426. data/tests/TC_FXDialogBox.rb +12 -0
  427. data/tests/TC_FXDirList.rb +30 -0
  428. data/tests/TC_FXExtentd.rb +21 -0
  429. data/tests/TC_FXExtentf.rb +21 -0
  430. data/tests/TC_FXFileAssoc.rb +62 -0
  431. data/tests/TC_FXFileStream.rb +89 -0
  432. data/tests/TC_FXFoldingList.rb +32 -0
  433. data/tests/TC_FXFont.rb +69 -0
  434. data/tests/TC_FXFontDesc.rb +58 -0
  435. data/tests/TC_FXGLGroup.rb +32 -0
  436. data/tests/TC_FXGLShape.rb +28 -0
  437. data/tests/TC_FXGLViewer.rb +20 -0
  438. data/tests/TC_FXGradientBar.rb +89 -0
  439. data/tests/TC_FXHeader.rb +82 -0
  440. data/tests/TC_FXHiliteStyle.rb +23 -0
  441. data/tests/TC_FXIconDict.rb +52 -0
  442. data/tests/TC_FXIconList.rb +192 -0
  443. data/tests/TC_FXId.rb +19 -0
  444. data/tests/TC_FXImage.rb +155 -0
  445. data/tests/TC_FXLight.rb +33 -0
  446. data/tests/TC_FXList.rb +116 -0
  447. data/tests/TC_FXListBox.rb +49 -0
  448. data/tests/TC_FXMainWindow.rb +19 -0
  449. data/tests/TC_FXMat4f.rb +228 -0
  450. data/tests/TC_FXMaterial.rb +89 -0
  451. data/tests/TC_FXMemoryStream.rb +97 -0
  452. data/tests/TC_FXMenuCheck.rb +57 -0
  453. data/tests/TC_FXMenuCommand.rb +12 -0
  454. data/tests/TC_FXMenuRadio.rb +57 -0
  455. data/tests/TC_FXMessageBox.rb +25 -0
  456. data/tests/TC_FXPoint.rb +57 -0
  457. data/tests/TC_FXQuatf.rb +93 -0
  458. data/tests/TC_FXRadioButton.rb +57 -0
  459. data/tests/TC_FXRanged.rb +42 -0
  460. data/tests/TC_FXRangef.rb +42 -0
  461. data/tests/TC_FXRectangle.rb +88 -0
  462. data/tests/TC_FXRegion.rb +54 -0
  463. data/tests/TC_FXRegistry.rb +27 -0
  464. data/tests/TC_FXScrollArea.rb +28 -0
  465. data/tests/TC_FXScrollWindow.rb +28 -0
  466. data/tests/TC_FXSegment.rb +22 -0
  467. data/tests/TC_FXSettings.rb +34 -0
  468. data/tests/TC_FXShell.rb +26 -0
  469. data/tests/TC_FXSize.rb +54 -0
  470. data/tests/TC_FXStream.rb +11 -0
  471. data/tests/TC_FXTable.rb +561 -0
  472. data/tests/TC_FXTableItem.rb +48 -0
  473. data/tests/TC_FXText.rb +96 -0
  474. data/tests/TC_FXTopWindow.rb +32 -0
  475. data/tests/TC_FXTreeList.rb +100 -0
  476. data/tests/TC_FXTreeListBox.rb +41 -0
  477. data/tests/TC_FXUndoList.rb +43 -0
  478. data/tests/TC_FXVec2d.rb +142 -0
  479. data/tests/TC_FXVec2f.rb +137 -0
  480. data/tests/TC_FXVec3d.rb +150 -0
  481. data/tests/TC_FXVec3f.rb +150 -0
  482. data/tests/TC_FXVec4f.rb +158 -0
  483. data/tests/TC_FXViewport.rb +30 -0
  484. data/tests/TC_FXXBMIcon.rb +15 -0
  485. data/tests/TC_FXXBMImage.rb +15 -0
  486. data/tests/TC_FXXPMIcon.rb +15 -0
  487. data/tests/TC_FXXPMImage.rb +15 -0
  488. data/tests/TC_Misc.rb +157 -0
  489. data/tests/TC_downcast.rb +15 -0
  490. data/tests/TS_All.rb +25 -0
  491. data/tests/blankpage.ps +166 -0
  492. data/tests/howdypage.ps +181 -0
  493. data/tests/stress1.rb +92 -0
  494. data/tests/stress2.rb +51 -0
  495. data/tests/stress3.rb +117 -0
  496. data/tests/testcase.rb +37 -0
  497. metadata +556 -0
@@ -0,0 +1,576 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fox16'
4
+ require 'fox16/responder'
5
+ begin
6
+ require 'fox16/glshapes'
7
+ rescue LoadError
8
+ require 'fox16/missingdep'
9
+ MSG = <<EOM
10
+ Sorry, this example depends on the OpenGL extension. Please
11
+ check the Ruby Application Archives for an appropriate
12
+ download site.
13
+ EOM
14
+ missingDependency(MSG)
15
+ end
16
+
17
+ include Fox
18
+
19
+ class TabBook < FXTabBook
20
+ def createAnglesPage(panels, mdiclient)
21
+ # Angles tab
22
+ FXTabItem.new(panels,
23
+ "Angles\tCamera Angles\tSwitch to camera angles panel.")
24
+
25
+ # Angles page
26
+ angles = FXMatrix.new(panels, 3,
27
+ :opts => FRAME_THICK|FRAME_RAISED|MATRIX_BY_COLUMNS|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
28
+ :padding => 10)
29
+
30
+ FXLabel.new(angles, "X:")
31
+ FXTextField.new(angles, 6,
32
+ mdiclient, FXGLViewer::ID_ROLL,
33
+ TEXTFIELD_INTEGER|JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
34
+ x_dial = FXDial.new(angles,
35
+ mdiclient, FXGLViewer::ID_DIAL_X,
36
+ :opts => FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y,
37
+ :width => 160, :height => 14, :padding => 0)
38
+ x_dial.tipText = "Rotate about X"
39
+ x_dial.notchOffset = 900
40
+
41
+ FXLabel.new(angles, "Y:")
42
+ FXTextField.new(angles, 6,
43
+ mdiclient, FXGLViewer::ID_PITCH,
44
+ TEXTFIELD_INTEGER|JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
45
+ y_dial = FXDial.new(angles,
46
+ mdiclient, FXGLViewer::ID_DIAL_Y,
47
+ :opts => FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y,
48
+ :width => 160, :height => 14, :padding => 0)
49
+ y_dial.tipText = "Rotate about Y"
50
+ y_dial.notchOffset = 900
51
+
52
+ FXLabel.new(angles, "Z:")
53
+ FXTextField.new(angles, 6,
54
+ mdiclient, FXGLViewer::ID_YAW,
55
+ TEXTFIELD_INTEGER|JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
56
+ z_dial = FXDial.new(angles,
57
+ mdiclient, FXGLViewer::ID_DIAL_Z,
58
+ :opts => FRAME_SUNKEN|FRAME_THICK|DIAL_CYCLIC|DIAL_HORIZONTAL|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT|LAYOUT_CENTER_Y,
59
+ :width => 160, :height => 14, :padding => 0)
60
+ z_dial.tipText = "Rotate about Z"
61
+ z_dial.notchOffset = 900
62
+
63
+ FXLabel.new(angles, "FOV:")
64
+ fov = FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_FOV,
65
+ JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
66
+ FXFrame.new(angles, :opts => FRAME_NONE)
67
+ fov.tipText = "Field of view"
68
+
69
+ FXLabel.new(angles, "Zoom:")
70
+ zz = FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_ZOOM,
71
+ JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
72
+ FXFrame.new(angles, :opts => FRAME_NONE)
73
+ zz.tipText = "Zooming"
74
+
75
+ FXLabel.new(angles, "Scale X:")
76
+ FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_SCALE_X,
77
+ JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
78
+ FXFrame.new(angles, :opts => FRAME_NONE)
79
+ FXLabel.new(angles, "Scale Y:")
80
+ FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_SCALE_Y,
81
+ JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
82
+ FXFrame.new(angles, :opts => FRAME_NONE)
83
+ FXLabel.new(angles, "Scale Z:")
84
+ FXTextField.new(angles, 5, mdiclient, FXGLViewer::ID_SCALE_Z,
85
+ JUSTIFY_RIGHT|FRAME_SUNKEN|FRAME_THICK)
86
+ FXFrame.new(angles, :opts => FRAME_NONE)
87
+ end
88
+
89
+ def createColorsPage(panels, mdiclient)
90
+ # Colors tab
91
+ FXTabItem.new(panels, "Colors\tColors\tSwitch to color panel.")
92
+
93
+ # Colors page
94
+ colors = FXMatrix.new(panels, 2,
95
+ MATRIX_BY_COLUMNS|FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT,
96
+ :padding => 10)
97
+ FXLabel.new(colors, "Background:", nil,
98
+ LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
99
+ FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_BACK_COLOR,
100
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
101
+ FXLabel.new(colors, "Ambient:", nil,
102
+ LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
103
+ FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_AMBIENT_COLOR,
104
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
105
+
106
+ FXLabel.new(colors, "Light Amb:", nil,
107
+ LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
108
+ FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_LIGHT_AMBIENT,
109
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
110
+ FXLabel.new(colors, "Light Diff:", nil,
111
+ LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
112
+ FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_LIGHT_DIFFUSE,
113
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
114
+ FXLabel.new(colors, "Light Spec:", nil,
115
+ LAYOUT_RIGHT|LAYOUT_CENTER_Y|JUSTIFY_RIGHT)
116
+ FXColorWell.new(colors, 0, mdiclient, FXGLViewer::ID_LIGHT_SPECULAR,
117
+ COLORWELL_OPAQUEONLY|LAYOUT_TOP|LAYOUT_LEFT, :padding => 0)
118
+ end
119
+
120
+ def createSwitchesPage(panels, mdiclient)
121
+ # Settings tab
122
+ FXTabItem.new(panels, "Settings\tSettings\tSwitche to settings panel.")
123
+
124
+ # Settings page
125
+ settings = FXVerticalFrame.new(panels,
126
+ FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_Y|LAYOUT_CENTER_X|LAYOUT_TOP|LAYOUT_LEFT,
127
+ :padding => 10)
128
+ FXCheckButton.new(settings, "Lighting", mdiclient, FXGLViewer::ID_LIGHTING,
129
+ ICON_BEFORE_TEXT)
130
+ FXCheckButton.new(settings, "Fog", mdiclient, FXGLViewer::ID_FOG,
131
+ ICON_BEFORE_TEXT)
132
+ FXCheckButton.new(settings, "Dither", mdiclient, FXGLViewer::ID_DITHER,
133
+ ICON_BEFORE_TEXT)
134
+ FXCheckButton.new(settings, "Turbo", mdiclient, FXGLViewer::ID_TURBO,
135
+ ICON_BEFORE_TEXT)
136
+ end
137
+
138
+ def initialize(frame, mdiclient)
139
+ super(frame)
140
+ createAnglesPage(self, mdiclient)
141
+ createColorsPage(self, mdiclient)
142
+ createSwitchesPage(self, mdiclient)
143
+ end
144
+ end
145
+
146
+ class GLViewWindow < FXMainWindow
147
+
148
+ include Responder
149
+
150
+ ID_QUERY_MODE = FXMainWindow::ID_LAST
151
+ ID_GLVIEWER = ID_QUERY_MODE + 1
152
+
153
+ # Load the named PNG icon from a file
154
+ def loadIcon(filename)
155
+ begin
156
+ filename = File.join("icons", filename) + ".png"
157
+ icon = nil
158
+ File.open(filename, "rb") do |f|
159
+ icon = FXPNGIcon.new(getApp(), f.read)
160
+ end
161
+ icon
162
+ rescue
163
+ raise RuntimeError, "Couldn't load icon: #{filename}"
164
+ end
165
+ end
166
+
167
+ def initialize(app)
168
+ # Initialize base class first
169
+ super(app, "OpenGL Example Application", :opts => DECOR_ALL, :width => 800, :height => 600)
170
+
171
+ # Define message identifiers for this class
172
+
173
+ # Set up the message map
174
+ FXMAPFUNC(SEL_UPDATE, GLViewWindow::ID_QUERY_MODE, :onUpdMode)
175
+ FXMAPFUNC(SEL_COMMAND, FXWindow::ID_QUERY_MENU, :onQueryMenu)
176
+
177
+ # Main window icon
178
+ peng = loadIcon("penguin")
179
+ setIcon(peng)
180
+
181
+ # The colors dialog
182
+ colordlg = FXColorDialog.new(self, "Color Dialog", DECOR_TITLE|DECOR_BORDER)
183
+
184
+ # Menubar
185
+ menubar = FXMenuBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
186
+
187
+ # Tool bar
188
+ FXHorizontalSeparator.new(self,
189
+ LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X);
190
+ toolbar = FXToolBar.new(self, LAYOUT_SIDE_TOP|LAYOUT_FILL_X,
191
+ :padLeft => 4, :padRight => 4, :padTop => 0, :padBottom => 0,
192
+ :hSpacing => 0, :vSpacing => 0)
193
+
194
+ # Make status bar
195
+ statusbar = FXStatusBar.new(self,
196
+ LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER)
197
+
198
+ # The good old penguin, what would we be without it?
199
+ FXButton.new(statusbar,
200
+ "\tHello, I'm Tux...\nThe symbol for the Linux Operating System.\nAnd all it stands for.",
201
+ :icon => peng, :opts => LAYOUT_RIGHT)
202
+
203
+ # Contents
204
+ frame = FXHorizontalFrame.new(self,
205
+ LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0, :hSpacing => 0, :vSpacing => 0)
206
+
207
+ # Nice sunken box around GL viewer
208
+ box = FXVerticalFrame.new(frame,
209
+ FRAME_SUNKEN|FRAME_THICK|LAYOUT_FILL_X|LAYOUT_FILL_Y, :padding => 0)
210
+
211
+ # MDI Client
212
+ @mdiclient = FXMDIClient.new(box, LAYOUT_FILL_X|LAYOUT_FILL_Y)
213
+ @mdimenu = FXMDIMenu.new(self, @mdiclient)
214
+
215
+ # MDI buttons in menu:- note the message ID's!!!!!
216
+ # Normally, MDI commands are simply sensitized or desensitized;
217
+ # Under the menubar, however, they're hidden if the MDI Client is
218
+ # not maximized. To do this, they must have different ID's.
219
+ FXMDIWindowButton.new(menubar, @mdimenu, @mdiclient,
220
+ FXMDIClient::ID_MDI_MENUWINDOW, LAYOUT_LEFT)
221
+ FXMDIDeleteButton.new(menubar, @mdiclient,
222
+ FXMDIClient::ID_MDI_MENUCLOSE, FRAME_RAISED|LAYOUT_RIGHT)
223
+ FXMDIRestoreButton.new(menubar, @mdiclient,
224
+ FXMDIClient::ID_MDI_MENURESTORE, FRAME_RAISED|LAYOUT_RIGHT)
225
+ FXMDIMinimizeButton.new(menubar, @mdiclient,
226
+ FXMDIClient::ID_MDI_MENUMINIMIZE, FRAME_RAISED|LAYOUT_RIGHT)
227
+
228
+ # Icon for MDI Child
229
+ @mdiicon = loadIcon("winapp")
230
+
231
+ # Make MDI Window Menu
232
+ @mdimenu = FXMDIMenu.new(self, @mdiclient)
233
+
234
+ # Make an MDI Child
235
+ mdichild = FXMDIChild.new(@mdiclient, "FOX GL Viewer", @mdiicon,
236
+ @mdimenu, MDI_NORMAL, 30, 30, 300, 200)
237
+ @count = 1
238
+
239
+ # A visual to drag OpenGL in double-buffered mode; note the glvisual is
240
+ # shared between all windows which need the same depths and numbers of
241
+ # buffers. Thus, while the first visual may take some time to initialize,
242
+ # each subsequent window can be created very quickly; we need to determine
243
+ # graphics hardware characteristics only once.
244
+ @glvisual = FXGLVisual.new(getApp(), VISUAL_DOUBLEBUFFER)
245
+
246
+ # Make it active
247
+ @mdiclient.setActiveChild(mdichild)
248
+
249
+ # Drawing gl canvas
250
+ viewer = FXGLViewer.new(mdichild, @glvisual, self, ID_GLVIEWER,
251
+ LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT)
252
+
253
+ # Tab book with switchable panels
254
+ panels = TabBook.new(frame, @mdiclient)
255
+
256
+ # Construct these icons
257
+ newdoc = loadIcon("filenew")
258
+ opendoc = loadIcon("fileopen")
259
+ savedoc = loadIcon("filesave")
260
+ saveasdoc = loadIcon("filesaveas")
261
+
262
+ # File Menu
263
+ filemenu = FXMenuPane.new(self)
264
+ FXMenuTitle.new(menubar, "&File", nil, filemenu)
265
+ FXMenuCommand.new(filemenu, "&New...\tCtl-N\tCreate new document.", newdoc)
266
+ openCmd = FXMenuCommand.new(filemenu, "&Open...\tCtl-O\tOpen document file.", opendoc)
267
+ openCmd.connect(SEL_COMMAND, method(:onCmdOpen))
268
+ FXMenuCommand.new(filemenu, "&Save\tCtl-S\tSave document.", savedoc)
269
+ FXMenuCommand.new(filemenu, "Save &As...\t\tSave document to another file.", saveasdoc)
270
+ FXMenuCommand.new(filemenu, "&Print Image...\t\tPrint snapshot image.", nil, @mdiclient, FXGLViewer::ID_PRINT_IMAGE, MENU_AUTOGRAY)
271
+ FXMenuCommand.new(filemenu, "&Print Vector...\t\tPrint geometry.", nil, @mdiclient, FXGLViewer::ID_PRINT_VECTOR, MENU_AUTOGRAY)
272
+ FXMenuCommand.new(filemenu, "&Dump...\t\tDump widgets.", nil, getApp(), FXApp::ID_DUMP)
273
+ FXMenuCommand.new(filemenu, "&Quit\tCtl-Q\tQuit the application.", nil, getApp(), FXApp::ID_QUIT)
274
+
275
+ # Edit Menu
276
+ editmenu = FXMenuPane.new(self)
277
+ FXMenuTitle.new(menubar, "&Edit", nil, editmenu)
278
+ FXMenuCommand.new(editmenu, "Undo")
279
+ FXMenuCommand.new(editmenu, "Copy", nil, @mdiclient, FXGLViewer::ID_COPY_SEL, MENU_AUTOGRAY)
280
+ FXMenuCommand.new(editmenu, "Cut", nil, @mdiclient, FXGLViewer::ID_CUT_SEL, MENU_AUTOGRAY)
281
+ FXMenuCommand.new(editmenu, "Paste", nil, @mdiclient, FXGLViewer::ID_PASTE_SEL, MENU_AUTOGRAY)
282
+ FXMenuCommand.new(editmenu, "Delete", nil, @mdiclient, FXGLViewer::ID_DELETE_SEL, MENU_AUTOGRAY)
283
+
284
+ # File manipulation
285
+ FXButton.new(toolbar, "\tNew\tCreate new document.", newdoc, nil, 0,
286
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
287
+ openBtn = FXButton.new(toolbar, "\tOpen\tOpen document file.", opendoc, nil, 0,
288
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
289
+ openBtn.connect(SEL_COMMAND, method(:onCmdOpen))
290
+ FXButton.new(toolbar, "\tSave\tSave document.", savedoc, nil, 0,
291
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
292
+ FXButton.new(toolbar, "\tSave As\tSave document to another file.",
293
+ saveasdoc, nil, 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
294
+ FXButton.new(toolbar, "\tNew Folder\tNo comment", loadIcon("newfolder"),
295
+ nil, 0, FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
296
+
297
+ # Print
298
+ FXFrame.new(toolbar,
299
+ LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 4, :height => 20)
300
+ FXButton.new(toolbar, "\tPrint Image\tPrint shapshot image.",
301
+ loadIcon("printicon"), @mdiclient, FXGLViewer::ID_PRINT_IMAGE,
302
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
303
+
304
+ # Editing
305
+ FXFrame.new(toolbar,
306
+ LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT, :width => 4, :height => 20)
307
+ FXButton.new(toolbar, "\tCut", loadIcon("cut"), @mdiclient,
308
+ FXGLViewer::ID_CUT_SEL, (BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|
309
+ LAYOUT_TOP|LAYOUT_LEFT))
310
+ FXButton.new(toolbar, "\tCopy", loadIcon("copy"), @mdiclient,
311
+ FXGLViewer::ID_COPY_SEL, (BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|
312
+ LAYOUT_TOP|LAYOUT_LEFT))
313
+ FXButton.new(toolbar, "\tPaste", loadIcon("paste"), @mdiclient,
314
+ FXGLViewer::ID_PASTE_SEL, (BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|
315
+ LAYOUT_TOP|LAYOUT_LEFT))
316
+
317
+ # Projections
318
+ FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|
319
+ LAYOUT_FIX_WIDTH|LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
320
+ FXButton.new(toolbar, "\tPerspective\tSwitch to perspective projection.",
321
+ loadIcon("perspective"), @mdiclient, FXGLViewer::ID_PERSPECTIVE,
322
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
323
+ FXButton.new(toolbar, "\tParallel\tSwitch to parallel projection.",
324
+ loadIcon("parallel"), @mdiclient, FXGLViewer::ID_PARALLEL,
325
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
326
+
327
+ # Shading model
328
+ FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
329
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
330
+ FXButton.new(toolbar, "\tNo shading\tTurn light sources off.",
331
+ loadIcon("nolight"), @mdiclient, FXGLShape::ID_SHADEOFF,
332
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
333
+ FXButton.new(toolbar, "\tFlat shading\tTurn on faceted (flat) shading.",
334
+ loadIcon("light"), @mdiclient, FXGLShape::ID_SHADEON,
335
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
336
+ FXButton.new(toolbar, "\tSmooth shading\tTurn on smooth shading.",
337
+ loadIcon("smoothlight"), @mdiclient, FXGLShape::ID_SHADESMOOTH,
338
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
339
+ FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
340
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
341
+ FXToggleButton.new(toolbar, "\tToggle Light\tToggle light source.", nil,
342
+ loadIcon("nolight"), loadIcon("light"), nil, 0,
343
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
344
+
345
+ # View orientation
346
+ FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
347
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
348
+ FXButton.new(toolbar, "\tFront View\tView objects from the front.",
349
+ loadIcon("frontview"), @mdiclient, FXGLViewer::ID_FRONT,
350
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
351
+ FXButton.new(toolbar, "\tBack View\tView objects from behind.",
352
+ loadIcon("backview"), @mdiclient, FXGLViewer::ID_BACK,
353
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
354
+ FXButton.new(toolbar, "\tLeft View\tView objects from the left.",
355
+ loadIcon("leftview"), @mdiclient, FXGLViewer::ID_LEFT,
356
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
357
+ FXButton.new(toolbar, "\tRight View\tView objects from the right.",
358
+ loadIcon("rightview"), @mdiclient, FXGLViewer::ID_RIGHT,
359
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
360
+ FXButton.new(toolbar, "\tTop View\tView objects from the top.",
361
+ loadIcon("topview"), @mdiclient, FXGLViewer::ID_TOP,
362
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
363
+ FXButton.new(toolbar, "\tBottom View\tView objects from below.",
364
+ loadIcon("bottomview"), @mdiclient, FXGLViewer::ID_BOTTOM,
365
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
366
+
367
+ # Miscellaneous buttons
368
+ FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
369
+ LAYOUT_FIX_HEIGHT), :width => 8, :height => 20)
370
+ FXButton.new(toolbar, nil, loadIcon("zoom"), nil, 0,
371
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
372
+ FXButton.new(toolbar, "\tColors\tDisplay color dialog.",
373
+ loadIcon("colorpal"), colordlg, FXWindow::ID_SHOW,
374
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
375
+ FXButton.new(toolbar, nil, loadIcon("camera"), nil, 0,
376
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
377
+ FXButton.new(toolbar, nil, loadIcon("foxicon"), nil, 0,
378
+ FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
379
+
380
+ # Dangerous delete a bit on the side
381
+ FXFrame.new(toolbar, (LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FIX_WIDTH|
382
+ LAYOUT_FIX_HEIGHT), :width => 10, :height => 20)
383
+ FXButton.new(toolbar, "\tDelete\tDelete the selected object.",
384
+ loadIcon("kill"), @mdiclient, FXGLViewer::ID_DELETE_SEL,
385
+ BUTTON_AUTOGRAY|FRAME_THICK|FRAME_RAISED|LAYOUT_TOP|LAYOUT_LEFT)
386
+
387
+ # View menu
388
+ viewmenu = FXMenuPane.new(self)
389
+ FXMenuTitle.new(menubar, "&View", nil, viewmenu)
390
+ FXMenuCommand.new(viewmenu,
391
+ "Parallel\t\tSwitch to parallel projection.", nil,
392
+ @mdiclient, FXGLViewer::ID_PARALLEL, MENU_AUTOGRAY)
393
+ FXMenuCommand.new(viewmenu,
394
+ "Perspective\t\tSwitch to perspective projection.", nil,
395
+ @mdiclient, FXGLViewer::ID_PERSPECTIVE, MENU_AUTOGRAY)
396
+ FXMenuCommand.new(viewmenu, "&Front\tCtl-F\tFront view.", nil,
397
+ @mdiclient, FXGLViewer::ID_FRONT, MENU_AUTOGRAY)
398
+ FXMenuCommand.new(viewmenu, "&Back\tCtl-B\tBack view.", nil,
399
+ @mdiclient, FXGLViewer::ID_BACK, MENU_AUTOGRAY)
400
+ FXMenuCommand.new(viewmenu, "&Left\tCtl-L\tLeft view.", nil,
401
+ @mdiclient, FXGLViewer::ID_LEFT, MENU_AUTOGRAY)
402
+ FXMenuCommand.new(viewmenu, "&Right\tCtl-R\tRight view.", nil,
403
+ @mdiclient, FXGLViewer::ID_RIGHT, MENU_AUTOGRAY)
404
+ FXMenuCommand.new(viewmenu, "&Top\tCtl-T\tTop view.", nil,
405
+ @mdiclient, FXGLViewer::ID_TOP, MENU_AUTOGRAY)
406
+ FXMenuCommand.new(viewmenu, "&Bottom\tCtl-K\tBottom view.", nil,
407
+ @mdiclient, FXGLViewer::ID_BOTTOM, MENU_AUTOGRAY)
408
+ FXMenuCommand.new(viewmenu, "F&it\t\tFit to view.", nil,
409
+ @mdiclient, FXGLViewer::ID_FITVIEW, MENU_AUTOGRAY)
410
+ FXMenuCommand.new(viewmenu,
411
+ "R&eset\tCtl-G\tReset all viewing parameters", nil,
412
+ @mdiclient, FXGLViewer::ID_RESETVIEW, MENU_AUTOGRAY)
413
+ FXMenuCommand.new(viewmenu, "Zoom...\t\tZoom in on area", nil,
414
+ @mdiclient, FXGLViewer::ID_LASSO_ZOOM, MENU_AUTOGRAY)
415
+ FXMenuCommand.new(viewmenu, "Select...\t\tZoom in on area", nil,
416
+ @mdiclient, FXGLViewer::ID_LASSO_SELECT, MENU_AUTOGRAY)
417
+
418
+ # Rendering menu
419
+ rendermenu = FXMenuPane.new(self)
420
+ FXMenuTitle.new(menubar, "&Rendering", nil, rendermenu)
421
+ FXMenuCommand.new(rendermenu, "Points\t\tRender as points.", nil,
422
+ @mdiclient, FXGLShape::ID_STYLE_POINTS, MENU_AUTOGRAY)
423
+ FXMenuCommand.new(rendermenu, "Wire Frame\t\tRender as wire frame.", nil,
424
+ @mdiclient, FXGLShape::ID_STYLE_WIREFRAME, MENU_AUTOGRAY)
425
+ FXMenuCommand.new(rendermenu, "Surface \t\tRender solid surface.", nil,
426
+ @mdiclient, FXGLShape::ID_STYLE_SURFACE, MENU_AUTOGRAY)
427
+ FXMenuCommand.new(rendermenu,
428
+ "Bounding Box\t\tRender bounding box only.", nil,
429
+ @mdiclient, FXGLShape::ID_STYLE_BOUNDINGBOX, MENU_AUTOGRAY)
430
+
431
+ # Window menu
432
+ windowmenu = FXMenuPane.new(self)
433
+ FXMenuTitle.new(menubar,"&Windows", nil, windowmenu)
434
+ newViewerCmd = FXMenuCommand.new(windowmenu, "New Viewer\t\tCreate new viewer window.")
435
+ newViewerCmd.connect(SEL_COMMAND) do
436
+ mdichild = FXMDIChild.new(@mdiclient, "GL Viewer #{@count}", @mdiicon,
437
+ @mdimenu, MDI_NORMAL, 30, 30, 300, 200)
438
+ view = FXGLViewer.new(mdichild, @glvisual, self, ID_GLVIEWER)
439
+ view.scene = @scene
440
+ mdichild.create
441
+ @count += 1
442
+ end
443
+ FXMenuCommand.new(windowmenu,
444
+ "Tile Horizontally\t\tTile windows horizontally.", nil,
445
+ @mdiclient, FXMDIClient::ID_MDI_TILEHORIZONTAL)
446
+ FXMenuCommand.new(windowmenu,
447
+ "Tile Vertically\t\tTile windows vertically.", nil,
448
+ @mdiclient, FXMDIClient::ID_MDI_TILEVERTICAL)
449
+ FXMenuCommand.new(windowmenu, "Cascade\t\tCascade windows.", nil,
450
+ @mdiclient, FXMDIClient::ID_MDI_CASCADE)
451
+ FXMenuCommand.new(windowmenu, "Toolbar", nil,
452
+ toolbar, FXWindow::ID_TOGGLESHOWN)
453
+ FXMenuCommand.new(windowmenu, "Control panel", nil,
454
+ panels, FXWindow::ID_TOGGLESHOWN)
455
+ FXMenuCommand.new(windowmenu,
456
+ "Delete\t\tDelete current viewer window.", nil,
457
+ @mdiclient, FXMDIClient::ID_MDI_CLOSE)
458
+ sep1 = FXMenuSeparator.new(windowmenu)
459
+ sep1.setTarget(@mdiclient)
460
+ sep1.setSelector(FXMDIClient::ID_MDI_ANY)
461
+ FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_1)
462
+ FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_2)
463
+ FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_3)
464
+ FXMenuCommand.new(windowmenu, nil, nil, @mdiclient, FXMDIClient::ID_MDI_4)
465
+
466
+ # Help menu
467
+ helpmenu = FXMenuPane.new(self)
468
+ FXMenuTitle.new(menubar, "&Help", nil, helpmenu, LAYOUT_RIGHT)
469
+ aboutCmd = FXMenuCommand.new(helpmenu,
470
+ "&About FOX...\t\tDisplay FOX about panel.")
471
+ aboutCmd.connect(SEL_COMMAND) {
472
+ FXMessageBox.information(self, MBOX_OK, "About FOX",
473
+ "FOX OpenGL Example.\nCopyright (C) 1998 Jeroen van der Zijp")
474
+ }
475
+
476
+ # Make a tool tip
477
+ FXToolTip.new(getApp(), 0)
478
+
479
+ # The status bar shows our mode
480
+ statusbar.statusLine.target = self
481
+ statusbar.statusLine.selector = ID_QUERY_MODE
482
+
483
+ # Make a scene!
484
+ @scene = FXGLGroup.new
485
+ gp2 = FXGLGroup.new
486
+ @scene.append(gp2)
487
+ sphere = FXGLSphere.new(1.0, 1.0, 0.0, 0.5)
488
+ sphere2 = FXGLSphere.new(0.0, 0.0, 0.0, 0.8)
489
+ sphere.tipText = "Sphere"
490
+ gp2.append(FXGLCube.new(-1.0, 0.0, 0.0, 1.0, 1.0, 1.0))
491
+ gp2.append(FXGLCube.new( 1.0, 0.0, 0.0, 1.0, 1.0, 1.0))
492
+ gp2.append(FXGLCube.new( 0.0,-1.0, 0.0, 1.0, 1.0, 1.0))
493
+ gp2.append(FXGLCube.new( 0.0, 1.0, 0.0, 1.0, 1.0, 1.0))
494
+ gp2.append(FXGLCone.new(1.0,-1.5, 0.0, 1.0, 0.5))
495
+ gp2.append(FXGLCylinder.new(-1.0, 0.5, 0.0, 1.0, 0.5))
496
+ gp2.append(sphere)
497
+ gp2.append(sphere2)
498
+
499
+ # Add scene to GL viewer
500
+ viewer.scene = @scene
501
+ end
502
+
503
+ # Create and show the main window
504
+ def create
505
+ super
506
+ show(PLACEMENT_SCREEN)
507
+ end
508
+
509
+ def onCmdOpen(sender, sel, ptr)
510
+ dlg = FXFileDialog.new(self, "Open some file")
511
+ dlg.setPatternList([
512
+ "All Files (*)",
513
+ "C++ Source Files (*.[Cc][Pp][Pp])",
514
+ "C++ Header Files (*.[Hh])",
515
+ "Object Files (*.o)",
516
+ "HTML Files (*.[Hh][Tt][Mm][Ll]"])
517
+ if dlg.execute() != 0
518
+ FXMessageBox.information(self, MBOX_OK, "Huzzah!", "You selected the file: #{dlg.filename}")
519
+ end
520
+ return 1
521
+ end
522
+
523
+ def onUpdMode(sender, sel, ptr)
524
+ sender.text = "Ready."
525
+ end
526
+
527
+ # When the user right-clicks in the GLViewer background, the viewer first
528
+ # sends a SEL_COMMAND message with identifier FXWindow::ID_QUERY_MENU to
529
+ # the selected GLObject (if any). If that message isn't handled, it tries
530
+ # to send it to the GLViewer's target (which in our case is the main
531
+ # window).
532
+ def onQueryMenu(sender, sel, event)
533
+ pane = FXMenuPane.new(self)
534
+ FXMenuCommand.new(pane, "Parallel\t\tSwitch to parallel projection.",
535
+ nil, sender, FXGLViewer::ID_PARALLEL)
536
+ FXMenuCommand.new(pane, "Perspective\t\tSwitch to perspective projection.",
537
+ nil, sender, FXGLViewer::ID_PERSPECTIVE)
538
+ FXMenuSeparator.new(pane)
539
+ FXMenuCommand.new(pane, "&Front\t\tFront view.", nil,
540
+ sender,FXGLViewer::ID_FRONT)
541
+ FXMenuCommand.new(pane, "&Back\t\tBack view.", nil,
542
+ sender, FXGLViewer::ID_BACK)
543
+ FXMenuCommand.new(pane, "&Left\t\tLeft view.", nil,
544
+ sender, FXGLViewer::ID_LEFT)
545
+ FXMenuCommand.new(pane, "&Right\t\tRight view.", nil,
546
+ sender, FXGLViewer::ID_RIGHT)
547
+ FXMenuCommand.new(pane, "&Top\t\tTop view.", nil,
548
+ sender, FXGLViewer::ID_TOP)
549
+ FXMenuCommand.new(pane, "&Bottom\t\tBottom view.", nil,
550
+ sender, FXGLViewer::ID_BOTTOM)
551
+ FXMenuSeparator.new(pane)
552
+ FXMenuCommand.new(pane, "F&it\t\tFit to view.", nil,
553
+ sender, FXGLViewer::ID_FITVIEW)
554
+ FXMenuCommand.new(pane, "R&eset\t\tReset all viewing parameters", nil,
555
+ sender, FXGLViewer::ID_RESETVIEW)
556
+ pane.create
557
+ pane.popup(nil, event.root_x, event.root_y)
558
+ getApp().runModalWhileShown(pane)
559
+ return 1
560
+ end
561
+ end
562
+
563
+ if __FILE__ == $0
564
+ # Make application
565
+ application = FXApp.new("GLViewer", "FoxTest")
566
+ application.threadsEnabled = false
567
+
568
+ # Make window
569
+ GLViewWindow.new(application)
570
+
571
+ # Create the application windows
572
+ application.create
573
+
574
+ # Run the application
575
+ application.run
576
+ end