fxruby 1.6.19 → 1.6.20
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/Manifest.txt +922 -0
- data/{LICENSE → README.txt} +27 -1
- data/Rakefile +191 -0
- data/TODO +47 -0
- data/doap.rdf +87 -0
- data/examples/icons/bluebullet14x14.gif +0 -0
- data/examples/icons/transpbullet14x14.gif +0 -0
- data/ext/fox16/FXRbApp.cpp +2 -2
- data/ext/fox16/FXRbDataTarget.cpp +2 -2
- data/ext/fox16/FXRbGLViewer.cpp +2 -2
- data/ext/fox16/FXRuby.cpp +7 -3
- data/ext/fox16/extconf.rb +18 -85
- data/ext/fox16/impl.cpp +0 -0
- data/ext/fox16/include/FXMemoryBuffer.h +2 -2
- data/ext/fox16/include/FXRb4Splitter.h +2 -2
- data/ext/fox16/include/FXRb7Segment.h +2 -2
- data/ext/fox16/include/FXRbAccelTable.h +2 -2
- data/ext/fox16/include/FXRbApp.h +2 -2
- data/ext/fox16/include/FXRbAppVirtuals.h +0 -0
- data/ext/fox16/include/FXRbArrowButton.h +2 -2
- data/ext/fox16/include/FXRbBMPIcon.h +2 -2
- data/ext/fox16/include/FXRbBMPImage.h +2 -2
- data/ext/fox16/include/FXRbBitmap.h +2 -2
- data/ext/fox16/include/FXRbBitmapFrame.h +1 -1
- data/ext/fox16/include/FXRbBitmapView.h +2 -2
- data/ext/fox16/include/FXRbBitmapVirtuals.h +0 -0
- data/ext/fox16/include/FXRbButton.h +2 -2
- data/ext/fox16/include/FXRbCURCursor.h +2 -2
- data/ext/fox16/include/FXRbCanvas.h +2 -2
- data/ext/fox16/include/FXRbCheckButton.h +2 -2
- data/ext/fox16/include/FXRbChoiceBox.h +1 -1
- data/ext/fox16/include/FXRbColorBar.h +2 -2
- data/ext/fox16/include/FXRbColorDialog.h +2 -2
- data/ext/fox16/include/FXRbColorList.h +2 -2
- data/ext/fox16/include/FXRbColorRing.h +2 -2
- data/ext/fox16/include/FXRbColorSelector.h +2 -2
- data/ext/fox16/include/FXRbColorWell.h +2 -2
- data/ext/fox16/include/FXRbColorWheel.h +2 -2
- data/ext/fox16/include/FXRbComboBox.h +2 -2
- data/ext/fox16/include/FXRbCommon.h +2 -2
- data/ext/fox16/include/FXRbComposite.h +2 -2
- data/ext/fox16/include/FXRbCursor.h +2 -2
- data/ext/fox16/include/FXRbCursorVirtuals.h +0 -0
- data/ext/fox16/include/FXRbDC.h +2 -2
- data/ext/fox16/include/FXRbDCPrint.h +2 -2
- data/ext/fox16/include/FXRbDCVirtuals.h +0 -0
- data/ext/fox16/include/FXRbDCWindow.h +2 -2
- data/ext/fox16/include/FXRbDataTarget.h +2 -2
- data/ext/fox16/include/FXRbDebugTarget.h +2 -2
- data/ext/fox16/include/FXRbDelegator.h +2 -2
- data/ext/fox16/include/FXRbDial.h +2 -2
- data/ext/fox16/include/FXRbDialogBox.h +2 -2
- data/ext/fox16/include/FXRbDialogBoxVirtuals.h +0 -0
- data/ext/fox16/include/FXRbDict.h +2 -2
- data/ext/fox16/include/FXRbDirBox.h +2 -2
- data/ext/fox16/include/FXRbDirDialog.h +2 -2
- data/ext/fox16/include/FXRbDirList.h +2 -2
- data/ext/fox16/include/FXRbDirSelector.h +2 -2
- data/ext/fox16/include/FXRbDockBar.h +1 -1
- data/ext/fox16/include/FXRbDockBarVirtuals.h +0 -0
- data/ext/fox16/include/FXRbDockHandler.h +2 -2
- data/ext/fox16/include/FXRbDockSite.h +0 -0
- data/ext/fox16/include/FXRbDockSiteVirtuals.h +0 -0
- data/ext/fox16/include/FXRbDockTitle.h +2 -2
- data/ext/fox16/include/FXRbDocument.h +2 -2
- data/ext/fox16/include/FXRbDragCorner.h +2 -2
- data/ext/fox16/include/FXRbDrawable.h +2 -2
- data/ext/fox16/include/FXRbDrawableVirtuals.h +0 -0
- data/ext/fox16/include/FXRbDriveBox.h +2 -2
- data/ext/fox16/include/FXRbFileDialog.h +2 -2
- data/ext/fox16/include/FXRbFileDict.h +2 -2
- data/ext/fox16/include/FXRbFileDictVirtuals.h +0 -0
- data/ext/fox16/include/FXRbFileList.h +2 -2
- data/ext/fox16/include/FXRbFileSelector.h +2 -2
- data/ext/fox16/include/FXRbFoldingItemVirtuals.h +0 -0
- data/ext/fox16/include/FXRbFoldingList.h +2 -2
- data/ext/fox16/include/FXRbFoldingListVirtuals.h +0 -0
- data/ext/fox16/include/FXRbFont.h +2 -2
- data/ext/fox16/include/FXRbFontDialog.h +2 -2
- data/ext/fox16/include/FXRbFontSelector.h +2 -2
- data/ext/fox16/include/FXRbFontVirtuals.h +0 -0
- data/ext/fox16/include/FXRbFrame.h +2 -2
- data/ext/fox16/include/FXRbGIFCursor.h +2 -2
- data/ext/fox16/include/FXRbGIFIcon.h +2 -2
- data/ext/fox16/include/FXRbGIFImage.h +2 -2
- data/ext/fox16/include/FXRbGLCanvas.h +2 -2
- data/ext/fox16/include/FXRbGLCanvasVirtuals.h +0 -0
- data/ext/fox16/include/FXRbGLContext.h +2 -2
- data/ext/fox16/include/FXRbGLObject.h +2 -2
- data/ext/fox16/include/FXRbGLObjectVirtuals.h +0 -0
- data/ext/fox16/include/FXRbGLShape.h +2 -2
- data/ext/fox16/include/FXRbGLShapeVirtuals.h +0 -0
- data/ext/fox16/include/FXRbGLViewer.h +2 -2
- data/ext/fox16/include/FXRbGLViewerVirtuals.h +0 -0
- data/ext/fox16/include/FXRbGLVisual.h +2 -2
- data/ext/fox16/include/FXRbGradientBar.h +1 -1
- data/ext/fox16/include/FXRbGroupBox.h +2 -2
- data/ext/fox16/include/FXRbHeader.h +2 -2
- data/ext/fox16/include/FXRbHeaderItemVirtuals.h +0 -0
- data/ext/fox16/include/FXRbHorizontalFrame.h +2 -2
- data/ext/fox16/include/FXRbICOIcon.h +2 -2
- data/ext/fox16/include/FXRbICOImage.h +2 -2
- data/ext/fox16/include/FXRbIcon.h +2 -2
- data/ext/fox16/include/FXRbIconItemVirtuals.h +0 -0
- data/ext/fox16/include/FXRbIconList.h +2 -2
- data/ext/fox16/include/FXRbIconListVirtuals.h +0 -0
- data/ext/fox16/include/FXRbIconSource.h +2 -2
- data/ext/fox16/include/FXRbIconSourceVirtuals.h +0 -0
- data/ext/fox16/include/FXRbId.h +2 -2
- data/ext/fox16/include/FXRbIdVirtuals.h +0 -0
- data/ext/fox16/include/FXRbImage.h +2 -2
- data/ext/fox16/include/FXRbImageFrame.h +1 -1
- data/ext/fox16/include/FXRbImageView.h +2 -2
- data/ext/fox16/include/FXRbImageVirtuals.h +0 -0
- data/ext/fox16/include/FXRbInputDialog.h +2 -2
- data/ext/fox16/include/FXRbJPGIcon.h +2 -2
- data/ext/fox16/include/FXRbJPGImage.h +2 -2
- data/ext/fox16/include/FXRbKnob.h +2 -2
- data/ext/fox16/include/FXRbLabel.h +2 -2
- data/ext/fox16/include/FXRbList.h +2 -2
- data/ext/fox16/include/FXRbListBox.h +2 -2
- data/ext/fox16/include/FXRbListBoxVirtuals.h +0 -0
- data/ext/fox16/include/FXRbListItemVirtuals.h +0 -0
- data/ext/fox16/include/FXRbListVirtuals.h +0 -0
- data/ext/fox16/include/FXRbMDIButton.h +2 -2
- data/ext/fox16/include/FXRbMDIChild.h +2 -2
- data/ext/fox16/include/FXRbMDIChildVirtuals.h +0 -0
- data/ext/fox16/include/FXRbMDIClient.h +2 -2
- data/ext/fox16/include/FXRbMDIClientVirtuals.h +0 -0
- data/ext/fox16/include/FXRbMainWindow.h +2 -2
- data/ext/fox16/include/FXRbMatrix.h +2 -2
- data/ext/fox16/include/FXRbMenuBar.h +1 -1
- data/ext/fox16/include/FXRbMenuButton.h +2 -2
- data/ext/fox16/include/FXRbMenuCaption.h +2 -2
- data/ext/fox16/include/FXRbMenuCascade.h +2 -2
- data/ext/fox16/include/FXRbMenuCheck.h +1 -1
- data/ext/fox16/include/FXRbMenuCommand.h +2 -2
- data/ext/fox16/include/FXRbMenuPane.h +2 -2
- data/ext/fox16/include/FXRbMenuRadio.h +1 -1
- data/ext/fox16/include/FXRbMenuSeparator.h +2 -2
- data/ext/fox16/include/FXRbMenuTitle.h +2 -2
- data/ext/fox16/include/FXRbMessageBox.h +2 -2
- data/ext/fox16/include/FXRbObject.h +2 -2
- data/ext/fox16/include/FXRbObjectVirtuals.h +0 -0
- data/ext/fox16/include/FXRbOptionMenu.h +2 -2
- data/ext/fox16/include/FXRbPCXIcon.h +2 -2
- data/ext/fox16/include/FXRbPCXImage.h +2 -2
- data/ext/fox16/include/FXRbPNGIcon.h +2 -2
- data/ext/fox16/include/FXRbPNGImage.h +2 -2
- data/ext/fox16/include/FXRbPPMIcon.h +2 -2
- data/ext/fox16/include/FXRbPPMImage.h +2 -2
- data/ext/fox16/include/FXRbPacker.h +2 -2
- data/ext/fox16/include/FXRbPicker.h +2 -2
- data/ext/fox16/include/FXRbPopup.h +2 -2
- data/ext/fox16/include/FXRbPopupVirtuals.h +0 -0
- data/ext/fox16/include/FXRbPrintDialog.h +2 -2
- data/ext/fox16/include/FXRbProgressBar.h +2 -2
- data/ext/fox16/include/FXRbProgressDialog.h +2 -2
- data/ext/fox16/include/FXRbRGBIcon.h +2 -2
- data/ext/fox16/include/FXRbRGBImage.h +2 -2
- data/ext/fox16/include/FXRbRadioButton.h +2 -2
- data/ext/fox16/include/FXRbRealSlider.h +2 -2
- data/ext/fox16/include/FXRbRealSpinner.h +2 -2
- data/ext/fox16/include/FXRbRealSpinnerVirtuals.h +0 -0
- data/ext/fox16/include/FXRbRecentFiles.h +2 -2
- data/ext/fox16/include/FXRbRegistry.h +2 -2
- data/ext/fox16/include/FXRbReplaceDialog.h +2 -2
- data/ext/fox16/include/FXRbRootWindow.h +2 -2
- data/ext/fox16/include/FXRbRuler.h +1 -1
- data/ext/fox16/include/FXRbRulerView.h +1 -1
- data/ext/fox16/include/FXRbScintilla.h +2 -2
- data/ext/fox16/include/FXRbScrollArea.h +2 -2
- data/ext/fox16/include/FXRbScrollAreaVirtuals.h +0 -0
- data/ext/fox16/include/FXRbScrollBar.h +1 -1
- data/ext/fox16/include/FXRbScrollPane.h +2 -2
- data/ext/fox16/include/FXRbScrollWindow.h +2 -2
- data/ext/fox16/include/FXRbSearchDialog.h +2 -2
- data/ext/fox16/include/FXRbSeparator.h +2 -2
- data/ext/fox16/include/FXRbSettings.h +2 -2
- data/ext/fox16/include/FXRbShell.h +2 -2
- data/ext/fox16/include/FXRbShutter.h +2 -2
- data/ext/fox16/include/FXRbShutterVirtuals.h +0 -0
- data/ext/fox16/include/FXRbSlider.h +2 -2
- data/ext/fox16/include/FXRbSpinner.h +2 -2
- data/ext/fox16/include/FXRbSpinnerVirtuals.h +0 -0
- data/ext/fox16/include/FXRbSplashWindow.h +2 -2
- data/ext/fox16/include/FXRbSplitter.h +2 -2
- data/ext/fox16/include/FXRbSpring.h +2 -2
- data/ext/fox16/include/FXRbStatusBar.h +1 -1
- data/ext/fox16/include/FXRbStatusLine.h +1 -1
- data/ext/fox16/include/FXRbStream.h +2 -2
- data/ext/fox16/include/FXRbStreamVirtuals.h +0 -0
- data/ext/fox16/include/FXRbStringDict.h +2 -2
- data/ext/fox16/include/FXRbSwitcher.h +2 -2
- data/ext/fox16/include/FXRbTGAIcon.h +2 -2
- data/ext/fox16/include/FXRbTGAImage.h +2 -2
- data/ext/fox16/include/FXRbTIFIcon.h +2 -2
- data/ext/fox16/include/FXRbTIFImage.h +2 -2
- data/ext/fox16/include/FXRbTabBar.h +2 -2
- data/ext/fox16/include/FXRbTabBarVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTabBook.h +2 -2
- data/ext/fox16/include/FXRbTabItem.h +2 -2
- data/ext/fox16/include/FXRbTable.h +2 -2
- data/ext/fox16/include/FXRbTableItemVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTableVirtuals.h +0 -0
- data/ext/fox16/include/FXRbText.h +2 -2
- data/ext/fox16/include/FXRbTextField.h +2 -2
- data/ext/fox16/include/FXRbTextVirtuals.h +0 -0
- data/ext/fox16/include/FXRbToggleButton.h +2 -2
- data/ext/fox16/include/FXRbToolBar.h +1 -1
- data/ext/fox16/include/FXRbToolBarGrip.h +1 -1
- data/ext/fox16/include/FXRbToolBarShell.h +1 -1
- data/ext/fox16/include/FXRbToolBarTab.h +1 -1
- data/ext/fox16/include/FXRbToolTip.h +1 -1
- data/ext/fox16/include/FXRbTopWindow.h +2 -2
- data/ext/fox16/include/FXRbTopWindowVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTranslator.h +2 -2
- data/ext/fox16/include/FXRbTranslatorVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTreeItemVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTreeList.h +2 -2
- data/ext/fox16/include/FXRbTreeListBox.h +2 -2
- data/ext/fox16/include/FXRbTreeListBoxVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTreeListVirtuals.h +0 -0
- data/ext/fox16/include/FXRbTriStateButton.h +2 -2
- data/ext/fox16/include/FXRbVerticalFrame.h +2 -2
- data/ext/fox16/include/FXRbVisual.h +2 -2
- data/ext/fox16/include/FXRbWindow.h +2 -2
- data/ext/fox16/include/FXRbWindowVirtuals.h +0 -0
- data/ext/fox16/include/FXRbWizard.h +1 -1
- data/ext/fox16/include/FXRbXBMIcon.h +2 -2
- data/ext/fox16/include/FXRbXBMImage.h +2 -2
- data/ext/fox16/include/FXRbXPMIcon.h +2 -2
- data/ext/fox16/include/FXRbXPMImage.h +2 -2
- data/ext/fox16/include/FXRuby.h +2 -2
- data/ext/fox16/include/impl.h +2 -2
- data/ext/fox16/make_impl.rb +121 -0
- data/ext/fox16/markfuncs.cpp +0 -0
- data/lib/fox16.rb +8 -0
- data/lib/fox16/bitmapview.rb +223 -0
- data/lib/fox16/scintilla.rb +103 -3
- data/lib/fox16/version.rb +1 -5
- data/rdoc-sources/Makefile +23 -0
- data/scripts/build-fox.rb +31 -0
- data/scripts/generate_kwargs_lib.rb +414 -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 +197 -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 +73 -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 +192 -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 +82 -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 +772 -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/{tests → test}/README +0 -0
- data/{tests → test}/TC_FXAccelTable.rb +0 -0
- data/{tests → test}/TC_FXApp.rb +0 -0
- data/{tests → test}/TC_FXArc.rb +0 -0
- data/{tests → test}/TC_FXBMPIcon.rb +0 -0
- data/{tests → test}/TC_FXBMPImage.rb +0 -0
- data/{tests → test}/TC_FXButton.rb +0 -0
- data/{tests → test}/TC_FXCheckButton.rb +0 -0
- data/{tests → test}/TC_FXComboBox.rb +0 -0
- data/{tests → test}/TC_FXDC.rb +0 -0
- data/{tests → test}/TC_FXDCPrint.rb +0 -0
- data/{tests → test}/TC_FXDCWindow.rb +0 -0
- data/{tests → test}/TC_FXDataTarget.rb +0 -0
- data/{tests → test}/TC_FXDialogBox.rb +0 -0
- data/{tests → test}/TC_FXDirList.rb +0 -0
- data/{tests → test}/TC_FXExtentd.rb +0 -0
- data/{tests → test}/TC_FXExtentf.rb +0 -0
- data/{tests → test}/TC_FXFileAssoc.rb +0 -0
- data/{tests → test}/TC_FXFileStream.rb +0 -0
- data/{tests → test}/TC_FXFoldingList.rb +0 -0
- data/{tests → test}/TC_FXFont.rb +0 -0
- data/{tests → test}/TC_FXFontDesc.rb +0 -0
- data/{tests → test}/TC_FXGLGroup.rb +0 -0
- data/{tests → test}/TC_FXGLShape.rb +0 -0
- data/{tests → test}/TC_FXGLViewer.rb +0 -0
- data/{tests → test}/TC_FXGradientBar.rb +0 -0
- data/{tests → test}/TC_FXHeader.rb +0 -0
- data/{tests → test}/TC_FXHiliteStyle.rb +0 -0
- data/{tests → test}/TC_FXIconDict.rb +0 -0
- data/{tests → test}/TC_FXIconList.rb +0 -0
- data/{tests → test}/TC_FXId.rb +0 -0
- data/{tests → test}/TC_FXImage.rb +0 -0
- data/{tests → test}/TC_FXLight.rb +0 -0
- data/{tests → test}/TC_FXList.rb +0 -0
- data/{tests → test}/TC_FXListBox.rb +0 -0
- data/{tests → test}/TC_FXMainWindow.rb +0 -0
- data/{tests → test}/TC_FXMat4f.rb +0 -0
- data/{tests → test}/TC_FXMaterial.rb +0 -0
- data/{tests → test}/TC_FXMemoryStream.rb +0 -0
- data/{tests → test}/TC_FXMenuCheck.rb +0 -0
- data/{tests → test}/TC_FXMenuCommand.rb +0 -0
- data/{tests → test}/TC_FXMenuRadio.rb +0 -0
- data/{tests → test}/TC_FXMessageBox.rb +0 -0
- data/{tests → test}/TC_FXPoint.rb +0 -0
- data/{tests → test}/TC_FXQuatf.rb +0 -0
- data/{tests → test}/TC_FXRadioButton.rb +0 -0
- data/{tests → test}/TC_FXRanged.rb +0 -0
- data/{tests → test}/TC_FXRangef.rb +0 -0
- data/{tests → test}/TC_FXRectangle.rb +0 -0
- data/{tests → test}/TC_FXRegion.rb +0 -0
- data/{tests → test}/TC_FXRegistry.rb +0 -0
- data/{tests → test}/TC_FXScrollArea.rb +0 -0
- data/{tests → test}/TC_FXScrollWindow.rb +0 -0
- data/{tests → test}/TC_FXSegment.rb +0 -0
- data/{tests → test}/TC_FXSettings.rb +0 -0
- data/{tests → test}/TC_FXShell.rb +0 -0
- data/{tests → test}/TC_FXSize.rb +0 -0
- data/{tests → test}/TC_FXStream.rb +0 -0
- data/{tests → test}/TC_FXTable.rb +0 -0
- data/{tests → test}/TC_FXTableItem.rb +0 -0
- data/{tests → test}/TC_FXText.rb +0 -0
- data/{tests → test}/TC_FXTopWindow.rb +0 -0
- data/{tests → test}/TC_FXTreeList.rb +0 -0
- data/{tests → test}/TC_FXTreeListBox.rb +0 -0
- data/{tests → test}/TC_FXUndoList.rb +0 -0
- data/{tests → test}/TC_FXVec2d.rb +0 -0
- data/{tests → test}/TC_FXVec2f.rb +0 -0
- data/{tests → test}/TC_FXVec3d.rb +0 -0
- data/{tests → test}/TC_FXVec3f.rb +0 -0
- data/{tests → test}/TC_FXVec4f.rb +0 -0
- data/{tests → test}/TC_FXViewport.rb +0 -0
- data/{tests → test}/TC_FXXBMIcon.rb +0 -0
- data/{tests → test}/TC_FXXBMImage.rb +0 -0
- data/{tests → test}/TC_FXXPMIcon.rb +0 -0
- data/{tests → test}/TC_FXXPMImage.rb +0 -0
- data/{tests → test}/TC_Misc.rb +0 -0
- data/{tests → test}/TC_downcast.rb +0 -0
- data/{tests → test}/TS_All.rb +0 -0
- data/{tests → test}/blankpage.ps +0 -0
- data/{tests → test}/howdypage.ps +0 -0
- data/{tests → test}/stress1.rb +0 -0
- data/{tests → test}/stress2.rb +0 -0
- data/{tests → test}/stress3.rb +0 -0
- data/{tests → test}/testcase.rb +0 -0
- metadata +718 -458
- data/doc/apes02.html +0 -21
- data/doc/apes03.html +0 -39
- data/doc/book.html +0 -3
- data/doc/build.html +0 -132
- data/doc/ch03s02.html +0 -23
- data/doc/ch03s03.html +0 -52
- data/doc/ch03s04.html +0 -36
- data/doc/ch03s05.html +0 -60
- data/doc/ch04s02.html +0 -71
- data/doc/ch04s03.html +0 -37
- data/doc/ch04s04.html +0 -72
- data/doc/ch05s02.html +0 -260
- data/doc/ch05s03.html +0 -127
- data/doc/changes.html +0 -777
- data/doc/clipboardtut.html +0 -67
- data/doc/differences.html +0 -190
- data/doc/dragdroptut.html +0 -263
- data/doc/events.html +0 -36
- data/doc/examples.html +0 -104
- data/doc/gems.html +0 -73
- data/doc/goals.html +0 -41
- data/doc/images/babelfish.png +0 -0
- data/doc/images/browser.png +0 -0
- data/doc/images/button.png +0 -0
- data/doc/images/call-chain-example.png +0 -0
- data/doc/images/colordialog.png +0 -0
- data/doc/images/datatarget.png +0 -0
- data/doc/images/dialog.png +0 -0
- data/doc/images/dilbert.png +0 -0
- data/doc/images/dirlist.png +0 -0
- data/doc/images/dropsite-droprejected.png +0 -0
- data/doc/images/foursplit.png +0 -0
- data/doc/images/gltest.png +0 -0
- data/doc/images/glviewer.png +0 -0
- data/doc/images/groupbox.png +0 -0
- data/doc/images/header.png +0 -0
- data/doc/images/hello-with-button.png +0 -0
- data/doc/images/hello-with-icon-1.png +0 -0
- data/doc/images/hello-with-icon-2.png +0 -0
- data/doc/images/hello-with-icon-3.png +0 -0
- data/doc/images/hello-with-tooltip.png +0 -0
- data/doc/images/hello-without-button.png +0 -0
- data/doc/images/hello.png +0 -0
- data/doc/images/hello2.png +0 -0
- data/doc/images/iconlist-bigicons.png +0 -0
- data/doc/images/iconlist-details.png +0 -0
- data/doc/images/image.png +0 -0
- data/doc/images/imageviewer.png +0 -0
- data/doc/images/inheritance.png +0 -0
- data/doc/images/mditest.png +0 -0
- data/doc/images/raabrowser.png +0 -0
- data/doc/images/scribble.png +0 -0
- data/doc/images/shutter.png +0 -0
- data/doc/images/splitter.png +0 -0
- data/doc/images/tabbook.png +0 -0
- data/doc/images/table.png +0 -0
- data/doc/images/tutorial1.png +0 -0
- data/doc/implementation.html +0 -16
- data/doc/infosources.html +0 -33
- data/doc/library.html +0 -30
- data/doc/opengl.html +0 -73
- data/doc/pt01.html +0 -3
- data/doc/pt02.html +0 -3
- data/doc/scintilla.html +0 -36
- data/doc/style.css +0 -247
- data/doc/subversion.html +0 -21
- data/doc/tutorial1.html +0 -90
- data/doc/unicode.html +0 -56
- data/web/community.html +0 -81
- data/web/documentation.html +0 -83
- data/web/downloads.html +0 -85
- data/web/index.html +0 -88
data/doc/ch04s03.html
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
<html><head>
|
2
|
-
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Sending Data to the Clipboard</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="ch04s02.html" title="Acquiring the Clipboard"><link rel="next" href="ch04s04.html" title="Pasting Data from the Clipboard"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Sending Data to the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s02.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="ch04s04.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1071"></a>Sending Data to the Clipboard</h2></div></div></div><p>Whenever some other window requests the clipboard's contents (e.g.
|
4
|
-
as a result of a "paste" operation) FOX will send a
|
5
|
-
<code class="constant">SEL_CLIPBOARD_REQUEST</code> message to the current
|
6
|
-
clipboard owner. Remember, the clipboard owner is the window that called
|
7
|
-
<code class="methodname">acquireClipboard()</code>. For our example, the main
|
8
|
-
window is acting as the clipboard owner and so it needs to handle the
|
9
|
-
<code class="constant">SEL_CLIPBOARD_REQUEST</code> message:</p><pre class="programlisting"># Handle clipboard request
|
10
|
-
self.connect(SEL_CLIPBOARD_REQUEST) do
|
11
|
-
setDNDData(FROM_CLIPBOARD, FXWindow.stringType, Fox.fxencodeStringData(@clippedCustomer.to_s))
|
12
|
-
end
|
13
|
-
</pre><p>The <code class="methodname">setDNDData()</code> method takes three
|
14
|
-
arguments. The first argument tells FOX which kind of data transfer we're
|
15
|
-
trying to accomplish; as it turns out, this method can be used for
|
16
|
-
drag-and-drop (<code class="constant">FROM_DRAGNDROP</code>) and X11 selection
|
17
|
-
(<code class="constant">FROM_SELECTION</code>) data transfer as well. The second
|
18
|
-
argument to <code class="methodname">setDNDData()</code> is the drag type for the
|
19
|
-
data and the last argument is the data itself, a binary string.</p><p>If you're wondering why we need to call the
|
20
|
-
<code class="methodname">fxencodeStringData()</code> module method to preprocess
|
21
|
-
the string returned by the call to <code class="methodname">Customer#to_s</code>,
|
22
|
-
that's a reasonable thing to wonder about. In order for FOX to play nice
|
23
|
-
with other clipboard-aware applications, it must be able to store string
|
24
|
-
data on the clipboard in the format expected by those applications.
|
25
|
-
Unfortunately, that expected format is platform-dependent and does not
|
26
|
-
always correspond directly to the format that Ruby uses internally to
|
27
|
-
store its string data. The <code class="methodname">fxencodeStringData()</code>
|
28
|
-
method (and the corresponding
|
29
|
-
<code class="methodname">fxdecodeStringData()</code> method) provide you with a
|
30
|
-
platform-independent way of sending (or receiving) string data with the
|
31
|
-
<code class="constant">stringType</code> drag type.</p><p>If you run the program as it currently stands, you should now be
|
32
|
-
able to select a customer from the list, click the "Copy" button and then
|
33
|
-
paste the selected customer data (as a string) into some other
|
34
|
-
application. For example, if you're trying this tutorial on a Windows
|
35
|
-
machine, try pasting into a copy of Notepad or Microsoft Word. The pasted
|
36
|
-
text should look something like:</p><pre class="programlisting">#<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown, NC", zip=12345>
|
37
|
-
</pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="clipboardtut.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Acquiring the Clipboard </td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top"> Pasting Data from the Clipboard</td></tr></table></div></body></html>
|
data/doc/ch04s04.html
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
<html><head>
|
2
|
-
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Pasting Data from the Clipboard</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="prev" href="ch04s03.html" title="Sending Data to the Clipboard"><link rel="next" href="dragdroptut.html" title="Chapter 5. Drag and Drop"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pasting Data from the Clipboard</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s03.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Working With the Clipboard</th><td width="20%" align="right"> <a accesskey="n" href="dragdroptut.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1122"></a>Pasting Data from the Clipboard</h2></div></div></div><p>We've seen one side of the equation, copying string data to the
|
4
|
-
clipboard. But before we can "round-trip" that customer data and paste it
|
5
|
-
back into another copy of our customer list application, we're clearly
|
6
|
-
going to need to transfer the data in some more useful format. That is to
|
7
|
-
say, if we were to receive the customer data in the format that it's
|
8
|
-
currently stored on the clipboard:</p><pre class="programlisting">#<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown, NC", zip=12345>
|
9
|
-
</pre><p>We'd have to parse that string and try to extract the relevant data
|
10
|
-
from it. We can do better than that. The approach we'll use instead is to
|
11
|
-
serialize and deserialize the objects using YAML. First, make sure that
|
12
|
-
the YAML module is loaded by adding this line:</p><pre class="programlisting">require 'yaml'</pre><p>somewhere near the top of the program. Next, register a custom drag
|
13
|
-
type for <code class="classname">Customer</code> objects. We can do that by adding
|
14
|
-
one line to our main window's <code class="methodname">create</code> instance
|
15
|
-
method:</p><pre class="programlisting">def create
|
16
|
-
super
|
17
|
-
<span class="bold"><strong> @customerDragType = getApp().registerDragType("application/x-customer")
|
18
|
-
</strong></span> show(PLACEMENT_SCREEN)
|
19
|
-
end
|
20
|
-
</pre><p>Note that by convention, the name of the drag type is the MIME type
|
21
|
-
for the data, but any unique string will do. In our case, we'll use the
|
22
|
-
string "application/x-customer" to identify the drag type for our
|
23
|
-
YAML-serialized <code class="classname">Customer</code> objects.</p><p>With that in place, we can now go back and slightly change some of
|
24
|
-
our previous code. When we acquire the clipboard, we'd now like to be able
|
25
|
-
to offer the selected customer's information either as plain text (i.e.
|
26
|
-
the previous format) <span class="emphasis"><em>or</em></span> as a YAML document, so we'll
|
27
|
-
include <span class="emphasis"><em>both</em></span> of these types in the array of drag
|
28
|
-
types passed to <code class="methodname">acquireClipboard()</code>:</p><pre class="programlisting"># User clicks Copy
|
29
|
-
copyButton.connect(SEL_COMMAND) do
|
30
|
-
customer = customerList.getItemData(customerList.currentItem)
|
31
|
-
<span class="bold"><strong> types = [ FXWindow.stringType, @customerDragType ]
|
32
|
-
</strong></span> if acquireClipboard(types)
|
33
|
-
@clippedCustomer = customer
|
34
|
-
end
|
35
|
-
end
|
36
|
-
</pre><p>Similarly, when we're handling the
|
37
|
-
<code class="constant">SEL_CLIPBOARD_REQUEST</code> message, we now need to pay
|
38
|
-
attention to which drag type (i.e. which data format) the requestor
|
39
|
-
specified. We can do that by inspecting the
|
40
|
-
<code class="methodname">target</code> attribute of the
|
41
|
-
<code class="classname">FXEvent</code> instance passed along with the
|
42
|
-
<code class="constant">SEL_CLIPBOARD_REQUEST</code> message:</p><pre class="programlisting"># Handle clipboard request
|
43
|
-
self.connect(SEL_CLIPBOARD_REQUEST) do |sender, sel, event|
|
44
|
-
case event.target
|
45
|
-
when FXWindow.stringType
|
46
|
-
setDNDData(FROM_CLIPBOARD, FXWindow.stringType, Fox.fxencodeStringData(@clippedCustomer.to_s))
|
47
|
-
when @customerDragType
|
48
|
-
setDNDData(FROM_CLIPBOARD, @customerDragType, @clippedCustomer.to_yaml)
|
49
|
-
else
|
50
|
-
# Ignore requests for unrecognized drag types
|
51
|
-
end
|
52
|
-
end
|
53
|
-
</pre><p>With these changes in place, we can now add a handler for the
|
54
|
-
"Paste" button which requests the clipboard data in YAML format,
|
55
|
-
deserializes it, and then adds an item to the customer list:</p><pre class="programlisting"># User clicks Paste
|
56
|
-
pasteButton.connect(SEL_COMMAND) do
|
57
|
-
data = getDNDData(FROM_CLIPBOARD, @customerDragType)
|
58
|
-
if data
|
59
|
-
customer = YAML.load(data)
|
60
|
-
customerList.appendItem(customer.name, nil, customer)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
</pre><p>The <code class="methodname">getDNDData()</code> method used here is the
|
64
|
-
inverse of the <code class="methodname">setDNDData()</code> method we used
|
65
|
-
earlier to push data to some other application requesting our clipboard
|
66
|
-
data. As with <code class="methodname">setDNDData()</code>, the arguments to
|
67
|
-
<code class="methodname">getDNDData()</code> indicate the kind of data transfer
|
68
|
-
we're performing (e.g. <code class="constant">FROM_CLIPBOARD</code>) and the drag
|
69
|
-
type for the data we're requesting. If some failure occurs (usually,
|
70
|
-
because the clipboard owner can't provide its data in the requested
|
71
|
-
format) <code class="methodname">getDNDData()</code> will simply return
|
72
|
-
<code class="constant">nil</code>.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="clipboardtut.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dragdroptut.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Sending Data to the Clipboard </td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. Drag and Drop</td></tr></table></div></body></html>
|
data/doc/ch05s02.html
DELETED
@@ -1,260 +0,0 @@
|
|
1
|
-
<html><head>
|
2
|
-
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Drag Sources</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="prev" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="next" href="ch05s03.html" title="Putting It All Together"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Drag Sources</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dragdroptut.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Drag and Drop</th><td width="20%" align="right"> <a accesskey="n" href="ch05s03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1373"></a>Drag Sources</h2></div></div></div><p>As before, we're going to start by presenting a skeleton application
|
4
|
-
consisting of a main window widget (a <code class="classname">DragSource</code>
|
5
|
-
instance) that parents an <code class="classname">FXCanvas</code> widget:</p><pre class="programlisting">require 'fox16'
|
6
|
-
|
7
|
-
include Fox
|
8
|
-
|
9
|
-
class DragSource < FXMainWindow
|
10
|
-
def initialize(anApp)
|
11
|
-
# Initialize base class
|
12
|
-
super(anApp, "Drag Source", :opts => DECOR_ALL, :width => 400, :height => 300)
|
13
|
-
|
14
|
-
# Fill main window with canvas
|
15
|
-
@canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
16
|
-
@canvas.backColor = "red"
|
17
|
-
|
18
|
-
# Handle expose events on the canvas
|
19
|
-
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
20
|
-
FXDCWindow.new(@canvas, event) do |dc|
|
21
|
-
dc.foreground = @canvas.backColor
|
22
|
-
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def create
|
28
|
-
# Create the main window and canvas
|
29
|
-
super
|
30
|
-
|
31
|
-
# Register the drag type for colors
|
32
|
-
FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
|
33
|
-
|
34
|
-
# Show the main window
|
35
|
-
show(PLACEMENT_SCREEN)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
if __FILE__ == $0
|
40
|
-
FXApp.new("DragSource", "FXRuby") do |theApp|
|
41
|
-
DragSource.new(theApp)
|
42
|
-
theApp.create
|
43
|
-
theApp.run
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
</pre><p>Since the main program (i.e. the part at the end) won't change for
|
48
|
-
the rest of the tutorial, I won't show that code anymore. Furthermore, the
|
49
|
-
<code class="classname">DragSource</code> class has a few things in common with
|
50
|
-
the <code class="classname">DropSite</code> class from the previous example,
|
51
|
-
namely:</p><div class="itemizedlist"><ul type="disc"><li><p>We've defined a <code class="constant">SEL_PAINT</code> handler for the
|
52
|
-
canvas widget that just clears the canvas to its current background
|
53
|
-
color; and,</p></li><li><p>The drag type for colors
|
54
|
-
(<code class="constant">FXWindow.colorType</code>) is registered in the
|
55
|
-
<code class="classname">DragSource</code>'s <code class="methodname">create</code>
|
56
|
-
method.</p></li></ul></div><p>As before, you may want to run this basic version of the program to
|
57
|
-
be sure that it's working properly so far. You should simply see an empty
|
58
|
-
window with a red background.</p><p>Now for this application, we want a drag operation to begin when the
|
59
|
-
user presses the left mouse button inside the canvas and starts "dragging"
|
60
|
-
away from the canvas. So the first change we need to make is to add a
|
61
|
-
handler for the <code class="constant">SEL_LEFTBUTTONPRESS</code> message from the
|
62
|
-
canvas:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
63
|
-
#
|
64
|
-
# Capture (grab) the mouse when the button goes down, so that all future
|
65
|
-
# mouse events will be reported to this widget, even if those events occur
|
66
|
-
# outside of this widget.
|
67
|
-
#
|
68
|
-
@canvas.grab
|
69
|
-
|
70
|
-
# Advertise which drag types we can offer
|
71
|
-
dragTypes = [FXWindow.colorType]
|
72
|
-
@canvas.beginDrag(dragTypes)
|
73
|
-
end
|
74
|
-
</pre><p>Note that there are usually two things you're going to want to do in
|
75
|
-
the <code class="constant">SEL_LEFTBUTTONPRESS</code> handler for a drag source.
|
76
|
-
The first is to call <code class="methodname">grab</code> on the window that
|
77
|
-
acts as the drag source. Calling <code class="methodname">grab</code>
|
78
|
-
"captures" the mouse in the sense that subsequent mouse motion events will
|
79
|
-
be reported as if they occurred inside the grab window. This is important,
|
80
|
-
since in our case we're going to be dragging from this window to some
|
81
|
-
other window, possibly a window in a different application
|
82
|
-
altogether.</p><p>The second thing you'll want to do in the
|
83
|
-
<code class="constant">SEL_LEFTBUTTONPRESS</code> handler for a drag source is to
|
84
|
-
call <code class="methodname">beginDrag</code>. This not only kicks the
|
85
|
-
application into drag-and-drop mode, but also provides a way for you to
|
86
|
-
inform the system about the formats of data (i.e. the drag types) that
|
87
|
-
this drag source is able to provide. For this example, the drag source is
|
88
|
-
just going to offer one drag type.</p><p>Since releasing the left mouse button should end the drag operation,
|
89
|
-
it's important to also add a handler for the
|
90
|
-
<code class="constant">SEL_LEFTBUTTONRELEASE</code> message:</p><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONRELEASE) do
|
91
|
-
@canvas.ungrab
|
92
|
-
@canvas.endDrag
|
93
|
-
end
|
94
|
-
</pre><p>This is pretty much the mirror image of our
|
95
|
-
<code class="constant">SEL_LEFTBUTTONPRESS</code> handler. We call
|
96
|
-
<code class="methodname">ungrab</code> to release the mouse capture, and
|
97
|
-
<code class="methodname">endDrag</code> to clean up the drag-and-drop
|
98
|
-
state.</p><p>The next change is to add a <code class="constant">SEL_MOTION</code> handler,
|
99
|
-
to handle mouse motion events during the drag operation:</p><pre class="programlisting">@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
100
|
-
if @canvas.dragging?
|
101
|
-
@canvas.handleDrag(event.root_x, event.root_y)
|
102
|
-
unless @canvas.didAccept == DRAG_REJECT
|
103
|
-
@canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
|
104
|
-
else
|
105
|
-
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
</pre><p>The <code class="methodname">dragging?</code> method returns true if we're
|
110
|
-
in the middle of a drag-and-drop operation for the drag source window,
|
111
|
-
i.e. after the call to <code class="methodname">beginDrag</code> but before the
|
112
|
-
call to <code class="methodname">endDrag</code>. If we're not currently
|
113
|
-
processing a drag operation, we're not really interested in mouse motion
|
114
|
-
events for the canvas.</p><p>If we <span class="emphasis"><em>are</em></span> processing a drag operation, however,
|
115
|
-
we need to call <code class="methodname">handleDrag</code> on the drag source
|
116
|
-
window. FOX uses this information to send drag-and-drop messages (such as
|
117
|
-
<code class="constant">SEL_DND_ENTER</code>, <code class="constant">SEL_DND_MOTION</code>
|
118
|
-
and <code class="constant">SEL_DND_LEAVE</code>) to the window that the mouse is
|
119
|
-
currently over. Note that the coordinates passed to
|
120
|
-
<code class="methodname">handleDrag</code> are root window coordinates, and not
|
121
|
-
window-local coordinates.</p><p>Another good thing to consider doing here is to change the shape of
|
122
|
-
the cursor depending on the drop site's response to the drag-and-drop
|
123
|
-
messages from the drag source. For this example, we change the drag cursor
|
124
|
-
to one of FOX's built-in cursor shapes
|
125
|
-
(<code class="constant">DEF_SWATCH_CURSOR</code>) if we get any response other than
|
126
|
-
<code class="constant">DRAG_REJECT</code> from the drop site. If the drop site
|
127
|
-
rejects this drag source's overtures, we instead change the drag cursor to
|
128
|
-
a cursor that resembles a stop sign
|
129
|
-
(<code class="constant">DEF_DNDSTOP_CURSOR</code>).</p><p>I've purposely avoided suggesting that you run the program for the
|
130
|
-
last couple of changes, since until now there wasn't going to be any
|
131
|
-
visual indication that anything interesting was happening. But now you
|
132
|
-
should be able to run the application in its current state and see a few
|
133
|
-
things.</p><p>A first test is to confirm that the cursor shape changes to the
|
134
|
-
"stop" sign when you attempt to drag over some window that isn't willing
|
135
|
-
to accept a drop of the <code class="constant">FXWindow.colorType</code> drag type.
|
136
|
-
Start up one of the other FXRuby example programs (such as the
|
137
|
-
<code class="filename">scribble.rb</code> example) alongside your drag source
|
138
|
-
program, and then try "dragging" from the drag source's canvas onto the
|
139
|
-
Scribble program's canvas. During the drag attempt, the cursor should
|
140
|
-
maintain its shape as a "stop" sign since the canvas in the
|
141
|
-
<code class="filename">scribble.rb</code> example isn't drop-enabled.</p><p>Your next test can confirm that the cursor shape changes to the
|
142
|
-
"swatch" cursor (a small square) when you attempt to drag over a window
|
143
|
-
that is drop-enabled, and which is willing to accepts drops of this drag
|
144
|
-
type. The obvious choice is the example from the previous section (the
|
145
|
-
dropsite.rb program), but you should have success with any FXRuby example
|
146
|
-
program that displays color wells. Start up one of these drop-enabled
|
147
|
-
programs alongside your drag source program, and then try "dragging" from
|
148
|
-
the drag source's canvas onto the drop site. While the mouse pointer is
|
149
|
-
over a drop-enabled window, the cursor should change its shape.</p><p>The last (and most important) step is to actually complete the data
|
150
|
-
transfer. At any time during a drag-and-drop operation, a drop site may
|
151
|
-
request a copy of the drag-and-drop data by calling the
|
152
|
-
<code class="methodname">getDNDData</code> method (as described in the previous
|
153
|
-
section). When this happens, FOX sends a
|
154
|
-
<code class="constant">SEL_DND_REQUEST</code> message to the current drag source
|
155
|
-
window, and so we now add a handler for that message:</p><pre class="programlisting">@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
|
156
|
-
if event.target == FXWindow.colorType
|
157
|
-
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
158
|
-
end
|
159
|
-
end
|
160
|
-
</pre><p>The first important thing to note here is that the
|
161
|
-
<code class="varname">target</code> field of the <code class="classname">FXEvent</code>
|
162
|
-
instance will contain the drag type requested by the drop site. If your
|
163
|
-
drag source offers its data in multiple formats, you definitely need to
|
164
|
-
check this in order to know how to package-up the data for transfer.
|
165
|
-
However, even if you're only offering the data in a single format (as in
|
166
|
-
this example) it's still a good idea to check the requested type, since a
|
167
|
-
rogue drop site could ask for the data in some unexpected format.</p><p>Assuming that the drag type is as expected, the last step is send
|
168
|
-
the data to the drop site by calling
|
169
|
-
<code class="methodname">setDNDData</code>. As with the call to
|
170
|
-
<code class="methodname">getDNDData</code> for our previous drop site program,
|
171
|
-
you want to be sure to specify the origin of the data
|
172
|
-
(<code class="constant">FROM_DRAGNDROP</code>), the drag type
|
173
|
-
(<code class="constant">FXWindow.colorType</code>) and the data itself as a binary
|
174
|
-
string.</p><p>As a final test of the completed program, try dragging from this
|
175
|
-
window to some drop-enabled window (as described earlier). Now, when you
|
176
|
-
release the left mouse button to complete the "drop", the drop site should
|
177
|
-
change its color to red.</p><p>The complete program is listed below, and is included in the
|
178
|
-
<code class="filename">examples</code> directory under the file
|
179
|
-
name <code class="filename">dragsource.rb</code>.</p><pre class="programlisting">require 'fox16'
|
180
|
-
|
181
|
-
include Fox
|
182
|
-
|
183
|
-
class DragSource < FXMainWindow
|
184
|
-
def initialize(anApp)
|
185
|
-
# Initialize base class
|
186
|
-
super(anApp, "Drag Source", :opts => DECOR_ALL, :width => 400, :height => 300)
|
187
|
-
|
188
|
-
# Fill main window with canvas
|
189
|
-
@canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
190
|
-
@canvas.backColor = "red"
|
191
|
-
|
192
|
-
# Handle expose events on the canvas
|
193
|
-
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
194
|
-
FXDCWindow.new(@canvas, event) do |dc|
|
195
|
-
dc.foreground = @canvas.backColor
|
196
|
-
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
# Handle left button press
|
201
|
-
@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
202
|
-
#
|
203
|
-
# Capture (grab) the mouse when the button goes down, so that all future
|
204
|
-
# mouse events will be reported to this widget, even if those events occur
|
205
|
-
# outside of this widget.
|
206
|
-
#
|
207
|
-
@canvas.grab
|
208
|
-
|
209
|
-
# Advertise which drag types we can offer
|
210
|
-
dragTypes = [FXWindow.colorType]
|
211
|
-
@canvas.beginDrag(dragTypes)
|
212
|
-
end
|
213
|
-
|
214
|
-
# Handle mouse motion events
|
215
|
-
@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
216
|
-
if @canvas.dragging?
|
217
|
-
@canvas.handleDrag(event.root_x, event.root_y)
|
218
|
-
unless @canvas.didAccept == DRAG_REJECT
|
219
|
-
@canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
|
220
|
-
else
|
221
|
-
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
222
|
-
end
|
223
|
-
end
|
224
|
-
end
|
225
|
-
|
226
|
-
# Handle left button release
|
227
|
-
@canvas.connect(SEL_LEFTBUTTONRELEASE) do
|
228
|
-
@canvas.ungrab
|
229
|
-
@canvas.endDrag
|
230
|
-
end
|
231
|
-
|
232
|
-
# Handle request for DND data
|
233
|
-
@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
|
234
|
-
if event.target == FXWindow.colorType
|
235
|
-
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
def create
|
241
|
-
# Create the main window and canvas
|
242
|
-
super
|
243
|
-
|
244
|
-
# Register the drag type for colors
|
245
|
-
FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
|
246
|
-
|
247
|
-
# Show the main window
|
248
|
-
show(PLACEMENT_SCREEN)
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
if __FILE__ == $0
|
253
|
-
FXApp.new("DragSource", "FXRuby") do |theApp|
|
254
|
-
DragSource.new(theApp)
|
255
|
-
theApp.create
|
256
|
-
theApp.run
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
</pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dragdroptut.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="dragdroptut.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch05s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 5. Drag and Drop </td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top"> Putting It All Together</td></tr></table></div></body></html>
|
data/doc/ch05s03.html
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
<html><head>
|
2
|
-
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
-
<title>Putting It All Together</title><link rel="stylesheet" href="style.css" type="text/css"><meta name="generator" content="DocBook v5 XSL Stylesheets V1.72.0"><link rel="start" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="prev" href="ch05s02.html" title="Drag Sources"><link rel="next" href="unicode.html" title="Chapter 6. Unicode and FXRuby"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Putting It All Together</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a> </td><th width="60%" align="center">Chapter 5. Drag and Drop</th><td width="20%" align="right"> <a accesskey="n" href="unicode.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e1567"></a>Putting It All Together</h2></div></div></div><p>We've studied drag-and-drop enabled applications from two points of
|
4
|
-
view, that of a drag source and that of a drop site. But for most
|
5
|
-
applications, you'll want a window to act as both a drag source
|
6
|
-
<span class="emphasis"><em>and</em></span> a drop site. As it turns out, this is just a
|
7
|
-
simple combination of the techniques we've already seen in the previous
|
8
|
-
sections.</p><p>If we use our completed drag source example program from the
|
9
|
-
previous section as a starting point, and then compare it to the drop site
|
10
|
-
example from the first section, it is apparent that the only "pieces"
|
11
|
-
missing are:</p><div class="itemizedlist"><ul type="disc"><li><p>A call to <code class="methodname">dropEnable</code>, to make
|
12
|
-
<code class="classname">DragSource</code>'s canvas drop-enabled;</p></li><li><p>A handler for the <code class="constant">SEL_DND_MOTION</code> message;
|
13
|
-
and,</p></li><li><p>A handler for the <code class="constant">SEL_DND_DROP</code>
|
14
|
-
message.</p></li></ul></div><p>If you merge those three short bits of code from
|
15
|
-
<code class="filename">dropsite.rb</code> into <code class="filename">dragsource.rb</code>,
|
16
|
-
you should end up with a program that can act as both a drag source and a
|
17
|
-
drop site. To test this program, you should be able to start up two
|
18
|
-
separate copies side-by-side and then drag from one to the other. Since,
|
19
|
-
as written, both copies will start up with a red background, you might
|
20
|
-
want to modify one of them to have a different initial backgroud color.
|
21
|
-
Another interesting possibility is to start up a third program (such as an
|
22
|
-
FXRuby example that has displays a color dialog) and drag colors back and
|
23
|
-
forth between all three programs. You could spend days doing this and
|
24
|
-
never leave the house.</p><p>The complete program is listed below, and is included in the
|
25
|
-
<code class="filename">examples</code> directory under the file
|
26
|
-
name <code class="filename">dragdrop.rb</code>.</p><pre class="programlisting">require 'fox16'
|
27
|
-
|
28
|
-
include Fox
|
29
|
-
|
30
|
-
class DragDropWindow < FXMainWindow
|
31
|
-
def initialize(anApp)
|
32
|
-
# Initialize base class
|
33
|
-
super(anApp, "Drag and Drop", :opts => DECOR_ALL, :width => 400, :height => 300)
|
34
|
-
|
35
|
-
# Fill main window with canvas
|
36
|
-
@canvas = FXCanvas.new(self, :opts => LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
37
|
-
@canvas.backColor = "red"
|
38
|
-
|
39
|
-
# Enable canvas for drag-and-drop messages
|
40
|
-
@canvas.dropEnable
|
41
|
-
|
42
|
-
# Handle expose events on the canvas
|
43
|
-
@canvas.connect(SEL_PAINT) do |sender, sel, event|
|
44
|
-
FXDCWindow.new(@canvas, event) do |dc|
|
45
|
-
dc.foreground = @canvas.backColor
|
46
|
-
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Handle left button press
|
51
|
-
@canvas.connect(SEL_LEFTBUTTONPRESS) do
|
52
|
-
#
|
53
|
-
# Capture (grab) the mouse when the button goes down, so that all future
|
54
|
-
# mouse events will be reported to this widget, even if those events occur
|
55
|
-
# outside of this widget.
|
56
|
-
#
|
57
|
-
@canvas.grab
|
58
|
-
|
59
|
-
# Advertise which drag types we can offer
|
60
|
-
dragTypes = [FXWindow.colorType]
|
61
|
-
@canvas.beginDrag(dragTypes)
|
62
|
-
end
|
63
|
-
|
64
|
-
# Handle mouse motion events
|
65
|
-
@canvas.connect(SEL_MOTION) do |sender, sel, event|
|
66
|
-
if @canvas.dragging?
|
67
|
-
@canvas.handleDrag(event.root_x, event.root_y)
|
68
|
-
unless @canvas.didAccept == DRAG_REJECT
|
69
|
-
@canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
|
70
|
-
else
|
71
|
-
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
# Handle SEL_DND_MOTION messages from the canvas
|
77
|
-
@canvas.connect(SEL_DND_MOTION) do
|
78
|
-
if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
|
79
|
-
@canvas.acceptDrop
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
# Handle left button release
|
84
|
-
@canvas.connect(SEL_LEFTBUTTONRELEASE) do
|
85
|
-
@canvas.ungrab
|
86
|
-
@canvas.endDrag
|
87
|
-
end
|
88
|
-
|
89
|
-
# Handle SEL_DND_DROP message from the canvas
|
90
|
-
@canvas.connect(SEL_DND_DROP) do
|
91
|
-
# Try to obtain the data as color values first
|
92
|
-
data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
|
93
|
-
unless data.nil?
|
94
|
-
# Update canvas background color
|
95
|
-
@canvas.backColor = Fox.fxdecodeColorData(data)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
# Handle request for DND data
|
100
|
-
@canvas.connect(SEL_DND_REQUEST) do |sender, sel, event|
|
101
|
-
if event.target == FXWindow.colorType
|
102
|
-
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def create
|
108
|
-
# Create the main window and canvas
|
109
|
-
super
|
110
|
-
|
111
|
-
# Register the drag type for colors
|
112
|
-
FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
|
113
|
-
|
114
|
-
# Show the main window
|
115
|
-
show(PLACEMENT_SCREEN)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
if __FILE__ == $0
|
120
|
-
FXApp.new("DragDrop", "FXRuby") do |theApp|
|
121
|
-
DragDropWindow.new(theApp)
|
122
|
-
theApp.create
|
123
|
-
theApp.run
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
</pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="dragdroptut.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="unicode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Drag Sources </td><td width="20%" align="center"><a accesskey="h" href="book.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. Unicode and FXRuby</td></tr></table></div></body></html>
|