fxruby 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ANNOUNCE +25 -0
- data/ChangeLog +10606 -0
- data/INSTALL +50 -0
- data/LICENSE +456 -0
- data/README +39 -0
- data/doc/apes02.html +21 -0
- data/doc/apes03.html +39 -0
- data/doc/book.html +3 -0
- data/doc/build.html +144 -0
- data/doc/ch03s02.html +24 -0
- data/doc/ch03s03.html +53 -0
- data/doc/ch03s04.html +37 -0
- data/doc/ch03s05.html +61 -0
- data/doc/ch04s02.html +72 -0
- data/doc/ch04s03.html +37 -0
- data/doc/ch04s04.html +72 -0
- data/doc/ch05s02.html +262 -0
- data/doc/ch05s03.html +128 -0
- data/doc/changes.html +75 -0
- data/doc/clipboardtut.html +68 -0
- data/doc/cvs.html +35 -0
- data/doc/differences.html +11 -0
- data/doc/dragdroptut.html +266 -0
- data/doc/events.html +36 -0
- data/doc/examples.html +104 -0
- data/doc/gems.html +73 -0
- data/doc/goals.html +39 -0
- 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 +16 -0
- data/doc/infosources.html +33 -0
- data/doc/library.html +30 -0
- data/doc/opengl.html +73 -0
- data/doc/pt01.html +3 -0
- data/doc/pt02.html +3 -0
- data/doc/scintilla.html +36 -0
- data/doc/todo.html +40 -0
- data/doc/tutorial1.html +97 -0
- data/examples/RAA.rb +25 -0
- data/examples/README +53 -0
- data/examples/babelfish.rb +107 -0
- data/examples/bounce.rb +159 -0
- data/examples/browser.rb +191 -0
- data/examples/button.rb +160 -0
- data/examples/datatarget.rb +223 -0
- data/examples/dctest.rb +702 -0
- data/examples/dialog.rb +148 -0
- data/examples/dilbert.rb +105 -0
- data/examples/dirlist.rb +63 -0
- data/examples/dragdrop.rb +101 -0
- data/examples/dragsource.rb +81 -0
- data/examples/dropsite.rb +61 -0
- data/examples/foursplit.rb +103 -0
- data/examples/gltest.rb +342 -0
- data/examples/glviewer.rb +579 -0
- data/examples/groupbox.rb +422 -0
- data/examples/header.rb +150 -0
- data/examples/hello.rb +12 -0
- data/examples/hello2.rb +51 -0
- data/examples/iRAA.rb +153 -0
- data/examples/iconlist.rb +104 -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/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/undo.png +0 -0
- data/examples/icons/winapp.png +0 -0
- data/examples/icons/zoom.png +0 -0
- data/examples/image.rb +281 -0
- data/examples/imageviewer.rb +513 -0
- data/examples/inputs.rb +84 -0
- data/examples/mditest.rb +180 -0
- data/examples/pig.rb +77 -0
- data/examples/raabrowser.rb +132 -0
- data/examples/scintilla-test.rb +81 -0
- data/examples/scribble-orig.rb +186 -0
- data/examples/scribble.rb +166 -0
- data/examples/shutter.rb +158 -0
- data/examples/splitter.rb +211 -0
- data/examples/styledtext.rb +92 -0
- data/examples/tabbook.rb +124 -0
- data/examples/table.rb +187 -0
- data/examples/textedit/commands.rb +117 -0
- data/examples/textedit/helpwindow.rb +295 -0
- data/examples/textedit/prefdialog.rb +235 -0
- data/examples/textedit/textedit.rb +1767 -0
- data/ext/fox12/FXRbApp.cpp +127 -0
- data/ext/fox12/FXRbDataTarget.cpp +106 -0
- data/ext/fox12/FXRbGLViewer.cpp +89 -0
- data/ext/fox12/FXRuby.cpp +1818 -0
- data/ext/fox12/MANIFEST +189 -0
- data/ext/fox12/core_wrap.cpp +10119 -0
- data/ext/fox12/dc_wrap.cpp +2638 -0
- data/ext/fox12/dialogs_wrap.cpp +6244 -0
- data/ext/fox12/extconf.rb +176 -0
- data/ext/fox12/frames_wrap.cpp +8274 -0
- data/ext/fox12/fx3d_wrap.cpp +9315 -0
- data/ext/fox12/iconlist_wrap.cpp +3742 -0
- data/ext/fox12/icons_wrap.cpp +4040 -0
- data/ext/fox12/image_wrap.cpp +4026 -0
- data/ext/fox12/impl.cpp +1064 -0
- data/ext/fox12/include/FXMemoryBuffer.h +52 -0
- data/ext/fox12/include/FXRb4Splitter.h +54 -0
- data/ext/fox12/include/FXRbAccelTable.h +46 -0
- data/ext/fox12/include/FXRbApp.h +137 -0
- data/ext/fox12/include/FXRbAppVirtuals.h +15 -0
- data/ext/fox12/include/FXRbArrowButton.h +51 -0
- data/ext/fox12/include/FXRbBMPIcon.h +54 -0
- data/ext/fox12/include/FXRbBMPImage.h +54 -0
- data/ext/fox12/include/FXRbBitmap.h +115 -0
- data/ext/fox12/include/FXRbBitmapFrame.h +56 -0
- data/ext/fox12/include/FXRbBitmapView.h +52 -0
- data/ext/fox12/include/FXRbBitmapVirtuals.h +27 -0
- data/ext/fox12/include/FXRbButton.h +51 -0
- data/ext/fox12/include/FXRbCURCursor.h +60 -0
- data/ext/fox12/include/FXRbCanvas.h +51 -0
- data/ext/fox12/include/FXRbCheckButton.h +51 -0
- data/ext/fox12/include/FXRbColorBar.h +51 -0
- data/ext/fox12/include/FXRbColorDialog.h +53 -0
- data/ext/fox12/include/FXRbColorSelector.h +51 -0
- data/ext/fox12/include/FXRbColorWell.h +51 -0
- data/ext/fox12/include/FXRbColorWheel.h +51 -0
- data/ext/fox12/include/FXRbComboBox.h +56 -0
- data/ext/fox12/include/FXRbCommon.h +86 -0
- data/ext/fox12/include/FXRbComposite.h +51 -0
- data/ext/fox12/include/FXRbCursor.h +87 -0
- data/ext/fox12/include/FXRbCursorVirtuals.h +6 -0
- data/ext/fox12/include/FXRbDC.h +385 -0
- data/ext/fox12/include/FXRbDCPrint.h +49 -0
- data/ext/fox12/include/FXRbDCVirtuals.h +166 -0
- data/ext/fox12/include/FXRbDCWindow.h +64 -0
- data/ext/fox12/include/FXRbDataTarget.h +65 -0
- data/ext/fox12/include/FXRbDebugTarget.h +46 -0
- data/ext/fox12/include/FXRbDelegator.h +46 -0
- data/ext/fox12/include/FXRbDial.h +51 -0
- data/ext/fox12/include/FXRbDialogBox.h +68 -0
- data/ext/fox12/include/FXRbDialogBoxVirtuals.h +3 -0
- data/ext/fox12/include/FXRbDict.h +46 -0
- data/ext/fox12/include/FXRbDirBox.h +51 -0
- data/ext/fox12/include/FXRbDirDialog.h +53 -0
- data/ext/fox12/include/FXRbDirList.h +79 -0
- data/ext/fox12/include/FXRbDirSelector.h +51 -0
- data/ext/fox12/include/FXRbDocument.h +46 -0
- data/ext/fox12/include/FXRbDragCorner.h +51 -0
- data/ext/fox12/include/FXRbDrawable.h +64 -0
- data/ext/fox12/include/FXRbDrawableVirtuals.h +3 -0
- data/ext/fox12/include/FXRbDriveBox.h +51 -0
- data/ext/fox12/include/FXRbFileDialog.h +56 -0
- data/ext/fox12/include/FXRbFileDict.h +104 -0
- data/ext/fox12/include/FXRbFileDictVirtuals.h +9 -0
- data/ext/fox12/include/FXRbFileList.h +81 -0
- data/ext/fox12/include/FXRbFileSelector.h +51 -0
- data/ext/fox12/include/FXRbFoldingItemVirtuals.h +45 -0
- data/ext/fox12/include/FXRbFoldingList.h +183 -0
- data/ext/fox12/include/FXRbFont.h +70 -0
- data/ext/fox12/include/FXRbFontDialog.h +53 -0
- data/ext/fox12/include/FXRbFontSelector.h +51 -0
- data/ext/fox12/include/FXRbFrame.h +51 -0
- data/ext/fox12/include/FXRbGIFCursor.h +60 -0
- data/ext/fox12/include/FXRbGIFIcon.h +54 -0
- data/ext/fox12/include/FXRbGIFImage.h +54 -0
- data/ext/fox12/include/FXRbGLCanvas.h +92 -0
- data/ext/fox12/include/FXRbGLCanvasVirtuals.h +13 -0
- data/ext/fox12/include/FXRbGLContext.h +58 -0
- data/ext/fox12/include/FXRbGLObject.h +103 -0
- data/ext/fox12/include/FXRbGLObjectVirtuals.h +22 -0
- data/ext/fox12/include/FXRbGLShape.h +81 -0
- data/ext/fox12/include/FXRbGLShapeVirtuals.h +8 -0
- data/ext/fox12/include/FXRbGLViewer.h +83 -0
- data/ext/fox12/include/FXRbGLViewerVirtuals.h +6 -0
- data/ext/fox12/include/FXRbGLVisual.h +56 -0
- data/ext/fox12/include/FXRbGradientBar.h +55 -0
- data/ext/fox12/include/FXRbGroupBox.h +51 -0
- data/ext/fox12/include/FXRbHeader.h +125 -0
- data/ext/fox12/include/FXRbHeaderItemVirtuals.h +22 -0
- data/ext/fox12/include/FXRbHorizontalFrame.h +51 -0
- data/ext/fox12/include/FXRbICOIcon.h +54 -0
- data/ext/fox12/include/FXRbICOImage.h +54 -0
- data/ext/fox12/include/FXRbIcon.h +57 -0
- data/ext/fox12/include/FXRbIconItemVirtuals.h +71 -0
- data/ext/fox12/include/FXRbIconList.h +266 -0
- data/ext/fox12/include/FXRbIconListVirtuals.h +21 -0
- data/ext/fox12/include/FXRbId.h +74 -0
- data/ext/fox12/include/FXRbIdVirtuals.h +9 -0
- data/ext/fox12/include/FXRbImage.h +162 -0
- data/ext/fox12/include/FXRbImageFrame.h +56 -0
- data/ext/fox12/include/FXRbImageView.h +52 -0
- data/ext/fox12/include/FXRbImageVirtuals.h +51 -0
- data/ext/fox12/include/FXRbInputDialog.h +53 -0
- data/ext/fox12/include/FXRbJPGIcon.h +54 -0
- data/ext/fox12/include/FXRbJPGImage.h +54 -0
- data/ext/fox12/include/FXRbLabel.h +51 -0
- data/ext/fox12/include/FXRbList.h +204 -0
- data/ext/fox12/include/FXRbListBox.h +56 -0
- data/ext/fox12/include/FXRbListItemVirtuals.h +36 -0
- data/ext/fox12/include/FXRbListVirtuals.h +18 -0
- data/ext/fox12/include/FXRbMDIButton.h +162 -0
- data/ext/fox12/include/FXRbMDIChild.h +82 -0
- data/ext/fox12/include/FXRbMDIChildVirtuals.h +12 -0
- data/ext/fox12/include/FXRbMDIClient.h +80 -0
- data/ext/fox12/include/FXRbMDIClientVirtuals.h +12 -0
- data/ext/fox12/include/FXRbMainWindow.h +54 -0
- data/ext/fox12/include/FXRbMatrix.h +51 -0
- data/ext/fox12/include/FXRbMenuBar.h +63 -0
- data/ext/fox12/include/FXRbMenuButton.h +51 -0
- data/ext/fox12/include/FXRbMenuCaption.h +51 -0
- data/ext/fox12/include/FXRbMenuCascade.h +51 -0
- data/ext/fox12/include/FXRbMenuCheck.h +49 -0
- data/ext/fox12/include/FXRbMenuCommand.h +49 -0
- data/ext/fox12/include/FXRbMenuPane.h +52 -0
- data/ext/fox12/include/FXRbMenuRadio.h +49 -0
- data/ext/fox12/include/FXRbMenuSeparator.h +51 -0
- data/ext/fox12/include/FXRbMenuTitle.h +51 -0
- data/ext/fox12/include/FXRbMessageBox.h +56 -0
- data/ext/fox12/include/FXRbObject.h +67 -0
- data/ext/fox12/include/FXRbObjectVirtuals.h +9 -0
- data/ext/fox12/include/FXRbOptionMenu.h +73 -0
- data/ext/fox12/include/FXRbPCXIcon.h +54 -0
- data/ext/fox12/include/FXRbPCXImage.h +54 -0
- data/ext/fox12/include/FXRbPNGIcon.h +54 -0
- data/ext/fox12/include/FXRbPNGImage.h +54 -0
- data/ext/fox12/include/FXRbPPMIcon.h +54 -0
- data/ext/fox12/include/FXRbPPMImage.h +54 -0
- data/ext/fox12/include/FXRbPacker.h +51 -0
- data/ext/fox12/include/FXRbPicker.h +51 -0
- data/ext/fox12/include/FXRbPopup.h +70 -0
- data/ext/fox12/include/FXRbPopupVirtuals.h +6 -0
- data/ext/fox12/include/FXRbPrintDialog.h +53 -0
- data/ext/fox12/include/FXRbProgressBar.h +51 -0
- data/ext/fox12/include/FXRbProgressDialog.h +53 -0
- data/ext/fox12/include/FXRbRGBIcon.h +54 -0
- data/ext/fox12/include/FXRbRGBImage.h +54 -0
- data/ext/fox12/include/FXRbRadioButton.h +51 -0
- data/ext/fox12/include/FXRbRealSlider.h +51 -0
- data/ext/fox12/include/FXRbRealSpinner.h +64 -0
- data/ext/fox12/include/FXRbRealSpinnerVirtuals.h +3 -0
- data/ext/fox12/include/FXRbRecentFiles.h +49 -0
- data/ext/fox12/include/FXRbRegistry.h +46 -0
- data/ext/fox12/include/FXRbReplaceDialog.h +53 -0
- data/ext/fox12/include/FXRbRootWindow.h +51 -0
- data/ext/fox12/include/FXRbRuler.h +56 -0
- data/ext/fox12/include/FXRbScintilla.h +52 -0
- data/ext/fox12/include/FXRbScrollArea.h +82 -0
- data/ext/fox12/include/FXRbScrollAreaVirtuals.h +13 -0
- data/ext/fox12/include/FXRbScrollBar.h +73 -0
- data/ext/fox12/include/FXRbScrollPane.h +52 -0
- data/ext/fox12/include/FXRbScrollWindow.h +52 -0
- data/ext/fox12/include/FXRbSearchDialog.h +53 -0
- data/ext/fox12/include/FXRbSeparator.h +95 -0
- data/ext/fox12/include/FXRbSettings.h +46 -0
- data/ext/fox12/include/FXRbShell.h +56 -0
- data/ext/fox12/include/FXRbShutter.h +86 -0
- data/ext/fox12/include/FXRbShutterVirtuals.h +3 -0
- data/ext/fox12/include/FXRbSlider.h +51 -0
- data/ext/fox12/include/FXRbSpinner.h +64 -0
- data/ext/fox12/include/FXRbSpinnerVirtuals.h +3 -0
- data/ext/fox12/include/FXRbSplitter.h +54 -0
- data/ext/fox12/include/FXRbSpring.h +51 -0
- data/ext/fox12/include/FXRbStatusBar.h +51 -0
- data/ext/fox12/include/FXRbStatusLine.h +51 -0
- data/ext/fox12/include/FXRbStream.h +101 -0
- data/ext/fox12/include/FXRbStreamVirtuals.h +9 -0
- data/ext/fox12/include/FXRbStringDict.h +46 -0
- data/ext/fox12/include/FXRbSwitcher.h +51 -0
- data/ext/fox12/include/FXRbTGAIcon.h +54 -0
- data/ext/fox12/include/FXRbTGAImage.h +54 -0
- data/ext/fox12/include/FXRbTIFIcon.h +54 -0
- data/ext/fox12/include/FXRbTIFImage.h +54 -0
- data/ext/fox12/include/FXRbTabBar.h +64 -0
- data/ext/fox12/include/FXRbTabBarVirtuals.h +3 -0
- data/ext/fox12/include/FXRbTabBook.h +52 -0
- data/ext/fox12/include/FXRbTabItem.h +51 -0
- data/ext/fox12/include/FXRbTable.h +416 -0
- data/ext/fox12/include/FXRbTableItemVirtuals.h +68 -0
- data/ext/fox12/include/FXRbTableVirtuals.h +73 -0
- data/ext/fox12/include/FXRbText.h +89 -0
- data/ext/fox12/include/FXRbTextField.h +51 -0
- data/ext/fox12/include/FXRbTextVirtuals.h +9 -0
- data/ext/fox12/include/FXRbToggleButton.h +51 -0
- data/ext/fox12/include/FXRbToolBar.h +80 -0
- data/ext/fox12/include/FXRbToolBarGrip.h +51 -0
- data/ext/fox12/include/FXRbToolBarShell.h +52 -0
- data/ext/fox12/include/FXRbToolBarTab.h +51 -0
- data/ext/fox12/include/FXRbToolBarVirtuals.h +6 -0
- data/ext/fox12/include/FXRbToolTip.h +51 -0
- data/ext/fox12/include/FXRbTopWindow.h +91 -0
- data/ext/fox12/include/FXRbTopWindowVirtuals.h +15 -0
- data/ext/fox12/include/FXRbTreeItemVirtuals.h +42 -0
- data/ext/fox12/include/FXRbTreeList.h +249 -0
- data/ext/fox12/include/FXRbTreeListBox.h +53 -0
- data/ext/fox12/include/FXRbTreeListVirtuals.h +30 -0
- data/ext/fox12/include/FXRbTriStateButton.h +51 -0
- data/ext/fox12/include/FXRbVerticalFrame.h +51 -0
- data/ext/fox12/include/FXRbVisual.h +56 -0
- data/ext/fox12/include/FXRbWindow.h +200 -0
- data/ext/fox12/include/FXRbWindowVirtuals.h +69 -0
- data/ext/fox12/include/FXRbWizard.h +60 -0
- data/ext/fox12/include/FXRbXBMIcon.h +54 -0
- data/ext/fox12/include/FXRbXBMImage.h +54 -0
- data/ext/fox12/include/FXRbXPMIcon.h +54 -0
- data/ext/fox12/include/FXRbXPMImage.h +54 -0
- data/ext/fox12/include/FXRuby.h +728 -0
- data/ext/fox12/include/impl.h +201 -0
- data/ext/fox12/include/inlinestubs.h +1063 -0
- data/ext/fox12/label_wrap.cpp +4945 -0
- data/ext/fox12/layout_wrap.cpp +5061 -0
- data/ext/fox12/librb.c +636 -0
- data/ext/fox12/list_wrap.cpp +2212 -0
- data/ext/fox12/markfuncs.cpp +1568 -0
- data/ext/fox12/mdi_wrap.cpp +4521 -0
- data/ext/fox12/menu_wrap.cpp +4673 -0
- data/ext/fox12/scintilla_wrap.cpp +2245 -0
- data/ext/fox12/table_wrap.cpp +3581 -0
- data/ext/fox12/text_wrap.cpp +3539 -0
- data/ext/fox12/treelist_wrap.cpp +5609 -0
- data/ext/fox12/ui_wrap.cpp +10017 -0
- data/index.html +14 -0
- data/lib/fox12/aliases.rb +5211 -0
- data/lib/fox12/calendar.rb +218 -0
- data/lib/fox12/chore.rb +51 -0
- data/lib/fox12/colors.rb +282 -0
- data/lib/fox12/core.rb +249 -0
- data/lib/fox12/dict.rb +35 -0
- data/lib/fox12/glgroup.rb +165 -0
- data/lib/fox12/glshapes.rb +457 -0
- data/lib/fox12/input.rb +56 -0
- data/lib/fox12/irb.rb +179 -0
- data/lib/fox12/iterators.rb +331 -0
- data/lib/fox12/keys.rb +1376 -0
- data/lib/fox12/missingdep.rb +16 -0
- data/lib/fox12/pseudokeyboard.rb +36 -0
- data/lib/fox12/pseudomouse.rb +84 -0
- data/lib/fox12/responder.rb +72 -0
- data/lib/fox12/responder2.rb +122 -0
- data/lib/fox12/scintilla.rb +2629 -0
- data/lib/fox12/settings.rb +18 -0
- data/lib/fox12/signal.rb +68 -0
- data/lib/fox12/timeout.rb +58 -0
- data/lib/fox12/undolist.rb +456 -0
- data/lib/fox12/version.rb +11 -0
- data/rdoc-sources/FX4Splitter.rb +138 -0
- data/rdoc-sources/FXAccelTable.rb +67 -0
- data/rdoc-sources/FXApp.rb +557 -0
- data/rdoc-sources/FXArrowButton.rb +69 -0
- data/rdoc-sources/FXBMPIcon.rb +45 -0
- data/rdoc-sources/FXBMPImage.rb +20 -0
- data/rdoc-sources/FXBitmap.rb +78 -0
- data/rdoc-sources/FXBitmapFrame.rb +29 -0
- data/rdoc-sources/FXBitmapView.rb +41 -0
- data/rdoc-sources/FXButton.rb +43 -0
- data/rdoc-sources/FXCURCursor.rb +13 -0
- data/rdoc-sources/FXCanvas.rb +18 -0
- data/rdoc-sources/FXCheckButton.rb +57 -0
- data/rdoc-sources/FXColorBar.rb +43 -0
- data/rdoc-sources/FXColorDialog.rb +36 -0
- data/rdoc-sources/FXColorSelector.rb +65 -0
- data/rdoc-sources/FXColorWell.rb +57 -0
- data/rdoc-sources/FXColorWheel.rb +35 -0
- data/rdoc-sources/FXComboBox.rb +153 -0
- data/rdoc-sources/FXComposite.rb +34 -0
- data/rdoc-sources/FXCursor.rb +67 -0
- data/rdoc-sources/FXDC.rb +667 -0
- data/rdoc-sources/FXDCPrint.rb +127 -0
- data/rdoc-sources/FXDCWindow.rb +37 -0
- data/rdoc-sources/FXDataTarget.rb +41 -0
- data/rdoc-sources/FXDebugTarget.rb +25 -0
- data/rdoc-sources/FXDelegator.rb +23 -0
- data/rdoc-sources/FXDial.rb +68 -0
- data/rdoc-sources/FXDialogBox.rb +36 -0
- data/rdoc-sources/FXDict.rb +79 -0
- data/rdoc-sources/FXDirBox.rb +49 -0
- data/rdoc-sources/FXDirDialog.rb +18 -0
- data/rdoc-sources/FXDirList.rb +143 -0
- data/rdoc-sources/FXDirSelector.rb +30 -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/FXFileDialog.rb +132 -0
- data/rdoc-sources/FXFileDict.rb +168 -0
- data/rdoc-sources/FXFileList.rb +163 -0
- data/rdoc-sources/FXFileSelector.rb +148 -0
- data/rdoc-sources/FXFileStream.rb +24 -0
- data/rdoc-sources/FXFoldingList.rb +453 -0
- data/rdoc-sources/FXFont.rb +345 -0
- data/rdoc-sources/FXFontDialog.rb +14 -0
- data/rdoc-sources/FXFontSelector.rb +37 -0
- data/rdoc-sources/FXFrame.rb +47 -0
- data/rdoc-sources/FXGIFCursor.rb +38 -0
- data/rdoc-sources/FXGIFIcon.rb +21 -0
- data/rdoc-sources/FXGIFImage.rb +19 -0
- data/rdoc-sources/FXGLCanvas.rb +45 -0
- data/rdoc-sources/FXGLContext.rb +41 -0
- data/rdoc-sources/FXGLObject.rb +75 -0
- data/rdoc-sources/FXGLShape.rb +75 -0
- data/rdoc-sources/FXGLViewer.rb +309 -0
- data/rdoc-sources/FXGLVisual.rb +94 -0
- data/rdoc-sources/FXGradientBar.rb +291 -0
- data/rdoc-sources/FXGroupBox.rb +33 -0
- data/rdoc-sources/FXHeader.rb +377 -0
- data/rdoc-sources/FXHorizontalFrame.rb +29 -0
- data/rdoc-sources/FXICOIcon.rb +50 -0
- data/rdoc-sources/FXICOImage.rb +21 -0
- data/rdoc-sources/FXIcon.rb +38 -0
- data/rdoc-sources/FXIconList.rb +418 -0
- data/rdoc-sources/FXId.rb +34 -0
- data/rdoc-sources/FXImage.rb +198 -0
- data/rdoc-sources/FXImageFrame.rb +22 -0
- data/rdoc-sources/FXImageView.rb +35 -0
- data/rdoc-sources/FXInputDialog.rb +62 -0
- data/rdoc-sources/FXJPGIcon.rb +52 -0
- data/rdoc-sources/FXJPGImage.rb +25 -0
- data/rdoc-sources/FXLabel.rb +66 -0
- data/rdoc-sources/FXList.rb +412 -0
- data/rdoc-sources/FXListBox.rb +158 -0
- data/rdoc-sources/FXMDIButton.rb +67 -0
- data/rdoc-sources/FXMDIChild.rb +145 -0
- data/rdoc-sources/FXMDIClient.rb +67 -0
- data/rdoc-sources/FXMainWindow.rb +20 -0
- data/rdoc-sources/FXMat4.rb +171 -0
- data/rdoc-sources/FXMatrix.rb +57 -0
- data/rdoc-sources/FXMemoryBuffer.rb +19 -0
- data/rdoc-sources/FXMemoryStream.rb +45 -0
- data/rdoc-sources/FXMenuBar.rb +23 -0
- data/rdoc-sources/FXMenuButton.rb +84 -0
- data/rdoc-sources/FXMenuCaption.rb +47 -0
- data/rdoc-sources/FXMenuCascade.rb +18 -0
- data/rdoc-sources/FXMenuCheck.rb +30 -0
- data/rdoc-sources/FXMenuCommand.rb +27 -0
- data/rdoc-sources/FXMenuPane.rb +13 -0
- data/rdoc-sources/FXMenuRadio.rb +30 -0
- data/rdoc-sources/FXMenuSeparator.rb +21 -0
- data/rdoc-sources/FXMenuTitle.rb +27 -0
- data/rdoc-sources/FXMessageBox.rb +77 -0
- data/rdoc-sources/FXObject.rb +22 -0
- data/rdoc-sources/FXOptionMenu.rb +76 -0
- data/rdoc-sources/FXPCXIcon.rb +48 -0
- data/rdoc-sources/FXPCXImage.rb +21 -0
- data/rdoc-sources/FXPNGIcon.rb +48 -0
- data/rdoc-sources/FXPNGImage.rb +21 -0
- data/rdoc-sources/FXPPMIcon.rb +21 -0
- data/rdoc-sources/FXPPMImage.rb +21 -0
- data/rdoc-sources/FXPacker.rb +62 -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 +1 -0
- data/rdoc-sources/FXQuatf.rb +1 -0
- data/rdoc-sources/FXRGBIcon.rb +49 -0
- data/rdoc-sources/FXRGBImage.rb +21 -0
- data/rdoc-sources/FXRadioButton.rb +64 -0
- data/rdoc-sources/FXRanged.rb +97 -0
- data/rdoc-sources/FXRangef.rb +97 -0
- data/rdoc-sources/FXRealSlider.rb +99 -0
- data/rdoc-sources/FXRealSpinner.rb +133 -0
- data/rdoc-sources/FXRecentFiles.rb +73 -0
- data/rdoc-sources/FXRectangle.rb +137 -0
- data/rdoc-sources/FXRegion.rb +64 -0
- data/rdoc-sources/FXRegistry.rb +39 -0
- data/rdoc-sources/FXReplaceDialog.rb +56 -0
- data/rdoc-sources/FXRootWindow.rb +17 -0
- data/rdoc-sources/FXRuler.rb +60 -0
- data/rdoc-sources/FXScintilla.rb +121 -0
- data/rdoc-sources/FXScrollArea.rb +86 -0
- data/rdoc-sources/FXScrollBar.rb +101 -0
- data/rdoc-sources/FXScrollPane.rb +23 -0
- data/rdoc-sources/FXScrollWindow.rb +38 -0
- data/rdoc-sources/FXSearchDialog.rb +24 -0
- data/rdoc-sources/FXSeparator.rb +64 -0
- data/rdoc-sources/FXSettings.rb +222 -0
- data/rdoc-sources/FXShell.rb +7 -0
- data/rdoc-sources/FXShutter.rb +97 -0
- data/rdoc-sources/FXSize.rb +30 -0
- data/rdoc-sources/FXSlider.rb +96 -0
- data/rdoc-sources/FXSphered.rb +65 -0
- data/rdoc-sources/FXSpheref.rb +65 -0
- data/rdoc-sources/FXSpinner.rb +132 -0
- data/rdoc-sources/FXSplitter.rb +88 -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 +115 -0
- data/rdoc-sources/FXStringDict.rb +38 -0
- data/rdoc-sources/FXSwitcher.rb +78 -0
- data/rdoc-sources/FXTGAIcon.rb +48 -0
- data/rdoc-sources/FXTGAImage.rb +21 -0
- data/rdoc-sources/FXTIFIcon.rb +52 -0
- data/rdoc-sources/FXTIFImage.rb +24 -0
- data/rdoc-sources/FXTabBar.rb +76 -0
- data/rdoc-sources/FXTabBook.rb +38 -0
- data/rdoc-sources/FXTabItem.rb +51 -0
- data/rdoc-sources/FXTable.rb +654 -0
- data/rdoc-sources/FXText.rb +533 -0
- data/rdoc-sources/FXTextField.rb +141 -0
- data/rdoc-sources/FXToggleButton.rb +69 -0
- data/rdoc-sources/FXToolBar.rb +121 -0
- data/rdoc-sources/FXToolBarGrip.rb +55 -0
- data/rdoc-sources/FXToolBarShell.rb +44 -0
- data/rdoc-sources/FXToolTip.rb +36 -0
- data/rdoc-sources/FXTopWindow.rb +92 -0
- data/rdoc-sources/FXTreeList.rb +503 -0
- data/rdoc-sources/FXTreeListBox.rb +182 -0
- data/rdoc-sources/FXTriStateButton.rb +49 -0
- data/rdoc-sources/FXVec.rb +97 -0
- data/rdoc-sources/FXVec4.rb +91 -0
- data/rdoc-sources/FXVerticalFrame.rb +29 -0
- data/rdoc-sources/FXVisual.rb +79 -0
- data/rdoc-sources/FXWindow.rb +633 -0
- data/rdoc-sources/FXWizard.rb +63 -0
- data/rdoc-sources/FXXBMIcon.rb +22 -0
- data/rdoc-sources/FXXBMImage.rb +22 -0
- data/rdoc-sources/FXXPMIcon.rb +50 -0
- data/rdoc-sources/FXXPMImage.rb +21 -0
- data/rdoc-sources/README.rdoc +53 -0
- data/rdoc-sources/fxdefs.rb +90 -0
- data/tests/README +19 -0
- data/tests/TC_FXAccelTable.rb +43 -0
- data/tests/TC_FXApp.rb +15 -0
- data/tests/TC_FXArc.rb +26 -0
- data/tests/TC_FXButton.rb +72 -0
- data/tests/TC_FXCheckButton.rb +57 -0
- data/tests/TC_FXComboBox.rb +36 -0
- data/tests/TC_FXDC.rb +372 -0
- data/tests/TC_FXDCPrint.rb +102 -0
- data/tests/TC_FXDCWindow.rb +23 -0
- data/tests/TC_FXDataTarget.rb +24 -0
- data/tests/TC_FXDirList.rb +30 -0
- data/tests/TC_FXFileAssoc.rb +62 -0
- data/tests/TC_FXFileStream.rb +90 -0
- data/tests/TC_FXFont.rb +59 -0
- data/tests/TC_FXFontDesc.rb +62 -0
- data/tests/TC_FXGLGroup.rb +32 -0
- data/tests/TC_FXGLShape.rb +28 -0
- data/tests/TC_FXGLViewer.rb +18 -0
- data/tests/TC_FXGradientBar.rb +89 -0
- data/tests/TC_FXHeader.rb +82 -0
- data/tests/TC_FXIconDict.rb +52 -0
- data/tests/TC_FXIconList.rb +192 -0
- data/tests/TC_FXId.rb +19 -0
- data/tests/TC_FXImage.rb +144 -0
- data/tests/TC_FXLight.rb +33 -0
- data/tests/TC_FXList.rb +116 -0
- data/tests/TC_FXListBox.rb +49 -0
- data/tests/TC_FXMat4f.rb +228 -0
- data/tests/TC_FXMaterial.rb +75 -0
- data/tests/TC_FXMemoryStream.rb +87 -0
- data/tests/TC_FXMenuCommand.rb +26 -0
- data/tests/TC_FXPoint.rb +57 -0
- data/tests/TC_FXQuatf.rb +77 -0
- data/tests/TC_FXRadioButton.rb +57 -0
- data/tests/TC_FXRangef.rb +48 -0
- data/tests/TC_FXRectangle.rb +88 -0
- data/tests/TC_FXRegion.rb +54 -0
- data/tests/TC_FXRegistry.rb +27 -0
- data/tests/TC_FXScrollArea.rb +28 -0
- data/tests/TC_FXScrollWindow.rb +28 -0
- data/tests/TC_FXSegment.rb +22 -0
- data/tests/TC_FXShell.rb +26 -0
- data/tests/TC_FXSize.rb +54 -0
- data/tests/TC_FXStream.rb +11 -0
- data/tests/TC_FXTable.rb +468 -0
- data/tests/TC_FXTableItem.rb +48 -0
- data/tests/TC_FXText.rb +81 -0
- data/tests/TC_FXTopWindow.rb +32 -0
- data/tests/TC_FXTreeList.rb +83 -0
- data/tests/TC_FXTreeListBox.rb +23 -0
- data/tests/TC_FXUndoList.rb +43 -0
- data/tests/TC_FXVec2d.rb +142 -0
- data/tests/TC_FXVec2f.rb +137 -0
- data/tests/TC_FXVec3d.rb +150 -0
- data/tests/TC_FXVec3f.rb +150 -0
- data/tests/TC_FXVec4f.rb +158 -0
- data/tests/TC_FXViewport.rb +30 -0
- data/tests/TC_Misc.rb +157 -0
- data/tests/TC_downcast.rb +15 -0
- data/tests/TS_All.rb +25 -0
- data/tests/blankpage.ps +166 -0
- data/tests/doit.rb +5 -0
- data/tests/howdypage.ps +181 -0
- data/tests/stress1.rb +94 -0
- data/tests/stress2.rb +51 -0
- data/tests/stress3.rb +117 -0
- data/tests/testcase.rb +38 -0
- data/web/art/fxrubylogo.png +0 -0
- data/web/art/fxrubylogo_small.png +0 -0
- data/web/art/line.gif +0 -0
- data/web/art/oul_grey.gif +0 -0
- data/web/art/our.gif +0 -0
- data/web/downloads.html +91 -0
- data/web/home.html +109 -0
- data/web/menu.html +50 -0
- data/web/styles.css +167 -0
- data/web/top.html +15 -0
- metadata +737 -0
data/doc/ch04s03.html
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
<html><head>
|
2
|
+
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
+
<title>Sending Data to the Clipboard</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="previous" 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="d0e1076"></a>Sending Data to the Clipboard</h2></div></div><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
|
+
<tt class="constant">SEL_CLIPBOARD_REQUEST</tt> message to the current
|
6
|
+
clipboard owner. Remember, the clipboard owner is the window that called
|
7
|
+
<tt class="methodname">acquireClipboard()</tt>. For our example, the main
|
8
|
+
window is acting as the clipboard owner and so it needs to handle the
|
9
|
+
<tt class="constant">SEL_CLIPBOARD_REQUEST</tt> message:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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></td></tr></table><p>The <tt class="methodname">setDNDData()</tt> 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 (<tt class="constant">FROM_DRAGNDROP</tt>) and X11 selection
|
17
|
+
(<tt class="constant">FROM_SELECTION</tt>) data transfer as well. The second
|
18
|
+
argument to <tt class="methodname">setDNDData()</tt> 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
|
+
<tt class="methodname">fxencodeStringData()</tt> module method to preprocess
|
21
|
+
the string returned by the call to <tt class="methodname">Customer#to_s</tt>,
|
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 <tt class="methodname">fxencodeStringData()</tt>
|
28
|
+
method (and the corresponding
|
29
|
+
<tt class="methodname">fxdecodeStringData()</tt> method) provide you with a
|
30
|
+
platform-independent way of sending (or receiving) string data with the
|
31
|
+
<tt class="constant">stringType</tt> 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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">#<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown, NC", zip=12345>
|
37
|
+
</pre></td></tr></table></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
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
<html><head>
|
2
|
+
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
+
<title>Pasting Data from the Clipboard</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="clipboardtut.html" title="Chapter 4. Working With the Clipboard"><link rel="previous" 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="d0e1127"></a>Pasting Data from the Clipboard</h2></div></div><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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">#<struct Struct::Customer name="Joe Smith", address="123 Maple, Anytown, NC", zip=12345>
|
9
|
+
</pre></td></tr></table><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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'yaml'</pre></td></tr></table><p>somewhere near the top of the program. Next, register a custom drag
|
13
|
+
type for <tt class="classname">Customer</tt> objects. We can do that by adding
|
14
|
+
one line to our main window's <tt class="methodname">create</tt> instance
|
15
|
+
method:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">def create
|
16
|
+
super
|
17
|
+
<span class="bold"><b> @customerDragType = getApp().registerDragType("application/x-customer")
|
18
|
+
</b></span> show(PLACEMENT_SCREEN)
|
19
|
+
end
|
20
|
+
</pre></td></tr></table><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 <tt class="classname">Customer</tt> 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 <tt class="methodname">acquireClipboard()</tt>:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting"># User clicks Copy
|
29
|
+
copyButton.connect(SEL_COMMAND) do
|
30
|
+
customer = customerList.getItemData(customerList.currentItem)
|
31
|
+
<span class="bold"><b> types = [ FXWindow.stringType, @customerDragType ]
|
32
|
+
</b></span> if acquireClipboard(types)
|
33
|
+
@clippedCustomer = customer
|
34
|
+
end
|
35
|
+
end
|
36
|
+
</pre></td></tr></table><p>Similarly, when we're handling the
|
37
|
+
<tt class="constant">SEL_CLIPBOARD_REQUEST</tt> 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
|
+
<tt class="methodname">target</tt> attribute of the
|
41
|
+
<tt class="classname">FXEvent</tt> instance passed along with the
|
42
|
+
<tt class="constant">SEL_CLIPBOARD_REQUEST</tt> message:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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></td></tr></table><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><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><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></td></tr></table><p>The <tt class="methodname">getDNDData()</tt> method used here is the
|
64
|
+
inverse of the <tt class="methodname">setDNDData()</tt> method we used
|
65
|
+
earlier to push data to some other application requesting our clipboard
|
66
|
+
data. As with <tt class="methodname">setDNDData()</tt>, the arguments to
|
67
|
+
<tt class="methodname">getDNDData()</tt> indicate the kind of data transfer
|
68
|
+
we're performing (e.g. <tt class="constant">FROM_CLIPBOARD</tt>) 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) <tt class="methodname">getDNDData()</tt> will simply return
|
72
|
+
<tt class="constant">nil</tt>.</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
ADDED
@@ -0,0 +1,262 @@
|
|
1
|
+
<html><head>
|
2
|
+
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
+
<title>Drag Sources</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="previous" 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="d0e1375"></a>Drag Sources</h2></div></div><div></div></div><p>As before, we're going to start by presenting a skeleton application
|
4
|
+
consisting of a main window widget (a <tt class="classname">DragSource</tt>
|
5
|
+
instance) that parents an <tt class="classname">FXCanvas</tt> widget:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
|
6
|
+
require_gem 'fxruby'
|
7
|
+
|
8
|
+
include Fox
|
9
|
+
|
10
|
+
class DragSource < FXMainWindow
|
11
|
+
def initialize(anApp)
|
12
|
+
# Initialize base class
|
13
|
+
super(anApp, "Drag Source", nil, nil, DECOR_ALL, 0, 0, 400, 300)
|
14
|
+
|
15
|
+
# Fill main window with canvas
|
16
|
+
@canvas = FXCanvas.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
17
|
+
@canvas.backColor = "red"
|
18
|
+
|
19
|
+
# Handle expose events on the canvas
|
20
|
+
@canvas.connect(SEL_PAINT) { |sender, sel, event|
|
21
|
+
FXDCWindow.new(@canvas, event) { |dc|
|
22
|
+
dc.foreground = @canvas.backColor
|
23
|
+
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
# Create the main window and canvas
|
30
|
+
super
|
31
|
+
|
32
|
+
# Register the drag type for colors
|
33
|
+
FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
|
34
|
+
|
35
|
+
# Show the main window
|
36
|
+
show(PLACEMENT_SCREEN)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
if __FILE__ == $0
|
41
|
+
FXApp.new("DragSource", "FXRuby") do |theApp|
|
42
|
+
DragSource.new(theApp)
|
43
|
+
theApp.create
|
44
|
+
theApp.run
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
</pre></td></tr></table><p>Since the main program (i.e. the part at the end) won't change for
|
49
|
+
the rest of the tutorial, I won't show that code anymore. Furthermore, the
|
50
|
+
<tt class="classname">DragSource</tt> class has a few things in common with
|
51
|
+
the <tt class="classname">DropSite</tt> class from the previous example,
|
52
|
+
namely:</p><div class="itemizedlist"><ul type="disc"><li><p>We've defined a <tt class="constant">SEL_PAINT</tt> handler for the
|
53
|
+
canvas widget that just clears the canvas to its current background
|
54
|
+
color; and,</p></li><li><p>The drag type for colors
|
55
|
+
(<tt class="constant">FXWindow.colorType</tt>) is registered in the
|
56
|
+
<tt class="classname">DragSource</tt>'s <tt class="methodname">create()</tt>
|
57
|
+
method.</p></li></ul></div><p>As before, you may want to run this basic version of the program to
|
58
|
+
be sure that it's working properly so far. You should simply see an empty
|
59
|
+
window with a red background.</p><p>Now for this application, we want a drag operation to begin when the
|
60
|
+
user presses the left mouse button inside the canvas and starts "dragging"
|
61
|
+
away from the canvas. So the first change we need to make is to add a
|
62
|
+
handler for the <tt class="constant">SEL_LEFTBUTTONPRESS</tt> message from the
|
63
|
+
canvas:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONPRESS) {
|
64
|
+
#
|
65
|
+
# Capture (grab) the mouse when the button goes down, so that all future
|
66
|
+
# mouse events will be reported to this widget, even if those events occur
|
67
|
+
# outside of this widget.
|
68
|
+
#
|
69
|
+
@canvas.grab
|
70
|
+
|
71
|
+
# Advertise which drag types we can offer
|
72
|
+
dragTypes = [FXWindow.colorType]
|
73
|
+
@canvas.beginDrag(dragTypes)
|
74
|
+
}
|
75
|
+
</pre></td></tr></table><p>Note that there are usually two things you're going to want to do in
|
76
|
+
the <tt class="constant">SEL_LEFTBUTTONPRESS</tt> handler for a drag source.
|
77
|
+
The first is to call <tt class="methodname">grab()</tt> on the window that
|
78
|
+
acts as the drag source. Calling <tt class="methodname">grab()</tt>
|
79
|
+
"captures" the mouse in the sense that subsequent mouse motion events will
|
80
|
+
be reported as if they occurred inside the grab window. This is important,
|
81
|
+
since in our case we're going to be dragging from this window to some
|
82
|
+
other window, possibly a window in a different application
|
83
|
+
altogether.</p><p>The second thing you'll want to do in the
|
84
|
+
<tt class="constant">SEL_LEFTBUTTONPRESS</tt> handler for a drag source is to
|
85
|
+
call <tt class="methodname">beginDrag()</tt>. This not only kicks the
|
86
|
+
application into drag-and-drop mode, but also provides a way for you to
|
87
|
+
inform the system about the formats of data (i.e. the drag types) that
|
88
|
+
this drag source is able to provide. For this example, the drag source is
|
89
|
+
just going to offer one drag type.</p><p>Since releasing the left mouse button should end the drag operation,
|
90
|
+
it's important to also add a handler for the
|
91
|
+
<tt class="constant">SEL_LEFTBUTTONRELEASE</tt> message:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">@canvas.connect(SEL_LEFTBUTTONRELEASE) {
|
92
|
+
@canvas.ungrab
|
93
|
+
@canvas.endDrag
|
94
|
+
}
|
95
|
+
</pre></td></tr></table><p>This is pretty much the mirror image of our
|
96
|
+
<tt class="constant">SEL_LEFTBUTTONPRESS</tt> handler. We call
|
97
|
+
<tt class="methodname">ungrab()</tt> to release the mouse capture, and
|
98
|
+
<tt class="methodname">endDrag()</tt> to clean up the drag-and-drop
|
99
|
+
state.</p><p>The next change is to add a <tt class="constant">SEL_MOTION</tt> handler,
|
100
|
+
to handle mouse motion events during the drag operation:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">@canvas.connect(SEL_MOTION) { |sender, sel, event|
|
101
|
+
if @canvas.dragging?
|
102
|
+
@canvas.handleDrag(event.root_x, event.root_y)
|
103
|
+
unless @canvas.didAccept == DRAG_REJECT
|
104
|
+
@canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
|
105
|
+
else
|
106
|
+
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
}
|
110
|
+
</pre></td></tr></table><p>The <tt class="methodname">dragging?</tt> method returns true if we're
|
111
|
+
in the middle of a drag-and-drop operation for the drag source window,
|
112
|
+
i.e. after the call to <tt class="methodname">beginDrag()</tt> but before the
|
113
|
+
call to <tt class="methodname">endDrag()</tt>. If we're not currently
|
114
|
+
processing a drag operation, we're not really interested in mouse motion
|
115
|
+
events for the canvas.</p><p>If we <span class="emphasis"><em>are</em></span> processing a drag operation, however,
|
116
|
+
we need to call <tt class="methodname">handleDrag()</tt> on the drag source
|
117
|
+
window. FOX uses this information to send drag-and-drop messages (such as
|
118
|
+
<tt class="constant">SEL_DND_ENTER</tt>, <tt class="constant">SEL_DND_MOTION</tt>
|
119
|
+
and <tt class="constant">SEL_DND_LEAVE</tt>) to the window that the mouse is
|
120
|
+
currently over. Note that the coordinates passed to
|
121
|
+
<tt class="methodname">handleDrag()</tt> are root window coordinates, and not
|
122
|
+
window-local coordinates.</p><p>Another good thing to consider doing here is to change the shape of
|
123
|
+
the cursor depending on the drop site's response to the drag-and-drop
|
124
|
+
messages from the drag source. For this example, we change the drag cursor
|
125
|
+
to one of FOX's built-in cursor shapes
|
126
|
+
(<tt class="constant">DEF_SWATCH_CURSOR</tt>) if we get any response other than
|
127
|
+
<tt class="constant">DRAG_REJECT</tt> from the drop site. If the drop site
|
128
|
+
rejects this drag source's overtures, we instead change the drag cursor to
|
129
|
+
a cursor that resembles a stop sign
|
130
|
+
(<tt class="constant">DEF_DNDSTOP_CURSOR</tt>).</p><p>I've purposely avoided suggesting that you run the program for the
|
131
|
+
last couple of changes, since until now there wasn't going to be any
|
132
|
+
visual indication that anything interesting was happening. But now you
|
133
|
+
should be able to run the application in its current state and see a few
|
134
|
+
things.</p><p>A first test is to confirm that the cursor shape changes to the
|
135
|
+
"stop" sign when you attempt to drag over some window that isn't willing
|
136
|
+
to accept a drop of the <tt class="constant">FXWindow.colorType</tt> drag type.
|
137
|
+
Start up one of the other FXRuby example programs (such as the
|
138
|
+
<tt class="filename">scribble.rb</tt> example) alongside your drag source
|
139
|
+
program, and then try "dragging" from the drag source's canvas onto the
|
140
|
+
Scribble program's canvas. During the drag attempt, the cursor should
|
141
|
+
maintain its shape as a "stop" sign since the canvas in the
|
142
|
+
<tt class="filename">scribble.rb</tt> example isn't drop-enabled.</p><p>Your next test can confirm that the cursor shape changes to the
|
143
|
+
"swatch" cursor (a small square) when you attempt to drag over a window
|
144
|
+
that is drop-enabled, and which is willing to accepts drops of this drag
|
145
|
+
type. The obvious choice is the example from the previous section (the
|
146
|
+
dropsite.rb program), but you should have success with any FXRuby example
|
147
|
+
program that displays color wells. Start up one of these drop-enabled
|
148
|
+
programs alongside your drag source program, and then try "dragging" from
|
149
|
+
the drag source's canvas onto the drop site. While the mouse pointer is
|
150
|
+
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
|
151
|
+
transfer. At any time during a drag-and-drop operation, a drop site may
|
152
|
+
request a copy of the drag-and-drop data by calling the
|
153
|
+
<tt class="methodname">getDNDData()</tt> method (as described in the previous
|
154
|
+
section). When this happens, FOX sends a
|
155
|
+
<tt class="constant">SEL_DND_REQUEST</tt> message to the current drag source
|
156
|
+
window, and so we now add a handler for that message:</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">@canvas.connect(SEL_DND_REQUEST) { |sender, sel, event|
|
157
|
+
if event.target == FXWindow.colorType
|
158
|
+
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
159
|
+
end
|
160
|
+
}
|
161
|
+
</pre></td></tr></table><p>The first important thing to note here is that the
|
162
|
+
<tt class="varname">target</tt> field of the <tt class="classname">FXEvent</tt>
|
163
|
+
instance will contain the drag type requested by the drop site. If your
|
164
|
+
drag source offers its data in multiple formats, you definitely need to
|
165
|
+
check this in order to know how to package-up the data for transfer.
|
166
|
+
However, even if you're only offering the data in a single format (as in
|
167
|
+
this example) it's still a good idea to check the requested type, since a
|
168
|
+
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
|
169
|
+
the data to the drop site by calling
|
170
|
+
<tt class="methodname">setDNDData()</tt>. As with the call to
|
171
|
+
<tt class="methodname">getDNDData()</tt> for our previous drop site program,
|
172
|
+
you want to be sure to specify the origin of the data
|
173
|
+
(<tt class="constant">FROM_DRAGNDROP</tt>), the drag type
|
174
|
+
(<tt class="constant">FXWindow.colorType</tt>) and the data itself as a binary
|
175
|
+
string.</p><p>As a final test of the completed program, try dragging from this
|
176
|
+
window to some drop-enabled window (as described earlier). Now, when you
|
177
|
+
release the left mouse button to complete the "drop", the drop site should
|
178
|
+
change its color to red.</p><p>The complete program is listed below, and is included in the
|
179
|
+
<tt class="filename">examples</tt> directory under the file
|
180
|
+
name <tt class="filename">dragsource.rb</tt>.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
|
181
|
+
require_gem 'fxruby'
|
182
|
+
|
183
|
+
include Fox
|
184
|
+
|
185
|
+
class DragSource < FXMainWindow
|
186
|
+
def initialize(anApp)
|
187
|
+
# Initialize base class
|
188
|
+
super(anApp, "Drag Source", nil, nil, DECOR_ALL, 0, 0, 400, 300)
|
189
|
+
|
190
|
+
# Fill main window with canvas
|
191
|
+
@canvas = FXCanvas.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
192
|
+
@canvas.backColor = "red"
|
193
|
+
|
194
|
+
# Handle expose events on the canvas
|
195
|
+
@canvas.connect(SEL_PAINT) { |sender, sel, event|
|
196
|
+
FXDCWindow.new(@canvas, event) { |dc|
|
197
|
+
dc.foreground = @canvas.backColor
|
198
|
+
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
199
|
+
}
|
200
|
+
}
|
201
|
+
|
202
|
+
# Handle left button press
|
203
|
+
@canvas.connect(SEL_LEFTBUTTONPRESS) {
|
204
|
+
#
|
205
|
+
# Capture (grab) the mouse when the button goes down, so that all future
|
206
|
+
# mouse events will be reported to this widget, even if those events occur
|
207
|
+
# outside of this widget.
|
208
|
+
#
|
209
|
+
@canvas.grab
|
210
|
+
|
211
|
+
# Advertise which drag types we can offer
|
212
|
+
dragTypes = [FXWindow.colorType]
|
213
|
+
@canvas.beginDrag(dragTypes)
|
214
|
+
}
|
215
|
+
|
216
|
+
# Handle mouse motion events
|
217
|
+
@canvas.connect(SEL_MOTION) { |sender, sel, event|
|
218
|
+
if @canvas.dragging?
|
219
|
+
@canvas.handleDrag(event.root_x, event.root_y)
|
220
|
+
unless @canvas.didAccept == DRAG_REJECT
|
221
|
+
@canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
|
222
|
+
else
|
223
|
+
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
}
|
227
|
+
|
228
|
+
# Handle left button release
|
229
|
+
@canvas.connect(SEL_LEFTBUTTONRELEASE) {
|
230
|
+
@canvas.ungrab
|
231
|
+
@canvas.endDrag
|
232
|
+
}
|
233
|
+
|
234
|
+
# Handle request for DND data
|
235
|
+
@canvas.connect(SEL_DND_REQUEST) { |sender, sel, event|
|
236
|
+
if event.target == FXWindow.colorType
|
237
|
+
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
238
|
+
end
|
239
|
+
}
|
240
|
+
end
|
241
|
+
|
242
|
+
def create
|
243
|
+
# Create the main window and canvas
|
244
|
+
super
|
245
|
+
|
246
|
+
# Register the drag type for colors
|
247
|
+
FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
|
248
|
+
|
249
|
+
# Show the main window
|
250
|
+
show(PLACEMENT_SCREEN)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
if __FILE__ == $0
|
255
|
+
FXApp.new("DragSource", "FXRuby") do |theApp|
|
256
|
+
DragSource.new(theApp)
|
257
|
+
theApp.create
|
258
|
+
theApp.run
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
</pre></td></tr></table></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
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
<html><head>
|
2
|
+
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
3
|
+
<title>Putting It All Together</title><meta name="generator" content="DocBook XSL Stylesheets V1.61.2"><link rel="home" href="book.html" title="Developing Graphical User Interfaces with FXRuby"><link rel="up" href="dragdroptut.html" title="Chapter 5. Drag and Drop"><link rel="previous" href="ch05s02.html" title="Drag Sources"><link rel="next" href="examples.html" title="Chapter 6. Examples"></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="examples.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="d0e1569"></a>Putting It All Together</h2></div></div><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 <tt class="methodname">dropEnable()</tt>, to make
|
12
|
+
<tt class="classname">DragSource</tt>'s canvas drop-enabled;</p></li><li><p>A handler for the <tt class="constant">SEL_DND_MOTION</tt> message;
|
13
|
+
and,</p></li><li><p>A handler for the <tt class="constant">SEL_DND_DROP</tt>
|
14
|
+
message.</p></li></ul></div><p>If you merge those three short bits of code from
|
15
|
+
<tt class="filename">dropsite.rb</tt> into <tt class="filename">dragsource.rb</tt>,
|
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
|
+
<tt class="filename">examples</tt> directory under the file
|
26
|
+
name <tt class="filename">dragdrop.rb</tt>.</p><table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><pre class="programlisting">require 'rubygems'
|
27
|
+
require_gem 'fxruby'
|
28
|
+
|
29
|
+
include Fox
|
30
|
+
|
31
|
+
class DragDropWindow < FXMainWindow
|
32
|
+
def initialize(anApp)
|
33
|
+
# Initialize base class
|
34
|
+
super(anApp, "Drag and Drop", nil, nil, DECOR_ALL, 0, 0, 400, 300)
|
35
|
+
|
36
|
+
# Fill main window with canvas
|
37
|
+
@canvas = FXCanvas.new(self, nil, 0, LAYOUT_FILL_X|LAYOUT_FILL_Y)
|
38
|
+
@canvas.backColor = "red"
|
39
|
+
|
40
|
+
# Enable canvas for drag-and-drop messages
|
41
|
+
@canvas.dropEnable
|
42
|
+
|
43
|
+
# Handle expose events on the canvas
|
44
|
+
@canvas.connect(SEL_PAINT) { |sender, sel, event|
|
45
|
+
FXDCWindow.new(@canvas, event) { |dc|
|
46
|
+
dc.foreground = @canvas.backColor
|
47
|
+
dc.fillRectangle(event.rect.x, event.rect.y, event.rect.w, event.rect.h)
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
# Handle left button press
|
52
|
+
@canvas.connect(SEL_LEFTBUTTONPRESS) {
|
53
|
+
#
|
54
|
+
# Capture (grab) the mouse when the button goes down, so that all future
|
55
|
+
# mouse events will be reported to this widget, even if those events occur
|
56
|
+
# outside of this widget.
|
57
|
+
#
|
58
|
+
@canvas.grab
|
59
|
+
|
60
|
+
# Advertise which drag types we can offer
|
61
|
+
dragTypes = [FXWindow.colorType]
|
62
|
+
@canvas.beginDrag(dragTypes)
|
63
|
+
}
|
64
|
+
|
65
|
+
# Handle mouse motion events
|
66
|
+
@canvas.connect(SEL_MOTION) { |sender, sel, event|
|
67
|
+
if @canvas.dragging?
|
68
|
+
@canvas.handleDrag(event.root_x, event.root_y)
|
69
|
+
unless @canvas.didAccept == DRAG_REJECT
|
70
|
+
@canvas.dragCursor = getApp().getDefaultCursor(DEF_SWATCH_CURSOR)
|
71
|
+
else
|
72
|
+
@canvas.dragCursor = getApp().getDefaultCursor(DEF_DNDSTOP_CURSOR)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
}
|
76
|
+
|
77
|
+
# Handle SEL_DND_MOTION messages from the canvas
|
78
|
+
@canvas.connect(SEL_DND_MOTION) {
|
79
|
+
if @canvas.offeredDNDType?(FROM_DRAGNDROP, FXWindow.colorType)
|
80
|
+
@canvas.acceptDrop
|
81
|
+
end
|
82
|
+
}
|
83
|
+
|
84
|
+
# Handle left button release
|
85
|
+
@canvas.connect(SEL_LEFTBUTTONRELEASE) {
|
86
|
+
@canvas.ungrab
|
87
|
+
@canvas.endDrag
|
88
|
+
}
|
89
|
+
|
90
|
+
# Handle SEL_DND_DROP message from the canvas
|
91
|
+
@canvas.connect(SEL_DND_DROP) {
|
92
|
+
# Try to obtain the data as color values first
|
93
|
+
data = @canvas.getDNDData(FROM_DRAGNDROP, FXWindow.colorType)
|
94
|
+
unless data.nil?
|
95
|
+
# Update canvas background color
|
96
|
+
@canvas.backColor = Fox.fxdecodeColorData(data)
|
97
|
+
end
|
98
|
+
}
|
99
|
+
|
100
|
+
# Handle request for DND data
|
101
|
+
@canvas.connect(SEL_DND_REQUEST) { |sender, sel, event|
|
102
|
+
if event.target == FXWindow.colorType
|
103
|
+
@canvas.setDNDData(FROM_DRAGNDROP, FXWindow.colorType, Fox.fxencodeColorData(@canvas.backColor))
|
104
|
+
end
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
def create
|
109
|
+
# Create the main window and canvas
|
110
|
+
super
|
111
|
+
|
112
|
+
# Register the drag type for colors
|
113
|
+
FXWindow.colorType = getApp().registerDragType(FXWindow.colorTypeName)
|
114
|
+
|
115
|
+
# Show the main window
|
116
|
+
show(PLACEMENT_SCREEN)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
if __FILE__ == $0
|
121
|
+
FXApp.new("DragDrop", "FXRuby") do |theApp|
|
122
|
+
DragDropWindow.new(theApp)
|
123
|
+
theApp.create
|
124
|
+
theApp.run
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
</pre></td></tr></table></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="examples.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. Examples</td></tr></table></div></body></html>
|