fxruby 1.6.27-x64-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.
- data.tar.gz.sig +0 -0
- data/.gemtest +0 -0
- data/.gitignore +14 -0
- data/.yardopts +12 -0
- data/History.txt +57 -0
- data/Manifest.txt +1214 -0
- data/README.rdoc +537 -0
- data/Rakefile +233 -0
- data/Rakefile.cross +421 -0
- data/TODO +47 -0
- data/doap.rdf.erb +87 -0
- data/examples/RAA.rb +25 -0
- data/examples/README +53 -0
- data/examples/WhatAQuietStiff.rb +356 -0
- data/examples/babelfish.rb +72 -0
- data/examples/bounce.rb +171 -0
- data/examples/browser.rb +191 -0
- data/examples/button.rb +168 -0
- data/examples/canvasdemo.rb +88 -0
- data/examples/charts.rb +35 -0
- data/examples/custom_table_item.rb +170 -0
- data/examples/datatarget.rb +223 -0
- data/examples/dctest.rb +696 -0
- data/examples/dialog.rb +143 -0
- data/examples/dilbert.rb +66 -0
- data/examples/dirlist.rb +63 -0
- data/examples/dragdrop.rb +97 -0
- data/examples/dragsource.rb +80 -0
- data/examples/dropsite.rb +59 -0
- data/examples/foursplit.rb +97 -0
- data/examples/gdchart.rb +76 -0
- data/examples/gembrowser.rb +289 -0
- data/examples/gltest.rb +330 -0
- data/examples/glviewer.rb +576 -0
- data/examples/groupbox.rb +392 -0
- data/examples/header.rb +149 -0
- data/examples/hello.rb +12 -0
- data/examples/hello2.rb +51 -0
- data/examples/iRAA.rb +153 -0
- data/examples/iconlist.rb +92 -0
- data/examples/icons/AngryGuyInBunnySuit.ico +0 -0
- data/examples/icons/FatBot.ico +0 -0
- data/examples/icons/FlippedySwitch.ico +0 -0
- data/examples/icons/LeGoon.ico +0 -0
- data/examples/icons/Net.ico +0 -0
- data/examples/icons/RedMacOS.ico +0 -0
- data/examples/icons/SawBlade.ico +0 -0
- data/examples/icons/backview.png +0 -0
- data/examples/icons/big.png +0 -0
- data/examples/icons/bigfolder.png +0 -0
- data/examples/icons/bigpenguin.png +0 -0
- data/examples/icons/bluebullet14x14.gif +0 -0
- data/examples/icons/bottomview.png +0 -0
- data/examples/icons/camera.png +0 -0
- data/examples/icons/capbutt.png +0 -0
- data/examples/icons/capnotlast.png +0 -0
- data/examples/icons/capproj.png +0 -0
- data/examples/icons/capround.png +0 -0
- data/examples/icons/colorpal.png +0 -0
- data/examples/icons/copy.png +0 -0
- data/examples/icons/cut.png +0 -0
- data/examples/icons/delimit.png +0 -0
- data/examples/icons/dippy.png +0 -0
- data/examples/icons/double_dash.png +0 -0
- data/examples/icons/filenew.png +0 -0
- data/examples/icons/fileopen.png +0 -0
- data/examples/icons/filesave.png +0 -0
- data/examples/icons/filesaveas.png +0 -0
- data/examples/icons/fonts.png +0 -0
- data/examples/icons/fox.png +0 -0
- data/examples/icons/foxicon.png +0 -0
- data/examples/icons/frontview.png +0 -0
- data/examples/icons/gem_big.png +0 -0
- data/examples/icons/gem_small.png +0 -0
- data/examples/icons/hello2.png +0 -0
- data/examples/icons/help.png +0 -0
- data/examples/icons/indent.png +0 -0
- data/examples/icons/jbevel.png +0 -0
- data/examples/icons/jmiter.png +0 -0
- data/examples/icons/jround.png +0 -0
- data/examples/icons/kill.png +0 -0
- data/examples/icons/leftview.png +0 -0
- data/examples/icons/light.png +0 -0
- data/examples/icons/minidoc.png +0 -0
- data/examples/icons/minifolder.png +0 -0
- data/examples/icons/minifolderopen.png +0 -0
- data/examples/icons/newfolder.png +0 -0
- data/examples/icons/nolight.png +0 -0
- data/examples/icons/onoff_dash.png +0 -0
- data/examples/icons/palette.png +0 -0
- data/examples/icons/parallel.png +0 -0
- data/examples/icons/paste.png +0 -0
- data/examples/icons/pattern.png +0 -0
- data/examples/icons/penguin.png +0 -0
- data/examples/icons/perspective.png +0 -0
- data/examples/icons/printicon.png +0 -0
- data/examples/icons/prop.png +0 -0
- data/examples/icons/redo.png +0 -0
- data/examples/icons/rightview.png +0 -0
- data/examples/icons/saveas.png +0 -0
- data/examples/icons/shutter1.png +0 -0
- data/examples/icons/shutter2.png +0 -0
- data/examples/icons/small.png +0 -0
- data/examples/icons/smoothlight.png +0 -0
- data/examples/icons/solid_line.png +0 -0
- data/examples/icons/tbuplevel.png +0 -0
- data/examples/icons/topview.png +0 -0
- data/examples/icons/transpbullet14x14.gif +0 -0
- data/examples/icons/undo.png +0 -0
- data/examples/icons/winapp.png +0 -0
- data/examples/icons/zoom.png +0 -0
- data/examples/image.rb +279 -0
- data/examples/imageviewer.rb +509 -0
- data/examples/inputs.rb +83 -0
- data/examples/mditest.rb +180 -0
- data/examples/pig.rb +77 -0
- data/examples/raabrowser.rb +122 -0
- data/examples/ratio.rb +80 -0
- data/examples/rmagick.rb +44 -0
- data/examples/rulerview.rb +27 -0
- data/examples/scintilla-test.rb +81 -0
- data/examples/scribble-orig.rb +186 -0
- data/examples/scribble.rb +162 -0
- data/examples/shutter.rb +158 -0
- data/examples/splitter.rb +211 -0
- data/examples/styledtext.rb +82 -0
- data/examples/tabbook.rb +165 -0
- data/examples/table.rb +182 -0
- data/examples/textedit/commands.rb +114 -0
- data/examples/textedit/helpwindow.rb +299 -0
- data/examples/textedit/prefdialog.rb +239 -0
- data/examples/textedit/textedit.rb +1763 -0
- data/examples/unicode.rb +36 -0
- data/ext/fox16_c/FXRbApp.cpp +128 -0
- data/ext/fox16_c/FXRbDataTarget.cpp +110 -0
- data/ext/fox16_c/FXRbGLViewer.cpp +89 -0
- data/ext/fox16_c/FXRuby.cpp +2063 -0
- data/ext/fox16_c/MANIFEST +190 -0
- data/ext/fox16_c/extconf.rb +153 -0
- data/ext/fox16_c/impl.cpp +1156 -0
- data/ext/fox16_c/include/FXMemoryBuffer.h +52 -0
- data/ext/fox16_c/include/FXRb4Splitter.h +54 -0
- data/ext/fox16_c/include/FXRb7Segment.h +51 -0
- data/ext/fox16_c/include/FXRbAccelTable.h +46 -0
- data/ext/fox16_c/include/FXRbApp.h +155 -0
- data/ext/fox16_c/include/FXRbAppVirtuals.h +15 -0
- data/ext/fox16_c/include/FXRbArrowButton.h +51 -0
- data/ext/fox16_c/include/FXRbBMPIcon.h +54 -0
- data/ext/fox16_c/include/FXRbBMPImage.h +54 -0
- data/ext/fox16_c/include/FXRbBitmap.h +133 -0
- data/ext/fox16_c/include/FXRbBitmapFrame.h +56 -0
- data/ext/fox16_c/include/FXRbBitmapView.h +56 -0
- data/ext/fox16_c/include/FXRbBitmapVirtuals.h +37 -0
- data/ext/fox16_c/include/FXRbButton.h +51 -0
- data/ext/fox16_c/include/FXRbCURCursor.h +60 -0
- data/ext/fox16_c/include/FXRbCanvas.h +51 -0
- data/ext/fox16_c/include/FXRbCheckButton.h +51 -0
- data/ext/fox16_c/include/FXRbChoiceBox.h +56 -0
- data/ext/fox16_c/include/FXRbColorBar.h +51 -0
- data/ext/fox16_c/include/FXRbColorDialog.h +53 -0
- data/ext/fox16_c/include/FXRbColorList.h +84 -0
- data/ext/fox16_c/include/FXRbColorRing.h +51 -0
- data/ext/fox16_c/include/FXRbColorSelector.h +51 -0
- data/ext/fox16_c/include/FXRbColorWell.h +51 -0
- data/ext/fox16_c/include/FXRbColorWheel.h +51 -0
- data/ext/fox16_c/include/FXRbComboBox.h +56 -0
- data/ext/fox16_c/include/FXRbCommon.h +99 -0
- data/ext/fox16_c/include/FXRbComposite.h +51 -0
- data/ext/fox16_c/include/FXRbCursor.h +87 -0
- data/ext/fox16_c/include/FXRbCursorVirtuals.h +6 -0
- data/ext/fox16_c/include/FXRbDC.h +427 -0
- data/ext/fox16_c/include/FXRbDCPrint.h +49 -0
- data/ext/fox16_c/include/FXRbDCVirtuals.h +187 -0
- data/ext/fox16_c/include/FXRbDCWindow.h +64 -0
- data/ext/fox16_c/include/FXRbDataTarget.h +65 -0
- data/ext/fox16_c/include/FXRbDebugTarget.h +46 -0
- data/ext/fox16_c/include/FXRbDelegator.h +46 -0
- data/ext/fox16_c/include/FXRbDial.h +51 -0
- data/ext/fox16_c/include/FXRbDialogBox.h +68 -0
- data/ext/fox16_c/include/FXRbDialogBoxVirtuals.h +3 -0
- data/ext/fox16_c/include/FXRbDict.h +46 -0
- data/ext/fox16_c/include/FXRbDirBox.h +52 -0
- data/ext/fox16_c/include/FXRbDirDialog.h +56 -0
- data/ext/fox16_c/include/FXRbDirList.h +79 -0
- data/ext/fox16_c/include/FXRbDirSelector.h +51 -0
- data/ext/fox16_c/include/FXRbDockBar.h +86 -0
- data/ext/fox16_c/include/FXRbDockBarVirtuals.h +10 -0
- data/ext/fox16_c/include/FXRbDockHandler.h +51 -0
- data/ext/fox16_c/include/FXRbDockSite.h +85 -0
- data/ext/fox16_c/include/FXRbDockSiteVirtuals.h +13 -0
- data/ext/fox16_c/include/FXRbDockTitle.h +51 -0
- data/ext/fox16_c/include/FXRbDocument.h +46 -0
- data/ext/fox16_c/include/FXRbDragCorner.h +51 -0
- data/ext/fox16_c/include/FXRbDrawable.h +64 -0
- data/ext/fox16_c/include/FXRbDrawableVirtuals.h +3 -0
- data/ext/fox16_c/include/FXRbDriveBox.h +52 -0
- data/ext/fox16_c/include/FXRbFileDialog.h +56 -0
- data/ext/fox16_c/include/FXRbFileDict.h +104 -0
- data/ext/fox16_c/include/FXRbFileDictVirtuals.h +9 -0
- data/ext/fox16_c/include/FXRbFileList.h +81 -0
- data/ext/fox16_c/include/FXRbFileSelector.h +51 -0
- data/ext/fox16_c/include/FXRbFoldingItemVirtuals.h +42 -0
- data/ext/fox16_c/include/FXRbFoldingList.h +270 -0
- data/ext/fox16_c/include/FXRbFoldingListVirtuals.h +43 -0
- data/ext/fox16_c/include/FXRbFont.h +183 -0
- data/ext/fox16_c/include/FXRbFontDialog.h +53 -0
- data/ext/fox16_c/include/FXRbFontSelector.h +51 -0
- data/ext/fox16_c/include/FXRbFontVirtuals.h +55 -0
- data/ext/fox16_c/include/FXRbFrame.h +51 -0
- data/ext/fox16_c/include/FXRbGIFCursor.h +60 -0
- data/ext/fox16_c/include/FXRbGIFIcon.h +54 -0
- data/ext/fox16_c/include/FXRbGIFImage.h +54 -0
- data/ext/fox16_c/include/FXRbGLCanvas.h +92 -0
- data/ext/fox16_c/include/FXRbGLCanvasVirtuals.h +13 -0
- data/ext/fox16_c/include/FXRbGLContext.h +58 -0
- data/ext/fox16_c/include/FXRbGLObject.h +103 -0
- data/ext/fox16_c/include/FXRbGLObjectVirtuals.h +22 -0
- data/ext/fox16_c/include/FXRbGLShape.h +81 -0
- data/ext/fox16_c/include/FXRbGLShapeVirtuals.h +8 -0
- data/ext/fox16_c/include/FXRbGLViewer.h +89 -0
- data/ext/fox16_c/include/FXRbGLViewerVirtuals.h +10 -0
- data/ext/fox16_c/include/FXRbGLVisual.h +56 -0
- data/ext/fox16_c/include/FXRbGradientBar.h +55 -0
- data/ext/fox16_c/include/FXRbGroupBox.h +51 -0
- data/ext/fox16_c/include/FXRbHeader.h +129 -0
- data/ext/fox16_c/include/FXRbHeaderItemVirtuals.h +22 -0
- data/ext/fox16_c/include/FXRbHorizontalFrame.h +51 -0
- data/ext/fox16_c/include/FXRbICOIcon.h +54 -0
- data/ext/fox16_c/include/FXRbICOImage.h +54 -0
- data/ext/fox16_c/include/FXRbIcon.h +57 -0
- data/ext/fox16_c/include/FXRbIconItemVirtuals.h +68 -0
- data/ext/fox16_c/include/FXRbIconList.h +288 -0
- data/ext/fox16_c/include/FXRbIconListVirtuals.h +35 -0
- data/ext/fox16_c/include/FXRbIconSource.h +127 -0
- data/ext/fox16_c/include/FXRbIconSourceVirtuals.h +37 -0
- data/ext/fox16_c/include/FXRbId.h +74 -0
- data/ext/fox16_c/include/FXRbIdVirtuals.h +9 -0
- data/ext/fox16_c/include/FXRbImage.h +162 -0
- data/ext/fox16_c/include/FXRbImageFrame.h +56 -0
- data/ext/fox16_c/include/FXRbImageView.h +55 -0
- data/ext/fox16_c/include/FXRbImageVirtuals.h +51 -0
- data/ext/fox16_c/include/FXRbInputDialog.h +56 -0
- data/ext/fox16_c/include/FXRbJPGIcon.h +54 -0
- data/ext/fox16_c/include/FXRbJPGImage.h +54 -0
- data/ext/fox16_c/include/FXRbKnob.h +51 -0
- data/ext/fox16_c/include/FXRbLabel.h +51 -0
- data/ext/fox16_c/include/FXRbList.h +226 -0
- data/ext/fox16_c/include/FXRbListBox.h +67 -0
- data/ext/fox16_c/include/FXRbListBoxVirtuals.h +4 -0
- data/ext/fox16_c/include/FXRbListItemVirtuals.h +33 -0
- data/ext/fox16_c/include/FXRbListVirtuals.h +30 -0
- data/ext/fox16_c/include/FXRbMDIButton.h +162 -0
- data/ext/fox16_c/include/FXRbMDIChild.h +82 -0
- data/ext/fox16_c/include/FXRbMDIChildVirtuals.h +12 -0
- data/ext/fox16_c/include/FXRbMDIClient.h +80 -0
- data/ext/fox16_c/include/FXRbMDIClientVirtuals.h +12 -0
- data/ext/fox16_c/include/FXRbMainWindow.h +54 -0
- data/ext/fox16_c/include/FXRbMatrix.h +51 -0
- data/ext/fox16_c/include/FXRbMenuBar.h +63 -0
- data/ext/fox16_c/include/FXRbMenuButton.h +51 -0
- data/ext/fox16_c/include/FXRbMenuCaption.h +51 -0
- data/ext/fox16_c/include/FXRbMenuCascade.h +51 -0
- data/ext/fox16_c/include/FXRbMenuCheck.h +49 -0
- data/ext/fox16_c/include/FXRbMenuCommand.h +49 -0
- data/ext/fox16_c/include/FXRbMenuPane.h +52 -0
- data/ext/fox16_c/include/FXRbMenuRadio.h +49 -0
- data/ext/fox16_c/include/FXRbMenuSeparator.h +51 -0
- data/ext/fox16_c/include/FXRbMenuTitle.h +51 -0
- data/ext/fox16_c/include/FXRbMessageBox.h +56 -0
- data/ext/fox16_c/include/FXRbObject.h +67 -0
- data/ext/fox16_c/include/FXRbObjectVirtuals.h +9 -0
- data/ext/fox16_c/include/FXRbOptionMenu.h +73 -0
- data/ext/fox16_c/include/FXRbPCXIcon.h +54 -0
- data/ext/fox16_c/include/FXRbPCXImage.h +54 -0
- data/ext/fox16_c/include/FXRbPNGIcon.h +54 -0
- data/ext/fox16_c/include/FXRbPNGImage.h +54 -0
- data/ext/fox16_c/include/FXRbPPMIcon.h +54 -0
- data/ext/fox16_c/include/FXRbPPMImage.h +54 -0
- data/ext/fox16_c/include/FXRbPacker.h +51 -0
- data/ext/fox16_c/include/FXRbPicker.h +51 -0
- data/ext/fox16_c/include/FXRbPopup.h +70 -0
- data/ext/fox16_c/include/FXRbPopupVirtuals.h +6 -0
- data/ext/fox16_c/include/FXRbPrintDialog.h +53 -0
- data/ext/fox16_c/include/FXRbProgressBar.h +51 -0
- data/ext/fox16_c/include/FXRbProgressDialog.h +53 -0
- data/ext/fox16_c/include/FXRbRGBIcon.h +54 -0
- data/ext/fox16_c/include/FXRbRGBImage.h +54 -0
- data/ext/fox16_c/include/FXRbRadioButton.h +51 -0
- data/ext/fox16_c/include/FXRbRealSlider.h +51 -0
- data/ext/fox16_c/include/FXRbRealSpinner.h +64 -0
- data/ext/fox16_c/include/FXRbRealSpinnerVirtuals.h +3 -0
- data/ext/fox16_c/include/FXRbRecentFiles.h +52 -0
- data/ext/fox16_c/include/FXRbRegistry.h +46 -0
- data/ext/fox16_c/include/FXRbReplaceDialog.h +53 -0
- data/ext/fox16_c/include/FXRbRootWindow.h +51 -0
- data/ext/fox16_c/include/FXRbRuler.h +56 -0
- data/ext/fox16_c/include/FXRbRulerView.h +54 -0
- data/ext/fox16_c/include/FXRbScintilla.h +52 -0
- data/ext/fox16_c/include/FXRbScrollArea.h +87 -0
- data/ext/fox16_c/include/FXRbScrollAreaVirtuals.h +13 -0
- data/ext/fox16_c/include/FXRbScrollBar.h +73 -0
- data/ext/fox16_c/include/FXRbScrollPane.h +52 -0
- data/ext/fox16_c/include/FXRbScrollWindow.h +57 -0
- data/ext/fox16_c/include/FXRbSearchDialog.h +53 -0
- data/ext/fox16_c/include/FXRbSeparator.h +95 -0
- data/ext/fox16_c/include/FXRbSettings.h +46 -0
- data/ext/fox16_c/include/FXRbShell.h +56 -0
- data/ext/fox16_c/include/FXRbShutter.h +86 -0
- data/ext/fox16_c/include/FXRbShutterVirtuals.h +3 -0
- data/ext/fox16_c/include/FXRbSlider.h +51 -0
- data/ext/fox16_c/include/FXRbSpinner.h +64 -0
- data/ext/fox16_c/include/FXRbSpinnerVirtuals.h +3 -0
- data/ext/fox16_c/include/FXRbSplashWindow.h +57 -0
- data/ext/fox16_c/include/FXRbSplitter.h +54 -0
- data/ext/fox16_c/include/FXRbSpring.h +51 -0
- data/ext/fox16_c/include/FXRbStatusBar.h +51 -0
- data/ext/fox16_c/include/FXRbStatusLine.h +51 -0
- data/ext/fox16_c/include/FXRbStream.h +101 -0
- data/ext/fox16_c/include/FXRbStreamVirtuals.h +9 -0
- data/ext/fox16_c/include/FXRbStringDict.h +46 -0
- data/ext/fox16_c/include/FXRbSwitcher.h +51 -0
- data/ext/fox16_c/include/FXRbTGAIcon.h +54 -0
- data/ext/fox16_c/include/FXRbTGAImage.h +54 -0
- data/ext/fox16_c/include/FXRbTIFIcon.h +54 -0
- data/ext/fox16_c/include/FXRbTIFImage.h +54 -0
- data/ext/fox16_c/include/FXRbTabBar.h +64 -0
- data/ext/fox16_c/include/FXRbTabBarVirtuals.h +3 -0
- data/ext/fox16_c/include/FXRbTabBook.h +52 -0
- data/ext/fox16_c/include/FXRbTabItem.h +51 -0
- data/ext/fox16_c/include/FXRbTable.h +509 -0
- data/ext/fox16_c/include/FXRbTableItemVirtuals.h +89 -0
- data/ext/fox16_c/include/FXRbTableVirtuals.h +89 -0
- data/ext/fox16_c/include/FXRbText.h +187 -0
- data/ext/fox16_c/include/FXRbTextField.h +51 -0
- data/ext/fox16_c/include/FXRbTextVirtuals.h +52 -0
- data/ext/fox16_c/include/FXRbToggleButton.h +51 -0
- data/ext/fox16_c/include/FXRbToolBar.h +63 -0
- data/ext/fox16_c/include/FXRbToolBarGrip.h +51 -0
- data/ext/fox16_c/include/FXRbToolBarShell.h +52 -0
- data/ext/fox16_c/include/FXRbToolBarTab.h +51 -0
- data/ext/fox16_c/include/FXRbToolTip.h +51 -0
- data/ext/fox16_c/include/FXRbTopWindow.h +91 -0
- data/ext/fox16_c/include/FXRbTopWindowVirtuals.h +15 -0
- data/ext/fox16_c/include/FXRbTranslator.h +61 -0
- data/ext/fox16_c/include/FXRbTranslatorVirtuals.h +4 -0
- data/ext/fox16_c/include/FXRbTreeItemVirtuals.h +42 -0
- data/ext/fox16_c/include/FXRbTreeList.h +277 -0
- data/ext/fox16_c/include/FXRbTreeListBox.h +64 -0
- data/ext/fox16_c/include/FXRbTreeListBoxVirtuals.h +4 -0
- data/ext/fox16_c/include/FXRbTreeListVirtuals.h +42 -0
- data/ext/fox16_c/include/FXRbTriStateButton.h +51 -0
- data/ext/fox16_c/include/FXRbVerticalFrame.h +51 -0
- data/ext/fox16_c/include/FXRbVisual.h +56 -0
- data/ext/fox16_c/include/FXRbWindow.h +248 -0
- data/ext/fox16_c/include/FXRbWindowVirtuals.h +94 -0
- data/ext/fox16_c/include/FXRbWizard.h +60 -0
- data/ext/fox16_c/include/FXRbXBMIcon.h +54 -0
- data/ext/fox16_c/include/FXRbXBMImage.h +54 -0
- data/ext/fox16_c/include/FXRbXPMIcon.h +54 -0
- data/ext/fox16_c/include/FXRbXPMImage.h +54 -0
- data/ext/fox16_c/include/FXRuby.h +881 -0
- data/ext/fox16_c/include/impl.h +215 -0
- data/ext/fox16_c/make_impl.rb +121 -0
- data/ext/fox16_c/markfuncs.cpp +1666 -0
- data/ext/fox16_c/unregisterOwnedObjects.cpp +120 -0
- data/index.html +14 -0
- data/lib/2.0/fox16_c.so +0 -0
- data/lib/fox16.rb +20 -0
- data/lib/fox16/accel_table.rb +83 -0
- data/lib/fox16/aliases.rb +5617 -0
- data/lib/fox16/bitmapview.rb +222 -0
- data/lib/fox16/calendar.rb +217 -0
- data/lib/fox16/canvas.rb +606 -0
- data/lib/fox16/chore.rb +105 -0
- data/lib/fox16/colors.rb +280 -0
- data/lib/fox16/core.rb +700 -0
- data/lib/fox16/dict.rb +35 -0
- data/lib/fox16/exceptions_for_fxerror.rb +17 -0
- data/lib/fox16/execute_nonmodal.rb +70 -0
- data/lib/fox16/glgroup.rb +166 -0
- data/lib/fox16/glshapes.rb +456 -0
- data/lib/fox16/input.rb +59 -0
- data/lib/fox16/irb.rb +179 -0
- data/lib/fox16/iterators.rb +420 -0
- data/lib/fox16/keys.rb +1374 -0
- data/lib/fox16/missingdep.rb +14 -0
- data/lib/fox16/pseudokeyboard.rb +40 -0
- data/lib/fox16/pseudomouse.rb +87 -0
- data/lib/fox16/responder.rb +70 -0
- data/lib/fox16/responder2.rb +132 -0
- data/lib/fox16/scintilla.rb +5017 -0
- data/lib/fox16/settings.rb +18 -0
- data/lib/fox16/signal.rb +71 -0
- data/lib/fox16/splashscreen.rb +83 -0
- data/lib/fox16/timeout.rb +136 -0
- data/lib/fox16/tkcompat.rb +56 -0
- data/lib/fox16/undolist.rb +455 -0
- data/lib/fox16/version.rb +5 -0
- data/rdoc-sources/FX4Splitter.rb +156 -0
- data/rdoc-sources/FX7Segment.rb +54 -0
- data/rdoc-sources/FXAccelTable.rb +84 -0
- data/rdoc-sources/FXApp.rb +542 -0
- data/rdoc-sources/FXArrowButton.rb +69 -0
- data/rdoc-sources/FXBMPIcon.rb +67 -0
- data/rdoc-sources/FXBMPImage.rb +30 -0
- data/rdoc-sources/FXBitmap.rb +115 -0
- data/rdoc-sources/FXBitmapFrame.rb +31 -0
- data/rdoc-sources/FXBitmapView.rb +44 -0
- data/rdoc-sources/FXButton.rb +59 -0
- data/rdoc-sources/FXCURCursor.rb +13 -0
- data/rdoc-sources/FXCanvas.rb +18 -0
- data/rdoc-sources/FXCheckButton.rb +58 -0
- data/rdoc-sources/FXChoiceBox.rb +49 -0
- data/rdoc-sources/FXColorBar.rb +48 -0
- data/rdoc-sources/FXColorDialog.rb +37 -0
- data/rdoc-sources/FXColorList.rb +55 -0
- data/rdoc-sources/FXColorRing.rb +49 -0
- data/rdoc-sources/FXColorSelector.rb +65 -0
- data/rdoc-sources/FXColorWell.rb +65 -0
- data/rdoc-sources/FXColorWheel.rb +57 -0
- data/rdoc-sources/FXComboBox.rb +214 -0
- data/rdoc-sources/FXComposite.rb +34 -0
- data/rdoc-sources/FXCursor.rb +67 -0
- data/rdoc-sources/FXDC.rb +720 -0
- data/rdoc-sources/FXDCPrint.rb +127 -0
- data/rdoc-sources/FXDCWindow.rb +33 -0
- data/rdoc-sources/FXDataTarget.rb +66 -0
- data/rdoc-sources/FXDebugTarget.rb +25 -0
- data/rdoc-sources/FXDelegator.rb +23 -0
- data/rdoc-sources/FXDial.rb +107 -0
- data/rdoc-sources/FXDialogBox.rb +32 -0
- data/rdoc-sources/FXDict.rb +78 -0
- data/rdoc-sources/FXDirBox.rb +55 -0
- data/rdoc-sources/FXDirDialog.rb +47 -0
- data/rdoc-sources/FXDirList.rb +149 -0
- data/rdoc-sources/FXDirSelector.rb +64 -0
- data/rdoc-sources/FXDockBar.rb +151 -0
- data/rdoc-sources/FXDockHandler.rb +26 -0
- data/rdoc-sources/FXDockSite.rb +104 -0
- data/rdoc-sources/FXDockTitle.rb +26 -0
- data/rdoc-sources/FXDocument.rb +29 -0
- data/rdoc-sources/FXDragCorner.rb +19 -0
- data/rdoc-sources/FXDrawable.rb +27 -0
- data/rdoc-sources/FXDriveBox.rb +46 -0
- data/rdoc-sources/FXExtentd.rb +85 -0
- data/rdoc-sources/FXExtentf.rb +85 -0
- data/rdoc-sources/FXFileDialog.rb +217 -0
- data/rdoc-sources/FXFileDict.rb +131 -0
- data/rdoc-sources/FXFileList.rb +208 -0
- data/rdoc-sources/FXFileSelector.rb +184 -0
- data/rdoc-sources/FXFileStream.rb +27 -0
- data/rdoc-sources/FXFoldingList.rb +504 -0
- data/rdoc-sources/FXFont.rb +361 -0
- data/rdoc-sources/FXFontDialog.rb +14 -0
- data/rdoc-sources/FXFontSelector.rb +37 -0
- data/rdoc-sources/FXFrame.rb +53 -0
- data/rdoc-sources/FXGIFCursor.rb +50 -0
- data/rdoc-sources/FXGIFIcon.rb +31 -0
- data/rdoc-sources/FXGIFImage.rb +29 -0
- data/rdoc-sources/FXGLCanvas.rb +45 -0
- data/rdoc-sources/FXGLContext.rb +40 -0
- data/rdoc-sources/FXGLObject.rb +75 -0
- data/rdoc-sources/FXGLShape.rb +69 -0
- data/rdoc-sources/FXGLViewer.rb +332 -0
- data/rdoc-sources/FXGLVisual.rb +95 -0
- data/rdoc-sources/FXGradientBar.rb +301 -0
- data/rdoc-sources/FXGroupBox.rb +36 -0
- data/rdoc-sources/FXHeader.rb +408 -0
- data/rdoc-sources/FXHorizontalFrame.rb +29 -0
- data/rdoc-sources/FXICOIcon.rb +65 -0
- data/rdoc-sources/FXICOImage.rb +31 -0
- data/rdoc-sources/FXIcon.rb +38 -0
- data/rdoc-sources/FXIconDict.rb +49 -0
- data/rdoc-sources/FXIconList.rb +450 -0
- data/rdoc-sources/FXIconSource.rb +100 -0
- data/rdoc-sources/FXId.rb +34 -0
- data/rdoc-sources/FXImage.rb +320 -0
- data/rdoc-sources/FXImageFrame.rb +36 -0
- data/rdoc-sources/FXImageView.rb +35 -0
- data/rdoc-sources/FXInputDialog.rb +80 -0
- data/rdoc-sources/FXJPGIcon.rb +71 -0
- data/rdoc-sources/FXJPGImage.rb +39 -0
- data/rdoc-sources/FXKnob.rb +76 -0
- data/rdoc-sources/FXLabel.rb +72 -0
- data/rdoc-sources/FXList.rb +443 -0
- data/rdoc-sources/FXListBox.rb +191 -0
- data/rdoc-sources/FXMDIButton.rb +67 -0
- data/rdoc-sources/FXMDIChild.rb +155 -0
- data/rdoc-sources/FXMDIClient.rb +65 -0
- data/rdoc-sources/FXMainWindow.rb +26 -0
- data/rdoc-sources/FXMatrix.rb +57 -0
- data/rdoc-sources/FXMemoryBuffer.rb +29 -0
- data/rdoc-sources/FXMemoryStream.rb +50 -0
- data/rdoc-sources/FXMenuBar.rb +23 -0
- data/rdoc-sources/FXMenuButton.rb +85 -0
- data/rdoc-sources/FXMenuCaption.rb +53 -0
- data/rdoc-sources/FXMenuCascade.rb +18 -0
- data/rdoc-sources/FXMenuCheck.rb +30 -0
- data/rdoc-sources/FXMenuCommand.rb +26 -0
- data/rdoc-sources/FXMenuPane.rb +13 -0
- data/rdoc-sources/FXMenuRadio.rb +33 -0
- data/rdoc-sources/FXMenuSeparator.rb +21 -0
- data/rdoc-sources/FXMenuTitle.rb +27 -0
- data/rdoc-sources/FXMessageBox.rb +73 -0
- data/rdoc-sources/FXObject.rb +28 -0
- data/rdoc-sources/FXOptionMenu.rb +83 -0
- data/rdoc-sources/FXPCXIcon.rb +63 -0
- data/rdoc-sources/FXPCXImage.rb +31 -0
- data/rdoc-sources/FXPNGIcon.rb +66 -0
- data/rdoc-sources/FXPNGImage.rb +34 -0
- data/rdoc-sources/FXPPMIcon.rb +36 -0
- data/rdoc-sources/FXPPMImage.rb +31 -0
- data/rdoc-sources/FXPacker.rb +63 -0
- data/rdoc-sources/FXPicker.rb +27 -0
- data/rdoc-sources/FXPopup.rb +53 -0
- data/rdoc-sources/FXPrintDialog.rb +36 -0
- data/rdoc-sources/FXProgressBar.rb +57 -0
- data/rdoc-sources/FXProgressDialog.rb +36 -0
- data/rdoc-sources/FXQuatd.rb +164 -0
- data/rdoc-sources/FXQuatf.rb +173 -0
- data/rdoc-sources/FXRGBIcon.rb +64 -0
- data/rdoc-sources/FXRGBImage.rb +31 -0
- data/rdoc-sources/FXRadioButton.rb +70 -0
- data/rdoc-sources/FXRanged.rb +100 -0
- data/rdoc-sources/FXRangef.rb +100 -0
- data/rdoc-sources/FXRealSlider.rb +101 -0
- data/rdoc-sources/FXRealSpinner.rb +140 -0
- data/rdoc-sources/FXRecentFiles.rb +77 -0
- data/rdoc-sources/FXRectangle.rb +149 -0
- data/rdoc-sources/FXRegion.rb +64 -0
- data/rdoc-sources/FXRegistry.rb +56 -0
- data/rdoc-sources/FXReplaceDialog.rb +56 -0
- data/rdoc-sources/FXRootWindow.rb +17 -0
- data/rdoc-sources/FXRuler.rb +130 -0
- data/rdoc-sources/FXRulerView.rb +225 -0
- data/rdoc-sources/FXScintilla.rb +121 -0
- data/rdoc-sources/FXScrollArea.rb +86 -0
- data/rdoc-sources/FXScrollBar.rb +107 -0
- data/rdoc-sources/FXScrollPane.rb +28 -0
- data/rdoc-sources/FXScrollWindow.rb +38 -0
- data/rdoc-sources/FXSearchDialog.rb +24 -0
- data/rdoc-sources/FXSeparator.rb +74 -0
- data/rdoc-sources/FXSettings.rb +248 -0
- data/rdoc-sources/FXShell.rb +8 -0
- data/rdoc-sources/FXShutter.rb +102 -0
- data/rdoc-sources/FXSize.rb +95 -0
- data/rdoc-sources/FXSlider.rb +98 -0
- data/rdoc-sources/FXSphered.rb +80 -0
- data/rdoc-sources/FXSpheref.rb +80 -0
- data/rdoc-sources/FXSpinner.rb +136 -0
- data/rdoc-sources/FXSplashWindow.rb +27 -0
- data/rdoc-sources/FXSplitter.rb +89 -0
- data/rdoc-sources/FXSpring.rb +61 -0
- data/rdoc-sources/FXStatusBar.rb +42 -0
- data/rdoc-sources/FXStatusLine.rb +60 -0
- data/rdoc-sources/FXStream.rb +142 -0
- data/rdoc-sources/FXStringDict.rb +38 -0
- data/rdoc-sources/FXSwitcher.rb +78 -0
- data/rdoc-sources/FXTGAIcon.rb +63 -0
- data/rdoc-sources/FXTGAImage.rb +31 -0
- data/rdoc-sources/FXTIFIcon.rb +70 -0
- data/rdoc-sources/FXTIFImage.rb +37 -0
- data/rdoc-sources/FXTabBar.rb +80 -0
- data/rdoc-sources/FXTabBook.rb +41 -0
- data/rdoc-sources/FXTabItem.rb +58 -0
- data/rdoc-sources/FXTable.rb +975 -0
- data/rdoc-sources/FXText.rb +581 -0
- data/rdoc-sources/FXTextField.rb +151 -0
- data/rdoc-sources/FXToggleButton.rb +70 -0
- data/rdoc-sources/FXToolBar.rb +61 -0
- data/rdoc-sources/FXToolBarGrip.rb +50 -0
- data/rdoc-sources/FXToolBarShell.rb +44 -0
- data/rdoc-sources/FXToolBarTab.rb +74 -0
- data/rdoc-sources/FXToolTip.rb +39 -0
- data/rdoc-sources/FXTopWindow.rb +163 -0
- data/rdoc-sources/FXTranslator.rb +32 -0
- data/rdoc-sources/FXTreeList.rb +514 -0
- data/rdoc-sources/FXTreeListBox.rb +219 -0
- data/rdoc-sources/FXTriStateButton.rb +49 -0
- data/rdoc-sources/FXVec2d.rb +96 -0
- data/rdoc-sources/FXVec2f.rb +96 -0
- data/rdoc-sources/FXVec3d.rb +118 -0
- data/rdoc-sources/FXVec3f.rb +118 -0
- data/rdoc-sources/FXVec4d.rb +139 -0
- data/rdoc-sources/FXVec4f.rb +139 -0
- data/rdoc-sources/FXVerticalFrame.rb +29 -0
- data/rdoc-sources/FXVisual.rb +79 -0
- data/rdoc-sources/FXWindow.rb +725 -0
- data/rdoc-sources/FXWizard.rb +59 -0
- data/rdoc-sources/FXXBMIcon.rb +37 -0
- data/rdoc-sources/FXXBMImage.rb +32 -0
- data/rdoc-sources/FXXPMIcon.rb +65 -0
- data/rdoc-sources/FXXPMImage.rb +31 -0
- data/rdoc-sources/Makefile +23 -0
- data/rdoc-sources/README.rdoc +53 -0
- data/rdoc-sources/fxdefs.rb +90 -0
- data/scripts/build-fox.rb +31 -0
- data/scripts/generate_kwargs_lib.rb +412 -0
- data/scripts/iface.rb +391 -0
- data/swig-interfaces/FX4Splitter.i +149 -0
- data/swig-interfaces/FX7Segment.i +141 -0
- data/swig-interfaces/FXAccelTable.i +100 -0
- data/swig-interfaces/FXApp.i +735 -0
- data/swig-interfaces/FXArrowButton.i +136 -0
- data/swig-interfaces/FXBMPIcon.i +88 -0
- data/swig-interfaces/FXBMPImage.i +54 -0
- data/swig-interfaces/FXBitmap.i +90 -0
- data/swig-interfaces/FXBitmapFrame.i +72 -0
- data/swig-interfaces/FXBitmapView.i +94 -0
- data/swig-interfaces/FXButton.i +130 -0
- data/swig-interfaces/FXCURCursor.i +49 -0
- data/swig-interfaces/FXCanvas.i +61 -0
- data/swig-interfaces/FXCheckButton.i +108 -0
- data/swig-interfaces/FXChoiceBox.i +91 -0
- data/swig-interfaces/FXColorBar.i +110 -0
- data/swig-interfaces/FXColorDialog.i +79 -0
- data/swig-interfaces/FXColorList.i +99 -0
- data/swig-interfaces/FXColorRing.i +148 -0
- data/swig-interfaces/FXColorSelector.i +157 -0
- data/swig-interfaces/FXColorWell.i +133 -0
- data/swig-interfaces/FXColorWheel.i +108 -0
- data/swig-interfaces/FXComboBox.i +280 -0
- data/swig-interfaces/FXComposeContext.i +66 -0
- data/swig-interfaces/FXComposite.i +103 -0
- data/swig-interfaces/FXCursor.i +120 -0
- data/swig-interfaces/FXDC.i +280 -0
- data/swig-interfaces/FXDCPrint.i +141 -0
- data/swig-interfaces/FXDCWindow.i +75 -0
- data/swig-interfaces/FXDataTarget.i +115 -0
- data/swig-interfaces/FXDebugTarget.i +60 -0
- data/swig-interfaces/FXDelegator.i +56 -0
- data/swig-interfaces/FXDial.i +168 -0
- data/swig-interfaces/FXDialogBox.i +131 -0
- data/swig-interfaces/FXDict.i +200 -0
- data/swig-interfaces/FXDirBox.i +68 -0
- data/swig-interfaces/FXDirDialog.i +97 -0
- data/swig-interfaces/FXDirList.i +274 -0
- data/swig-interfaces/FXDirSelector.i +142 -0
- data/swig-interfaces/FXDockBar.i +180 -0
- data/swig-interfaces/FXDockHandler.i +94 -0
- data/swig-interfaces/FXDockSite.i +91 -0
- data/swig-interfaces/FXDockTitle.i +91 -0
- data/swig-interfaces/FXDocument.i +70 -0
- data/swig-interfaces/FXDragCorner.i +72 -0
- data/swig-interfaces/FXDrawable.i +90 -0
- data/swig-interfaces/FXDriveBox.i +63 -0
- data/swig-interfaces/FXExtentd.i +131 -0
- data/swig-interfaces/FXExtentf.i +131 -0
- data/swig-interfaces/FXFileDialog.i +268 -0
- data/swig-interfaces/FXFileDict.i +121 -0
- data/swig-interfaces/FXFileList.i +345 -0
- data/swig-interfaces/FXFileSelector.i +347 -0
- data/swig-interfaces/FXFileStream.i +49 -0
- data/swig-interfaces/FXFoldingList.i +556 -0
- data/swig-interfaces/FXFont.i +333 -0
- data/swig-interfaces/FXFontDialog.i +63 -0
- data/swig-interfaces/FXFontSelector.i +127 -0
- data/swig-interfaces/FXFrame.i +245 -0
- data/swig-interfaces/FXGIFCursor.i +86 -0
- data/swig-interfaces/FXGIFIcon.i +54 -0
- data/swig-interfaces/FXGIFImage.i +54 -0
- data/swig-interfaces/FXGLCanvas.i +90 -0
- data/swig-interfaces/FXGLContext.i +85 -0
- data/swig-interfaces/FXGLObject.i +70 -0
- data/swig-interfaces/FXGLShape.i +152 -0
- data/swig-interfaces/FXGLViewer.i +691 -0
- data/swig-interfaces/FXGLVisual.i +136 -0
- data/swig-interfaces/FXGradientBar.i +310 -0
- data/swig-interfaces/FXGroupBox.i +94 -0
- data/swig-interfaces/FXHeader.i +432 -0
- data/swig-interfaces/FXHorizontalFrame.i +60 -0
- data/swig-interfaces/FXICOIcon.i +92 -0
- data/swig-interfaces/FXICOImage.i +54 -0
- data/swig-interfaces/FXIcon.i +128 -0
- data/swig-interfaces/FXIconDict.i +90 -0
- data/swig-interfaces/FXIconList.i +596 -0
- data/swig-interfaces/FXIconSource.i +55 -0
- data/swig-interfaces/FXId.i +103 -0
- data/swig-interfaces/FXImage.i +226 -0
- data/swig-interfaces/FXImageFrame.i +66 -0
- data/swig-interfaces/FXImageView.i +88 -0
- data/swig-interfaces/FXInputDialog.i +180 -0
- data/swig-interfaces/FXJPGIcon.i +101 -0
- data/swig-interfaces/FXJPGImage.i +67 -0
- data/swig-interfaces/FXKnob.i +182 -0
- data/swig-interfaces/FXLabel.i +199 -0
- data/swig-interfaces/FXList.i +476 -0
- data/swig-interfaces/FXListBox.i +234 -0
- data/swig-interfaces/FXMDIButton.i +173 -0
- data/swig-interfaces/FXMDIChild.i +242 -0
- data/swig-interfaces/FXMDIClient.i +149 -0
- data/swig-interfaces/FXMainWindow.i +53 -0
- data/swig-interfaces/FXMat3d.i +102 -0
- data/swig-interfaces/FXMat3f.i +102 -0
- data/swig-interfaces/FXMat4d.i +122 -0
- data/swig-interfaces/FXMat4f.i +138 -0
- data/swig-interfaces/FXMatrix.i +101 -0
- data/swig-interfaces/FXMemoryBuffer.i +64 -0
- data/swig-interfaces/FXMemoryStream.i +77 -0
- data/swig-interfaces/FXMenuBar.i +67 -0
- data/swig-interfaces/FXMenuButton.i +152 -0
- data/swig-interfaces/FXMenuCaption.i +176 -0
- data/swig-interfaces/FXMenuCascade.i +76 -0
- data/swig-interfaces/FXMenuCheck.i +90 -0
- data/swig-interfaces/FXMenuCommand.i +69 -0
- data/swig-interfaces/FXMenuPane.i +60 -0
- data/swig-interfaces/FXMenuRadio.i +93 -0
- data/swig-interfaces/FXMenuSeparator.i +65 -0
- data/swig-interfaces/FXMenuTitle.i +74 -0
- data/swig-interfaces/FXMessageBox.i +128 -0
- data/swig-interfaces/FXObject.i +169 -0
- data/swig-interfaces/FXOptionMenu.i +140 -0
- data/swig-interfaces/FXPCXIcon.i +91 -0
- data/swig-interfaces/FXPCXImage.i +55 -0
- data/swig-interfaces/FXPNGIcon.i +95 -0
- data/swig-interfaces/FXPNGImage.i +59 -0
- data/swig-interfaces/FXPPMIcon.i +91 -0
- data/swig-interfaces/FXPPMImage.i +55 -0
- data/swig-interfaces/FXPacker.i +255 -0
- data/swig-interfaces/FXPicker.i +54 -0
- data/swig-interfaces/FXPoint.i +52 -0
- data/swig-interfaces/FXPopup.i +162 -0
- data/swig-interfaces/FXPrintDialog.i +154 -0
- data/swig-interfaces/FXProgressBar.i +133 -0
- data/swig-interfaces/FXProgressDialog.i +105 -0
- data/swig-interfaces/FXQuatd.i +128 -0
- data/swig-interfaces/FXQuatf.i +122 -0
- data/swig-interfaces/FXRGBIcon.i +90 -0
- data/swig-interfaces/FXRGBImage.i +56 -0
- data/swig-interfaces/FXRadioButton.i +117 -0
- data/swig-interfaces/FXRanged.i +163 -0
- data/swig-interfaces/FXRangef.i +172 -0
- data/swig-interfaces/FXRealSlider.i +166 -0
- data/swig-interfaces/FXRealSpinner.i +215 -0
- data/swig-interfaces/FXRecentFiles.i +119 -0
- data/swig-interfaces/FXRectangle.i +104 -0
- data/swig-interfaces/FXRegion.i +88 -0
- data/swig-interfaces/FXRegistry.i +96 -0
- data/swig-interfaces/FXReplaceDialog.i +131 -0
- data/swig-interfaces/FXRootWindow.i +50 -0
- data/swig-interfaces/FXRuler.i +245 -0
- data/swig-interfaces/FXRulerView.i +233 -0
- data/swig-interfaces/FXScintilla.i +194 -0
- data/swig-interfaces/FXScrollArea.i +211 -0
- data/swig-interfaces/FXScrollBar.i +178 -0
- data/swig-interfaces/FXScrollPane.i +83 -0
- data/swig-interfaces/FXScrollWindow.i +67 -0
- data/swig-interfaces/FXSearchDialog.i +48 -0
- data/swig-interfaces/FXSeparator.i +138 -0
- data/swig-interfaces/FXSettings.i +160 -0
- data/swig-interfaces/FXShell.i +91 -0
- data/swig-interfaces/FXShutter.i +140 -0
- data/swig-interfaces/FXSize.i +71 -0
- data/swig-interfaces/FXSlider.i +181 -0
- data/swig-interfaces/FXSphered.i +126 -0
- data/swig-interfaces/FXSpheref.i +126 -0
- data/swig-interfaces/FXSpinner.i +212 -0
- data/swig-interfaces/FXSplashWindow.i +92 -0
- data/swig-interfaces/FXSplitter.i +123 -0
- data/swig-interfaces/FXSpring.i +79 -0
- data/swig-interfaces/FXStatusBar.i +68 -0
- data/swig-interfaces/FXStatusLine.i +100 -0
- data/swig-interfaces/FXStream.i +150 -0
- data/swig-interfaces/FXStringDict.i +61 -0
- data/swig-interfaces/FXSwitcher.i +110 -0
- data/swig-interfaces/FXTGAIcon.i +85 -0
- data/swig-interfaces/FXTGAImage.i +56 -0
- data/swig-interfaces/FXTIFIcon.i +73 -0
- data/swig-interfaces/FXTIFImage.i +93 -0
- data/swig-interfaces/FXTabBar.i +121 -0
- data/swig-interfaces/FXTabBook.i +70 -0
- data/swig-interfaces/FXTabItem.i +82 -0
- data/swig-interfaces/FXTable.i +861 -0
- data/swig-interfaces/FXText.i +763 -0
- data/swig-interfaces/FXTextField.i +290 -0
- data/swig-interfaces/FXToggleButton.i +136 -0
- data/swig-interfaces/FXToolBar.i +75 -0
- data/swig-interfaces/FXToolBarGrip.i +82 -0
- data/swig-interfaces/FXToolBarShell.i +98 -0
- data/swig-interfaces/FXToolBarTab.i +114 -0
- data/swig-interfaces/FXToolTip.i +93 -0
- data/swig-interfaces/FXTopWindow.i +263 -0
- data/swig-interfaces/FXTranslator.i +55 -0
- data/swig-interfaces/FXTreeList.i +549 -0
- data/swig-interfaces/FXTreeListBox.i +317 -0
- data/swig-interfaces/FXTriStateButton.i +77 -0
- data/swig-interfaces/FXURL.i +35 -0
- data/swig-interfaces/FXVec2d.i +87 -0
- data/swig-interfaces/FXVec2f.i +87 -0
- data/swig-interfaces/FXVec3d.i +111 -0
- data/swig-interfaces/FXVec3f.i +109 -0
- data/swig-interfaces/FXVec4d.i +115 -0
- data/swig-interfaces/FXVec4f.i +115 -0
- data/swig-interfaces/FXVerticalFrame.i +69 -0
- data/swig-interfaces/FXVisual.i +162 -0
- data/swig-interfaces/FXWindow.i +851 -0
- data/swig-interfaces/FXWizard.i +125 -0
- data/swig-interfaces/FXXBMIcon.i +56 -0
- data/swig-interfaces/FXXBMImage.i +118 -0
- data/swig-interfaces/FXXPMIcon.i +122 -0
- data/swig-interfaces/FXXPMImage.i +56 -0
- data/swig-interfaces/README +17 -0
- data/swig-interfaces/common.i +48 -0
- data/swig-interfaces/core.i +85 -0
- data/swig-interfaces/dcmodule.i +36 -0
- data/swig-interfaces/dialogs.i +49 -0
- data/swig-interfaces/exceptions.i +249 -0
- data/swig-interfaces/framesmodule.i +54 -0
- data/swig-interfaces/freefuncs.i +93 -0
- data/swig-interfaces/fx3d.i +60 -0
- data/swig-interfaces/fxdefs.i +419 -0
- data/swig-interfaces/handlers.i +615 -0
- data/swig-interfaces/iconlistmodule.i +37 -0
- data/swig-interfaces/icons.i +48 -0
- data/swig-interfaces/ignore-message-handlers.rb +16 -0
- data/swig-interfaces/image.i +49 -0
- data/swig-interfaces/labelmodule.i +47 -0
- data/swig-interfaces/layout.i +47 -0
- data/swig-interfaces/listmodule.i +37 -0
- data/swig-interfaces/macros.i +1326 -0
- data/swig-interfaces/markfuncs.i +210 -0
- data/swig-interfaces/mdi.i +38 -0
- data/swig-interfaces/menumodule.i +44 -0
- data/swig-interfaces/ruby-typemaps.i +778 -0
- data/swig-interfaces/scintilla.i +57 -0
- data/swig-interfaces/table-module.i +36 -0
- data/swig-interfaces/text-module.i +36 -0
- data/swig-interfaces/treelist-module.i +37 -0
- data/swig-interfaces/ui.i +63 -0
- data/test/README +19 -0
- data/test/TC_FXAccelTable.rb +57 -0
- data/test/TC_FXApp.rb +66 -0
- data/test/TC_FXArc.rb +26 -0
- data/test/TC_FXBMPIcon.rb +15 -0
- data/test/TC_FXBMPImage.rb +15 -0
- data/test/TC_FXButton.rb +82 -0
- data/test/TC_FXCheckButton.rb +57 -0
- data/test/TC_FXComboBox.rb +72 -0
- data/test/TC_FXDC.rb +372 -0
- data/test/TC_FXDCPrint.rb +102 -0
- data/test/TC_FXDCWindow.rb +25 -0
- data/test/TC_FXDataTarget.rb +24 -0
- data/test/TC_FXDialogBox.rb +12 -0
- data/test/TC_FXDirList.rb +30 -0
- data/test/TC_FXExtentd.rb +21 -0
- data/test/TC_FXExtentf.rb +21 -0
- data/test/TC_FXFileAssoc.rb +62 -0
- data/test/TC_FXFileStream.rb +89 -0
- data/test/TC_FXFoldingList.rb +32 -0
- data/test/TC_FXFont.rb +69 -0
- data/test/TC_FXFontDesc.rb +58 -0
- data/test/TC_FXGLGroup.rb +32 -0
- data/test/TC_FXGLShape.rb +28 -0
- data/test/TC_FXGLViewer.rb +29 -0
- data/test/TC_FXGradientBar.rb +89 -0
- data/test/TC_FXHeader.rb +82 -0
- data/test/TC_FXHiliteStyle.rb +23 -0
- data/test/TC_FXIconDict.rb +52 -0
- data/test/TC_FXIconList.rb +192 -0
- data/test/TC_FXId.rb +19 -0
- data/test/TC_FXImage.rb +188 -0
- data/test/TC_FXLight.rb +33 -0
- data/test/TC_FXList.rb +125 -0
- data/test/TC_FXListBox.rb +49 -0
- data/test/TC_FXMainWindow.rb +19 -0
- data/test/TC_FXMat4f.rb +228 -0
- data/test/TC_FXMaterial.rb +75 -0
- data/test/TC_FXMemoryStream.rb +97 -0
- data/test/TC_FXMenuCheck.rb +57 -0
- data/test/TC_FXMenuCommand.rb +12 -0
- data/test/TC_FXMenuRadio.rb +57 -0
- data/test/TC_FXMessageBox.rb +29 -0
- data/test/TC_FXPoint.rb +57 -0
- data/test/TC_FXQuatf.rb +93 -0
- data/test/TC_FXRadioButton.rb +57 -0
- data/test/TC_FXRanged.rb +42 -0
- data/test/TC_FXRangef.rb +42 -0
- data/test/TC_FXRectangle.rb +88 -0
- data/test/TC_FXRegion.rb +54 -0
- data/test/TC_FXRegistry.rb +27 -0
- data/test/TC_FXScrollArea.rb +32 -0
- data/test/TC_FXScrollWindow.rb +28 -0
- data/test/TC_FXSegment.rb +22 -0
- data/test/TC_FXSettings.rb +34 -0
- data/test/TC_FXShell.rb +30 -0
- data/test/TC_FXSize.rb +54 -0
- data/test/TC_FXStream.rb +11 -0
- data/test/TC_FXTable.rb +561 -0
- data/test/TC_FXTableItem.rb +48 -0
- data/test/TC_FXText.rb +105 -0
- data/test/TC_FXTopWindow.rb +36 -0
- data/test/TC_FXTreeList.rb +100 -0
- data/test/TC_FXTreeListBox.rb +41 -0
- data/test/TC_FXUndoList.rb +43 -0
- data/test/TC_FXVec2d.rb +142 -0
- data/test/TC_FXVec2f.rb +137 -0
- data/test/TC_FXVec3d.rb +150 -0
- data/test/TC_FXVec3f.rb +150 -0
- data/test/TC_FXVec4f.rb +158 -0
- data/test/TC_FXViewport.rb +30 -0
- data/test/TC_FXXBMIcon.rb +15 -0
- data/test/TC_FXXBMImage.rb +15 -0
- data/test/TC_FXXPMIcon.rb +15 -0
- data/test/TC_FXXPMImage.rb +15 -0
- data/test/TC_Misc.rb +161 -0
- data/test/TC_downcast.rb +15 -0
- data/test/TS_All.rb +9 -0
- data/test/blankpage.ps +166 -0
- data/test/howdypage.ps +181 -0
- data/test/stress1.rb +92 -0
- data/test/stress2.rb +51 -0
- data/test/stress3.rb +117 -0
- data/test/testcase.rb +37 -0
- metadata +1134 -0
- metadata.gz.sig +0 -0
data/examples/unicode.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fox16'
|
4
|
+
require 'jcode'
|
5
|
+
|
6
|
+
$KCODE = 'UTF8'
|
7
|
+
|
8
|
+
class UString < String
|
9
|
+
# Show u-prefix as in Python
|
10
|
+
def inspect; "u#{ super }" end
|
11
|
+
|
12
|
+
# Count multibyte characters
|
13
|
+
def length; self.scan(/./).length end
|
14
|
+
|
15
|
+
# Reverse the string
|
16
|
+
def reverse; self.scan(/./).reverse.join end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Kernel
|
20
|
+
def u( str )
|
21
|
+
UString.new str.gsub(/U\+([0-9a-fA-F]{4,4})/u){["#$1".hex ].pack('U*')}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
include Fox
|
26
|
+
|
27
|
+
# Pass UTF-8 encoded Unicode strings to FXRuby.
|
28
|
+
label = u"Les enfants vont U+00E0 l'U+00E9cole.\nLa boulangU+00E8re vend-elle le pain en aoU+00FBt?"
|
29
|
+
|
30
|
+
FXApp.new("Unicode Example", "FoxTest") do |app|
|
31
|
+
main = FXMainWindow.new(app, "Unicode Text", nil, nil, DECOR_ALL)
|
32
|
+
FXLabel.new(main, label)
|
33
|
+
app.create
|
34
|
+
main.show(PLACEMENT_SCREEN)
|
35
|
+
app.run
|
36
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
/***********************************************************************
|
2
|
+
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
|
3
|
+
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* For further information please contact the author by e-mail
|
20
|
+
* at "lyle@lylejohnson.name".
|
21
|
+
***********************************************************************/
|
22
|
+
|
23
|
+
/***********************************************************************
|
24
|
+
* $Id: FXRbApp.cpp 2902 2008-12-11 14:09:20Z lyle $
|
25
|
+
***********************************************************************/
|
26
|
+
|
27
|
+
#include "FXRbCommon.h"
|
28
|
+
|
29
|
+
#if defined(RUBY_1_8)
|
30
|
+
extern "C" {
|
31
|
+
#include "rubysig.h" /* For CHECK_INTS */
|
32
|
+
}
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#ifdef HAVE_SYS_TIME_H
|
36
|
+
#include <sys/time.h> /* For struct timeval */
|
37
|
+
#endif
|
38
|
+
|
39
|
+
// Message map
|
40
|
+
FXDEFMAP(FXRbApp) FXRbAppMap[]={
|
41
|
+
FXMAPFUNC(SEL_CHORE,FXRbApp::ID_CHORE_THREADS,FXRbApp::onChoreThreads),
|
42
|
+
};
|
43
|
+
|
44
|
+
// Class implementation
|
45
|
+
FXRbIMPLEMENT(FXRbApp,FXApp,FXRbAppMap,ARRAYNUMBER(FXRbAppMap))
|
46
|
+
|
47
|
+
// Constructor
|
48
|
+
FXRbApp::FXRbApp(const FXchar* appname,const FXchar* vendor) : FXApp(appname,vendor),m_bThreadsEnabled(TRUE),sleepTime(100){
|
49
|
+
if(m_bThreadsEnabled){
|
50
|
+
addChore(this,ID_CHORE_THREADS);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
|
55
|
+
// Constructor that also calls FXApp::init()
|
56
|
+
FXRbApp* FXRbApp::constructAndInit(const FXchar* appname,const FXchar* vendor){
|
57
|
+
int argc=1;
|
58
|
+
static char* argv[]={"",0};
|
59
|
+
FXRbApp* app=new FXRbApp(appname,vendor);
|
60
|
+
app->FXApp::init(argc,argv);
|
61
|
+
return app;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
// Enable (or disable) threads
|
66
|
+
void FXRbApp::setThreadsEnabled(FXbool enabled){
|
67
|
+
if(enabled){
|
68
|
+
if(!m_bThreadsEnabled){
|
69
|
+
m_bThreadsEnabled=TRUE;
|
70
|
+
addChore(this,ID_CHORE_THREADS);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
else{
|
74
|
+
m_bThreadsEnabled=FALSE;
|
75
|
+
removeChore(this,ID_CHORE_THREADS);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
|
80
|
+
// Set sleep time
|
81
|
+
void FXRbApp::setSleepTime(FXuint ms){
|
82
|
+
sleepTime=ms;
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
// Get sleep time
|
87
|
+
FXuint FXRbApp::getSleepTime() const {
|
88
|
+
return sleepTime;
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
// Process threads
|
93
|
+
long FXRbApp::onChoreThreads(FXObject*,FXSelector,void*){
|
94
|
+
// Pause for 'sleepTime' millseconds
|
95
|
+
struct timeval wait;
|
96
|
+
wait.tv_sec=0;
|
97
|
+
wait.tv_usec=100*sleepTime;
|
98
|
+
|
99
|
+
// Confirm that this thread can be interrupted, then go to sleep
|
100
|
+
#if defined(RUBY_1_8)
|
101
|
+
CHECK_INTS;
|
102
|
+
if(!rb_thread_critical)
|
103
|
+
rb_thread_wait_for(wait);
|
104
|
+
#else
|
105
|
+
// if(!rb_thread_critical) rb_thread_wait_for(wait);
|
106
|
+
rb_thread_wait_for(wait);
|
107
|
+
#endif /* RUBY_1_8 */
|
108
|
+
|
109
|
+
// Re-register this chore for next time
|
110
|
+
addChore(this,ID_CHORE_THREADS);
|
111
|
+
|
112
|
+
// Back to work...
|
113
|
+
return 1;
|
114
|
+
}
|
115
|
+
|
116
|
+
|
117
|
+
// Destructor
|
118
|
+
FXRbApp::~FXRbApp(){
|
119
|
+
FXTRACE((100,"FXRbApp::~FXRbApp()\n"));
|
120
|
+
VALUE myRegistry;
|
121
|
+
FXRbDestroyAppSensitiveObjects();
|
122
|
+
myRegistry=FXRbGetRubyObj(&(reg()),true);
|
123
|
+
if(!NIL_P(myRegistry)){
|
124
|
+
DATA_PTR(myRegistry)=0;
|
125
|
+
}
|
126
|
+
FXRbUnregisterRubyObj(this);
|
127
|
+
}
|
128
|
+
|
@@ -0,0 +1,110 @@
|
|
1
|
+
/***********************************************************************
|
2
|
+
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
|
3
|
+
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* For further information please contact the author by e-mail
|
20
|
+
* at "lyle@lylejohnson.name".
|
21
|
+
***********************************************************************/
|
22
|
+
|
23
|
+
/***********************************************************************
|
24
|
+
* $Id: FXRbDataTarget.cpp 2713 2007-11-14 15:27:36Z lyle $
|
25
|
+
***********************************************************************/
|
26
|
+
|
27
|
+
#include "FXRbCommon.h"
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Data targets for FXRuby are implemented slightly different from
|
31
|
+
* those in the C++ implementation since we don't have the concept
|
32
|
+
* of C++ references for immutable types (like integers, floats and
|
33
|
+
* strings).
|
34
|
+
*/
|
35
|
+
|
36
|
+
// Initialize a data target with this value
|
37
|
+
FXRbDataTarget::FXRbDataTarget(VALUE value,FXObject* tgt,FXSelector sel) : FXDataTarget(tgt,sel), intValue(0), doubleValue(0.0), boolValue(FALSE) {
|
38
|
+
setValue(value);
|
39
|
+
}
|
40
|
+
|
41
|
+
// Set new value for data target
|
42
|
+
void FXRbDataTarget::setValue(VALUE value){
|
43
|
+
switch (TYPE(value)) {
|
44
|
+
case T_NIL:
|
45
|
+
connect();
|
46
|
+
break;
|
47
|
+
case T_FIXNUM:
|
48
|
+
intValue=static_cast<FXint>(NUM2LONG(value));
|
49
|
+
connect(intValue);
|
50
|
+
break;
|
51
|
+
case T_BIGNUM: /* still not sure about this conversion */
|
52
|
+
intValue=static_cast<FXint>(NUM2ULONG(value));
|
53
|
+
connect(intValue);
|
54
|
+
break;
|
55
|
+
case T_FLOAT:
|
56
|
+
doubleValue=NUM2DBL(value);
|
57
|
+
connect(doubleValue);
|
58
|
+
break;
|
59
|
+
case T_STRING:
|
60
|
+
stringValue=StringValuePtr(value);
|
61
|
+
connect(stringValue);
|
62
|
+
break;
|
63
|
+
case T_TRUE:
|
64
|
+
boolValue=TRUE;
|
65
|
+
connect(boolValue);
|
66
|
+
break;
|
67
|
+
case T_FALSE:
|
68
|
+
boolValue=FALSE;
|
69
|
+
connect(boolValue);
|
70
|
+
break;
|
71
|
+
default:
|
72
|
+
rb_raise(rb_eTypeError,
|
73
|
+
"can't initialize FXDataTarget with type %s.",
|
74
|
+
rb_class2name(CLASS_OF(value)));
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
// Return current value for this data target
|
79
|
+
VALUE FXRbDataTarget::getValue() const {
|
80
|
+
switch(type){
|
81
|
+
case DT_VOID:
|
82
|
+
return Qnil;
|
83
|
+
case DT_CHAR:
|
84
|
+
return to_ruby(*reinterpret_cast<FXchar*>(data));
|
85
|
+
case DT_UCHAR:
|
86
|
+
return to_ruby(*reinterpret_cast<FXuchar*>(data));
|
87
|
+
case DT_SHORT:
|
88
|
+
return to_ruby(*reinterpret_cast<FXshort*>(data));
|
89
|
+
case DT_USHORT:
|
90
|
+
return to_ruby(*reinterpret_cast<FXushort*>(data));
|
91
|
+
case DT_INT:
|
92
|
+
return to_ruby(*reinterpret_cast<FXint*>(data));
|
93
|
+
case DT_UINT:
|
94
|
+
return to_ruby(*reinterpret_cast<FXuint*>(data));
|
95
|
+
case DT_LONG:
|
96
|
+
return to_ruby(*reinterpret_cast<FXlong*>(data));
|
97
|
+
case DT_ULONG:
|
98
|
+
return to_ruby(*reinterpret_cast<FXulong*>(data));
|
99
|
+
case DT_FLOAT:
|
100
|
+
return to_ruby(*reinterpret_cast<FXfloat*>(data));
|
101
|
+
case DT_DOUBLE:
|
102
|
+
return to_ruby(*reinterpret_cast<FXdouble*>(data));
|
103
|
+
case DT_STRING:
|
104
|
+
return to_ruby(*reinterpret_cast<FXString*>(data));
|
105
|
+
default:
|
106
|
+
fxerror("unknown data type in FXRbDataTarget::getValue()");
|
107
|
+
}
|
108
|
+
return Qnil;
|
109
|
+
}
|
110
|
+
|
@@ -0,0 +1,89 @@
|
|
1
|
+
/***********************************************************************
|
2
|
+
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
|
3
|
+
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* For further information please contact the author by e-mail
|
20
|
+
* at "lyle@lylejohnson.name".
|
21
|
+
***********************************************************************/
|
22
|
+
|
23
|
+
/***********************************************************************
|
24
|
+
* $Id: FXRbGLViewer.cpp 2190 2005-08-24 07:58:47Z lyle $
|
25
|
+
***********************************************************************/
|
26
|
+
|
27
|
+
#include "FXRbCommon.h"
|
28
|
+
|
29
|
+
// Process picks
|
30
|
+
FXGLObject* FXRbGLViewer::processHits(FXuint *pickbuffer,FXint nhits){
|
31
|
+
FXuint d1,d2,i,n,zmin,zmax,sel=0,nnames=0;
|
32
|
+
if(0<=nhits){
|
33
|
+
for(i=0,zmin=zmax=4294967295U; nhits>0; i+=n+3,nhits--){
|
34
|
+
n=pickbuffer[i];
|
35
|
+
d1=pickbuffer[1+i];
|
36
|
+
d2=pickbuffer[2+i];
|
37
|
+
if(d1<zmin || (d1==zmin && d2<=zmax)){
|
38
|
+
zmin=d1;
|
39
|
+
zmax=d2;
|
40
|
+
sel=i;
|
41
|
+
nnames=n;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
FXASSERT(scene->isMemberOf(FXMETACLASS(FXRbGLObject)) || scene->isMemberOf(FXMETACLASS(FXRbGLShape)));
|
45
|
+
if(scene->isMemberOf(FXMETACLASS(FXRbGLObject))){
|
46
|
+
FXRbGLObject* obj=dynamic_cast<FXRbGLObject*>(scene);
|
47
|
+
FXASSERT(obj!=0);
|
48
|
+
return obj->identify(&pickbuffer[4+sel],nnames-1);
|
49
|
+
}
|
50
|
+
else{
|
51
|
+
FXRbGLShape* shape=dynamic_cast<FXRbGLShape*>(scene);
|
52
|
+
FXASSERT(shape!=0);
|
53
|
+
return shape->identify(&pickbuffer[4+sel],nnames-1);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
return NULL;
|
57
|
+
}
|
58
|
+
|
59
|
+
|
60
|
+
// Build NULL-terminated list of ALL picked objects overlapping rectangle
|
61
|
+
FXGLObject** FXRbGLViewer::_select(FXint x,FXint y,FXint w,FXint h){
|
62
|
+
FXGLObject *obj,**objects=NULL;
|
63
|
+
FXint nhits,i,j;
|
64
|
+
FXuint *hits;
|
65
|
+
FXint nnames;
|
66
|
+
if(scene && maxhits){
|
67
|
+
if(selectHits(hits,nhits,x,y,w,h)){ // FIXME leak
|
68
|
+
FXMALLOC(&objects,FXGLObject*,nhits+1);
|
69
|
+
FXASSERT(scene->isMemberOf(FXMETACLASS(FXRbGLObject)) || scene->isMemberOf(FXMETACLASS(FXRbGLShape)));
|
70
|
+
if(scene->isMemberOf(FXMETACLASS(FXRbGLObject))){
|
71
|
+
for(i=j=0; nhits>0; i+=hits[i]+3,nhits--){
|
72
|
+
nnames=hits[i];
|
73
|
+
obj=dynamic_cast<FXRbGLObject*>(scene)->identify(&hits[4+i],nnames-1);
|
74
|
+
if(obj!=NULL) objects[j++]=obj;
|
75
|
+
}
|
76
|
+
}
|
77
|
+
else{
|
78
|
+
for(i=j=0; nhits>0; i+=hits[i]+3,nhits--){
|
79
|
+
nnames=hits[i];
|
80
|
+
obj=dynamic_cast<FXRbGLShape*>(scene)->identify(&hits[4+i],nnames-1);
|
81
|
+
if(obj!=NULL) objects[j++]=obj;
|
82
|
+
}
|
83
|
+
}
|
84
|
+
objects[j]=NULL;
|
85
|
+
FXFREE(&hits);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
return objects;
|
89
|
+
}
|
@@ -0,0 +1,2063 @@
|
|
1
|
+
/***********************************************************************
|
2
|
+
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
|
3
|
+
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* For further information please contact the author by e-mail
|
20
|
+
* at "lyle@lylejohnson.name".
|
21
|
+
***********************************************************************/
|
22
|
+
|
23
|
+
/***********************************************************************
|
24
|
+
* $Id: FXRuby.cpp 2933 2008-12-29 20:19:33Z lyle $
|
25
|
+
***********************************************************************/
|
26
|
+
|
27
|
+
#ifdef _MSC_VER
|
28
|
+
#pragma warning (disable : 4786)
|
29
|
+
#endif
|
30
|
+
|
31
|
+
#include "FXRbCommon.h"
|
32
|
+
#include "impl.h"
|
33
|
+
|
34
|
+
#ifdef __CYGWIN__
|
35
|
+
#include <io.h> // for get_osf_handle()
|
36
|
+
#endif
|
37
|
+
|
38
|
+
#ifdef HAVE_SIGNAL_H
|
39
|
+
#include <signal.h> // for definitions of SIGINT, etc.
|
40
|
+
#endif
|
41
|
+
|
42
|
+
#if defined(RUBY_1_8)
|
43
|
+
|
44
|
+
extern "C" {
|
45
|
+
#include "st.h"
|
46
|
+
#include "rubyio.h" // for GetOpenFile(), etc.
|
47
|
+
}
|
48
|
+
|
49
|
+
#else
|
50
|
+
|
51
|
+
#include "ruby/io.h"
|
52
|
+
#include "ruby/st.h"
|
53
|
+
|
54
|
+
#endif /* RUBY_1_8 */
|
55
|
+
|
56
|
+
|
57
|
+
// Opaque type declaration from SWIG runtime
|
58
|
+
struct swig_type_info;
|
59
|
+
|
60
|
+
// Wrapper around SWIG_TypeQuery() that caches results for performance
|
61
|
+
swig_type_info *FXRbTypeQuery(const char *desc){
|
62
|
+
FXASSERT(desc!=0);
|
63
|
+
static st_table *types=st_init_strtable();
|
64
|
+
swig_type_info *typeinfo=0;
|
65
|
+
if(st_lookup(types,reinterpret_cast<st_data_t>(const_cast<char*>(desc)),reinterpret_cast<st_data_t *>(&typeinfo))==0){
|
66
|
+
typeinfo=SWIG_Ruby_TypeQuery(desc);
|
67
|
+
st_insert(types,reinterpret_cast<st_data_t>(strdup(desc)),reinterpret_cast<st_data_t>(typeinfo));
|
68
|
+
}
|
69
|
+
FXASSERT(typeinfo!=0);
|
70
|
+
return typeinfo;
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
/**
|
75
|
+
* The FXRuby_Objects hash table basically maps C++ objects to Ruby instances.
|
76
|
+
* Each key in the table is a pointer to a C++ object we've seen before, and
|
77
|
+
* the corresponding value is an FXRubyObjDesc struct (see below) that tells
|
78
|
+
* us which Ruby instance corresponds to that C++ object.
|
79
|
+
*/
|
80
|
+
|
81
|
+
static st_table * FXRuby_Objects;
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Each value in the FXRuby_Objects hash table is an instance of this
|
85
|
+
* struct. It identifies the Ruby instance associated with a C++ object.
|
86
|
+
* It also indicates whether this is merely a "borrowed" reference to
|
87
|
+
* some C++ object (i.e. it's not one we need to destroy later).
|
88
|
+
*
|
89
|
+
* in_gc is set for FXWindows that are in garbage collection and must
|
90
|
+
* not call ruby code anymore.
|
91
|
+
*/
|
92
|
+
|
93
|
+
struct FXRubyObjDesc {
|
94
|
+
VALUE obj;
|
95
|
+
bool borrowed;
|
96
|
+
bool in_gc;
|
97
|
+
};
|
98
|
+
|
99
|
+
|
100
|
+
/**
|
101
|
+
* FXRbNewPointerObj() is a wrapper around SWIG_Ruby_NewPointerObj() that also
|
102
|
+
* registers this C++ object & Ruby instance pair in our FXRuby_Objects
|
103
|
+
* hash table. This function should only get called for methods that return
|
104
|
+
* a reference to an already-existing C++ object (i.e. one that FOX "owns")
|
105
|
+
* and for that reason we mark these objects as "borrowed".
|
106
|
+
*/
|
107
|
+
|
108
|
+
VALUE FXRbNewPointerObj(void *ptr,swig_type_info* ty){
|
109
|
+
if(ptr!=0){
|
110
|
+
FXASSERT(ty!=0);
|
111
|
+
VALUE obj;
|
112
|
+
FXRubyObjDesc *desc;
|
113
|
+
if(FXMALLOC(&desc,FXRubyObjDesc,1)){
|
114
|
+
obj=SWIG_Ruby_NewPointerObj(ptr,ty,1);
|
115
|
+
FXTRACE((1,"FXRbNewPointerObj(rubyObj=%d,foxObj=%p)\n",static_cast<int>(obj),ptr));
|
116
|
+
desc->obj=obj;
|
117
|
+
desc->borrowed=true;
|
118
|
+
desc->in_gc=false;
|
119
|
+
int overwritten = st_insert(FXRuby_Objects,reinterpret_cast<st_data_t>(ptr),reinterpret_cast<st_data_t>(desc));
|
120
|
+
FXASSERT(!overwritten);
|
121
|
+
return obj;
|
122
|
+
}
|
123
|
+
else{
|
124
|
+
FXASSERT(FALSE);
|
125
|
+
return Qnil;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
else{
|
129
|
+
return Qnil;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
|
134
|
+
/**
|
135
|
+
* FXRbIsBorrowed() returns true if the specified C++ object is one that
|
136
|
+
* FOX owns (i.e. it's borrowed).
|
137
|
+
*/
|
138
|
+
|
139
|
+
bool FXRbIsBorrowed(void* ptr){
|
140
|
+
FXASSERT(ptr!=0);
|
141
|
+
FXRubyObjDesc *desc;
|
142
|
+
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(ptr),reinterpret_cast<st_data_t *>(&desc))!=0){
|
143
|
+
return desc->borrowed;
|
144
|
+
}
|
145
|
+
else{
|
146
|
+
return true;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
bool FXRbSetInGC(const void* ptr, bool enabled){
|
151
|
+
FXASSERT(ptr!=0);
|
152
|
+
FXRubyObjDesc *desc;
|
153
|
+
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(ptr),reinterpret_cast<st_data_t *>(&desc))!=0){
|
154
|
+
desc->in_gc=enabled;
|
155
|
+
return enabled;
|
156
|
+
}
|
157
|
+
return false;
|
158
|
+
}
|
159
|
+
|
160
|
+
bool FXRbIsInGC(const void* ptr){
|
161
|
+
FXASSERT(ptr!=0);
|
162
|
+
FXRubyObjDesc *desc;
|
163
|
+
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(ptr),reinterpret_cast<st_data_t *>(&desc))!=0){
|
164
|
+
return desc->in_gc;
|
165
|
+
}
|
166
|
+
return false;
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
/**
|
171
|
+
* FXRbConvertPtr() is just a wrapper around SWIG_Ruby_ConvertPtr().
|
172
|
+
*/
|
173
|
+
|
174
|
+
void* FXRbConvertPtr(VALUE obj,swig_type_info* ty){
|
175
|
+
void *ptr;
|
176
|
+
SWIG_Ruby_ConvertPtr(obj,&ptr,ty,1);
|
177
|
+
return ptr;
|
178
|
+
}
|
179
|
+
|
180
|
+
|
181
|
+
// Should we catch exceptions thrown by message handlers?
|
182
|
+
FXbool FXRbCatchExceptions=FALSE;
|
183
|
+
|
184
|
+
// Returns an FXInputHandle for this Ruby file object
|
185
|
+
FXInputHandle FXRbGetReadFileHandle(VALUE obj) {
|
186
|
+
int fd;
|
187
|
+
fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
|
188
|
+
#ifdef WIN32
|
189
|
+
#ifdef __CYGWIN__
|
190
|
+
return (FXInputHandle) get_osfhandle(fd);
|
191
|
+
#else
|
192
|
+
return (FXInputHandle) _get_osfhandle(fd);
|
193
|
+
#endif
|
194
|
+
#else
|
195
|
+
return (FXInputHandle) fd;
|
196
|
+
#endif
|
197
|
+
}
|
198
|
+
|
199
|
+
|
200
|
+
// Returns an FXInputHandle for this Ruby file object
|
201
|
+
FXInputHandle FXRbGetWriteFileHandle(VALUE obj) {
|
202
|
+
int fd;
|
203
|
+
#if defined(RUBINIUS)
|
204
|
+
VALUE vwrite = rb_intern("@write");
|
205
|
+
if(rb_ivar_defined(obj, vwrite)) obj = rb_ivar_get(obj, vwrite);
|
206
|
+
fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
|
207
|
+
#elif defined(RUBY_1_8)
|
208
|
+
OpenFile *fptr;
|
209
|
+
GetOpenFile(obj, fptr);
|
210
|
+
FILE *fpw=GetWriteFile(fptr);
|
211
|
+
fd = fileno(fpw);
|
212
|
+
#else
|
213
|
+
rb_io_t *fptr;
|
214
|
+
GetOpenFile(obj, fptr);
|
215
|
+
VALUE wrio = fptr->tied_io_for_writing;
|
216
|
+
if(wrio) obj = wrio;
|
217
|
+
fd = FIX2INT(rb_funcall(obj, rb_intern("fileno"), 0));
|
218
|
+
#endif
|
219
|
+
#ifdef WIN32
|
220
|
+
#ifdef __CYGWIN__
|
221
|
+
return (FXInputHandle) get_osfhandle(fd);
|
222
|
+
#else
|
223
|
+
return (FXInputHandle) _get_osfhandle(fd);
|
224
|
+
#endif
|
225
|
+
#else
|
226
|
+
return (FXInputHandle) fd;
|
227
|
+
#endif
|
228
|
+
}
|
229
|
+
|
230
|
+
|
231
|
+
// Register this Ruby class instance
|
232
|
+
void FXRbRegisterRubyObj(VALUE rubyObj,const void* foxObj) {
|
233
|
+
FXASSERT(!NIL_P(rubyObj));
|
234
|
+
FXASSERT(foxObj!=0);
|
235
|
+
FXRubyObjDesc* desc;
|
236
|
+
FXTRACE((1,"FXRbRegisterRubyObj(rubyObj=%d,foxObj=%p)\n",static_cast<int>(rubyObj),foxObj));
|
237
|
+
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(&desc))!=0){
|
238
|
+
FXASSERT(desc->borrowed);
|
239
|
+
/* There is already a Ruby object registered for this foxObj.
|
240
|
+
* This can happen, if libfox calls methods out of the C++ object constructor,
|
241
|
+
* that can be overwritten in Ruby (like changeFocus) with the object as
|
242
|
+
* parameter. FXFileSelector is one example.
|
243
|
+
* To avoid double references to the same foxObj from different Ruby objects,
|
244
|
+
* we decouple the foxObj from previoius ruby object and point to the new one.
|
245
|
+
*/
|
246
|
+
DATA_PTR(desc->obj) = 0;
|
247
|
+
desc->obj=rubyObj;
|
248
|
+
desc->borrowed=false;
|
249
|
+
}
|
250
|
+
else{
|
251
|
+
if(FXMALLOC(&desc,FXRubyObjDesc,1)){
|
252
|
+
desc->obj=rubyObj;
|
253
|
+
desc->borrowed=false;
|
254
|
+
desc->in_gc=false;
|
255
|
+
int overwritten = st_insert(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t>(desc));
|
256
|
+
FXASSERT(!overwritten);
|
257
|
+
}
|
258
|
+
else{
|
259
|
+
FXASSERT(FALSE);
|
260
|
+
}
|
261
|
+
}
|
262
|
+
FXASSERT(FXRbGetRubyObj(foxObj,false)==rubyObj);
|
263
|
+
}
|
264
|
+
|
265
|
+
/**
|
266
|
+
* Remove this mapping between a Ruby instance and a C++ object
|
267
|
+
*/
|
268
|
+
void FXRbUnregisterRubyObj(const void* foxObj){
|
269
|
+
if(foxObj!=0){
|
270
|
+
FXRubyObjDesc* desc;
|
271
|
+
if(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(&desc))!=0){
|
272
|
+
FXTRACE((1,"FXRbUnregisterRubyObj(rubyObj=%d,foxObj=%p)\n",static_cast<int>(desc->obj),foxObj));
|
273
|
+
DATA_PTR(desc->obj)=0;
|
274
|
+
FXFREE(&desc);
|
275
|
+
st_delete(FXRuby_Objects,reinterpret_cast<st_data_t *>(const_cast<void**>(&foxObj)),reinterpret_cast<st_data_t *>(0));
|
276
|
+
FXASSERT(st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(0))==0);
|
277
|
+
}
|
278
|
+
}
|
279
|
+
}
|
280
|
+
|
281
|
+
|
282
|
+
VALUE to_ruby(const FXObject* obj){
|
283
|
+
if(obj!=0){
|
284
|
+
FXString className=obj->getClassName();
|
285
|
+
if(className.length()>3){
|
286
|
+
if(className.left(4)=="FXRb"){ className.replace(0,4,"FX"); }
|
287
|
+
}
|
288
|
+
FXString desc=className+" *";
|
289
|
+
return FXRbGetRubyObj(obj,desc.text());
|
290
|
+
}
|
291
|
+
return Qnil;
|
292
|
+
}
|
293
|
+
|
294
|
+
|
295
|
+
/**
|
296
|
+
* Return the registered Ruby class instance associated with this
|
297
|
+
* FOX object, or Qnil if not found.
|
298
|
+
*/
|
299
|
+
VALUE FXRbGetRubyObj(const void *foxObj,bool searchBoth){
|
300
|
+
FXRubyObjDesc* desc;
|
301
|
+
if(foxObj!=0 && st_lookup(FXRuby_Objects,reinterpret_cast<st_data_t>(const_cast<void*>(foxObj)),reinterpret_cast<st_data_t *>(&desc))!=0){
|
302
|
+
FXASSERT(desc!=0);
|
303
|
+
if(searchBoth){
|
304
|
+
return desc->obj;
|
305
|
+
}
|
306
|
+
else{
|
307
|
+
return desc->borrowed ? Qnil : desc->obj;
|
308
|
+
}
|
309
|
+
}
|
310
|
+
else{
|
311
|
+
return Qnil;
|
312
|
+
}
|
313
|
+
}
|
314
|
+
|
315
|
+
/**
|
316
|
+
* Return the registered Ruby class instance associated with this
|
317
|
+
* FOX object, or a new registered instance if not found.
|
318
|
+
*/
|
319
|
+
VALUE FXRbGetRubyObj(const void *foxObj,swig_type_info* ty){
|
320
|
+
if(foxObj!=0){
|
321
|
+
VALUE rbObj=FXRbGetRubyObj(foxObj,true);
|
322
|
+
return NIL_P(rbObj) ? FXRbNewPointerObj(const_cast<void*>(foxObj),ty) : rbObj;
|
323
|
+
}
|
324
|
+
else{
|
325
|
+
return Qnil;
|
326
|
+
}
|
327
|
+
}
|
328
|
+
|
329
|
+
VALUE FXRbGetRubyObj(const void *foxObj,const char *type){
|
330
|
+
if(foxObj!=0){
|
331
|
+
FXASSERT(type!=0);
|
332
|
+
VALUE rbObj=FXRbGetRubyObj(foxObj,true);
|
333
|
+
return NIL_P(rbObj) ? FXRbNewPointerObj(const_cast<void*>(foxObj),FXRbTypeQuery(type)) : rbObj;
|
334
|
+
}
|
335
|
+
else{
|
336
|
+
return Qnil;
|
337
|
+
}
|
338
|
+
}
|
339
|
+
|
340
|
+
/**
|
341
|
+
* Look up the Ruby instance associated with this C++ object, if any, and mark
|
342
|
+
* that instance as in use.
|
343
|
+
*
|
344
|
+
* We previously only marked those Ruby instances that were "non-borrowed"
|
345
|
+
* references to C++ objects, as a way to reduce the number of Ruby instances
|
346
|
+
* on the heap.
|
347
|
+
*/
|
348
|
+
void FXRbGcMark(void *obj){
|
349
|
+
if(obj){
|
350
|
+
/**
|
351
|
+
* If the 2nd argument to FXRbGetRubyObj() is false, we only mark
|
352
|
+
* non-borrowed references. This has led to problems in the past
|
353
|
+
* (see e.g. SourceForge Bug #703721). I think the correct solution
|
354
|
+
* is to mark any Ruby reference this object, "borrowed" or not;
|
355
|
+
* so the 2nd argument to FXRbGetRubyObj() is now true.
|
356
|
+
*
|
357
|
+
* If you feel compelled to change this back to FXGetRubyObj(obj,false),
|
358
|
+
* please think about it first. Especially make sure that the shutter.rb
|
359
|
+
* example program works if you invoke the GC in ShutterWindow#create;
|
360
|
+
* make sure that the shutter items' contents don't get blown away!
|
361
|
+
*/
|
362
|
+
VALUE value=FXRbGetRubyObj(obj,true);
|
363
|
+
if(!NIL_P(value)){
|
364
|
+
rb_gc_mark(value);
|
365
|
+
}
|
366
|
+
}
|
367
|
+
}
|
368
|
+
|
369
|
+
//----------------------------------------------------------------------
|
370
|
+
|
371
|
+
// Returns a Ruby array of floats
|
372
|
+
VALUE FXRbMakeArray(const FXfloat* values,FXint size){
|
373
|
+
VALUE result=rb_ary_new();
|
374
|
+
for(FXint i=0; i<size; i++)
|
375
|
+
rb_ary_push(result,rb_float_new(values[i]));
|
376
|
+
return result;
|
377
|
+
}
|
378
|
+
|
379
|
+
// Returns a Ruby array of floats
|
380
|
+
VALUE FXRbMakeArray(const FXdouble* values,FXint size){
|
381
|
+
VALUE result=rb_ary_new();
|
382
|
+
for(FXint i=0; i<size; i++)
|
383
|
+
rb_ary_push(result,rb_float_new(values[i]));
|
384
|
+
return result;
|
385
|
+
}
|
386
|
+
|
387
|
+
// Returns a Ruby array of integers
|
388
|
+
VALUE FXRbMakeArray(const FXint* values,FXint size){
|
389
|
+
VALUE result=rb_ary_new();
|
390
|
+
for(FXint i=0; i<size; i++)
|
391
|
+
rb_ary_push(result,INT2NUM(values[i]));
|
392
|
+
return result;
|
393
|
+
}
|
394
|
+
|
395
|
+
// Returns a Ruby array of integers
|
396
|
+
VALUE FXRbMakeArray(const FXuint* values,FXint size){
|
397
|
+
VALUE result=rb_ary_new();
|
398
|
+
for(FXint i=0; i<size; i++)
|
399
|
+
rb_ary_push(result,UINT2NUM(values[i]));
|
400
|
+
return result;
|
401
|
+
}
|
402
|
+
|
403
|
+
// Returns a Ruby array of integers
|
404
|
+
VALUE FXRbMakeArray(const FXchar* dashpattern,FXuint dashlength){
|
405
|
+
VALUE result=rb_ary_new();
|
406
|
+
for(FXuint i=0; i<dashlength; i++)
|
407
|
+
rb_ary_push(result,INT2NUM(dashpattern[i]));
|
408
|
+
return result;
|
409
|
+
}
|
410
|
+
|
411
|
+
// Returns a Ruby array of FXArcs
|
412
|
+
VALUE FXRbMakeArray(const FXArc* arcs,FXuint narcs){
|
413
|
+
VALUE result=rb_ary_new();
|
414
|
+
for(FXuint i=0; i<narcs; i++)
|
415
|
+
rb_ary_push(result,FXRbGetRubyObj(&arcs[i],"FXArc *"));
|
416
|
+
return result;
|
417
|
+
}
|
418
|
+
|
419
|
+
// Returns a Ruby array of FXPoints
|
420
|
+
VALUE FXRbMakeArray(const FXPoint* points,FXuint npoints){
|
421
|
+
VALUE result=rb_ary_new();
|
422
|
+
for(FXuint i=0; i<npoints; i++)
|
423
|
+
rb_ary_push(result,FXRbGetRubyObj(&points[i],"FXPoint *"));
|
424
|
+
return result;
|
425
|
+
}
|
426
|
+
|
427
|
+
// Returns a Ruby array of FXRectangles
|
428
|
+
VALUE FXRbMakeArray(const FXRectangle* rectangles,FXuint nrectangles){
|
429
|
+
VALUE result=rb_ary_new();
|
430
|
+
for(FXuint i=0; i<nrectangles; i++)
|
431
|
+
rb_ary_push(result,FXRbGetRubyObj(&rectangles[i],"FXRectangle *"));
|
432
|
+
return result;
|
433
|
+
}
|
434
|
+
|
435
|
+
// Returns a Ruby array of FXSegments
|
436
|
+
VALUE FXRbMakeArray(const FXSegment* segments,FXuint nsegments){
|
437
|
+
VALUE result=rb_ary_new();
|
438
|
+
for(FXuint i=0; i<nsegments; i++)
|
439
|
+
rb_ary_push(result,FXRbGetRubyObj(&segments[i],"FXSegment *"));
|
440
|
+
return result;
|
441
|
+
}
|
442
|
+
|
443
|
+
// Returns a Ruby array of FXColor values
|
444
|
+
VALUE FXRbMakeColorArray(const FXColor* colors,FXint w,FXint h){
|
445
|
+
VALUE result=rb_ary_new();
|
446
|
+
FXint size=w*h;
|
447
|
+
for(FXuint i=0; i<size; i++)
|
448
|
+
rb_ary_push(result,to_ruby(colors[i]));
|
449
|
+
return result;
|
450
|
+
}
|
451
|
+
|
452
|
+
FXuint FXRbNumberOfFXColors(VALUE string_or_ary){
|
453
|
+
FXuint len;
|
454
|
+
|
455
|
+
if(TYPE(string_or_ary) == T_ARRAY){
|
456
|
+
len = RARRAY_LEN(string_or_ary);
|
457
|
+
}else{
|
458
|
+
Check_Type(string_or_ary,T_STRING);
|
459
|
+
if(RSTRING_LEN(string_or_ary) % sizeof(FXColor) != 0 )
|
460
|
+
rb_raise( rb_eArgError, "String size is no multiple of %lu", sizeof(FXColor) );
|
461
|
+
len = RSTRING_LEN(string_or_ary) / sizeof(FXColor);
|
462
|
+
}
|
463
|
+
return len;
|
464
|
+
}
|
465
|
+
|
466
|
+
FXColor *FXRbConvertToFXColors(VALUE string_or_ary){
|
467
|
+
FXColor* pix=0;
|
468
|
+
if(TYPE(string_or_ary) == T_ARRAY){
|
469
|
+
if(FXMALLOC(&pix,FXColor,RARRAY_LEN(string_or_ary))){
|
470
|
+
for(long i=0; i<RARRAY_LEN(string_or_ary); i++){
|
471
|
+
pix[i]=static_cast<FXColor>(NUM2UINT(rb_ary_entry(string_or_ary,i)));
|
472
|
+
}
|
473
|
+
}
|
474
|
+
}else{
|
475
|
+
if(FXMALLOC(&pix,FXColor,RSTRING_LEN(string_or_ary)/sizeof(FXColor))){
|
476
|
+
memcpy(pix, RSTRING_PTR(string_or_ary), RSTRING_LEN(string_or_ary));
|
477
|
+
}
|
478
|
+
}
|
479
|
+
return pix;
|
480
|
+
}
|
481
|
+
|
482
|
+
//----------------------------------------------------------------------
|
483
|
+
|
484
|
+
/**
|
485
|
+
* Based on the sender object's class and the selector, convert the message
|
486
|
+
* data stored in the void pointer (ptr) to a suitable Ruby object.
|
487
|
+
*
|
488
|
+
* This function is used when we need to pass message data into a Ruby
|
489
|
+
* code block (or method) that is acting as a FOX message handler.
|
490
|
+
*/
|
491
|
+
static VALUE FXRbConvertMessageData(FXObject* sender,FXObject* recv,FXSelector sel,void* ptr){
|
492
|
+
FXTRACE((1,"FXRbConvertMessageData(%s(%p),FXSEL(%s,%d),%p)\n",sender->getClassName(),sender,FXDebugTarget::messageTypeName[FXSELTYPE(sel)],FXSELID(sel),ptr));
|
493
|
+
FXInputHandle fff;
|
494
|
+
FXushort type=FXSELTYPE(sel);
|
495
|
+
FXushort id=FXSELID(sel);
|
496
|
+
|
497
|
+
FXASSERT(type!=SEL_NONE);
|
498
|
+
FXASSERT(type!=SEL_LAST);
|
499
|
+
|
500
|
+
if(type==SEL_KEYPRESS ||
|
501
|
+
type==SEL_KEYRELEASE ||
|
502
|
+
type==SEL_LEFTBUTTONPRESS ||
|
503
|
+
type==SEL_LEFTBUTTONRELEASE ||
|
504
|
+
type==SEL_MIDDLEBUTTONPRESS ||
|
505
|
+
type==SEL_MIDDLEBUTTONRELEASE ||
|
506
|
+
type==SEL_RIGHTBUTTONPRESS ||
|
507
|
+
type==SEL_RIGHTBUTTONRELEASE ||
|
508
|
+
type==SEL_MOTION ||
|
509
|
+
type==SEL_ENTER ||
|
510
|
+
type==SEL_LEAVE ||
|
511
|
+
type==SEL_FOCUSIN ||
|
512
|
+
type==SEL_FOCUSOUT ||
|
513
|
+
type==SEL_KEYMAP ||
|
514
|
+
type==SEL_UNGRABBED ||
|
515
|
+
type==SEL_PAINT ||
|
516
|
+
type==SEL_CREATE ||
|
517
|
+
type==SEL_DESTROY ||
|
518
|
+
type==SEL_UNMAP ||
|
519
|
+
type==SEL_MAP ||
|
520
|
+
type==SEL_CONFIGURE ||
|
521
|
+
type==SEL_SELECTION_LOST ||
|
522
|
+
type==SEL_SELECTION_GAINED ||
|
523
|
+
type==SEL_SELECTION_REQUEST ||
|
524
|
+
type==SEL_RAISED ||
|
525
|
+
type==SEL_LOWERED ||
|
526
|
+
type==SEL_MOUSEWHEEL ||
|
527
|
+
type==SEL_BEGINDRAG ||
|
528
|
+
type==SEL_ENDDRAG ||
|
529
|
+
type==SEL_TIMEOUT ||
|
530
|
+
type==SEL_CLIPBOARD_LOST ||
|
531
|
+
type==SEL_CLIPBOARD_GAINED ||
|
532
|
+
type==SEL_CLIPBOARD_REQUEST ||
|
533
|
+
type==SEL_CHORE ||
|
534
|
+
type==SEL_FOCUS_SELF ||
|
535
|
+
type==SEL_FOCUS_RIGHT ||
|
536
|
+
type==SEL_FOCUS_LEFT ||
|
537
|
+
type==SEL_FOCUS_DOWN ||
|
538
|
+
type==SEL_FOCUS_UP ||
|
539
|
+
type==SEL_FOCUS_NEXT ||
|
540
|
+
type==SEL_FOCUS_PREV ||
|
541
|
+
type==SEL_DND_ENTER ||
|
542
|
+
type==SEL_DND_LEAVE ||
|
543
|
+
type==SEL_DND_DROP ||
|
544
|
+
type==SEL_DND_MOTION ||
|
545
|
+
type==SEL_DND_REQUEST ||
|
546
|
+
type==SEL_PICKED ||
|
547
|
+
type==SEL_SESSION_NOTIFY ||
|
548
|
+
type==SEL_SESSION_CLOSED) {
|
549
|
+
return to_ruby(reinterpret_cast<FXEvent*>(ptr));
|
550
|
+
}
|
551
|
+
else if(type==SEL_DRAGGED && !sender->isMemberOf(FXMETACLASS(FXGLViewer))){
|
552
|
+
return to_ruby(reinterpret_cast<FXEvent*>(ptr));
|
553
|
+
}
|
554
|
+
else if(type==SEL_SIGNAL){
|
555
|
+
return to_ruby(static_cast<int>(reinterpret_cast<FXuval>(ptr)));
|
556
|
+
}
|
557
|
+
else if(type==SEL_IO_READ ||
|
558
|
+
type==SEL_IO_WRITE ||
|
559
|
+
type==SEL_IO_EXCEPT){
|
560
|
+
#ifdef WIN32
|
561
|
+
fff=reinterpret_cast<FXInputHandle>(ptr);
|
562
|
+
#else
|
563
|
+
fff=static_cast<FXInputHandle>(reinterpret_cast<long>(ptr));
|
564
|
+
#endif
|
565
|
+
return Qnil;
|
566
|
+
}
|
567
|
+
else if(type==SEL_CLOSE ||
|
568
|
+
type==SEL_DELETE ||
|
569
|
+
type==SEL_MINIMIZE ||
|
570
|
+
type==SEL_RESTORE ||
|
571
|
+
type==SEL_MAXIMIZE ||
|
572
|
+
type==SEL_UPDATE ||
|
573
|
+
type==SEL_QUERY_HELP ||
|
574
|
+
type==SEL_QUERY_TIP){
|
575
|
+
FXASSERT(ptr==0);
|
576
|
+
return Qnil;
|
577
|
+
}
|
578
|
+
else if(sender->isMemberOf(FXMETACLASS(FX4Splitter))){
|
579
|
+
if(type==SEL_CHANGED||type==SEL_COMMAND) return Qnil;
|
580
|
+
}
|
581
|
+
else if(sender->isMemberOf(FXMETACLASS(FXArrowButton))){
|
582
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXuint>(reinterpret_cast<FXuval>(ptr)));
|
583
|
+
}
|
584
|
+
else if(sender->isMemberOf(FXMETACLASS(FXPicker))){
|
585
|
+
if(type==SEL_COMMAND || type==SEL_CHANGED) return to_ruby(reinterpret_cast<FXPoint*>(ptr));
|
586
|
+
}
|
587
|
+
else if(sender->isMemberOf(FXMETACLASS(FXButton))){
|
588
|
+
if(type==SEL_CLICKED ||
|
589
|
+
type==SEL_DOUBLECLICKED ||
|
590
|
+
type==SEL_TRIPLECLICKED ||
|
591
|
+
type==SEL_COMMAND) return to_ruby(static_cast<FXuint>(reinterpret_cast<FXuval>(ptr)));
|
592
|
+
}
|
593
|
+
else if(sender->isMemberOf(FXMETACLASS(FXCheckButton))){
|
594
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXuchar>(reinterpret_cast<FXuval>(ptr)));
|
595
|
+
}
|
596
|
+
else if(sender->isMemberOf(FXMETACLASS(FXColorBar))){
|
597
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND){
|
598
|
+
FXfloat* hsv=reinterpret_cast<FXfloat*>(ptr);
|
599
|
+
return rb_ary_new3(3,to_ruby(hsv[0]),to_ruby(hsv[1]),to_ruby(hsv[2]));
|
600
|
+
}
|
601
|
+
}
|
602
|
+
else if(sender->isMemberOf(FXMETACLASS(FXColorDialog))){
|
603
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(static_cast<FXColor>(reinterpret_cast<FXuval>(ptr)));
|
604
|
+
}
|
605
|
+
else if(sender->isMemberOf(FXMETACLASS(FXColorRing))){
|
606
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND){
|
607
|
+
FXfloat* hsv=reinterpret_cast<FXfloat*>(ptr);
|
608
|
+
return rb_ary_new3(3,to_ruby(hsv[0]),to_ruby(hsv[1]),to_ruby(hsv[2]));
|
609
|
+
}
|
610
|
+
}
|
611
|
+
else if(sender->isMemberOf(FXMETACLASS(FXColorSelector))){
|
612
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(static_cast<FXColor>(reinterpret_cast<FXuval>(ptr)));
|
613
|
+
}
|
614
|
+
else if(sender->isMemberOf(FXMETACLASS(FXColorWell))){
|
615
|
+
if(type==SEL_CHANGED ||
|
616
|
+
type==SEL_COMMAND ||
|
617
|
+
type==SEL_CLICKED ||
|
618
|
+
type==SEL_DOUBLECLICKED ||
|
619
|
+
type==SEL_TRIPLECLICKED) {
|
620
|
+
VALUE v=to_ruby(static_cast<FXColor>(reinterpret_cast<FXuval>(ptr)));
|
621
|
+
return v;
|
622
|
+
}
|
623
|
+
}
|
624
|
+
else if(sender->isMemberOf(FXMETACLASS(FXColorWheel))){
|
625
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND){
|
626
|
+
FXfloat* hsv=reinterpret_cast<FXfloat*>(ptr);
|
627
|
+
return rb_ary_new3(3,to_ruby(hsv[0]),to_ruby(hsv[1]),to_ruby(hsv[2]));
|
628
|
+
}
|
629
|
+
}
|
630
|
+
else if(sender->isMemberOf(FXMETACLASS(FXComboBox))){
|
631
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(reinterpret_cast<FXchar*>(ptr));
|
632
|
+
}
|
633
|
+
else if(sender->isMemberOf(FXMETACLASS(FXDataTarget))){
|
634
|
+
if(type==SEL_COMMAND || type==SEL_CHANGED){
|
635
|
+
if(recv->isMemberOf(FXMETACLASS(FXWindow))){
|
636
|
+
switch(id){
|
637
|
+
case FXWindow::ID_SETINTVALUE:
|
638
|
+
return to_ruby(*reinterpret_cast<FXint*>(ptr));
|
639
|
+
case FXWindow::ID_SETREALVALUE:
|
640
|
+
return to_ruby(*reinterpret_cast<FXdouble*>(ptr));
|
641
|
+
case FXWindow::ID_SETSTRINGVALUE:
|
642
|
+
return to_ruby(*reinterpret_cast<FXString*>(ptr));
|
643
|
+
case FXWindow::ID_GETINTVALUE:
|
644
|
+
case FXWindow::ID_GETREALVALUE:
|
645
|
+
case FXWindow::ID_GETSTRINGVALUE:
|
646
|
+
FXASSERT(FALSE);
|
647
|
+
break;
|
648
|
+
default:
|
649
|
+
FXASSERT(FALSE);
|
650
|
+
}
|
651
|
+
}
|
652
|
+
else{
|
653
|
+
// It's not a window object...
|
654
|
+
FXASSERT(sender->isMemberOf(FXMETACLASS(FXRbDataTarget)));
|
655
|
+
return dynamic_cast<FXRbDataTarget*>(sender)->getValue();
|
656
|
+
}
|
657
|
+
}
|
658
|
+
}
|
659
|
+
else if(sender->isMemberOf(FXMETACLASS(FXDial))){
|
660
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
661
|
+
}
|
662
|
+
else if(sender->isMemberOf(FXMETACLASS(FXDirBox))){
|
663
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(reinterpret_cast<FXchar*>(ptr));
|
664
|
+
}
|
665
|
+
else if(sender->isMemberOf(FXMETACLASS(FXDockBar))){
|
666
|
+
if(type==SEL_DOCKED || type==SEL_FLOATED) return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXDockSite *"));
|
667
|
+
}
|
668
|
+
else if(sender->isMemberOf(FXMETACLASS(FXFileList))){
|
669
|
+
if (type==SEL_CHANGED ||
|
670
|
+
type==SEL_CLICKED ||
|
671
|
+
type==SEL_DOUBLECLICKED ||
|
672
|
+
type==SEL_TRIPLECLICKED ||
|
673
|
+
type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
674
|
+
}
|
675
|
+
else if(sender->isMemberOf(FXMETACLASS(FXFoldingList))){
|
676
|
+
if(type==SEL_COLLAPSED ||
|
677
|
+
type==SEL_EXPANDED ||
|
678
|
+
type==SEL_COMMAND ||
|
679
|
+
type==SEL_CHANGED ||
|
680
|
+
type==SEL_CLICKED ||
|
681
|
+
type==SEL_DOUBLECLICKED ||
|
682
|
+
type==SEL_TRIPLECLICKED ||
|
683
|
+
type==SEL_OPENED ||
|
684
|
+
type==SEL_CLOSED ||
|
685
|
+
type==SEL_SELECTED ||
|
686
|
+
type==SEL_DESELECTED ||
|
687
|
+
type==SEL_INSERTED ||
|
688
|
+
type==SEL_DELETED){
|
689
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXFoldingItem *"));
|
690
|
+
}
|
691
|
+
}
|
692
|
+
else if(sender->isMemberOf(FXMETACLASS(FXGLViewer))){
|
693
|
+
if(type==SEL_CHANGED ||
|
694
|
+
type==SEL_CLICKED ||
|
695
|
+
type==SEL_DOUBLECLICKED ||
|
696
|
+
type==SEL_TRIPLECLICKED ||
|
697
|
+
type==SEL_DRAGGED){
|
698
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXGLObject *"));
|
699
|
+
}
|
700
|
+
else if(type==SEL_COMMAND){
|
701
|
+
if(id==FXWindow::ID_QUERY_MENU)
|
702
|
+
return to_ruby(reinterpret_cast<FXEvent*>(ptr));
|
703
|
+
else
|
704
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXGLObject *"));
|
705
|
+
}
|
706
|
+
else if(type==SEL_LASSOED ||
|
707
|
+
type==SEL_INSERTED ||
|
708
|
+
type==SEL_DELETED ||
|
709
|
+
type==SEL_SELECTED ||
|
710
|
+
type==SEL_DESELECTED){
|
711
|
+
VALUE ary=rb_ary_new();
|
712
|
+
// FXGLObject** objlist=reinterpret_cast<FXGLObject**>(ptr);
|
713
|
+
// FIXME: objlist is a NULL-terminated array of pointers to FXGLObject
|
714
|
+
return ary;
|
715
|
+
}
|
716
|
+
}
|
717
|
+
else if(sender->isMemberOf(FXMETACLASS(FXGradientBar))){
|
718
|
+
if(type==SEL_CHANGED){
|
719
|
+
return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
720
|
+
}
|
721
|
+
else if(type==SEL_SELECTED || type==SEL_DESELECTED){
|
722
|
+
return Qnil;
|
723
|
+
}
|
724
|
+
}
|
725
|
+
else if(sender->isMemberOf(FXMETACLASS(FXHeader))){
|
726
|
+
if(type==SEL_COMMAND ||
|
727
|
+
type==SEL_CHANGED ||
|
728
|
+
type==SEL_CLICKED ||
|
729
|
+
type==SEL_REPLACED ||
|
730
|
+
type==SEL_INSERTED ||
|
731
|
+
type==SEL_DELETED) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
732
|
+
}
|
733
|
+
else if(sender->isMemberOf(FXMETACLASS(FXIconList))){
|
734
|
+
if(type==SEL_CHANGED ||
|
735
|
+
type==SEL_CLICKED ||
|
736
|
+
type==SEL_DOUBLECLICKED ||
|
737
|
+
type==SEL_TRIPLECLICKED ||
|
738
|
+
type==SEL_COMMAND ||
|
739
|
+
type==SEL_SELECTED ||
|
740
|
+
type==SEL_DESELECTED ||
|
741
|
+
type==SEL_REPLACED ||
|
742
|
+
type==SEL_INSERTED ||
|
743
|
+
type==SEL_DELETED) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
744
|
+
}
|
745
|
+
else if(sender->isMemberOf(FXMETACLASS(FXKnob))){
|
746
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
747
|
+
}
|
748
|
+
else if(sender->isMemberOf(FXMETACLASS(FXList))){
|
749
|
+
if(type==SEL_CHANGED ||
|
750
|
+
type==SEL_CLICKED ||
|
751
|
+
type==SEL_DOUBLECLICKED ||
|
752
|
+
type==SEL_TRIPLECLICKED ||
|
753
|
+
type==SEL_SELECTED ||
|
754
|
+
type==SEL_DESELECTED ||
|
755
|
+
type==SEL_REPLACED ||
|
756
|
+
type==SEL_INSERTED ||
|
757
|
+
type==SEL_DELETED ||
|
758
|
+
type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
759
|
+
}
|
760
|
+
else if(sender->isMemberOf(FXMETACLASS(FXListBox))){
|
761
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
762
|
+
else if(type==SEL_CHANGED) return Qnil;
|
763
|
+
}
|
764
|
+
else if(sender->isMemberOf(FXMETACLASS(FXMDIChild))){
|
765
|
+
if(type==SEL_MINIMIZE ||
|
766
|
+
type==SEL_MAXIMIZE ||
|
767
|
+
type==SEL_CLOSE ||
|
768
|
+
type==SEL_RESTORE){
|
769
|
+
return Qnil;
|
770
|
+
}
|
771
|
+
else if(type==SEL_SELECTED ||
|
772
|
+
type==SEL_DESELECTED){
|
773
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXMDIChild *"));
|
774
|
+
}
|
775
|
+
}
|
776
|
+
else if(sender->isMemberOf(FXMETACLASS(FXMDIClient))){
|
777
|
+
if(type==SEL_CHANGED) return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXMDIChild *"));
|
778
|
+
}
|
779
|
+
else if(sender->isMemberOf(FXMETACLASS(FXMenuCheck))){
|
780
|
+
if(type==SEL_COMMAND) return to_ruby(reinterpret_cast<FXuval>(ptr));
|
781
|
+
}
|
782
|
+
else if(sender->isMemberOf(FXMETACLASS(FXMenuRadio))){
|
783
|
+
if(type==SEL_COMMAND) return to_ruby(reinterpret_cast<FXuval>(ptr));
|
784
|
+
}
|
785
|
+
else if(sender->isMemberOf(FXMETACLASS(FXMenuCommand))){
|
786
|
+
if(type==SEL_COMMAND) return to_ruby(true);
|
787
|
+
}
|
788
|
+
else if(sender->isMemberOf(FXMETACLASS(FXOption))){
|
789
|
+
if(type==SEL_COMMAND) return to_ruby(reinterpret_cast<FXEvent*>(ptr));
|
790
|
+
}
|
791
|
+
else if(sender->isMemberOf(FXMETACLASS(FXOptionMenu))){
|
792
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
793
|
+
}
|
794
|
+
else if(sender->isMemberOf(FXMETACLASS(FXRadioButton))){
|
795
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXuchar>(reinterpret_cast<FXuval>(ptr)));
|
796
|
+
}
|
797
|
+
else if(sender->isMemberOf(FXMETACLASS(FXRealSlider))){
|
798
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND)
|
799
|
+
return to_ruby(*(reinterpret_cast<FXdouble *>(ptr)));
|
800
|
+
}
|
801
|
+
else if(sender->isMemberOf(FXMETACLASS(FXRealSpinner))){
|
802
|
+
if(type==SEL_COMMAND || type==SEL_CHANGED) return to_ruby(*(reinterpret_cast<FXdouble *>(ptr)));
|
803
|
+
}
|
804
|
+
else if(sender->isMemberOf(FXMETACLASS(FXRecentFiles))){
|
805
|
+
if(type==SEL_COMMAND) return to_ruby(reinterpret_cast<FXchar*>(ptr));
|
806
|
+
}
|
807
|
+
else if(sender->isMemberOf(FXMETACLASS(FXRuler))){
|
808
|
+
if(type==SEL_CHANGED) return Qnil;
|
809
|
+
}
|
810
|
+
else if(sender->isMemberOf(FXMETACLASS(FXScrollBar))){
|
811
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
812
|
+
}
|
813
|
+
else if(sender->isMemberOf(FXMETACLASS(FXShutter))){
|
814
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
815
|
+
}
|
816
|
+
else if(sender->isMemberOf(FXMETACLASS(FXSlider))){
|
817
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND)
|
818
|
+
return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
819
|
+
}
|
820
|
+
else if(sender->isMemberOf(FXMETACLASS(FXSpinner))){
|
821
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND)
|
822
|
+
return to_ruby(static_cast<FXint>(reinterpret_cast<FXuval>(ptr)));
|
823
|
+
}
|
824
|
+
else if(sender->isMemberOf(FXMETACLASS(FXSplitter))){
|
825
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND)
|
826
|
+
return to_ruby(reinterpret_cast<FXWindow *>(ptr));
|
827
|
+
}
|
828
|
+
else if(sender->isMemberOf(FXMETACLASS(FXSwitcher))){
|
829
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
830
|
+
}
|
831
|
+
else if(sender->isMemberOf(FXMETACLASS(FXTabBar))){
|
832
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
833
|
+
}
|
834
|
+
else if(sender->isMemberOf(FXMETACLASS(FXTable))){
|
835
|
+
if(type==SEL_CLICKED ||
|
836
|
+
type==SEL_DOUBLECLICKED ||
|
837
|
+
type==SEL_TRIPLECLICKED ||
|
838
|
+
type==SEL_CHANGED ||
|
839
|
+
type==SEL_COMMAND ||
|
840
|
+
type==SEL_SELECTED ||
|
841
|
+
type == SEL_DESELECTED) return to_ruby(reinterpret_cast<FXTablePos*>(ptr));
|
842
|
+
else if(type == SEL_INSERTED ||
|
843
|
+
type == SEL_DELETED ||
|
844
|
+
type == SEL_REPLACED){
|
845
|
+
return to_ruby(reinterpret_cast<FXTableRange*>(ptr));
|
846
|
+
}
|
847
|
+
}
|
848
|
+
else if(sender->isMemberOf(FXMETACLASS(FXText))){
|
849
|
+
if (type == SEL_COMMAND) {
|
850
|
+
switch(id){
|
851
|
+
case FXText::ID_COPY_SEL:
|
852
|
+
case FXText::ID_PASTE_SEL:
|
853
|
+
case FXText::ID_DELETE_SEL:
|
854
|
+
return Qnil;
|
855
|
+
break;
|
856
|
+
default:
|
857
|
+
FXASSERT(FALSE);
|
858
|
+
return reinterpret_cast<VALUE>(ptr); // pass-through as is
|
859
|
+
}
|
860
|
+
}
|
861
|
+
else if(type==SEL_CHANGED){
|
862
|
+
return to_ruby(static_cast<FXint>(reinterpret_cast<FXival>(ptr)));
|
863
|
+
}
|
864
|
+
else if(type==SEL_SELECTED ||
|
865
|
+
type == SEL_DESELECTED) {
|
866
|
+
FXint* what=reinterpret_cast<FXint*>(ptr);
|
867
|
+
FXASSERT(what!=0);
|
868
|
+
VALUE ary=rb_ary_new();
|
869
|
+
rb_ary_push(ary,to_ruby(what[0])); // start position of text
|
870
|
+
rb_ary_push(ary,to_ruby(what[1])); // length of text
|
871
|
+
return ary;
|
872
|
+
}
|
873
|
+
else if(type==SEL_INSERTED || type==SEL_DELETED || type==SEL_REPLACED) {
|
874
|
+
return to_ruby(reinterpret_cast<FXTextChange*>(ptr));
|
875
|
+
}
|
876
|
+
}
|
877
|
+
else if(sender->isMemberOf(FXMETACLASS(FXTextField))){
|
878
|
+
if(type==SEL_CHANGED ||
|
879
|
+
type==SEL_COMMAND ||
|
880
|
+
type==SEL_VERIFY) return to_ruby(reinterpret_cast<FXchar*>(ptr));
|
881
|
+
}
|
882
|
+
else if(sender->isMemberOf(FXMETACLASS(FXToggleButton))){
|
883
|
+
if(type==SEL_COMMAND) return to_ruby(static_cast<FXuchar>(reinterpret_cast<FXuval>(ptr)));
|
884
|
+
}
|
885
|
+
else if(sender->isMemberOf(FXMETACLASS(FXToolBarTab))){
|
886
|
+
if (type==SEL_COMMAND) return to_ruby(static_cast<FXbool>(reinterpret_cast<FXuval>(ptr)));
|
887
|
+
}
|
888
|
+
else if(sender->isMemberOf(FXMETACLASS(FXTopWindow))){
|
889
|
+
if(type==SEL_MINIMIZE ||
|
890
|
+
type==SEL_MAXIMIZE ||
|
891
|
+
type==SEL_RESTORE ||
|
892
|
+
type==SEL_CLOSE){
|
893
|
+
return Qnil;
|
894
|
+
}
|
895
|
+
else if (type==SEL_SESSION_NOTIFY ||
|
896
|
+
type==SEL_SESSION_CLOSED) {
|
897
|
+
return to_ruby(reinterpret_cast<FXEvent*>(ptr));
|
898
|
+
}
|
899
|
+
}
|
900
|
+
else if(sender->isMemberOf(FXMETACLASS(FXTreeList))){
|
901
|
+
if(type==SEL_COLLAPSED ||
|
902
|
+
type==SEL_EXPANDED ||
|
903
|
+
type==SEL_COMMAND ||
|
904
|
+
type==SEL_CHANGED ||
|
905
|
+
type==SEL_CLICKED ||
|
906
|
+
type==SEL_DOUBLECLICKED ||
|
907
|
+
type==SEL_TRIPLECLICKED ||
|
908
|
+
type==SEL_OPENED ||
|
909
|
+
type==SEL_CLOSED ||
|
910
|
+
type==SEL_SELECTED ||
|
911
|
+
type==SEL_DESELECTED ||
|
912
|
+
type==SEL_INSERTED ||
|
913
|
+
type==SEL_DELETED){
|
914
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXTreeItem *"));
|
915
|
+
}
|
916
|
+
}
|
917
|
+
else if(sender->isMemberOf(FXMETACLASS(FXTreeListBox))){
|
918
|
+
if(type==SEL_CHANGED || type==SEL_COMMAND)
|
919
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("FXTreeItem *"));
|
920
|
+
}
|
921
|
+
#ifdef WITH_FXSCINTILLA
|
922
|
+
else if(sender->isMemberOf(FXMETACLASS(FXScintilla))){
|
923
|
+
if(type==SEL_COMMAND){
|
924
|
+
return FXRbGetRubyObj(ptr,FXRbTypeQuery("SCNotification *"));
|
925
|
+
}
|
926
|
+
}
|
927
|
+
#endif
|
928
|
+
else{
|
929
|
+
FXTRACE((100,"%s:%d: message data passed through as-is\n",__FILE__,__LINE__));
|
930
|
+
return reinterpret_cast<VALUE>(ptr); // pass-through as is
|
931
|
+
}
|
932
|
+
FXTRACE((100,"%s:%d: message data passed through as-is\n",__FILE__,__LINE__));
|
933
|
+
return reinterpret_cast<VALUE>(ptr); // pass-through as is
|
934
|
+
}
|
935
|
+
|
936
|
+
|
937
|
+
/**
|
938
|
+
* When a Ruby instance (e.g. one of your widgets) calls handle() on another
|
939
|
+
* object, e.g.
|
940
|
+
*
|
941
|
+
* def onUpdAnswer(sender, sel, ptr)
|
942
|
+
* if theAnswerIsTwo?
|
943
|
+
* sender.handle(self, FXSEL(SEL_COMMAND,FXWindow::ID_SETVALUE), 2)
|
944
|
+
* else
|
945
|
+
* sender.handle(self, FXSEL(SEL_COMMAND,FXWindow::ID_SETVALUE), 3)
|
946
|
+
* end
|
947
|
+
* return 1
|
948
|
+
* end
|
949
|
+
*
|
950
|
+
* it's usually the case that this will get passed along to the underlying
|
951
|
+
* C++ object. In that case, we need to convert the message data (e.g. the
|
952
|
+
* Fixnums "2" or "3" in the example above) from Ruby objects back into
|
953
|
+
* the appropriate C++ objects. That's what this function is for.
|
954
|
+
*/
|
955
|
+
void* FXRbGetExpectedData(VALUE recv,FXSelector key,VALUE value){
|
956
|
+
void *ptr;
|
957
|
+
static FXint intValue;
|
958
|
+
static FXint intRange[2];
|
959
|
+
static FXdouble realValue;
|
960
|
+
static FXdouble realRange[2];
|
961
|
+
static FXString stringValue;
|
962
|
+
static FXColor colorValue;
|
963
|
+
FXushort type=FXSELTYPE(key);
|
964
|
+
FXushort id=FXSELID(key);
|
965
|
+
|
966
|
+
// Extract the FOX object (the receiver) from this Ruby instance
|
967
|
+
FXObject* obj;
|
968
|
+
Data_Get_Struct(recv,FXObject,obj);
|
969
|
+
|
970
|
+
FXASSERT(type!=SEL_NONE);
|
971
|
+
FXASSERT(type!=SEL_LAST);
|
972
|
+
switch(type){
|
973
|
+
case SEL_KEYPRESS:
|
974
|
+
case SEL_KEYRELEASE:
|
975
|
+
case SEL_LEFTBUTTONPRESS:
|
976
|
+
case SEL_LEFTBUTTONRELEASE:
|
977
|
+
case SEL_MIDDLEBUTTONPRESS:
|
978
|
+
case SEL_MIDDLEBUTTONRELEASE:
|
979
|
+
case SEL_RIGHTBUTTONPRESS:
|
980
|
+
case SEL_RIGHTBUTTONRELEASE:
|
981
|
+
case SEL_MOTION:
|
982
|
+
case SEL_ENTER:
|
983
|
+
case SEL_LEAVE:
|
984
|
+
case SEL_FOCUSIN:
|
985
|
+
case SEL_FOCUSOUT:
|
986
|
+
case SEL_KEYMAP:
|
987
|
+
case SEL_UNGRABBED:
|
988
|
+
case SEL_PAINT:
|
989
|
+
case SEL_CREATE:
|
990
|
+
case SEL_DESTROY:
|
991
|
+
case SEL_UNMAP:
|
992
|
+
case SEL_MAP:
|
993
|
+
case SEL_CONFIGURE:
|
994
|
+
case SEL_SELECTION_LOST:
|
995
|
+
case SEL_SELECTION_GAINED:
|
996
|
+
case SEL_SELECTION_REQUEST:
|
997
|
+
case SEL_RAISED:
|
998
|
+
case SEL_LOWERED:
|
999
|
+
case SEL_MOUSEWHEEL:
|
1000
|
+
case SEL_BEGINDRAG:
|
1001
|
+
case SEL_ENDDRAG:
|
1002
|
+
case SEL_LASSOED:
|
1003
|
+
case SEL_TIMEOUT:
|
1004
|
+
case SEL_CLIPBOARD_LOST:
|
1005
|
+
case SEL_CLIPBOARD_GAINED:
|
1006
|
+
case SEL_CLIPBOARD_REQUEST:
|
1007
|
+
case SEL_CHORE:
|
1008
|
+
case SEL_FOCUS_SELF:
|
1009
|
+
case SEL_FOCUS_RIGHT:
|
1010
|
+
case SEL_FOCUS_LEFT:
|
1011
|
+
case SEL_FOCUS_DOWN:
|
1012
|
+
case SEL_FOCUS_UP:
|
1013
|
+
case SEL_FOCUS_NEXT:
|
1014
|
+
case SEL_FOCUS_PREV:
|
1015
|
+
case SEL_DND_ENTER:
|
1016
|
+
case SEL_DND_LEAVE:
|
1017
|
+
case SEL_DND_DROP:
|
1018
|
+
case SEL_DND_MOTION:
|
1019
|
+
case SEL_DND_REQUEST:
|
1020
|
+
case SEL_PICKED:
|
1021
|
+
SWIG_Ruby_ConvertPtr(value,&ptr,FXRbTypeQuery("FXEvent *"),1);
|
1022
|
+
return ptr;
|
1023
|
+
case SEL_IO_READ:
|
1024
|
+
case SEL_IO_WRITE:
|
1025
|
+
case SEL_IO_EXCEPT:
|
1026
|
+
return 0; // should be an FXInputHandle?
|
1027
|
+
case SEL_SIGNAL:
|
1028
|
+
return reinterpret_cast<void*>(static_cast<long>(NUM2INT(value)));
|
1029
|
+
case SEL_CLOSE:
|
1030
|
+
case SEL_DELETE:
|
1031
|
+
case SEL_MINIMIZE:
|
1032
|
+
case SEL_RESTORE:
|
1033
|
+
case SEL_MAXIMIZE:
|
1034
|
+
case SEL_UPDATE:
|
1035
|
+
case SEL_QUERY_TIP:
|
1036
|
+
case SEL_QUERY_HELP:
|
1037
|
+
return NULL;
|
1038
|
+
case SEL_VERIFY:
|
1039
|
+
return reinterpret_cast<void*>(StringValuePtr(value));
|
1040
|
+
case SEL_CLICKED:
|
1041
|
+
case SEL_DOUBLECLICKED:
|
1042
|
+
case SEL_TRIPLECLICKED:
|
1043
|
+
case SEL_CHANGED:
|
1044
|
+
case SEL_DESELECTED:
|
1045
|
+
case SEL_SELECTED:
|
1046
|
+
case SEL_INSERTED:
|
1047
|
+
case SEL_REPLACED:
|
1048
|
+
case SEL_DELETED:
|
1049
|
+
case SEL_OPENED:
|
1050
|
+
case SEL_CLOSED:
|
1051
|
+
case SEL_EXPANDED:
|
1052
|
+
case SEL_COLLAPSED:
|
1053
|
+
return NULL;
|
1054
|
+
default:
|
1055
|
+
/* Ignore */
|
1056
|
+
break;
|
1057
|
+
}
|
1058
|
+
|
1059
|
+
if(type==SEL_COMMAND){
|
1060
|
+
// Handle FXText-specific messages
|
1061
|
+
if(obj->isMemberOf(FXMETACLASS(FXText))){
|
1062
|
+
switch(id){
|
1063
|
+
case FXText::ID_COPY_SEL:
|
1064
|
+
case FXText::ID_PASTE_SEL:
|
1065
|
+
case FXText::ID_DELETE_SEL:
|
1066
|
+
return NULL;
|
1067
|
+
default:
|
1068
|
+
break;
|
1069
|
+
}
|
1070
|
+
}
|
1071
|
+
|
1072
|
+
// Handle FXTextField-specific message
|
1073
|
+
if(obj->isMemberOf(FXMETACLASS(FXTextField))){
|
1074
|
+
switch(id){
|
1075
|
+
case FXTextField::ID_INSERT_STRING:
|
1076
|
+
return reinterpret_cast<void*>(StringValuePtr(value));;
|
1077
|
+
default:
|
1078
|
+
break;
|
1079
|
+
}
|
1080
|
+
}
|
1081
|
+
|
1082
|
+
// Handle messages applicable to all FXWindow descendants
|
1083
|
+
if(obj->isMemberOf(FXMETACLASS(FXWindow))){
|
1084
|
+
switch(id){
|
1085
|
+
case FXWindow::ID_HIDE:
|
1086
|
+
case FXWindow::ID_SHOW:
|
1087
|
+
case FXWindow::ID_TOGGLESHOWN:
|
1088
|
+
case FXWindow::ID_LOWER:
|
1089
|
+
case FXWindow::ID_RAISE:
|
1090
|
+
case FXWindow::ID_DELETE:
|
1091
|
+
case FXWindow::ID_DISABLE:
|
1092
|
+
case FXWindow::ID_ENABLE:
|
1093
|
+
case FXWindow::ID_UNCHECK:
|
1094
|
+
case FXWindow::ID_CHECK:
|
1095
|
+
case FXWindow::ID_UNKNOWN:
|
1096
|
+
case FXWindow::ID_UPDATE:
|
1097
|
+
case FXWindow::ID_AUTOSCROLL:
|
1098
|
+
case FXWindow::ID_QUERY_MENU:
|
1099
|
+
case FXWindow::ID_HOTKEY:
|
1100
|
+
case FXWindow::ID_ACCEL:
|
1101
|
+
case FXWindow::ID_UNPOST:
|
1102
|
+
case FXWindow::ID_POST:
|
1103
|
+
case FXWindow::ID_MDI_TILEHORIZONTAL:
|
1104
|
+
case FXWindow::ID_MDI_TILEVERTICAL:
|
1105
|
+
case FXWindow::ID_MDI_CASCADE:
|
1106
|
+
case FXWindow::ID_MDI_MAXIMIZE:
|
1107
|
+
case FXWindow::ID_MDI_MINIMIZE:
|
1108
|
+
case FXWindow::ID_MDI_RESTORE:
|
1109
|
+
case FXWindow::ID_MDI_CLOSE:
|
1110
|
+
case FXWindow::ID_MDI_WINDOW:
|
1111
|
+
case FXWindow::ID_MDI_MENUWINDOW:
|
1112
|
+
case FXWindow::ID_MDI_MENUMINIMIZE:
|
1113
|
+
case FXWindow::ID_MDI_MENURESTORE:
|
1114
|
+
case FXWindow::ID_MDI_MENUCLOSE:
|
1115
|
+
case FXWindow::ID_MDI_NEXT:
|
1116
|
+
case FXWindow::ID_MDI_PREV:
|
1117
|
+
return NULL;
|
1118
|
+
case FXWindow::ID_SETVALUE:
|
1119
|
+
if(obj->isMemberOf(FXMETACLASS(FXButton)) ||
|
1120
|
+
obj->isMemberOf(FXMETACLASS(FXCheckButton)) ||
|
1121
|
+
obj->isMemberOf(FXMETACLASS(FXDial)) ||
|
1122
|
+
obj->isMemberOf(FXMETACLASS(FXRadioButton)) ||
|
1123
|
+
obj->isMemberOf(FXMETACLASS(FXShutter)) ||
|
1124
|
+
obj->isMemberOf(FXMETACLASS(FXSpinner)) ||
|
1125
|
+
obj->isMemberOf(FXMETACLASS(FXTabBar)) ||
|
1126
|
+
obj->isMemberOf(FXMETACLASS(FXToggleButton)) ||
|
1127
|
+
obj->isMemberOf(FXMETACLASS(FXScrollBar)) ||
|
1128
|
+
obj->isMemberOf(FXMETACLASS(FXSlider)) ||
|
1129
|
+
obj->isMemberOf(FXMETACLASS(FXSwitcher))){
|
1130
|
+
return reinterpret_cast<void*>(static_cast<long>(NUM2INT(value)));
|
1131
|
+
}
|
1132
|
+
else if(obj->isMemberOf(FXMETACLASS(FXColorSelector)) ||
|
1133
|
+
obj->isMemberOf(FXMETACLASS(FXColorWell))){
|
1134
|
+
return reinterpret_cast<void*>(static_cast<unsigned long>(NUM2UINT(value)));
|
1135
|
+
}
|
1136
|
+
else if(obj->isMemberOf(FXMETACLASS(FXProgressBar))){
|
1137
|
+
return reinterpret_cast<void*>(static_cast<unsigned long>(NUM2UINT(value)));
|
1138
|
+
}
|
1139
|
+
else if(obj->isMemberOf(FXMETACLASS(FXComboBox)) ||
|
1140
|
+
obj->isMemberOf(FXMETACLASS(FXTextField)) ||
|
1141
|
+
obj->isMemberOf(FXMETACLASS(FXDirBox)) ||
|
1142
|
+
obj->isMemberOf(FXMETACLASS(FXDirList)) ||
|
1143
|
+
obj->isMemberOf(FXMETACLASS(FXDriveBox)) ||
|
1144
|
+
obj->isMemberOf(FXMETACLASS(FXFileList))){
|
1145
|
+
return reinterpret_cast<void*>(StringValuePtr(value));
|
1146
|
+
}
|
1147
|
+
else if(obj->isMemberOf(FXMETACLASS(FXMenuCheck))){
|
1148
|
+
return reinterpret_cast<void*>(static_cast<FXuval>(RTEST(value) ? 1 : 0));
|
1149
|
+
}
|
1150
|
+
else if(obj->isMemberOf(FXMETACLASS(FXMenuRadio))){
|
1151
|
+
return reinterpret_cast<void*>(static_cast<FXuval>(RTEST(value) ? 1 : 0));
|
1152
|
+
}
|
1153
|
+
else if(obj->isMemberOf(FXMETACLASS(FXMenuCommand))){
|
1154
|
+
return reinterpret_cast<void*>(static_cast<FXuval>(RTEST(value) ? 1 : 0));
|
1155
|
+
}
|
1156
|
+
return NULL;
|
1157
|
+
case FXWindow::ID_HSCROLLED:
|
1158
|
+
case FXWindow::ID_VSCROLLED:
|
1159
|
+
return reinterpret_cast<void*>(static_cast<unsigned long>(NUM2UINT(value)));
|
1160
|
+
case FXWindow::ID_SETINTVALUE:
|
1161
|
+
if(obj->isMemberOf(FXMETACLASS(FXColorWell))){
|
1162
|
+
colorValue=NUM2UINT(value);
|
1163
|
+
return reinterpret_cast<void*>(&colorValue);
|
1164
|
+
}
|
1165
|
+
else{
|
1166
|
+
intValue=NUM2INT(value);
|
1167
|
+
return reinterpret_cast<void*>(&intValue);
|
1168
|
+
}
|
1169
|
+
case FXWindow::ID_SETREALVALUE:
|
1170
|
+
realValue=NUM2DBL(value);
|
1171
|
+
return reinterpret_cast<void*>(&realValue);
|
1172
|
+
case FXWindow::ID_SETSTRINGVALUE:
|
1173
|
+
stringValue=FXString(StringValuePtr(value));
|
1174
|
+
return reinterpret_cast<void*>(&stringValue);
|
1175
|
+
case FXWindow::ID_SETINTRANGE:
|
1176
|
+
intRange[0]=NUM2INT(rb_ary_entry(value,0));
|
1177
|
+
intRange[1]=NUM2INT(rb_ary_entry(value,1));
|
1178
|
+
return reinterpret_cast<void*>(intRange);
|
1179
|
+
case FXWindow::ID_SETREALRANGE:
|
1180
|
+
realRange[0]=NUM2DBL(rb_ary_entry(value,0));
|
1181
|
+
realRange[1]=NUM2DBL(rb_ary_entry(value,1));
|
1182
|
+
return reinterpret_cast<void*>(realRange);
|
1183
|
+
case FXWindow::ID_GETINTVALUE:
|
1184
|
+
case FXWindow::ID_GETREALVALUE:
|
1185
|
+
case FXWindow::ID_GETSTRINGVALUE:
|
1186
|
+
case FXWindow::ID_GETINTRANGE:
|
1187
|
+
case FXWindow::ID_GETREALRANGE:
|
1188
|
+
return NULL;
|
1189
|
+
default:
|
1190
|
+
// Pass this data along as-is
|
1191
|
+
break;
|
1192
|
+
}
|
1193
|
+
}
|
1194
|
+
}
|
1195
|
+
|
1196
|
+
if(type==SEL_CHANGED){
|
1197
|
+
if(obj->isMemberOf(FXMETACLASS(FXPicker))){
|
1198
|
+
SWIG_Ruby_ConvertPtr(value,&ptr,FXRbTypeQuery("FXPoint *"),1);
|
1199
|
+
return ptr;
|
1200
|
+
}
|
1201
|
+
return 0;
|
1202
|
+
}
|
1203
|
+
|
1204
|
+
if(type==SEL_DRAGGED){
|
1205
|
+
SWIG_Ruby_ConvertPtr(value,&ptr,FXRbTypeQuery("FXEvent *"),1);
|
1206
|
+
return ptr;
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
// Pass through as-is
|
1210
|
+
return reinterpret_cast<void*>(value);
|
1211
|
+
}
|
1212
|
+
|
1213
|
+
|
1214
|
+
static ID id_assocs;
|
1215
|
+
|
1216
|
+
|
1217
|
+
/**
|
1218
|
+
* Look up the name of the message handler function for this
|
1219
|
+
* receiver and message (type, id) combination and return it;
|
1220
|
+
* or return zero if the designated receiver doesn't handle this
|
1221
|
+
* message.
|
1222
|
+
*/
|
1223
|
+
ID FXRbLookupHandler(FXObject* recv,FXSelector key){
|
1224
|
+
FXTRACE((100,"FXRbLookupHandler(recv=%p(%s),FXSEL(%d,%d))\n",recv,recv->getClassName(),FXSELTYPE(key),FXSELID(key)));
|
1225
|
+
ID id=0;
|
1226
|
+
VALUE rubyObj=to_ruby(recv);
|
1227
|
+
FXASSERT((recv==0 && rubyObj==Qnil) || (recv!=0 && rubyObj!=Qnil));
|
1228
|
+
if(rb_ivar_defined(rubyObj,id_assocs)==Qtrue){
|
1229
|
+
VALUE assocs=rb_ivar_get(rubyObj,id_assocs);
|
1230
|
+
VALUE entry;
|
1231
|
+
FXSelector keylo,keyhi;
|
1232
|
+
for(long i=0;i<RARRAY_LEN(assocs);i++){
|
1233
|
+
entry=rb_ary_entry(assocs,i);
|
1234
|
+
keylo=NUM2UINT(rb_ary_entry(entry,0));
|
1235
|
+
keyhi=NUM2UINT(rb_ary_entry(entry,1));
|
1236
|
+
if(keylo<=key && key<=keyhi){
|
1237
|
+
id=SYM2ID(rb_ary_entry(entry,2));
|
1238
|
+
FXASSERT(id!=0);
|
1239
|
+
break;
|
1240
|
+
}
|
1241
|
+
}
|
1242
|
+
}
|
1243
|
+
return id;
|
1244
|
+
}
|
1245
|
+
|
1246
|
+
|
1247
|
+
struct FXRbHandleArgs {
|
1248
|
+
VALUE recv;
|
1249
|
+
VALUE id;
|
1250
|
+
int nargs;
|
1251
|
+
VALUE sender;
|
1252
|
+
VALUE key;
|
1253
|
+
VALUE data;
|
1254
|
+
};
|
1255
|
+
|
1256
|
+
|
1257
|
+
static VALUE handle_body(VALUE args){
|
1258
|
+
FXRbHandleArgs* hArgs=reinterpret_cast<FXRbHandleArgs*>(args);
|
1259
|
+
FXASSERT(hArgs!=0);
|
1260
|
+
return rb_funcall(hArgs->recv,hArgs->id,hArgs->nargs,hArgs->sender,hArgs->key,hArgs->data);
|
1261
|
+
}
|
1262
|
+
|
1263
|
+
|
1264
|
+
static ID id_backtrace;
|
1265
|
+
|
1266
|
+
|
1267
|
+
static VALUE handle_rescue(VALUE args,VALUE error){
|
1268
|
+
VALUE info=rb_gv_get("$!");
|
1269
|
+
VALUE errat=rb_funcall(info,id_backtrace,0);
|
1270
|
+
VALUE mesg=RARRAY_PTR(errat)[0];
|
1271
|
+
fprintf(stderr,"%s: %s (%s)\n",
|
1272
|
+
StringValuePtr(mesg),
|
1273
|
+
RSTRING_PTR(rb_obj_as_string(info)),
|
1274
|
+
rb_class2name(CLASS_OF(info)));
|
1275
|
+
for(int i=1;i<RARRAY_LEN(errat);i++){
|
1276
|
+
if(TYPE(RARRAY_PTR(errat)[i])==T_STRING){
|
1277
|
+
fprintf(stderr,"\tfrom %s\n",StringValuePtr(RARRAY_PTR(errat)[i]));
|
1278
|
+
}
|
1279
|
+
}
|
1280
|
+
return Qnil;
|
1281
|
+
}
|
1282
|
+
|
1283
|
+
|
1284
|
+
// Call the designated function and return its result (which should be a long).
|
1285
|
+
long FXRbHandleMessage(FXObject* recv,ID func,FXObject* sender,FXSelector key,void* ptr){
|
1286
|
+
FXRbHandleArgs hArgs;
|
1287
|
+
hArgs.recv=to_ruby(recv);
|
1288
|
+
hArgs.sender=to_ruby(sender);
|
1289
|
+
hArgs.key=to_ruby(key);
|
1290
|
+
hArgs.data=FXRbConvertMessageData(sender,recv,key,ptr);
|
1291
|
+
hArgs.id=func;
|
1292
|
+
hArgs.nargs=3;
|
1293
|
+
VALUE retval;
|
1294
|
+
|
1295
|
+
FXTRACE((100,"FXRbHandleMessage(recv=%p(%s),FXSEL(%s,%d)\n",recv,recv->getClassName(),FXDebugTarget::messageTypeName[FXSELTYPE(key)],FXSELID(key)));
|
1296
|
+
|
1297
|
+
if(FXRbCatchExceptions){
|
1298
|
+
retval=rb_rescue2((VALUE(*)(ANYARGS)) handle_body, reinterpret_cast<VALUE>(&hArgs),
|
1299
|
+
(VALUE(*)(ANYARGS)) handle_rescue, Qnil,
|
1300
|
+
rb_eStandardError, rb_eNameError, 0);
|
1301
|
+
}
|
1302
|
+
else{
|
1303
|
+
retval=handle_body(reinterpret_cast<VALUE>(&hArgs));
|
1304
|
+
}
|
1305
|
+
|
1306
|
+
/**
|
1307
|
+
* Process the return value. For boolean return values, convert "true"
|
1308
|
+
* to 1 and "false" to zero. For numeric types, convert it to a long value
|
1309
|
+
* but trap the result to either 0 or 1 since these are usually what
|
1310
|
+
* FOX is looking for. For any other type result (including nil) return 1.
|
1311
|
+
* Thanks to Ted Meng for this suggestion.
|
1312
|
+
*/
|
1313
|
+
long lresult;
|
1314
|
+
switch(TYPE(retval)){
|
1315
|
+
case T_TRUE:
|
1316
|
+
lresult=1;
|
1317
|
+
break;
|
1318
|
+
case T_FALSE:
|
1319
|
+
lresult=0;
|
1320
|
+
break;
|
1321
|
+
case T_BIGNUM:
|
1322
|
+
lresult=1;
|
1323
|
+
break;
|
1324
|
+
case T_FIXNUM:
|
1325
|
+
case T_FLOAT:
|
1326
|
+
lresult=(NUM2LONG(retval) == 0) ? 0 : 1; // trap any numeric result to either 0 or 1
|
1327
|
+
break;
|
1328
|
+
default:
|
1329
|
+
lresult=1;
|
1330
|
+
}
|
1331
|
+
return lresult;
|
1332
|
+
}
|
1333
|
+
|
1334
|
+
//----------------------------------------------------------------------
|
1335
|
+
|
1336
|
+
static ID id_begin;
|
1337
|
+
static ID id_end;
|
1338
|
+
static ID id_exclude_endp;
|
1339
|
+
|
1340
|
+
void FXRbRange2LoHi(VALUE range,FXint& lo,FXint& hi){
|
1341
|
+
if(Qtrue!=rb_obj_is_instance_of(range,rb_cRange)){
|
1342
|
+
rb_raise(rb_eTypeError,"wrong argument type %s (expected %s)",rb_class2name(CLASS_OF(range)),rb_class2name(rb_cRange));
|
1343
|
+
}
|
1344
|
+
else{
|
1345
|
+
VALUE beg=rb_funcall(range,id_begin,0,NULL);
|
1346
|
+
VALUE end=rb_funcall(range,id_end,0,NULL);
|
1347
|
+
VALUE excl=rb_funcall(range,id_exclude_endp,0,NULL);
|
1348
|
+
lo=NUM2INT(beg);
|
1349
|
+
hi=NUM2INT(end);
|
1350
|
+
if(excl==Qtrue){
|
1351
|
+
hi--;
|
1352
|
+
}
|
1353
|
+
}
|
1354
|
+
}
|
1355
|
+
|
1356
|
+
void FXRbRange2LoHi(VALUE range,FXdouble& lo,FXdouble& hi){
|
1357
|
+
if(Qtrue!=rb_obj_is_instance_of(range,rb_cRange)){
|
1358
|
+
rb_raise(rb_eTypeError,"wrong argument type %s (expected %s)",rb_class2name(CLASS_OF(range)),rb_class2name(rb_cRange));
|
1359
|
+
}
|
1360
|
+
else{
|
1361
|
+
VALUE beg=rb_funcall(range,id_begin,0,NULL);
|
1362
|
+
VALUE end=rb_funcall(range,id_end,0,NULL);
|
1363
|
+
VALUE excl=rb_funcall(range,id_exclude_endp,0,NULL);
|
1364
|
+
lo=NUM2DBL(beg);
|
1365
|
+
hi=NUM2DBL(end);
|
1366
|
+
if(excl==Qtrue){
|
1367
|
+
hi--;
|
1368
|
+
}
|
1369
|
+
}
|
1370
|
+
}
|
1371
|
+
|
1372
|
+
//----------------------------------------------------------------------
|
1373
|
+
|
1374
|
+
void FXRbCallVoidMethod(FXObject* recv, ID func) {
|
1375
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1376
|
+
FXASSERT(!NIL_P(obj));
|
1377
|
+
FXASSERT(!FXRbIsInGC(recv));
|
1378
|
+
rb_funcall(obj,func,0,NULL);
|
1379
|
+
}
|
1380
|
+
|
1381
|
+
void FXRbCallVoidMethod(FXDC* recv,ID func) {
|
1382
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1383
|
+
FXASSERT(!NIL_P(obj));
|
1384
|
+
rb_funcall(obj,func,0,NULL);
|
1385
|
+
}
|
1386
|
+
|
1387
|
+
//----------------------------------------------------------------------
|
1388
|
+
|
1389
|
+
bool FXRbCallBoolMethod(const FXObject* recv,ID func){
|
1390
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1391
|
+
FXASSERT(!NIL_P(obj));
|
1392
|
+
VALUE v=rb_funcall(obj,func,0,NULL);
|
1393
|
+
return (v==Qtrue);
|
1394
|
+
}
|
1395
|
+
|
1396
|
+
//----------------------------------------------------------------------
|
1397
|
+
|
1398
|
+
// Call function with "FXint" return value
|
1399
|
+
FXint FXRbCallIntMethod(const FXObject* recv,ID func){
|
1400
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1401
|
+
FXASSERT(!NIL_P(obj));
|
1402
|
+
VALUE result=rb_funcall(obj,func,0,NULL);
|
1403
|
+
return static_cast<FXint>(NUM2INT(result));
|
1404
|
+
}
|
1405
|
+
|
1406
|
+
//----------------------------------------------------------------------
|
1407
|
+
|
1408
|
+
// Call function with "FXGLObject*" return value
|
1409
|
+
FXGLObject* FXRbCallGLObjectMethod(FXGLObject* recv,ID func){
|
1410
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1411
|
+
FXASSERT(!NIL_P(obj));
|
1412
|
+
VALUE result=rb_funcall(obj,func,0,NULL);
|
1413
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXGLObject*>(DATA_PTR(result));
|
1414
|
+
}
|
1415
|
+
|
1416
|
+
FXGLObject* FXRbCallGLObjectMethod(FXGLViewer* recv,ID func,FXint x,FXint y){
|
1417
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1418
|
+
FXASSERT(!NIL_P(obj));
|
1419
|
+
VALUE result=rb_funcall(obj,func,2,INT2NUM(x),INT2NUM(y));
|
1420
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXGLObject*>(DATA_PTR(result));
|
1421
|
+
}
|
1422
|
+
|
1423
|
+
FXGLObject* FXRbCallGLObjectMethod(FXGLObject* recv,ID func,FXuint* path,FXint n){
|
1424
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1425
|
+
FXASSERT(!NIL_P(obj));
|
1426
|
+
VALUE result=rb_funcall(obj,func,1,FXRbMakeArray(path,n));
|
1427
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXGLObject*>(DATA_PTR(result));
|
1428
|
+
}
|
1429
|
+
|
1430
|
+
//----------------------------------------------------------------------
|
1431
|
+
|
1432
|
+
// Call function with "FXGLObject**" return value
|
1433
|
+
FXGLObject** FXRbCallGLObjectArrayMethod(FXGLViewer* recv,ID func,FXint x,FXint y,FXint w,FXint h){
|
1434
|
+
FXGLObject** objects=NULL;
|
1435
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1436
|
+
FXASSERT(!NIL_P(obj));
|
1437
|
+
VALUE result=rb_funcall(obj,func,4,INT2NUM(x),INT2NUM(y),INT2NUM(w),INT2NUM(h));
|
1438
|
+
if(!NIL_P(result)){
|
1439
|
+
Check_Type(result,T_ARRAY);
|
1440
|
+
if(FXMALLOC(&objects,FXGLObject*,RARRAY_LEN(result)+1)){
|
1441
|
+
for(long i=0; i<RARRAY_LEN(result); i++){
|
1442
|
+
objects[i]=reinterpret_cast<FXGLObject*>(DATA_PTR(rb_ary_entry(result,i)));
|
1443
|
+
}
|
1444
|
+
objects[RARRAY_LEN(result)]=0;
|
1445
|
+
}
|
1446
|
+
}
|
1447
|
+
return objects; // caller must free this
|
1448
|
+
}
|
1449
|
+
|
1450
|
+
//----------------------------------------------------------------------
|
1451
|
+
|
1452
|
+
FXTableItem* FXRbCallTableItemMethod(FXTable* recv,ID func,const FXString& text,FXIcon* icon,void* ptr){
|
1453
|
+
VALUE itemData=(ptr==0)?Qnil:reinterpret_cast<VALUE>(ptr);
|
1454
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1455
|
+
FXASSERT(!NIL_P(obj));
|
1456
|
+
VALUE result=rb_funcall(obj,func,3,to_ruby(text),to_ruby(icon),itemData);
|
1457
|
+
return NIL_P(result)?0:reinterpret_cast<FXTableItem*>(DATA_PTR(result));
|
1458
|
+
}
|
1459
|
+
|
1460
|
+
FXTableItem* FXRbCallTableItemMethod(FXTable* recv,ID func,FXint row,FXint col,FXbool notify){
|
1461
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1462
|
+
FXASSERT(!NIL_P(obj));
|
1463
|
+
VALUE result=rb_funcall(obj,func,3,to_ruby(row),to_ruby(col),to_ruby(notify));
|
1464
|
+
return NIL_P(result)?0:reinterpret_cast<FXTableItem*>(DATA_PTR(result));
|
1465
|
+
}
|
1466
|
+
|
1467
|
+
//----------------------------------------------------------------------
|
1468
|
+
|
1469
|
+
FXTreeItem* FXRbCallTreeItemMethod(const FXTreeList* recv,ID func,FXint x,FXint y){
|
1470
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1471
|
+
FXASSERT(!NIL_P(obj));
|
1472
|
+
VALUE result=rb_funcall(obj,func,2,INT2NUM(x),INT2NUM(y));
|
1473
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXTreeItem*>(DATA_PTR(result));
|
1474
|
+
}
|
1475
|
+
|
1476
|
+
//----------------------------------------------------------------------
|
1477
|
+
|
1478
|
+
FXFoldingItem* FXRbCallFoldingItemMethod(const FXFoldingList* recv,ID func,FXint x,FXint y){
|
1479
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1480
|
+
FXASSERT(!NIL_P(obj));
|
1481
|
+
VALUE result=rb_funcall(obj,func,2,INT2NUM(x),INT2NUM(y));
|
1482
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXFoldingItem*>(DATA_PTR(result));
|
1483
|
+
}
|
1484
|
+
|
1485
|
+
//----------------------------------------------------------------------
|
1486
|
+
|
1487
|
+
FXFileAssoc* FXRbCallFileAssocMethod(const FXFileDict* recv,ID func,const FXchar* pathname){
|
1488
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1489
|
+
FXASSERT(!NIL_P(obj));
|
1490
|
+
VALUE result=rb_funcall(obj,func,1,to_ruby(pathname));
|
1491
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXFileAssoc*>(DATA_PTR(result));
|
1492
|
+
}
|
1493
|
+
|
1494
|
+
//----------------------------------------------------------------------
|
1495
|
+
|
1496
|
+
FXIcon* FXRbCallIconMethod(const FXTableItem* recv,ID func){
|
1497
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1498
|
+
FXASSERT(!NIL_P(obj));
|
1499
|
+
if(!NIL_P(obj)){
|
1500
|
+
VALUE result=rb_funcall(obj,func,0,NULL);
|
1501
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXIcon*>(DATA_PTR(result));
|
1502
|
+
}
|
1503
|
+
else{
|
1504
|
+
return 0;
|
1505
|
+
}
|
1506
|
+
}
|
1507
|
+
|
1508
|
+
//----------------------------------------------------------------------
|
1509
|
+
|
1510
|
+
FXWindow* FXRbCallWindowMethod(const FXTableItem* recv,ID func,FXTable* table){
|
1511
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1512
|
+
FXASSERT(!NIL_P(obj));
|
1513
|
+
VALUE result=rb_funcall(obj,func,1,to_ruby(table));
|
1514
|
+
return NIL_P(result) ? 0 : reinterpret_cast<FXWindow*>(DATA_PTR(result));
|
1515
|
+
}
|
1516
|
+
|
1517
|
+
//----------------------------------------------------------------------
|
1518
|
+
|
1519
|
+
// Call function with "FXRange" return value
|
1520
|
+
FXRangef FXRbCallRangeMethod(FXObject* recv,ID func){
|
1521
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1522
|
+
FXASSERT(!NIL_P(obj));
|
1523
|
+
VALUE result=rb_funcall(obj,func,0,NULL);
|
1524
|
+
return *reinterpret_cast<FXRangef*>(DATA_PTR(result));
|
1525
|
+
}
|
1526
|
+
|
1527
|
+
//----------------------------------------------------------------------
|
1528
|
+
|
1529
|
+
// Call functions with FXString return value
|
1530
|
+
FXString FXRbCallStringMethod(const FXObject* recv, ID func){
|
1531
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1532
|
+
FXASSERT(!NIL_P(obj));
|
1533
|
+
VALUE result=rb_funcall(obj,func,0,NULL);
|
1534
|
+
return FXString(StringValuePtr(result));
|
1535
|
+
}
|
1536
|
+
|
1537
|
+
//----------------------------------------------------------------------
|
1538
|
+
|
1539
|
+
// Call functions with const FXchar* return value
|
1540
|
+
const FXchar* FXRbCallCStringMethod(const FXObject* recv, ID func, const FXchar* message, const FXchar* hint){
|
1541
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1542
|
+
FXASSERT(!NIL_P(obj));
|
1543
|
+
VALUE result=rb_funcall(obj,func,2,to_ruby(message),to_ruby(hint));
|
1544
|
+
return NIL_P(result) ? 0 : StringValuePtr(result);
|
1545
|
+
}
|
1546
|
+
|
1547
|
+
// Call functions with const FXchar* return value
|
1548
|
+
const FXchar* FXRbCallCStringMethod(const FXObject* recv, ID func, const FXchar* context, const FXchar* message, const FXchar* hint){
|
1549
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1550
|
+
FXASSERT(!NIL_P(obj));
|
1551
|
+
VALUE result=rb_funcall(obj,func,3,to_ruby(context),to_ruby(message),to_ruby(hint));
|
1552
|
+
return NIL_P(result) ? 0 : StringValuePtr(result);
|
1553
|
+
}
|
1554
|
+
//----------------------------------------------------------------------
|
1555
|
+
|
1556
|
+
// Call functions with FXwchar return value
|
1557
|
+
FXwchar FXRbCallWCharMethod(const FXObject* recv, ID func){
|
1558
|
+
VALUE obj=FXRbGetRubyObj(recv,false);
|
1559
|
+
FXASSERT(!NIL_P(obj));
|
1560
|
+
VALUE result=rb_funcall(obj,func,0,NULL);
|
1561
|
+
return static_cast<FXwchar>(NUM2ULONG(result));
|
1562
|
+
}
|
1563
|
+
|
1564
|
+
//----------------------------------------------------------------------
|
1565
|
+
|
1566
|
+
// Special destructors to handle order dependencies
|
1567
|
+
FXRbMenuCommand::~FXRbMenuCommand(){
|
1568
|
+
FXAccelTable *table;
|
1569
|
+
FXWindow *owner;
|
1570
|
+
if(acckey && !FXRbIsInGC(this)){
|
1571
|
+
owner=getShell()->getOwner();
|
1572
|
+
if(owner){
|
1573
|
+
table=owner->getAccelTable();
|
1574
|
+
if(table && table!=reinterpret_cast<FXAccelTable*>(-1)){
|
1575
|
+
table->removeAccel(acckey);
|
1576
|
+
}
|
1577
|
+
}
|
1578
|
+
}
|
1579
|
+
acckey=(FXHotKey)NULL;
|
1580
|
+
FXRbUnregisterRubyObj(this);
|
1581
|
+
}
|
1582
|
+
|
1583
|
+
FXRbMenuCheck::~FXRbMenuCheck(){
|
1584
|
+
FXAccelTable *table;
|
1585
|
+
FXWindow *owner;
|
1586
|
+
if(acckey && !FXRbIsInGC(this)){
|
1587
|
+
owner=getShell()->getOwner();
|
1588
|
+
if(owner){
|
1589
|
+
table=owner->getAccelTable();
|
1590
|
+
if(table && table!=reinterpret_cast<FXAccelTable*>(-1)){
|
1591
|
+
table->removeAccel(acckey);
|
1592
|
+
}
|
1593
|
+
}
|
1594
|
+
}
|
1595
|
+
acckey=(FXHotKey)NULL;
|
1596
|
+
FXRbUnregisterRubyObj(this);
|
1597
|
+
}
|
1598
|
+
|
1599
|
+
FXRbMenuRadio::~FXRbMenuRadio(){
|
1600
|
+
FXAccelTable *table;
|
1601
|
+
FXWindow *owner;
|
1602
|
+
if(acckey && !FXRbIsInGC(this)){
|
1603
|
+
owner=getShell()->getOwner();
|
1604
|
+
if(owner){
|
1605
|
+
table=owner->getAccelTable();
|
1606
|
+
if(table && table!=reinterpret_cast<FXAccelTable*>(-1)){
|
1607
|
+
table->removeAccel(acckey);
|
1608
|
+
}
|
1609
|
+
}
|
1610
|
+
}
|
1611
|
+
acckey=(FXHotKey)NULL;
|
1612
|
+
FXRbUnregisterRubyObj(this);
|
1613
|
+
}
|
1614
|
+
|
1615
|
+
//----------------------------------------------------------------------
|
1616
|
+
|
1617
|
+
// Visit all of the items between fm and to (inclusive), plus their
|
1618
|
+
// child items, and add to the items list
|
1619
|
+
void FXRbTreeList::enumerateItem(FXTreeItem* item,FXObjectListOf<FXTreeItem>& items){
|
1620
|
+
// Add this item to the list
|
1621
|
+
items.append(item);
|
1622
|
+
|
1623
|
+
// Add this item's children
|
1624
|
+
FXRbTreeList::enumerateItems(item->getFirst(),item->getLast(),items);
|
1625
|
+
}
|
1626
|
+
|
1627
|
+
|
1628
|
+
// Visit all of the items between fm and to (inclusive), plus their
|
1629
|
+
// child items, and add to the items list
|
1630
|
+
void FXRbTreeList::enumerateItems(FXTreeItem* fm,FXTreeItem* to,FXObjectListOf<FXTreeItem>& items){
|
1631
|
+
register FXTreeItem *item;
|
1632
|
+
if(fm && to){
|
1633
|
+
do{
|
1634
|
+
item=fm;
|
1635
|
+
fm=fm->getNext();
|
1636
|
+
FXRbTreeList::enumerateItem(item,items);
|
1637
|
+
}
|
1638
|
+
while(item!=to);
|
1639
|
+
}
|
1640
|
+
}
|
1641
|
+
|
1642
|
+
//----------------------------------------------------------------------
|
1643
|
+
|
1644
|
+
/**
|
1645
|
+
* Visit all of the items between fm and to (inclusive), plus their
|
1646
|
+
* child items, and add to the items list.
|
1647
|
+
*/
|
1648
|
+
void FXRbFoldingList::enumerateItem(FXFoldingItem* item,FXObjectListOf<FXFoldingItem>& items){
|
1649
|
+
// Add this item to the list
|
1650
|
+
items.append(item);
|
1651
|
+
|
1652
|
+
// Add this item's children
|
1653
|
+
FXRbFoldingList::enumerateItems(item->getFirst(),item->getLast(),items);
|
1654
|
+
}
|
1655
|
+
|
1656
|
+
|
1657
|
+
/**
|
1658
|
+
* Visit all of the items between fm and to (inclusive), plus their
|
1659
|
+
* child items, and add to the items list.
|
1660
|
+
*/
|
1661
|
+
void FXRbFoldingList::enumerateItems(FXFoldingItem* fm,FXFoldingItem* to,FXObjectListOf<FXFoldingItem>& items){
|
1662
|
+
register FXFoldingItem *item;
|
1663
|
+
if(fm && to){
|
1664
|
+
do{
|
1665
|
+
item=fm;
|
1666
|
+
fm=fm->getNext();
|
1667
|
+
FXRbFoldingList::enumerateItem(item,items);
|
1668
|
+
}
|
1669
|
+
while(item!=to);
|
1670
|
+
}
|
1671
|
+
}
|
1672
|
+
|
1673
|
+
|
1674
|
+
//----------------------------------------------------------------------
|
1675
|
+
|
1676
|
+
static ID id_cmp;
|
1677
|
+
|
1678
|
+
// Sort function stand-in for FXComboBox
|
1679
|
+
FXint FXRbComboBox::sortFunc(const FXListItem* a,const FXListItem* b){
|
1680
|
+
VALUE itemA = FXRbGetRubyObj(const_cast<FXListItem*>(a), "FXListItem *");
|
1681
|
+
VALUE itemB = FXRbGetRubyObj(const_cast<FXListItem*>(b), "FXListItem *");
|
1682
|
+
VALUE result=rb_funcall(itemA,id_cmp,1,itemB);
|
1683
|
+
return static_cast<FXint>(NUM2INT(result));
|
1684
|
+
}
|
1685
|
+
|
1686
|
+
|
1687
|
+
// Sort function stand-in for FXFoldingList
|
1688
|
+
FXint FXRbFoldingList::sortFunc(const FXFoldingItem* a,const FXFoldingItem* b){
|
1689
|
+
VALUE itemA = FXRbGetRubyObj(const_cast<FXFoldingItem*>(a), "FXFoldingItem *");
|
1690
|
+
VALUE itemB = FXRbGetRubyObj(const_cast<FXFoldingItem*>(b), "FXFoldingItem *");
|
1691
|
+
VALUE result=rb_funcall(itemA,id_cmp,1,itemB);
|
1692
|
+
return static_cast<FXint>(NUM2INT(result));
|
1693
|
+
}
|
1694
|
+
|
1695
|
+
|
1696
|
+
// Sort function stand-in for FXIconList
|
1697
|
+
FXint FXRbIconList::sortFunc(const FXIconItem* a,const FXIconItem* b){
|
1698
|
+
VALUE itemA = FXRbGetRubyObj(const_cast<FXIconItem*>(a), "FXIconItem *");
|
1699
|
+
VALUE itemB = FXRbGetRubyObj(const_cast<FXIconItem*>(b), "FXIconItem *");
|
1700
|
+
VALUE result = rb_funcall(itemA,id_cmp,1,itemB);
|
1701
|
+
return static_cast<FXint>(NUM2INT(result));
|
1702
|
+
}
|
1703
|
+
|
1704
|
+
|
1705
|
+
// Sort function stand-in for FXList
|
1706
|
+
FXint FXRbList::sortFunc(const FXListItem* a,const FXListItem* b){
|
1707
|
+
VALUE itemA = FXRbGetRubyObj(const_cast<FXListItem*>(a), "FXListItem *");
|
1708
|
+
VALUE itemB = FXRbGetRubyObj(const_cast<FXListItem*>(b), "FXListItem *");
|
1709
|
+
VALUE result=rb_funcall(itemA,id_cmp,1,itemB);
|
1710
|
+
return static_cast<FXint>(NUM2INT(result));
|
1711
|
+
}
|
1712
|
+
|
1713
|
+
|
1714
|
+
// Sort function stand-in for FXListBox
|
1715
|
+
FXint FXRbListBox::sortFunc(const FXListItem* a,const FXListItem* b){
|
1716
|
+
VALUE itemA = FXRbGetRubyObj(const_cast<FXListItem*>(a), "FXListItem *");
|
1717
|
+
VALUE itemB = FXRbGetRubyObj(const_cast<FXListItem*>(b), "FXListItem *");
|
1718
|
+
VALUE result=rb_funcall(itemA,id_cmp,1,itemB);
|
1719
|
+
return static_cast<FXint>(NUM2INT(result));
|
1720
|
+
}
|
1721
|
+
|
1722
|
+
|
1723
|
+
// Sort function stand-in for FXTreeList
|
1724
|
+
FXint FXRbTreeList::sortFunc(const FXTreeItem* a,const FXTreeItem* b){
|
1725
|
+
VALUE itemA = FXRbGetRubyObj(const_cast<FXTreeItem*>(a), "FXTreeItem *");
|
1726
|
+
VALUE itemB = FXRbGetRubyObj(const_cast<FXTreeItem*>(b), "FXTreeItem *");
|
1727
|
+
VALUE result=rb_funcall(itemA,id_cmp,1,itemB);
|
1728
|
+
return static_cast<FXint>(NUM2INT(result));
|
1729
|
+
}
|
1730
|
+
|
1731
|
+
|
1732
|
+
// Feedback buffer sort routine stand-in for FXGLViewer
|
1733
|
+
FXbool FXRbGLViewer::sortProc(FXfloat*& buffer,FXint& used,FXint& size){
|
1734
|
+
return TRUE;
|
1735
|
+
}
|
1736
|
+
|
1737
|
+
//----------------------------------------------------------------------
|
1738
|
+
|
1739
|
+
// Copied from the Ruby 1.8.6 sources (signal.c)
|
1740
|
+
static struct signals {
|
1741
|
+
const char *signm;
|
1742
|
+
int signo;
|
1743
|
+
} siglist [] = {
|
1744
|
+
{"EXIT", 0},
|
1745
|
+
#ifdef SIGHUP
|
1746
|
+
{"HUP", SIGHUP},
|
1747
|
+
#endif
|
1748
|
+
{"INT", SIGINT},
|
1749
|
+
#ifdef SIGQUIT
|
1750
|
+
{"QUIT", SIGQUIT},
|
1751
|
+
#endif
|
1752
|
+
#ifdef SIGILL
|
1753
|
+
{"ILL", SIGILL},
|
1754
|
+
#endif
|
1755
|
+
#ifdef SIGTRAP
|
1756
|
+
{"TRAP", SIGTRAP},
|
1757
|
+
#endif
|
1758
|
+
#ifdef SIGIOT
|
1759
|
+
{"IOT", SIGIOT},
|
1760
|
+
#endif
|
1761
|
+
#ifdef SIGABRT
|
1762
|
+
{"ABRT", SIGABRT},
|
1763
|
+
#endif
|
1764
|
+
#ifdef SIGEMT
|
1765
|
+
{"EMT", SIGEMT},
|
1766
|
+
#endif
|
1767
|
+
#ifdef SIGFPE
|
1768
|
+
{"FPE", SIGFPE},
|
1769
|
+
#endif
|
1770
|
+
#ifdef SIGKILL
|
1771
|
+
{"KILL", SIGKILL},
|
1772
|
+
#endif
|
1773
|
+
#ifdef SIGBUS
|
1774
|
+
{"BUS", SIGBUS},
|
1775
|
+
#endif
|
1776
|
+
#ifdef SIGSEGV
|
1777
|
+
{"SEGV", SIGSEGV},
|
1778
|
+
#endif
|
1779
|
+
#ifdef SIGSYS
|
1780
|
+
{"SYS", SIGSYS},
|
1781
|
+
#endif
|
1782
|
+
#ifdef SIGPIPE
|
1783
|
+
{"PIPE", SIGPIPE},
|
1784
|
+
#endif
|
1785
|
+
#ifdef SIGALRM
|
1786
|
+
{"ALRM", SIGALRM},
|
1787
|
+
#endif
|
1788
|
+
#ifdef SIGTERM
|
1789
|
+
{"TERM", SIGTERM},
|
1790
|
+
#endif
|
1791
|
+
#ifdef SIGURG
|
1792
|
+
{"URG", SIGURG},
|
1793
|
+
#endif
|
1794
|
+
#ifdef SIGSTOP
|
1795
|
+
{"STOP", SIGSTOP},
|
1796
|
+
#endif
|
1797
|
+
#ifdef SIGTSTP
|
1798
|
+
{"TSTP", SIGTSTP},
|
1799
|
+
#endif
|
1800
|
+
#ifdef SIGCONT
|
1801
|
+
{"CONT", SIGCONT},
|
1802
|
+
#endif
|
1803
|
+
#ifdef SIGCHLD
|
1804
|
+
{"CHLD", SIGCHLD},
|
1805
|
+
#endif
|
1806
|
+
#ifdef SIGCLD
|
1807
|
+
{"CLD", SIGCLD},
|
1808
|
+
#else
|
1809
|
+
# ifdef SIGCHLD
|
1810
|
+
{"CLD", SIGCHLD},
|
1811
|
+
# endif
|
1812
|
+
#endif
|
1813
|
+
#ifdef SIGTTIN
|
1814
|
+
{"TTIN", SIGTTIN},
|
1815
|
+
#endif
|
1816
|
+
#ifdef SIGTTOU
|
1817
|
+
{"TTOU", SIGTTOU},
|
1818
|
+
#endif
|
1819
|
+
#ifdef SIGIO
|
1820
|
+
{"IO", SIGIO},
|
1821
|
+
#endif
|
1822
|
+
#ifdef SIGXCPU
|
1823
|
+
{"XCPU", SIGXCPU},
|
1824
|
+
#endif
|
1825
|
+
#ifdef SIGXFSZ
|
1826
|
+
{"XFSZ", SIGXFSZ},
|
1827
|
+
#endif
|
1828
|
+
#ifdef SIGVTALRM
|
1829
|
+
{"VTALRM", SIGVTALRM},
|
1830
|
+
#endif
|
1831
|
+
#ifdef SIGPROF
|
1832
|
+
{"PROF", SIGPROF},
|
1833
|
+
#endif
|
1834
|
+
#ifdef SIGWINCH
|
1835
|
+
{"WINCH", SIGWINCH},
|
1836
|
+
#endif
|
1837
|
+
#ifdef SIGUSR1
|
1838
|
+
{"USR1", SIGUSR1},
|
1839
|
+
#endif
|
1840
|
+
#ifdef SIGUSR2
|
1841
|
+
{"USR2", SIGUSR2},
|
1842
|
+
#endif
|
1843
|
+
#ifdef SIGLOST
|
1844
|
+
{"LOST", SIGLOST},
|
1845
|
+
#endif
|
1846
|
+
#ifdef SIGMSG
|
1847
|
+
{"MSG", SIGMSG},
|
1848
|
+
#endif
|
1849
|
+
#ifdef SIGPWR
|
1850
|
+
{"PWR", SIGPWR},
|
1851
|
+
#endif
|
1852
|
+
#ifdef SIGPOLL
|
1853
|
+
{"POLL", SIGPOLL},
|
1854
|
+
#endif
|
1855
|
+
#ifdef SIGDANGER
|
1856
|
+
{"DANGER", SIGDANGER},
|
1857
|
+
#endif
|
1858
|
+
#ifdef SIGMIGRATE
|
1859
|
+
{"MIGRATE", SIGMIGRATE},
|
1860
|
+
#endif
|
1861
|
+
#ifdef SIGPRE
|
1862
|
+
{"PRE", SIGPRE},
|
1863
|
+
#endif
|
1864
|
+
#ifdef SIGGRANT
|
1865
|
+
{"GRANT", SIGGRANT},
|
1866
|
+
#endif
|
1867
|
+
#ifdef SIGRETRACT
|
1868
|
+
{"RETRACT", SIGRETRACT},
|
1869
|
+
#endif
|
1870
|
+
#ifdef SIGSOUND
|
1871
|
+
{"SOUND", SIGSOUND},
|
1872
|
+
#endif
|
1873
|
+
#ifdef SIGINFO
|
1874
|
+
{"INFO", SIGINFO},
|
1875
|
+
#endif
|
1876
|
+
{NULL, 0}
|
1877
|
+
};
|
1878
|
+
|
1879
|
+
FXint FXRbSignalNameToNumber(const char* s){
|
1880
|
+
#ifdef HAVE_SIGNAL_H
|
1881
|
+
const char *nm=s;
|
1882
|
+
if(strncmp("SIG",nm,3)==0){
|
1883
|
+
nm+=3;
|
1884
|
+
}
|
1885
|
+
for(signals* sigs=siglist;sigs->signm;sigs++){
|
1886
|
+
if(strcmp(sigs->signm,nm)==0)
|
1887
|
+
return sigs->signo;
|
1888
|
+
}
|
1889
|
+
#endif /* HAVE_SIGNAL_H */
|
1890
|
+
return 0;
|
1891
|
+
}
|
1892
|
+
|
1893
|
+
//----------------------------------------------------------------------
|
1894
|
+
|
1895
|
+
/*
|
1896
|
+
* The Ruby header files define a TYPE(x) macro that conflicts with the
|
1897
|
+
* TYPE template parameter used in FXArray.h and FXElement.h.
|
1898
|
+
*/
|
1899
|
+
#ifdef TYPE
|
1900
|
+
#undef TYPE
|
1901
|
+
#endif
|
1902
|
+
|
1903
|
+
#include <new>
|
1904
|
+
|
1905
|
+
#include "FXArray.h"
|
1906
|
+
#include "FXElement.h"
|
1907
|
+
|
1908
|
+
static st_table * appSensitiveObjs;
|
1909
|
+
static st_table * appSensitiveDCs;
|
1910
|
+
|
1911
|
+
void FXRbRegisterAppSensitiveObject(FXObject* obj){
|
1912
|
+
FXASSERT(obj!=0);
|
1913
|
+
FXTRACE((100,"%s:%d: FXRbRegisterAppSensitiveObject(obj=%p(%s))\n",__FILE__,__LINE__,obj,obj->getClassName()));
|
1914
|
+
st_insert(appSensitiveObjs,reinterpret_cast<st_data_t>(obj),(st_data_t)0);
|
1915
|
+
FXASSERT(st_lookup(appSensitiveObjs,reinterpret_cast<st_data_t>(obj),reinterpret_cast<st_data_t *>(0))!=0);
|
1916
|
+
}
|
1917
|
+
|
1918
|
+
void FXRbRegisterAppSensitiveObject(FXDC* dc){
|
1919
|
+
FXASSERT(dc!=0);
|
1920
|
+
FXTRACE((100,"%s:%d: FXRbRegisterAppSensitiveObject(dc=%p)\n",__FILE__,__LINE__,dc));
|
1921
|
+
st_insert(appSensitiveDCs,reinterpret_cast<st_data_t>(dc),(st_data_t)0);
|
1922
|
+
FXASSERT(st_lookup(appSensitiveDCs,reinterpret_cast<st_data_t>(dc),reinterpret_cast<st_data_t *>(0))!=0);
|
1923
|
+
}
|
1924
|
+
|
1925
|
+
void FXRbUnregisterAppSensitiveObject(FXObject* obj){
|
1926
|
+
FXASSERT(obj!=0);
|
1927
|
+
FXTRACE((100,"%s:%d: FXRbUnregisterAppSensitiveObject(obj=%p(%s))\n",__FILE__,__LINE__,obj,obj->getClassName()));
|
1928
|
+
st_delete(appSensitiveObjs,reinterpret_cast<st_data_t *>(&obj),reinterpret_cast<st_data_t *>(0));
|
1929
|
+
FXASSERT(st_lookup(appSensitiveObjs,reinterpret_cast<st_data_t>(obj),reinterpret_cast<st_data_t *>(0))==0);
|
1930
|
+
}
|
1931
|
+
|
1932
|
+
void FXRbUnregisterAppSensitiveObject(FXDC* dc){
|
1933
|
+
FXASSERT(dc!=0);
|
1934
|
+
FXTRACE((100,"%s:%d: FXRbUnregisterAppSensitiveObject(dc=%p)\n",__FILE__,__LINE__,dc));
|
1935
|
+
st_delete(appSensitiveDCs,reinterpret_cast<st_data_t *>(&dc),reinterpret_cast<st_data_t *>(0));
|
1936
|
+
FXASSERT(st_lookup(appSensitiveDCs,reinterpret_cast<st_data_t>(dc),reinterpret_cast<st_data_t *>(0))==0);
|
1937
|
+
}
|
1938
|
+
|
1939
|
+
static int st_cbfunc_obj(st_data_t key,st_data_t,st_data_t arg,int){
|
1940
|
+
FXASSERT(key!=0);
|
1941
|
+
FXASSERT(arg!=0);
|
1942
|
+
FXObjectListOf<FXObject> *pObjectList=reinterpret_cast<FXObjectListOf<FXObject>*>(arg);
|
1943
|
+
FXObject *pObject=reinterpret_cast<FXObject*>(key);
|
1944
|
+
pObjectList->append(pObject);
|
1945
|
+
return 0;
|
1946
|
+
}
|
1947
|
+
|
1948
|
+
static int st_cbfunc_dc(st_data_t key,st_data_t,st_data_t arg,int){
|
1949
|
+
FXASSERT(key!=0);
|
1950
|
+
FXASSERT(arg!=0);
|
1951
|
+
FXArray<FXDC*> *pDCArray=reinterpret_cast<FXArray<FXDC*>*>(arg);
|
1952
|
+
FXDC *pDC=reinterpret_cast<FXDC*>(key);
|
1953
|
+
pDCArray->append(pDC);
|
1954
|
+
return 0;
|
1955
|
+
}
|
1956
|
+
|
1957
|
+
void FXRbDestroyAppSensitiveObjects(){
|
1958
|
+
FXTRACE((100,"%s:%d: Begin destroying objects that hold references to the FXApp...\n",__FILE__,__LINE__));
|
1959
|
+
|
1960
|
+
FXObjectListOf<FXObject> objs;
|
1961
|
+
st_foreach(appSensitiveObjs,reinterpret_cast<int (*)(ANYARGS)>(st_cbfunc_obj),reinterpret_cast<st_data_t>(&objs));
|
1962
|
+
for(FXint i=0;i<objs.no();i++){
|
1963
|
+
if(objs[i]->isMemberOf(FXMETACLASS(FXRbCursor))){
|
1964
|
+
if(dynamic_cast<FXRbCursor*>(objs[i])->ownedByApp)
|
1965
|
+
continue;
|
1966
|
+
}
|
1967
|
+
else if(objs[i]->isMemberOf(FXMETACLASS(FXRbCURCursor))){
|
1968
|
+
if(dynamic_cast<FXRbCURCursor*>(objs[i])->ownedByApp)
|
1969
|
+
continue;
|
1970
|
+
}
|
1971
|
+
else if(objs[i]->isMemberOf(FXMETACLASS(FXRbGIFCursor))){
|
1972
|
+
if(dynamic_cast<FXRbGIFCursor*>(objs[i])->ownedByApp)
|
1973
|
+
continue;
|
1974
|
+
}
|
1975
|
+
else if(objs[i]->isMemberOf(FXMETACLASS(FXRbFont))){
|
1976
|
+
if(dynamic_cast<FXRbFont*>(objs[i])->ownedByApp)
|
1977
|
+
continue;
|
1978
|
+
}
|
1979
|
+
else if(objs[i]->isMemberOf(FXMETACLASS(FXRbGLVisual))){
|
1980
|
+
if(dynamic_cast<FXRbGLVisual*>(objs[i])->ownedByApp)
|
1981
|
+
continue;
|
1982
|
+
}
|
1983
|
+
else if(objs[i]->isMemberOf(FXMETACLASS(FXRbVisual))){
|
1984
|
+
if(dynamic_cast<FXRbVisual*>(objs[i])->ownedByApp)
|
1985
|
+
continue;
|
1986
|
+
}
|
1987
|
+
delete objs[i];
|
1988
|
+
}
|
1989
|
+
|
1990
|
+
FXArray<FXDC*> dcs;
|
1991
|
+
st_foreach(appSensitiveDCs,reinterpret_cast<int (*)(ANYARGS)>(st_cbfunc_dc),reinterpret_cast<st_data_t>(&dcs));
|
1992
|
+
for(FXint j=0;j<dcs.no();j++){
|
1993
|
+
delete dcs[j];
|
1994
|
+
}
|
1995
|
+
|
1996
|
+
FXTRACE((100,"%s:%d: Finished destroying objects that hold references to the FXApp.\n",__FILE__,__LINE__));
|
1997
|
+
}
|
1998
|
+
|
1999
|
+
int utf8_enc_idx;
|
2000
|
+
|
2001
|
+
//----------------------------------------------------------------------
|
2002
|
+
|
2003
|
+
extern "C" void Init_core(void);
|
2004
|
+
extern "C" void Init_dc(void);
|
2005
|
+
extern "C" void Init_dialogs(void);
|
2006
|
+
extern "C" void Init_frames(void);
|
2007
|
+
extern "C" void Init_fx3d(void);
|
2008
|
+
extern "C" void Init_image(void);
|
2009
|
+
extern "C" void Init_iconlist(void);
|
2010
|
+
extern "C" void Init_icons(void);
|
2011
|
+
extern "C" void Init_label(void);
|
2012
|
+
extern "C" void Init_layout(void);
|
2013
|
+
extern "C" void Init_list(void);
|
2014
|
+
extern "C" void Init_mdi(void);
|
2015
|
+
extern "C" void Init_menu(void);
|
2016
|
+
#ifdef WITH_FXSCINTILLA
|
2017
|
+
extern "C" void Init_scintilla(void);
|
2018
|
+
#endif
|
2019
|
+
extern "C" void Init_table(void);
|
2020
|
+
extern "C" void Init_text(void);
|
2021
|
+
extern "C" void Init_treelist(void);
|
2022
|
+
extern "C" void Init_ui(void);
|
2023
|
+
|
2024
|
+
extern "C" void
|
2025
|
+
#if defined _WIN32
|
2026
|
+
__declspec(dllexport)
|
2027
|
+
#endif
|
2028
|
+
Init_fox16_c(void) {
|
2029
|
+
Init_core();
|
2030
|
+
Init_dc();
|
2031
|
+
Init_frames();
|
2032
|
+
Init_layout();
|
2033
|
+
Init_label();
|
2034
|
+
Init_ui();
|
2035
|
+
Init_iconlist();
|
2036
|
+
Init_list();
|
2037
|
+
Init_dialogs();
|
2038
|
+
Init_image();
|
2039
|
+
Init_icons();
|
2040
|
+
Init_menu();
|
2041
|
+
Init_mdi();
|
2042
|
+
Init_fx3d();
|
2043
|
+
#ifdef WITH_FXSCINTILLA
|
2044
|
+
Init_scintilla();
|
2045
|
+
#endif
|
2046
|
+
Init_table();
|
2047
|
+
Init_text();
|
2048
|
+
Init_treelist();
|
2049
|
+
|
2050
|
+
id_assocs=rb_intern("@assocs");
|
2051
|
+
id_backtrace=rb_intern("backtrace");
|
2052
|
+
id_cmp=rb_intern("<=>");
|
2053
|
+
id_begin=rb_intern("begin");
|
2054
|
+
id_end=rb_intern("end");
|
2055
|
+
id_exclude_endp=rb_intern("exclude_end?");
|
2056
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
2057
|
+
utf8_enc_idx = rb_enc_find_index("UTF-8");
|
2058
|
+
#endif
|
2059
|
+
|
2060
|
+
FXRuby_Objects=st_init_numtable();
|
2061
|
+
appSensitiveObjs=st_init_numtable();
|
2062
|
+
appSensitiveDCs=st_init_numtable();
|
2063
|
+
}
|