qtbindings 4.8.6.2 → 4.8.6.3
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.
- checksums.yaml +4 -4
- data/COPYING.LIB.txt +510 -510
- data/COPYING.txt +286 -286
- data/KNOWN_ISSUES.txt +17 -17
- data/Rakefile +5 -5
- data/bin/rbqtapi +0 -0
- data/bin/rbrcc +0 -0
- data/bin/rbuic4 +0 -0
- data/bin/smokeapi +0 -0
- data/bin/smokedeptool +0 -0
- data/examples/designer/calculatorbuilder/calculatorbuilder.qrc +5 -5
- data/examples/designer/calculatorbuilder/calculatorform.rb +60 -60
- data/examples/designer/calculatorbuilder/calculatorform.ui +299 -299
- data/examples/designer/calculatorbuilder/main.rb +34 -34
- data/examples/designer/calculatorbuilder/makefile +2 -2
- data/examples/designer/calculatorform/calculatorform.rb +46 -46
- data/examples/designer/calculatorform/calculatorform.ui +277 -277
- data/examples/designer/calculatorform/main.rb +32 -32
- data/examples/designer/calculatorform/makefile +3 -3
- data/examples/desktop/screenshot/main.rb +32 -32
- data/examples/desktop/screenshot/screenshot.rb +157 -157
- data/examples/desktop/systray/images/bad.svg +64 -64
- data/examples/desktop/systray/images/heart.svg +55 -55
- data/examples/desktop/systray/images/trash.svg +58 -58
- data/examples/desktop/systray/main.rb +41 -41
- data/examples/desktop/systray/makefile +2 -2
- data/examples/desktop/systray/systray.qrc +7 -7
- data/examples/desktop/systray/window.rb +219 -219
- data/examples/dialogs/complexwizard/complexwizard.rb +140 -140
- data/examples/dialogs/complexwizard/licensewizard.rb +294 -294
- data/examples/dialogs/complexwizard/main.rb +31 -31
- data/examples/dialogs/configdialog/configdialog.rb +109 -109
- data/examples/dialogs/configdialog/main.rb +31 -31
- data/examples/dialogs/configdialog/pages.rb +140 -140
- data/examples/dialogs/extension/finddialog.rb +89 -89
- data/examples/dialogs/extension/main.rb +31 -31
- data/examples/dialogs/findfiles/main.rb +32 -32
- data/examples/dialogs/findfiles/window.rb +177 -177
- data/examples/dialogs/simplewizard/classwizard.rb +374 -374
- data/examples/dialogs/simplewizard/main.rb +31 -31
- data/examples/dialogs/simplewizard/simplewizard.rb +110 -110
- data/examples/dialogs/standarddialogs/dialog.rb +340 -340
- data/examples/dialogs/standarddialogs/main.rb +31 -31
- data/examples/dialogs/tabdialog/main.rb +38 -38
- data/examples/dialogs/tabdialog/tabdialog.rb +178 -178
- data/examples/draganddrop/draggableicons/dragwidget.rb +125 -125
- data/examples/draganddrop/draggableicons/main.rb +41 -41
- data/examples/draganddrop/draggabletext/draglabel.rb +51 -51
- data/examples/draganddrop/draggabletext/dragwidget.rb +94 -94
- data/examples/draganddrop/draggabletext/main.rb +33 -33
- data/examples/draganddrop/draggabletext/words.txt +41 -41
- data/examples/draganddrop/dropsite/dropsitewidget.rb +99 -99
- data/examples/draganddrop/dropsite/dropsitewindow.rb +114 -114
- data/examples/draganddrop/dropsite/main.rb +33 -33
- data/examples/draganddrop/fridgemagnets/draglabel.rb +78 -78
- data/examples/draganddrop/fridgemagnets/dragwidget.rb +130 -130
- data/examples/draganddrop/fridgemagnets/main.rb +33 -33
- data/examples/draganddrop/fridgemagnets/words.txt +48 -48
- data/examples/draganddrop/puzzle/main.rb +33 -33
- data/examples/draganddrop/puzzle/mainwindow.rb +136 -136
- data/examples/draganddrop/puzzle/pieceslist.rb +95 -95
- data/examples/draganddrop/puzzle/puzzlewidget.rb +190 -190
- data/examples/graphicsview/collidingmice/main.rb +53 -53
- data/examples/graphicsview/collidingmice/makefile +2 -2
- data/examples/graphicsview/collidingmice/mice.qrc +5 -5
- data/examples/graphicsview/collidingmice/mouse.rb +176 -176
- data/examples/graphicsview/dragdroprobot/coloritem.rb +86 -86
- data/examples/graphicsview/dragdroprobot/main.rb +57 -57
- data/examples/graphicsview/dragdroprobot/makefile +2 -2
- data/examples/graphicsview/dragdroprobot/robot.qrc +5 -5
- data/examples/graphicsview/dragdroprobot/robot.rb +246 -246
- data/examples/itemviews/chart/chart.qrc +5 -5
- data/examples/itemviews/chart/main.rb +33 -33
- data/examples/itemviews/chart/mainwindow.rb +151 -151
- data/examples/itemviews/chart/makefile +2 -2
- data/examples/itemviews/chart/mydata.cht +8 -8
- data/examples/itemviews/chart/pieview.rb +516 -516
- data/examples/itemviews/chart/qtdata.cht +14 -14
- data/examples/itemviews/dirview/main.rb +39 -39
- data/examples/itemviews/pixelator/imagemodel.rb +51 -51
- data/examples/itemviews/pixelator/images.qrc +5 -5
- data/examples/itemviews/pixelator/main.rb +34 -34
- data/examples/itemviews/pixelator/mainwindow.rb +218 -218
- data/examples/itemviews/pixelator/makefile +3 -3
- data/examples/itemviews/pixelator/pixeldelegate.rb +67 -67
- data/examples/itemviews/puzzle/main.rb +36 -36
- data/examples/itemviews/puzzle/mainwindow.rb +143 -143
- data/examples/itemviews/puzzle/piecesmodel.rb +174 -174
- data/examples/itemviews/puzzle/puzzlewidget.rb +192 -192
- data/examples/itemviews/simpledommodel/domitem.rb +62 -62
- data/examples/itemviews/simpledommodel/dommodel.rb +139 -139
- data/examples/itemviews/simpledommodel/main.rb +33 -33
- data/examples/itemviews/simpledommodel/mainwindow.rb +66 -66
- data/examples/itemviews/simpletreemodel/default.txt +40 -40
- data/examples/itemviews/simpletreemodel/main.rb +41 -41
- data/examples/itemviews/simpletreemodel/makefile +2 -2
- data/examples/itemviews/simpletreemodel/simpletreemodel.qrc +5 -5
- data/examples/itemviews/simpletreemodel/treeitem.rb +67 -67
- data/examples/itemviews/simpletreemodel/treemodel.rb +164 -164
- data/examples/itemviews/sortingmodel/default.txt +40 -40
- data/examples/itemviews/sortingmodel/main.rb +53 -53
- data/examples/itemviews/sortingmodel/treeitem.rb +73 -73
- data/examples/itemviews/sortingmodel/treemodel.rb +166 -166
- data/examples/itemviews/spinboxdelegate/main.rb +47 -47
- data/examples/itemviews/spinboxdelegate/spinboxdelegate.rb +62 -62
- data/examples/killerfilter/killerfilter.rb +55 -55
- data/examples/layouts/basiclayouts/dialog.rb +110 -110
- data/examples/layouts/basiclayouts/main.rb +31 -31
- data/examples/layouts/borderlayout/borderlayout.rb +190 -190
- data/examples/layouts/borderlayout/main.rb +32 -32
- data/examples/layouts/borderlayout/window.rb +52 -52
- data/examples/layouts/flowlayouts/flowlayout.rb +108 -108
- data/examples/layouts/flowlayouts/main.rb +32 -32
- data/examples/layouts/flowlayouts/window.rb +43 -43
- data/examples/mainwindows/application/main.rb +32 -32
- data/examples/mainwindows/application/mainwindow.rb +285 -285
- data/examples/mainwindows/dockwidgets/main.rb +32 -32
- data/examples/mainwindows/dockwidgets/mainwindow.rb +302 -302
- data/examples/mainwindows/mdi/main.rb +32 -32
- data/examples/mainwindows/mdi/mainwindow.rb +363 -363
- data/examples/mainwindows/mdi/mdichild.rb +152 -152
- data/examples/mainwindows/menus/main.rb +32 -32
- data/examples/mainwindows/menus/mainwindow.rb +327 -327
- data/examples/mainwindows/recentfiles/main.rb +32 -32
- data/examples/mainwindows/recentfiles/mainwindow.rb +258 -258
- data/examples/mainwindows/sdi/main.rb +32 -32
- data/examples/mainwindows/sdi/mainwindow.rb +335 -335
- data/examples/network/broadcastreceiver/main.rb +32 -32
- data/examples/network/broadcastreceiver/receiver.rb +64 -64
- data/examples/network/broadcastsender/main.rb +32 -32
- data/examples/network/broadcastsender/sender.rb +72 -72
- data/examples/network/fortuneclient/client.rb +149 -149
- data/examples/network/fortuneclient/main.rb +32 -32
- data/examples/network/fortuneserver/main.rb +32 -32
- data/examples/network/fortuneserver/server.rb +88 -88
- data/examples/network/ftp/ftpwindow.rb +259 -259
- data/examples/network/ftp/main.rb +32 -32
- data/examples/network/http/httpwindow.rb +187 -187
- data/examples/network/http/main.rb +32 -32
- data/examples/network/loopback/dialog.rb +163 -163
- data/examples/network/loopback/main.rb +32 -32
- data/examples/opengl/grabber/glwidget.rb +265 -265
- data/examples/opengl/grabber/main.rb +32 -32
- data/examples/opengl/grabber/mainwindow.rb +189 -189
- data/examples/opengl/hellogl/glwidget.rb +226 -226
- data/examples/opengl/hellogl/main.rb +32 -32
- data/examples/opengl/hellogl/window.rb +66 -66
- data/examples/opengl/textures/glwidget.rb +151 -151
- data/examples/opengl/textures/main.rb +32 -32
- data/examples/opengl/textures/window.rb +77 -77
- data/examples/painting/basicdrawing/main.rb +32 -32
- data/examples/painting/basicdrawing/renderarea.rb +166 -166
- data/examples/painting/basicdrawing/window.rb +215 -215
- data/examples/painting/concentriccircles/circlewidget.rb +88 -88
- data/examples/painting/concentriccircles/main.rb +32 -32
- data/examples/painting/concentriccircles/window.rb +72 -72
- data/examples/painting/fontsampler/main.rb +32 -32
- data/examples/painting/fontsampler/mainwindow.rb +369 -369
- data/examples/painting/fontsampler/mainwindowbase.ui +136 -136
- data/examples/painting/fontsampler/makefile +8 -8
- data/examples/painting/fontsampler/previewdialog.rb +257 -257
- data/examples/painting/fontsampler/previewdialogbase.ui +224 -224
- data/examples/painting/fontsampler/previewlabel.rb +43 -43
- data/examples/painting/imagecomposition/imagecomposer.rb +152 -152
- data/examples/painting/imagecomposition/imagecomposition.qrc +6 -6
- data/examples/painting/imagecomposition/main.rb +33 -33
- data/examples/painting/imagecomposition/makefile +2 -2
- data/examples/painting/painterpaths/main.rb +32 -32
- data/examples/painting/painterpaths/renderarea.rb +97 -97
- data/examples/painting/painterpaths/window.rb +247 -247
- data/examples/painting/svgviewer/files/bubbles.svg +212 -212
- data/examples/painting/svgviewer/files/cubic.svg +77 -77
- data/examples/painting/svgviewer/files/spheres.svg +79 -79
- data/examples/painting/svgviewer/main.rb +38 -38
- data/examples/painting/svgviewer/mainwindow.rb +99 -99
- data/examples/painting/svgviewer/makefile +2 -2
- data/examples/painting/svgviewer/svgview.rb +156 -156
- data/examples/painting/svgviewer/svgviewer.qrc +6 -6
- data/examples/painting/svgviewer/svgwindow.rb +87 -87
- data/examples/painting/transformations/main.rb +32 -32
- data/examples/painting/transformations/renderarea.rb +127 -127
- data/examples/painting/transformations/window.rb +153 -153
- data/examples/passivepopup/passivepopup.rb +38 -38
- data/examples/qdbus/chat/chat.rb +146 -146
- data/examples/qdbus/chat/chat_adaptor.rb +12 -12
- data/examples/qdbus/chat/chat_interface.rb +13 -13
- data/examples/qdbus/chat/chatmainwindow.ui +184 -184
- data/examples/qdbus/chat/chatsetnickname.ui +145 -145
- data/examples/qdbus/chat/makefile +8 -8
- data/examples/qdbus/complexpingpong/complexping.rb +92 -92
- data/examples/qdbus/complexpingpong/complexpong.rb +83 -83
- data/examples/qdbus/complexpingpong/ping-common.rb +1 -1
- data/examples/qdbus/listnames/listnames.rb +69 -69
- data/examples/qdbus/pingpong/ping-common.rb +1 -1
- data/examples/qdbus/pingpong/ping.rb +52 -52
- data/examples/qdbus/pingpong/pong.rb +55 -55
- data/examples/qdbus/remotecontrolledcar/car/car.rb +151 -151
- data/examples/qdbus/remotecontrolledcar/car/main.rb +50 -50
- data/examples/qdbus/remotecontrolledcar/controller/controller.rb +66 -66
- data/examples/qdbus/remotecontrolledcar/controller/controller.ui +61 -61
- data/examples/qdbus/remotecontrolledcar/controller/main.rb +32 -32
- data/examples/qdbus/remotecontrolledcar/controller/makefile +2 -2
- data/examples/qtscribble/scribble.rb +270 -270
- data/examples/richtext/calendar/main.rb +33 -33
- data/examples/richtext/calendar/mainwindow.rb +173 -173
- data/examples/richtext/orderform/detailsdialog.rb +130 -130
- data/examples/richtext/orderform/main.rb +34 -34
- data/examples/richtext/orderform/mainwindow.rb +194 -194
- data/examples/richtext/syntaxhighlighter/examples/example +79 -79
- data/examples/richtext/syntaxhighlighter/highlighter.rb +90 -90
- data/examples/richtext/syntaxhighlighter/main.rb +34 -34
- data/examples/richtext/syntaxhighlighter/mainwindow.rb +105 -105
- data/examples/ruboids/LICENSE.txt +58 -58
- data/examples/ruboids/Manifest +26 -26
- data/examples/ruboids/README +53 -53
- data/examples/ruboids/TODO +29 -29
- data/examples/ruboids/boids.properties +33 -33
- data/examples/ruboids/generateManifest.rb +42 -42
- data/examples/ruboids/release.rb +152 -152
- data/examples/ruboids/ruboids/Boid.rb +141 -141
- data/examples/ruboids/ruboids/BoidView.rb +159 -159
- data/examples/ruboids/ruboids/Camera.rb +24 -24
- data/examples/ruboids/ruboids/CameraDialog.rb +218 -218
- data/examples/ruboids/ruboids/Canvas.rb +143 -143
- data/examples/ruboids/ruboids/Cloud.rb +61 -61
- data/examples/ruboids/ruboids/CloudView.rb +54 -54
- data/examples/ruboids/ruboids/Flock.rb +47 -47
- data/examples/ruboids/ruboids/Graphics.rb +278 -278
- data/examples/ruboids/ruboids/Params.rb +87 -87
- data/examples/ruboids/ruboids/Point.rb +153 -153
- data/examples/ruboids/ruboids/Thing.rb +34 -34
- data/examples/ruboids/ruboids/Triangle.rb +21 -21
- data/examples/ruboids/ruboids/View.rb +88 -88
- data/examples/ruboids/ruboids/World.rb +82 -82
- data/examples/ruboids/ruboids/WorldWindow.rb +52 -52
- data/examples/ruboids/ruboids/info.rb +12 -12
- data/examples/ruboids/ruboids/ruboids.rb +29 -29
- data/examples/threading/main_thread.rb +19 -19
- data/examples/tutorial/t1/t1.rb +10 -10
- data/examples/tutorial/t10/cannon.rb +72 -72
- data/examples/tutorial/t10/lcdrange.rb +45 -45
- data/examples/tutorial/t10/t10.rb +55 -55
- data/examples/tutorial/t11/cannon.rb +124 -124
- data/examples/tutorial/t11/lcdrange.rb +45 -45
- data/examples/tutorial/t11/t11.rb +65 -65
- data/examples/tutorial/t12/cannon.rb +158 -158
- data/examples/tutorial/t12/lcdrange.rb +59 -59
- data/examples/tutorial/t12/t12.rb +66 -66
- data/examples/tutorial/t13/cannon.rb +208 -208
- data/examples/tutorial/t13/gamebrd.rb +113 -113
- data/examples/tutorial/t13/lcdrange.rb +60 -60
- data/examples/tutorial/t13/t13.rb +11 -11
- data/examples/tutorial/t14/cannon.rb +263 -263
- data/examples/tutorial/t14/gamebrd.rb +123 -123
- data/examples/tutorial/t14/lcdrange.rb +63 -63
- data/examples/tutorial/t14/t14.rb +11 -11
- data/examples/tutorial/t2/t2.rb +16 -16
- data/examples/tutorial/t3/t3.rb +18 -18
- data/examples/tutorial/t4/t4.rb +25 -25
- data/examples/tutorial/t5/t5.rb +37 -37
- data/examples/tutorial/t6/t6.rb +52 -52
- data/examples/tutorial/t7/lcdrange.rb +32 -32
- data/examples/tutorial/t7/t7.rb +42 -42
- data/examples/tutorial/t8/cannon.rb +38 -38
- data/examples/tutorial/t8/lcdrange.rb +45 -45
- data/examples/tutorial/t8/t8.rb +43 -43
- data/examples/tutorial/t9/cannon.rb +45 -45
- data/examples/tutorial/t9/lcdrange.rb +46 -46
- data/examples/tutorial/t9/t9.rb +43 -43
- data/examples/widgets/analogclock/analogclock.rb +94 -94
- data/examples/widgets/analogclock/main.rb +9 -9
- data/examples/widgets/calculator/button.rb +45 -45
- data/examples/widgets/calculator/calculator.rb +382 -382
- data/examples/widgets/calculator/main.rb +32 -32
- data/examples/widgets/charactermap/characterwidget.rb +109 -109
- data/examples/widgets/charactermap/main.rb +32 -32
- data/examples/widgets/charactermap/mainwindow.rb +118 -118
- data/examples/widgets/digitalclock/digitalclock.rb +30 -30
- data/examples/widgets/digitalclock/main.rb +9 -9
- data/examples/widgets/groupbox/main.rb +32 -32
- data/examples/widgets/groupbox/window.rb +134 -134
- data/examples/widgets/icons/iconpreviewarea.rb +110 -110
- data/examples/widgets/icons/iconsizespinbox.rb +39 -39
- data/examples/widgets/icons/imagedelegate.rb +73 -73
- data/examples/widgets/icons/main.rb +32 -32
- data/examples/widgets/icons/mainwindow.rb +351 -351
- data/examples/widgets/imageviewer/imageviewer.rb +219 -219
- data/examples/widgets/imageviewer/main.rb +32 -32
- data/examples/widgets/lineedits/main.rb +32 -32
- data/examples/widgets/lineedits/window.rb +199 -199
- data/examples/widgets/movie/main.rb +32 -32
- data/examples/widgets/movie/movieplayer.rb +201 -201
- data/examples/widgets/screenshot/main.rb +32 -32
- data/examples/widgets/screenshot/screenshot.rb +154 -154
- data/examples/widgets/scribble/main.rb +32 -32
- data/examples/widgets/scribble/mainwindow.rb +202 -202
- data/examples/widgets/scribble/scribblearea.rb +154 -154
- data/examples/widgets/sliders/main.rb +32 -32
- data/examples/widgets/sliders/slidersgroup.rb +97 -97
- data/examples/widgets/sliders/window.rb +124 -124
- data/examples/widgets/spinboxes/main.rb +32 -32
- data/examples/widgets/spinboxes/window.rb +213 -213
- data/examples/widgets/tetrix/main.rb +33 -33
- data/examples/widgets/tetrix/tetrixboard.rb +346 -346
- data/examples/widgets/tetrix/tetrixpiece.rb +135 -135
- data/examples/widgets/tetrix/tetrixwindow.rb +88 -88
- data/examples/widgets/tooltips/main.rb +32 -32
- data/examples/widgets/tooltips/shapeitem.rb +31 -31
- data/examples/widgets/tooltips/sortingbox.rb +222 -222
- data/examples/widgets/wiggly/dialog.rb +48 -48
- data/examples/widgets/wiggly/main.rb +9 -9
- data/examples/widgets/wiggly/wigglywidget.rb +75 -75
- data/examples/widgets/windowflags/controllerwindow.rb +195 -195
- data/examples/widgets/windowflags/main.rb +32 -32
- data/examples/widgets/windowflags/previewwindow.rb +103 -103
- data/examples/xml/dombookmarks/frank.xbel +230 -230
- data/examples/xml/dombookmarks/jennifer.xbel +93 -93
- data/examples/xml/dombookmarks/main.rb +34 -34
- data/examples/xml/dombookmarks/mainwindow.rb +129 -129
- data/examples/xml/dombookmarks/xbeltree.rb +172 -172
- data/examples/xml/saxbookmarks/frank.xbel +230 -230
- data/examples/xml/saxbookmarks/jennifer.xbel +93 -93
- data/examples/xml/saxbookmarks/main.rb +34 -34
- data/examples/xml/saxbookmarks/mainwindow.rb +144 -144
- data/examples/xml/saxbookmarks/xbelgenerator.rb +95 -95
- data/examples/xml/saxbookmarks/xbelhandler.rb +122 -122
- data/ext/CMakeLists.txt +3 -0
- data/ext/cmake/modules/BasicFindPackageVersion.cmake.in +30 -30
- data/ext/cmake/modules/CMakeCSharpCompiler.cmake.in +7 -7
- data/ext/cmake/modules/CMakeCSharpInformation.cmake +366 -366
- data/ext/cmake/modules/CMakeDetermineCSharpCompiler.cmake +85 -85
- data/ext/cmake/modules/CMakeTestCSharpCompiler.cmake +1 -1
- data/ext/cmake/modules/FindLibraryWithDebug.cmake +113 -113
- data/ext/cmake/modules/FindMono.cmake +36 -36
- data/ext/cmake/modules/FindPHP5.cmake +179 -179
- data/ext/cmake/modules/FindPerlMore.cmake +78 -78
- data/ext/cmake/modules/FindPhonon.cmake +71 -71
- data/ext/cmake/modules/FindQImageBlitz.cmake +51 -51
- data/ext/cmake/modules/FindQScintilla.cmake +57 -57
- data/ext/cmake/modules/FindQwt5.cmake +104 -104
- data/ext/cmake/modules/FindRuby.cmake +279 -279
- data/ext/cmake/modules/FindSmoke.cmake +78 -78
- data/ext/cmake/modules/MacroLogFeature.cmake +146 -146
- data/ext/cmake/modules/MacroOptionalAddBindings.cmake +47 -47
- data/ext/cmake/modules/MacroOptionalFindPackage.cmake +28 -28
- data/ext/cmake/modules/MacroPushRequiredVars.cmake +47 -47
- data/ext/cmake/modules/MacroWriteBasicCMakeVersionFile.cmake +22 -22
- data/ext/cmake/modules/SmokeConfig.cmake.in +109 -109
- data/ext/generator/CMakeLists.txt +38 -38
- data/ext/generator/cmake/BasicFindPackageVersion.cmake.in +30 -30
- data/ext/generator/cmake/CMakeLists.txt +24 -24
- data/ext/generator/cmake/FindLibraryWithDebug.cmake +113 -113
- data/ext/generator/cmake/FindPhonon.cmake +71 -71
- data/ext/generator/cmake/FindQImageBlitz.cmake +51 -51
- data/ext/generator/cmake/FindQScintilla.cmake +57 -57
- data/ext/generator/cmake/FindQwt5.cmake +104 -104
- data/ext/generator/cmake/HandleImportedTargetsInCMakeRequiredLibraries.cmake +85 -85
- data/ext/generator/cmake/MacroLogFeature.cmake +146 -146
- data/ext/generator/cmake/MacroOptionalAddBindings.cmake +47 -47
- data/ext/generator/cmake/MacroOptionalFindPackage.cmake +28 -28
- data/ext/generator/cmake/MacroWriteBasicCMakeVersionFile.cmake +22 -22
- data/ext/generator/cmake/SmokeConfig.cmake.in +109 -109
- data/ext/generator/config.h +25 -25
- data/ext/generator/generator_export.h +31 -31
- data/ext/generator/generatorenvironment.cpp +52 -52
- data/ext/generator/generatorenvironment.h +35 -35
- data/ext/generator/generatorpreprocessor.cpp +303 -303
- data/ext/generator/generatorpreprocessor.h +83 -83
- data/ext/generator/generators/CMakeLists.txt +4 -4
- data/ext/generator/generators/dump/CMakeLists.txt +15 -15
- data/ext/generator/generators/dump/generator_dump.cpp +36 -36
- data/ext/generator/generators/smoke/CMakeLists.txt +18 -18
- data/ext/generator/generators/smoke/generator_smoke.cpp +240 -240
- data/ext/generator/generators/smoke/globals.h +140 -140
- data/ext/generator/generators/smoke/helpers.cpp +793 -793
- data/ext/generator/generators/smoke/writeClasses.cpp +502 -502
- data/ext/generator/generators/smoke/writeSmokeDataFile.cpp +754 -754
- data/ext/generator/generatorvisitor.cpp +922 -922
- data/ext/generator/generatorvisitor.h +119 -119
- data/ext/generator/name_compiler.cpp +205 -205
- data/ext/generator/name_compiler.h +76 -76
- data/ext/generator/options.cpp +33 -33
- data/ext/generator/options.h +46 -46
- data/ext/generator/parser/CMakeLists.txt +50 -50
- data/ext/generator/parser/ast.cpp +21 -21
- data/ext/generator/parser/ast.h +923 -923
- data/ext/generator/parser/astutilities.h +65 -65
- data/ext/generator/parser/codegenerator.cpp +867 -867
- data/ext/generator/parser/codegenerator.h +180 -180
- data/ext/generator/parser/codemodel_fwd.h +76 -76
- data/ext/generator/parser/commentformatter.cpp +54 -54
- data/ext/generator/parser/commentformatter.h +45 -45
- data/ext/generator/parser/commentparser.cpp +109 -109
- data/ext/generator/parser/commentparser.h +84 -84
- data/ext/generator/parser/control.cpp +40 -40
- data/ext/generator/parser/control.h +51 -51
- data/ext/generator/parser/cppparser_export.h +33 -33
- data/ext/generator/parser/default_visitor.cpp +470 -470
- data/ext/generator/parser/default_visitor.h +116 -116
- data/ext/generator/parser/dumptree.cpp +146 -146
- data/ext/generator/parser/dumptree.h +50 -50
- data/ext/generator/parser/indexedstring.cpp +213 -213
- data/ext/generator/parser/indexedstring.h +147 -147
- data/ext/generator/parser/kdevelop-parser-rev +1 -1
- data/ext/generator/parser/kdevvarlengtharray.h +346 -346
- data/ext/generator/parser/lexer.cpp +964 -964
- data/ext/generator/parser/lexer.h +308 -308
- data/ext/generator/parser/listnode.cpp +20 -20
- data/ext/generator/parser/listnode.h +97 -97
- data/ext/generator/parser/memorypool.cpp +20 -20
- data/ext/generator/parser/memorypool.h +41 -41
- data/ext/generator/parser/name_compiler.cpp +190 -190
- data/ext/generator/parser/name_compiler.h +77 -77
- data/ext/generator/parser/parser.cpp +4708 -4708
- data/ext/generator/parser/parser.h +290 -290
- data/ext/generator/parser/parsesession.cpp +106 -106
- data/ext/generator/parser/parsesession.h +87 -87
- data/ext/generator/parser/problem.h +21 -21
- data/ext/generator/parser/rpp/CMakeLists.txt +45 -45
- data/ext/generator/parser/rpp/Makefile.am +13 -13
- data/ext/generator/parser/rpp/anchor.h +51 -51
- data/ext/generator/parser/rpp/appendedlist.h +363 -363
- data/ext/generator/parser/rpp/chartools.cpp +146 -146
- data/ext/generator/parser/rpp/chartools.h +99 -99
- data/ext/generator/parser/rpp/macrorepository.cpp +44 -44
- data/ext/generator/parser/rpp/macrorepository.h +59 -59
- data/ext/generator/parser/rpp/pp-configuration +86 -86
- data/ext/generator/parser/rpp/pp-engine.h +267 -267
- data/ext/generator/parser/rpp/pp-environment.cpp +271 -271
- data/ext/generator/parser/rpp/pp-environment.h +119 -119
- data/ext/generator/parser/rpp/pp-internal.cpp +38 -38
- data/ext/generator/parser/rpp/pp-internal.h +37 -37
- data/ext/generator/parser/rpp/pp-location.cpp +191 -191
- data/ext/generator/parser/rpp/pp-location.h +89 -89
- data/ext/generator/parser/rpp/pp-macro-expander.cpp +568 -568
- data/ext/generator/parser/rpp/pp-macro-expander.cpp.orig +558 -558
- data/ext/generator/parser/rpp/pp-macro-expander.h +130 -130
- data/ext/generator/parser/rpp/pp-macro.cpp +153 -153
- data/ext/generator/parser/rpp/pp-macro.h +176 -176
- data/ext/generator/parser/rpp/pp-scanner.cpp +311 -311
- data/ext/generator/parser/rpp/pp-scanner.h +97 -97
- data/ext/generator/parser/rpp/pp-stream.cpp +425 -425
- data/ext/generator/parser/rpp/pp-stream.h +183 -183
- data/ext/generator/parser/rpp/preprocessor.cpp +65 -65
- data/ext/generator/parser/rpp/preprocessor.h +80 -80
- data/ext/generator/parser/rpp/rpp.pri +2 -2
- data/ext/generator/parser/rpp/test/t001.cpp +23 -23
- data/ext/generator/parser/rpp/test/t002.cpp +15 -15
- data/ext/generator/parser/rpp/test/t003.cpp +10 -10
- data/ext/generator/parser/rpp/test/t004.cpp +9 -9
- data/ext/generator/parser/rpp/test/t005.cpp +10 -10
- data/ext/generator/parser/rpp/test/t006.cpp +10 -10
- data/ext/generator/parser/rpp/test/t007.cpp +6 -6
- data/ext/generator/parser/rpp/test/t008.cpp +6 -6
- data/ext/generator/parser/rpp/test/t009.cpp +5 -5
- data/ext/generator/parser/rpp/test/t010.cpp +15 -15
- data/ext/generator/parser/rpp/test/t011.cpp +9 -9
- data/ext/generator/parser/rpp/tests/CMakeLists.txt +17 -17
- data/ext/generator/parser/rpp/tests/main.cpp +69 -69
- data/ext/generator/parser/rxx.pri +50 -50
- data/ext/generator/parser/rxx_allocator.h +128 -128
- data/ext/generator/parser/safetycounter.h +57 -57
- data/ext/generator/parser/simplecursor.h +74 -74
- data/ext/generator/parser/stringhelpers.cpp +577 -577
- data/ext/generator/parser/stringhelpers.h +118 -118
- data/ext/generator/parser/symbol.h +140 -140
- data/ext/generator/parser/tests/CMakeLists.txt +46 -46
- data/ext/generator/parser/tests/test_generator.cpp +259 -259
- data/ext/generator/parser/tests/test_parser.cpp +474 -474
- data/ext/generator/parser/tests/test_pool.cpp +109 -109
- data/ext/generator/parser/tests/test_pool.h +35 -35
- data/ext/generator/parser/tests/testconfig.h.cmake +4 -4
- data/ext/generator/parser/tokens.cpp +367 -367
- data/ext/generator/parser/tokens.h +148 -148
- data/ext/generator/parser/type_compiler.cpp +135 -135
- data/ext/generator/parser/type_compiler.h +68 -68
- data/ext/generator/parser/visitor.cpp +115 -115
- data/ext/generator/parser/visitor.h +138 -138
- data/ext/generator/smoke.h +557 -557
- data/ext/generator/smokegen_string.h +43 -43
- data/ext/generator/type.cpp +204 -204
- data/ext/generator/type.h +497 -497
- data/ext/generator/type_compiler.cpp +277 -277
- data/ext/generator/type_compiler.h +80 -80
- data/ext/ruby/CMakeLists.txt +64 -64
- data/ext/ruby/qtdeclarative/CMakeLists.txt +17 -17
- data/ext/ruby/qtdeclarative/qtdeclarative.cpp +67 -67
- data/ext/ruby/qtdeclarative/qtdeclarative.rb +17 -17
- data/ext/ruby/qtdeclarative/qtdeclarativehandlers.cpp +36 -36
- data/ext/ruby/qtruby/AUTHORS +54 -54
- data/ext/ruby/qtruby/COPYING +355 -355
- data/ext/ruby/qtruby/COPYING.LIB +510 -510
- data/ext/ruby/qtruby/ChangeLog +3732 -3732
- data/ext/ruby/qtruby/INSTALL +79 -79
- data/ext/ruby/qtruby/README +264 -264
- data/ext/ruby/qtruby/TODO +8 -8
- data/ext/ruby/qtruby/bin/rbqtapi +152 -152
- data/ext/ruby/qtruby/rails_support/CMakeLists.txt +1 -1
- data/ext/ruby/qtruby/rails_support/active_item_model.rb +234 -234
- data/ext/ruby/qtruby/rails_support/active_table_model.rb +122 -122
- data/ext/ruby/qtruby/src/Qt.cpp +8 -8
- data/ext/ruby/qtruby/src/marshall_basetypes.h +208 -208
- data/ext/ruby/qtruby/src/marshall_complex.h +175 -175
- data/ext/ruby/qtruby/src/marshall_macros.h +647 -647
- data/ext/ruby/qtruby/src/marshall_types.cpp +815 -815
- data/ext/ruby/qtruby/src/marshall_types.h +240 -240
- data/ext/ruby/qtruby/src/qtruby.cpp +69 -12
- data/ext/ruby/qtruby/src/qtruby.h +1 -1
- data/ext/ruby/qtruby/test/opoverloading.rb +46 -46
- data/ext/ruby/qtruby/test/unittests.rb +151 -151
- data/ext/ruby/qtruby/tools/rbrcc/main.cpp +173 -173
- data/ext/ruby/qtruby/tools/rbrcc/rbrcc.pro +14 -14
- data/ext/ruby/qtruby/tools/rbrcc/rcc.cpp +648 -648
- data/ext/ruby/qtruby/tools/rbrcc/rcc.h +165 -165
- data/ext/ruby/qtruby/tools/rbuic/LICENSE.GPL +280 -280
- data/ext/ruby/qtruby/tools/rbuic/TODO +4 -4
- data/ext/ruby/qtruby/tools/rbuic/customwidgetsinfo.cpp +106 -106
- data/ext/ruby/qtruby/tools/rbuic/customwidgetsinfo.h +95 -95
- data/ext/ruby/qtruby/tools/rbuic/databaseinfo.cpp +102 -102
- data/ext/ruby/qtruby/tools/rbuic/databaseinfo.h +85 -85
- data/ext/ruby/qtruby/tools/rbuic/driver.cpp +384 -384
- data/ext/ruby/qtruby/tools/rbuic/driver.h +141 -141
- data/ext/ruby/qtruby/tools/rbuic/option.h +3 -0
- data/ext/ruby/qtruby/tools/rbuic/rbuic.pri +23 -23
- data/ext/ruby/qtruby/tools/rbuic/rbuic4.pro +43 -43
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbextractimages.cpp +150 -150
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbextractimages.h +83 -83
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwritedeclaration.cpp +217 -217
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwritedeclaration.h +85 -85
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondata.cpp +185 -185
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondata.h +86 -86
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondeclaration.cpp +88 -88
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondeclaration.h +83 -83
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteiconinitialization.cpp +126 -126
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteiconinitialization.h +87 -87
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteinitialization.cpp +2478 -2478
- data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteinitialization.h +314 -314
- data/ext/ruby/qtruby/tools/rbuic/ruby/ruby.pri +18 -18
- data/ext/ruby/qtruby/tools/rbuic/treewalker.cpp +318 -318
- data/ext/ruby/qtruby/tools/rbuic/treewalker.h +139 -139
- data/ext/ruby/qtruby/tools/rbuic/ui4.cpp +7623 -7623
- data/ext/ruby/qtruby/tools/rbuic/ui4.h +3180 -3180
- data/ext/ruby/qtruby/tools/rbuic/utils.h +125 -125
- data/ext/ruby/qtruby/tools/rbuic/validator.cpp +100 -100
- data/ext/ruby/qtruby/tools/rbuic/validator.h +80 -80
- data/ext/ruby/qtscript/CMakeLists.txt +19 -19
- data/ext/ruby/qtscript/qtscript.cpp +83 -83
- data/ext/ruby/qtscript/qtscript.rb +40 -40
- data/ext/ruby/qtscript/qtscripthandlers.cpp +37 -37
- data/ext/ruby/qtscript/smokedata.cpp +1403 -1403
- data/ext/ruby/qttest/CMakeLists.txt +18 -18
- data/ext/ruby/qttest/ChangeLog +9 -9
- data/ext/ruby/qttest/examples/myfirsttest.rb +30 -30
- data/ext/ruby/qttest/qttest.cpp +83 -83
- data/ext/ruby/qttest/qttest.rb +166 -166
- data/ext/ruby/qttest/qttesthandlers.cpp +37 -37
- data/ext/ruby/qtuitools/CMakeLists.txt +16 -16
- data/ext/ruby/qtuitools/qtuitools.cpp +83 -83
- data/ext/ruby/qtuitools/qtuitools.rb +17 -17
- data/ext/ruby/qtuitools/qtuitoolshandlers.cpp +32 -32
- data/ext/ruby/qtwebkit/CMakeLists.txt +17 -17
- data/ext/ruby/qtwebkit/qtwebkit.cpp +67 -67
- data/ext/ruby/qtwebkit/qtwebkit.rb +17 -17
- data/ext/ruby/qtwebkit/qtwebkithandlers.cpp +40 -40
- data/ext/smoke/deptool/CMakeLists.txt +7 -7
- data/ext/smoke/deptool/main.cpp +128 -128
- data/ext/smoke/qtcore/CMakeLists.txt +88 -88
- data/ext/smoke/qtcore/QtGuess.txt +180 -180
- data/ext/smoke/qtcore/config.xml.cmake +10 -10
- data/ext/smoke/qtcore/qt-config.xml.cmake +21 -21
- data/ext/smoke/qtcore/qtcore_includes.h +1 -1
- data/ext/smoke/qtcore/smokeconfig.xml +193 -193
- data/ext/smoke/qtcore/tests/CMakeLists.txt +13 -13
- data/ext/smoke/qtcore/tests/test.cpp +846 -846
- data/ext/smoke/qtcore_smoke.h +16 -16
- data/ext/smoke/qtdbus/CMakeLists.txt +38 -38
- data/ext/smoke/qtdbus/config.xml.cmake +11 -11
- data/ext/smoke/qtdbus/qtdbus_includes.h +2 -2
- data/ext/smoke/qtdbus/smokeconfig.xml +65 -65
- data/ext/smoke/qtdbus_smoke.h +16 -16
- data/ext/smoke/qtdeclarative/CMakeLists.txt +45 -45
- data/ext/smoke/qtdeclarative/config.xml.cmake +12 -12
- data/ext/smoke/qtdeclarative/qtdeclarative_includes.h +3 -3
- data/ext/smoke/qtdeclarative/smokeconfig.xml +59 -59
- data/ext/smoke/qtdeclarative_smoke.h +16 -16
- data/ext/smoke/qtgui/CMakeLists.txt +76 -76
- data/ext/smoke/qtgui/config.xml.cmake +11 -11
- data/ext/smoke/qtgui/qtgui_includes.h +7 -7
- data/ext/smoke/qtgui/smokeconfig.xml +500 -500
- data/ext/smoke/qtgui_smoke.h +16 -16
- data/ext/smoke/qthelp/CMakeLists.txt +45 -45
- data/ext/smoke/qthelp/config.xml.cmake +13 -13
- data/ext/smoke/qthelp/qthelp_includes.h +3 -3
- data/ext/smoke/qthelp/smokeconfig.xml +54 -54
- data/ext/smoke/qthelp_smoke.h +16 -16
- data/ext/smoke/qtmultimedia/CMakeLists.txt +42 -42
- data/ext/smoke/qtmultimedia/config.xml.cmake +12 -12
- data/ext/smoke/qtmultimedia/qtmultimedia_includes.h +3 -3
- data/ext/smoke/qtmultimedia/smokeconfig.xml +51 -51
- data/ext/smoke/qtmultimedia_smoke.h +16 -16
- data/ext/smoke/qtnetwork/CMakeLists.txt +38 -38
- data/ext/smoke/qtnetwork/config.xml.cmake +11 -11
- data/ext/smoke/qtnetwork/qtnetwork_includes.h +2 -2
- data/ext/smoke/qtnetwork/smokeconfig.xml +81 -81
- data/ext/smoke/qtnetwork_smoke.h +16 -16
- data/ext/smoke/qtopengl/CMakeLists.txt +43 -43
- data/ext/smoke/qtopengl/config.xml.cmake +13 -13
- data/ext/smoke/qtopengl/qtopengl_includes.h +3 -3
- data/ext/smoke/qtopengl/smokeconfig.xml +58 -58
- data/ext/smoke/qtopengl_smoke.h +16 -16
- data/ext/smoke/qtscript/CMakeLists.txt +31 -31
- data/ext/smoke/qtscript/config.xml.cmake +11 -11
- data/ext/smoke/qtscript/qtscript_includes.h +14 -14
- data/ext/smoke/qtscript/smokeconfig.xml +39 -39
- data/ext/smoke/qtscript_smoke.h +16 -16
- data/ext/smoke/qtsql/CMakeLists.txt +45 -45
- data/ext/smoke/qtsql/config.xml.cmake +11 -11
- data/ext/smoke/qtsql/qtsql_includes.h +3 -3
- data/ext/smoke/qtsql/smokeconfig.xml +60 -60
- data/ext/smoke/qtsql_smoke.h +16 -16
- data/ext/smoke/qtsvg/CMakeLists.txt +43 -43
- data/ext/smoke/qtsvg/config.xml.cmake +12 -12
- data/ext/smoke/qtsvg/qtsvg_includes.h +3 -3
- data/ext/smoke/qtsvg/smokeconfig.xml +46 -46
- data/ext/smoke/qtsvg_smoke.h +16 -16
- data/ext/smoke/qttest/CMakeLists.txt +35 -35
- data/ext/smoke/qttest/config.xml.cmake +12 -12
- data/ext/smoke/qttest/qttest_includes.h +14 -14
- data/ext/smoke/qttest/smokeconfig.xml +36 -36
- data/ext/smoke/qttest_smoke.h +16 -16
- data/ext/smoke/qtuitools/CMakeLists.txt +30 -30
- data/ext/smoke/qtuitools/config.xml.cmake +12 -12
- data/ext/smoke/qtuitools/qtuitools_includes.h +1 -1
- data/ext/smoke/qtuitools/smokeconfig.xml +20 -20
- data/ext/smoke/qtuitools_smoke.h +16 -16
- data/ext/smoke/qtwebkit/CMakeLists.txt +36 -36
- data/ext/smoke/qtwebkit/config.xml.cmake +11 -11
- data/ext/smoke/qtwebkit/qtwebkit_includes.h +1 -1
- data/ext/smoke/qtwebkit/smokeconfig.xml +48 -48
- data/ext/smoke/qtwebkit_smoke.h +16 -16
- data/ext/smoke/qtxml/CMakeLists.txt +41 -41
- data/ext/smoke/qtxml/config.xml.cmake +11 -11
- data/ext/smoke/qtxml/qtxml_includes.h +2 -2
- data/ext/smoke/qtxml/smokeconfig.xml +70 -70
- data/ext/smoke/qtxml_smoke.h +16 -16
- data/ext/smoke/qtxmlpatterns/CMakeLists.txt +42 -42
- data/ext/smoke/qtxmlpatterns/config.xml.cmake +12 -12
- data/ext/smoke/qtxmlpatterns/qtxmlpatterns_includes.h +3 -3
- data/ext/smoke/qtxmlpatterns/smokeconfig.xml +80 -80
- data/ext/smoke/qtxmlpatterns_smoke.h +16 -16
- data/ext/smoke/smokeapi/CMakeLists.txt +9 -9
- data/ext/smoke/smokeapi/main.cpp +309 -309
- data/ext/smoke/smokebase/CMakeLists.txt +11 -11
- data/ext/smoke/smokebase/smokebase.cpp +6 -6
- data/ext/smoke/solid_smoke.h +16 -16
- data/extconf.rb +2 -2
- data/lib/Qt.rb +1 -1
- data/lib/Qt4.rb +111 -111
- data/lib/qtbindings_version.rb +2 -2
- data/lib/qtdeclarative/qtdeclarative.rb +17 -17
- data/lib/qtscript/qtscript.rb +40 -40
- data/lib/qttest/qttest.rb +166 -166
- data/lib/qtuitools/qtuitools.rb +17 -17
- data/lib/qtwebkit/qtwebkit.rb +17 -17
- data/qtbindings.gemspec +18 -18
- metadata +48 -48
@@ -1,815 +1,815 @@
|
|
1
|
-
/***************************************************************************
|
2
|
-
marshall_types.cpp - Derived from the PerlQt sources, see AUTHORS
|
3
|
-
for details
|
4
|
-
-------------------
|
5
|
-
begin : Fri Jul 4 2003
|
6
|
-
copyright : (C) 2003-2006 by Richard Dale
|
7
|
-
email : Richard_Dale@tipitina.demon.co.uk
|
8
|
-
***************************************************************************/
|
9
|
-
|
10
|
-
/***************************************************************************
|
11
|
-
* *
|
12
|
-
* This program is free software; you can redistribute it and/or modify *
|
13
|
-
* it under the terms of the GNU Lesser General Public License as *
|
14
|
-
* published by the Free Software Foundation; either version 2 of the *
|
15
|
-
* License, or (at your option) any later version. *
|
16
|
-
* *
|
17
|
-
***************************************************************************/
|
18
|
-
|
19
|
-
#include "marshall_types.h"
|
20
|
-
#include <smoke/qtcore_smoke.h>
|
21
|
-
|
22
|
-
#include <QtCore/qvector.h>
|
23
|
-
#include <QtCore/qlist.h>
|
24
|
-
#include <QtCore/qhash.h>
|
25
|
-
#include <QtCore/qmap.h>
|
26
|
-
|
27
|
-
#ifdef QT_QTDBUS
|
28
|
-
#include <QtDBus>
|
29
|
-
#endif
|
30
|
-
|
31
|
-
static bool qtruby_embedded = false;
|
32
|
-
|
33
|
-
extern "C" {
|
34
|
-
|
35
|
-
Q_DECL_EXPORT void
|
36
|
-
set_qtruby_embedded(bool yn) {
|
37
|
-
#if !defined(RUBY_INIT_STACK)
|
38
|
-
if (yn) {
|
39
|
-
qWarning("ERROR: set_qtruby_embedded(true) called but RUBY_INIT_STACK is undefined");
|
40
|
-
qWarning(" Upgrade to Ruby 1.8.6 or greater");
|
41
|
-
}
|
42
|
-
#endif
|
43
|
-
qtruby_embedded = yn;
|
44
|
-
}
|
45
|
-
|
46
|
-
}
|
47
|
-
|
48
|
-
// This is based on the SWIG SWIG_INIT_STACK and SWIG_RELEASE_STACK macros.
|
49
|
-
// If RUBY_INIT_STACK is only called when an embedded extension such as, a
|
50
|
-
// Ruby Plasma plugin is loaded, then later the C++ stack can drop below where the
|
51
|
-
// Ruby runtime thinks the stack should start (ie the stack position when the
|
52
|
-
// plugin was loaded), and result in sys stackerror exceptions
|
53
|
-
//
|
54
|
-
// TODO: While constructing the main class of a plugin when it is being loaded,
|
55
|
-
// there could be a problem when a custom virtual method is called or a slot is
|
56
|
-
// invoked, because RUBY_INIT_STACK will have aleady have been called from within
|
57
|
-
// the krubypluginfactory code, and it shouldn't be called again.
|
58
|
-
|
59
|
-
#if defined(RUBY_INIT_STACK)
|
60
|
-
# define QTRUBY_INIT_STACK \
|
61
|
-
if ( qtruby_embedded && nested_callback_count == 0 ) { RUBY_INIT_STACK } \
|
62
|
-
nested_callback_count++;
|
63
|
-
# define QTRUBY_RELEASE_STACK nested_callback_count--;
|
64
|
-
|
65
|
-
static unsigned int nested_callback_count = 0;
|
66
|
-
|
67
|
-
#else /* normal non-embedded extension */
|
68
|
-
|
69
|
-
# define QTRUBY_INIT_STACK
|
70
|
-
# define QTRUBY_RELEASE_STACK
|
71
|
-
#endif /* RUBY_EMBEDDED */
|
72
|
-
|
73
|
-
//
|
74
|
-
// This function was borrowed from the kross code. It puts out
|
75
|
-
// an error message and stacktrace on stderr for the current exception.
|
76
|
-
//
|
77
|
-
static void
|
78
|
-
show_exception_message()
|
79
|
-
{
|
80
|
-
VALUE info = rb_gv_get("$!");
|
81
|
-
VALUE bt = rb_funcall(info, rb_intern("backtrace"), 0);
|
82
|
-
VALUE message = RARRAY_PTR(bt)[0];
|
83
|
-
VALUE message2 = rb_obj_as_string(info);
|
84
|
-
|
85
|
-
QString errormessage = QString("%1: %2 (%3)")
|
86
|
-
.arg( StringValueCStr(message) )
|
87
|
-
.arg( StringValueCStr(message2) )
|
88
|
-
.arg( rb_class2name(CLASS_OF(info)) );
|
89
|
-
fprintf(stderr, "%s\n", errormessage.toLatin1().data());
|
90
|
-
|
91
|
-
QString tracemessage;
|
92
|
-
for(int i = 1; i < RARRAY_LEN(bt); ++i) {
|
93
|
-
if( TYPE(RARRAY_PTR(bt)[i]) == T_STRING ) {
|
94
|
-
QString s = QString("%1\n").arg( StringValueCStr(RARRAY_PTR(bt)[i]) );
|
95
|
-
Q_ASSERT( ! s.isNull() );
|
96
|
-
tracemessage += s;
|
97
|
-
fprintf(stderr, "\t%s", s.toLatin1().data());
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
|
102
|
-
static VALUE funcall2_protect_id = Qnil;
|
103
|
-
static int funcall2_protect_argc = 0;
|
104
|
-
static VALUE * funcall2_protect_args = 0;
|
105
|
-
|
106
|
-
static VALUE
|
107
|
-
funcall2_protect(VALUE obj)
|
108
|
-
{
|
109
|
-
VALUE result = Qnil;
|
110
|
-
result = rb_funcall2(obj, funcall2_protect_id, funcall2_protect_argc, funcall2_protect_args);
|
111
|
-
return result;
|
112
|
-
}
|
113
|
-
|
114
|
-
# define QTRUBY_FUNCALL2(result, obj, id, argc, args) \
|
115
|
-
if (qtruby_embedded) { \
|
116
|
-
int state = 0; \
|
117
|
-
funcall2_protect_id = id; \
|
118
|
-
funcall2_protect_argc = argc; \
|
119
|
-
funcall2_protect_args = args; \
|
120
|
-
result = rb_protect(funcall2_protect, obj, &state); \
|
121
|
-
if (state != 0) { \
|
122
|
-
show_exception_message(); \
|
123
|
-
result = Qnil; \
|
124
|
-
} \
|
125
|
-
} else { \
|
126
|
-
result = rb_funcall2(obj, id, argc, args); \
|
127
|
-
}
|
128
|
-
|
129
|
-
void
|
130
|
-
smokeStackToQtStack(Smoke::Stack stack, void ** o, int start, int end, QList<MocArgument*> args)
|
131
|
-
{
|
132
|
-
for (int i = start, j = 0; i < end; i++, j++) {
|
133
|
-
Smoke::StackItem *si = stack + j;
|
134
|
-
switch(args[i]->argType) {
|
135
|
-
case xmoc_bool:
|
136
|
-
o[j] = &si->s_bool;
|
137
|
-
break;
|
138
|
-
case xmoc_int:
|
139
|
-
o[j] = &si->s_int;
|
140
|
-
break;
|
141
|
-
case xmoc_uint:
|
142
|
-
o[j] = &si->s_uint;
|
143
|
-
break;
|
144
|
-
case xmoc_long:
|
145
|
-
o[j] = &si->s_long;
|
146
|
-
break;
|
147
|
-
case xmoc_ulong:
|
148
|
-
o[j] = &si->s_ulong;
|
149
|
-
break;
|
150
|
-
case xmoc_double:
|
151
|
-
o[j] = &si->s_double;
|
152
|
-
break;
|
153
|
-
case xmoc_charstar:
|
154
|
-
o[j] = &si->s_voidp;
|
155
|
-
break;
|
156
|
-
case xmoc_QString:
|
157
|
-
o[j] = si->s_voidp;
|
158
|
-
break;
|
159
|
-
default:
|
160
|
-
{
|
161
|
-
const SmokeType &t = args[i]->st;
|
162
|
-
void *p;
|
163
|
-
switch(t.elem()) {
|
164
|
-
case Smoke::t_bool:
|
165
|
-
p = &si->s_bool;
|
166
|
-
break;
|
167
|
-
case Smoke::t_char:
|
168
|
-
p = &si->s_char;
|
169
|
-
break;
|
170
|
-
case Smoke::t_uchar:
|
171
|
-
p = &si->s_uchar;
|
172
|
-
break;
|
173
|
-
case Smoke::t_short:
|
174
|
-
p = &si->s_short;
|
175
|
-
break;
|
176
|
-
case Smoke::t_ushort:
|
177
|
-
p = &si->s_ushort;
|
178
|
-
break;
|
179
|
-
case Smoke::t_int:
|
180
|
-
p = &si->s_int;
|
181
|
-
break;
|
182
|
-
case Smoke::t_uint:
|
183
|
-
p = &si->s_uint;
|
184
|
-
break;
|
185
|
-
case Smoke::t_long:
|
186
|
-
p = &si->s_long;
|
187
|
-
break;
|
188
|
-
case Smoke::t_ulong:
|
189
|
-
p = &si->s_ulong;
|
190
|
-
break;
|
191
|
-
case Smoke::t_float:
|
192
|
-
p = &si->s_float;
|
193
|
-
break;
|
194
|
-
case Smoke::t_double:
|
195
|
-
p = &si->s_double;
|
196
|
-
break;
|
197
|
-
case Smoke::t_enum:
|
198
|
-
{
|
199
|
-
// allocate a new enum value
|
200
|
-
Smoke::EnumFn fn = SmokeClass(t).enumFn();
|
201
|
-
if (!fn) {
|
202
|
-
rb_warning("Unknown enumeration %s\n", t.name());
|
203
|
-
p = new int((int)si->s_enum);
|
204
|
-
break;
|
205
|
-
}
|
206
|
-
Smoke::Index id = t.typeId();
|
207
|
-
(*fn)(Smoke::EnumNew, id, p, si->s_enum);
|
208
|
-
(*fn)(Smoke::EnumFromLong, id, p, si->s_enum);
|
209
|
-
// FIXME: MEMORY LEAK
|
210
|
-
break;
|
211
|
-
}
|
212
|
-
case Smoke::t_class:
|
213
|
-
case Smoke::t_voidp:
|
214
|
-
if (strchr(t.name(), '*') != 0) {
|
215
|
-
p = &si->s_voidp;
|
216
|
-
} else {
|
217
|
-
p = si->s_voidp;
|
218
|
-
}
|
219
|
-
break;
|
220
|
-
default:
|
221
|
-
p = 0;
|
222
|
-
break;
|
223
|
-
}
|
224
|
-
o[j] = p;
|
225
|
-
}
|
226
|
-
}
|
227
|
-
}
|
228
|
-
}
|
229
|
-
|
230
|
-
void
|
231
|
-
smokeStackFromQtStack(Smoke::Stack stack, void ** _o, int start, int end, QList<MocArgument*> args)
|
232
|
-
{
|
233
|
-
for (int i = start, j = 0; i < end; i++, j++) {
|
234
|
-
void *o = _o[j];
|
235
|
-
switch(args[i]->argType) {
|
236
|
-
case xmoc_bool:
|
237
|
-
stack[j].s_bool = *(bool*)o;
|
238
|
-
break;
|
239
|
-
case xmoc_int:
|
240
|
-
stack[j].s_int = *(int*)o;
|
241
|
-
break;
|
242
|
-
case xmoc_uint:
|
243
|
-
stack[j].s_uint = *(uint*)o;
|
244
|
-
break;
|
245
|
-
case xmoc_long:
|
246
|
-
stack[j].s_long = *(long*)o;
|
247
|
-
break;
|
248
|
-
case xmoc_ulong:
|
249
|
-
stack[j].s_ulong = *(ulong*)o;
|
250
|
-
break;
|
251
|
-
case xmoc_double:
|
252
|
-
stack[j].s_double = *(double*)o;
|
253
|
-
break;
|
254
|
-
case xmoc_charstar:
|
255
|
-
stack[j].s_voidp = o;
|
256
|
-
break;
|
257
|
-
case xmoc_QString:
|
258
|
-
stack[j].s_voidp = o;
|
259
|
-
break;
|
260
|
-
default: // case xmoc_ptr:
|
261
|
-
{
|
262
|
-
const SmokeType &t = args[i]->st;
|
263
|
-
switch(t.elem()) {
|
264
|
-
case Smoke::t_bool:
|
265
|
-
stack[j].s_bool = *(bool*)o;
|
266
|
-
break;
|
267
|
-
case Smoke::t_char:
|
268
|
-
stack[j].s_char = *(char*)o;
|
269
|
-
break;
|
270
|
-
case Smoke::t_uchar:
|
271
|
-
stack[j].s_uchar = *(unsigned char*)o;
|
272
|
-
break;
|
273
|
-
case Smoke::t_short:
|
274
|
-
stack[j].s_short = *(short*)o;
|
275
|
-
break;
|
276
|
-
case Smoke::t_ushort:
|
277
|
-
stack[j].s_ushort = *(unsigned short*)o;
|
278
|
-
break;
|
279
|
-
case Smoke::t_int:
|
280
|
-
stack[j].s_int = *(int*)o;
|
281
|
-
break;
|
282
|
-
case Smoke::t_uint:
|
283
|
-
stack[j].s_uint = *(unsigned int*)o;
|
284
|
-
break;
|
285
|
-
case Smoke::t_long:
|
286
|
-
stack[j].s_long = *(long*)o;
|
287
|
-
break;
|
288
|
-
case Smoke::t_ulong:
|
289
|
-
stack[j].s_ulong = *(unsigned long*)o;
|
290
|
-
break;
|
291
|
-
case Smoke::t_float:
|
292
|
-
stack[j].s_float = *(float*)o;
|
293
|
-
break;
|
294
|
-
case Smoke::t_double:
|
295
|
-
stack[j].s_double = *(double*)o;
|
296
|
-
break;
|
297
|
-
case Smoke::t_enum:
|
298
|
-
{
|
299
|
-
Smoke::EnumFn fn = SmokeClass(t).enumFn();
|
300
|
-
if (!fn) {
|
301
|
-
rb_warning("Unknown enumeration %s\n", t.name());
|
302
|
-
stack[j].s_enum = *(int*)o;
|
303
|
-
break;
|
304
|
-
}
|
305
|
-
Smoke::Index id = t.typeId();
|
306
|
-
(*fn)(Smoke::EnumToLong, id, o, stack[j].s_enum);
|
307
|
-
}
|
308
|
-
break;
|
309
|
-
case Smoke::t_class:
|
310
|
-
case Smoke::t_voidp:
|
311
|
-
if (strchr(t.name(), '*') != 0) {
|
312
|
-
stack[j].s_voidp = *(void **)o;
|
313
|
-
} else {
|
314
|
-
stack[j].s_voidp = o;
|
315
|
-
}
|
316
|
-
break;
|
317
|
-
}
|
318
|
-
}
|
319
|
-
}
|
320
|
-
}
|
321
|
-
}
|
322
|
-
|
323
|
-
namespace QtRuby {
|
324
|
-
|
325
|
-
MethodReturnValueBase::MethodReturnValueBase(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack) :
|
326
|
-
_smoke(smoke), _method(meth), _stack(stack)
|
327
|
-
{
|
328
|
-
_st.set(_smoke, method().ret);
|
329
|
-
}
|
330
|
-
|
331
|
-
const Smoke::Method&
|
332
|
-
MethodReturnValueBase::method()
|
333
|
-
{
|
334
|
-
return _smoke->methods[_method];
|
335
|
-
}
|
336
|
-
|
337
|
-
Smoke::StackItem&
|
338
|
-
MethodReturnValueBase::item()
|
339
|
-
{
|
340
|
-
return _stack[0];
|
341
|
-
}
|
342
|
-
|
343
|
-
Smoke *
|
344
|
-
MethodReturnValueBase::smoke()
|
345
|
-
{
|
346
|
-
return _smoke;
|
347
|
-
}
|
348
|
-
|
349
|
-
SmokeType
|
350
|
-
MethodReturnValueBase::type()
|
351
|
-
{
|
352
|
-
return _st;
|
353
|
-
}
|
354
|
-
|
355
|
-
void
|
356
|
-
MethodReturnValueBase::next() {}
|
357
|
-
|
358
|
-
bool
|
359
|
-
MethodReturnValueBase::cleanup()
|
360
|
-
{
|
361
|
-
return false;
|
362
|
-
}
|
363
|
-
|
364
|
-
void
|
365
|
-
MethodReturnValueBase::unsupported()
|
366
|
-
{
|
367
|
-
rb_raise(rb_eArgError, "Cannot handle '%s' as return-type of %s::%s",
|
368
|
-
type().name(),
|
369
|
-
classname(),
|
370
|
-
_smoke->methodNames[method().name]);
|
371
|
-
}
|
372
|
-
|
373
|
-
VALUE *
|
374
|
-
MethodReturnValueBase::var()
|
375
|
-
{
|
376
|
-
return _retval;
|
377
|
-
}
|
378
|
-
|
379
|
-
const char *
|
380
|
-
MethodReturnValueBase::classname()
|
381
|
-
{
|
382
|
-
return _smoke->className(method().classId);
|
383
|
-
}
|
384
|
-
|
385
|
-
|
386
|
-
VirtualMethodReturnValue::VirtualMethodReturnValue(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack, VALUE retval) :
|
387
|
-
MethodReturnValueBase(smoke,meth,stack), _retval2(retval)
|
388
|
-
{
|
389
|
-
_retval = &_retval2;
|
390
|
-
Marshall::HandlerFn fn = getMarshallFn(type());
|
391
|
-
(*fn)(this);
|
392
|
-
}
|
393
|
-
|
394
|
-
Marshall::Action
|
395
|
-
VirtualMethodReturnValue::action()
|
396
|
-
{
|
397
|
-
return Marshall::FromVALUE;
|
398
|
-
}
|
399
|
-
|
400
|
-
MethodReturnValue::MethodReturnValue(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack, VALUE * retval) :
|
401
|
-
MethodReturnValueBase(smoke,meth,stack)
|
402
|
-
{
|
403
|
-
_retval = retval;
|
404
|
-
Marshall::HandlerFn fn = getMarshallFn(type());
|
405
|
-
(*fn)(this);
|
406
|
-
}
|
407
|
-
|
408
|
-
Marshall::Action
|
409
|
-
MethodReturnValue::action()
|
410
|
-
{
|
411
|
-
return Marshall::ToVALUE;
|
412
|
-
}
|
413
|
-
|
414
|
-
const char *
|
415
|
-
MethodReturnValue::classname()
|
416
|
-
{
|
417
|
-
return qstrcmp(MethodReturnValueBase::classname(), "QGlobalSpace") == 0 ? "" : MethodReturnValueBase::classname();
|
418
|
-
}
|
419
|
-
|
420
|
-
|
421
|
-
MethodCallBase::MethodCallBase(Smoke *smoke, Smoke::Index meth) :
|
422
|
-
_smoke(smoke), _method(meth), _cur(-1), _called(false), _sp(0)
|
423
|
-
{
|
424
|
-
}
|
425
|
-
|
426
|
-
MethodCallBase::MethodCallBase(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack) :
|
427
|
-
_smoke(smoke), _method(meth), _stack(stack), _cur(-1), _called(false), _sp(0)
|
428
|
-
{
|
429
|
-
}
|
430
|
-
|
431
|
-
Smoke *
|
432
|
-
MethodCallBase::smoke()
|
433
|
-
{
|
434
|
-
return _smoke;
|
435
|
-
}
|
436
|
-
|
437
|
-
SmokeType
|
438
|
-
MethodCallBase::type()
|
439
|
-
{
|
440
|
-
return SmokeType(_smoke, _args[_cur]);
|
441
|
-
}
|
442
|
-
|
443
|
-
Smoke::StackItem &
|
444
|
-
MethodCallBase::item()
|
445
|
-
{
|
446
|
-
return _stack[_cur + 1];
|
447
|
-
}
|
448
|
-
|
449
|
-
const Smoke::Method &
|
450
|
-
MethodCallBase::method()
|
451
|
-
{
|
452
|
-
return _smoke->methods[_method];
|
453
|
-
}
|
454
|
-
|
455
|
-
void
|
456
|
-
MethodCallBase::next()
|
457
|
-
{
|
458
|
-
int oldcur = _cur;
|
459
|
-
_cur++;
|
460
|
-
while(!_called && _cur < items() ) {
|
461
|
-
Marshall::HandlerFn fn = getMarshallFn(type());
|
462
|
-
(*fn)(this);
|
463
|
-
_cur++;
|
464
|
-
}
|
465
|
-
|
466
|
-
callMethod();
|
467
|
-
_cur = oldcur;
|
468
|
-
}
|
469
|
-
|
470
|
-
void
|
471
|
-
MethodCallBase::unsupported()
|
472
|
-
{
|
473
|
-
rb_raise(rb_eArgError, "Cannot handle '%s' as argument of %s::%s",
|
474
|
-
type().name(),
|
475
|
-
classname(),
|
476
|
-
_smoke->methodNames[method().name]);
|
477
|
-
}
|
478
|
-
|
479
|
-
const char*
|
480
|
-
MethodCallBase::classname()
|
481
|
-
{
|
482
|
-
return _smoke->className(method().classId);
|
483
|
-
}
|
484
|
-
|
485
|
-
|
486
|
-
VirtualMethodCall::VirtualMethodCall(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack, VALUE obj, VALUE *sp) :
|
487
|
-
MethodCallBase(smoke,meth,stack), _obj(obj)
|
488
|
-
{
|
489
|
-
_sp = sp;
|
490
|
-
_args = _smoke->argumentList + method().args;
|
491
|
-
}
|
492
|
-
|
493
|
-
VirtualMethodCall::~VirtualMethodCall()
|
494
|
-
{
|
495
|
-
}
|
496
|
-
|
497
|
-
Marshall::Action
|
498
|
-
VirtualMethodCall::action()
|
499
|
-
{
|
500
|
-
return Marshall::ToVALUE;
|
501
|
-
}
|
502
|
-
|
503
|
-
VALUE *
|
504
|
-
VirtualMethodCall::var()
|
505
|
-
{
|
506
|
-
return _sp + _cur;
|
507
|
-
}
|
508
|
-
|
509
|
-
int
|
510
|
-
VirtualMethodCall::items()
|
511
|
-
{
|
512
|
-
return method().numArgs;
|
513
|
-
}
|
514
|
-
|
515
|
-
void
|
516
|
-
VirtualMethodCall::callMethod()
|
517
|
-
{
|
518
|
-
if (_called) return;
|
519
|
-
_called = true;
|
520
|
-
|
521
|
-
VALUE _retval;
|
522
|
-
QTRUBY_INIT_STACK
|
523
|
-
QTRUBY_FUNCALL2(_retval, _obj, rb_intern(_smoke->methodNames[method().name]), method().numArgs, _sp)
|
524
|
-
QTRUBY_RELEASE_STACK
|
525
|
-
|
526
|
-
VirtualMethodReturnValue r(_smoke, _method, _stack, _retval);
|
527
|
-
}
|
528
|
-
|
529
|
-
bool
|
530
|
-
VirtualMethodCall::cleanup()
|
531
|
-
{
|
532
|
-
return false;
|
533
|
-
}
|
534
|
-
|
535
|
-
MethodCall::MethodCall(Smoke *smoke, Smoke::Index method, VALUE target, VALUE *sp, int items) :
|
536
|
-
MethodCallBase(smoke,method), _target(target), _o(0), _sp(sp), _items(items)
|
537
|
-
{
|
538
|
-
if (_target != Qnil) {
|
539
|
-
smokeruby_object *o = value_obj_info(_target);
|
540
|
-
if (o != 0 && o->ptr != 0) {
|
541
|
-
_o = o;
|
542
|
-
}
|
543
|
-
}
|
544
|
-
|
545
|
-
_args = _smoke->argumentList + _smoke->methods[_method].args;
|
546
|
-
_items = _smoke->methods[_method].numArgs;
|
547
|
-
_stack = new Smoke::StackItem[items + 1];
|
548
|
-
_retval = Qnil;
|
549
|
-
}
|
550
|
-
|
551
|
-
MethodCall::~MethodCall()
|
552
|
-
{
|
553
|
-
delete[] _stack;
|
554
|
-
}
|
555
|
-
|
556
|
-
Marshall::Action
|
557
|
-
MethodCall::action()
|
558
|
-
{
|
559
|
-
return Marshall::FromVALUE;
|
560
|
-
}
|
561
|
-
|
562
|
-
VALUE *
|
563
|
-
MethodCall::var()
|
564
|
-
{
|
565
|
-
if (_cur < 0) return &_retval;
|
566
|
-
return _sp + _cur;
|
567
|
-
}
|
568
|
-
|
569
|
-
int
|
570
|
-
MethodCall::items()
|
571
|
-
{
|
572
|
-
return _items;
|
573
|
-
}
|
574
|
-
|
575
|
-
bool
|
576
|
-
MethodCall::cleanup()
|
577
|
-
{
|
578
|
-
return true;
|
579
|
-
}
|
580
|
-
|
581
|
-
const char *
|
582
|
-
MethodCall::classname()
|
583
|
-
{
|
584
|
-
return qstrcmp(MethodCallBase::classname(), "QGlobalSpace") == 0 ? "" : MethodCallBase::classname();
|
585
|
-
}
|
586
|
-
|
587
|
-
SigSlotBase::SigSlotBase(QList<MocArgument*> args) : _cur(-1), _called(false)
|
588
|
-
{
|
589
|
-
_items = args.count();
|
590
|
-
_args = args;
|
591
|
-
_stack = new Smoke::StackItem[_items - 1];
|
592
|
-
}
|
593
|
-
|
594
|
-
SigSlotBase::~SigSlotBase()
|
595
|
-
{
|
596
|
-
delete[] _stack;
|
597
|
-
foreach (MocArgument * arg, _args) {
|
598
|
-
delete arg;
|
599
|
-
}
|
600
|
-
}
|
601
|
-
|
602
|
-
const MocArgument &
|
603
|
-
SigSlotBase::arg()
|
604
|
-
{
|
605
|
-
return *(_args[_cur + 1]);
|
606
|
-
}
|
607
|
-
|
608
|
-
SmokeType
|
609
|
-
SigSlotBase::type()
|
610
|
-
{
|
611
|
-
return arg().st;
|
612
|
-
}
|
613
|
-
|
614
|
-
Smoke::StackItem &
|
615
|
-
SigSlotBase::item()
|
616
|
-
{
|
617
|
-
return _stack[_cur];
|
618
|
-
}
|
619
|
-
|
620
|
-
VALUE *
|
621
|
-
SigSlotBase::var()
|
622
|
-
{
|
623
|
-
return _sp + _cur;
|
624
|
-
}
|
625
|
-
|
626
|
-
Smoke *
|
627
|
-
SigSlotBase::smoke()
|
628
|
-
{
|
629
|
-
return type().smoke();
|
630
|
-
}
|
631
|
-
|
632
|
-
void
|
633
|
-
SigSlotBase::unsupported()
|
634
|
-
{
|
635
|
-
rb_raise(rb_eArgError, "Cannot handle '%s' as %s argument\n", type().name(), mytype() );
|
636
|
-
}
|
637
|
-
|
638
|
-
void
|
639
|
-
SigSlotBase::next()
|
640
|
-
{
|
641
|
-
int oldcur = _cur;
|
642
|
-
_cur++;
|
643
|
-
|
644
|
-
while(!_called && _cur < _items - 1) {
|
645
|
-
Marshall::HandlerFn fn = getMarshallFn(type());
|
646
|
-
(*fn)(this);
|
647
|
-
_cur++;
|
648
|
-
}
|
649
|
-
|
650
|
-
mainfunction();
|
651
|
-
_cur = oldcur;
|
652
|
-
}
|
653
|
-
|
654
|
-
void
|
655
|
-
SigSlotBase::prepareReturnValue(void** o)
|
656
|
-
{
|
657
|
-
if (_args[0]->argType == xmoc_ptr) {
|
658
|
-
QByteArray type(_args[0]->st.name());
|
659
|
-
type.replace("const ", "");
|
660
|
-
if (!type.endsWith('*')) { // a real pointer type, so a simple void* will do
|
661
|
-
if (type.endsWith('&')) {
|
662
|
-
type.resize(type.size() - 1);
|
663
|
-
}
|
664
|
-
if (type.startsWith("QList")) {
|
665
|
-
o[0] = new QList<void*>;
|
666
|
-
} else if (type.startsWith("QVector")) {
|
667
|
-
o[0] = new QVector<void*>;
|
668
|
-
} else if (type.startsWith("QHash")) {
|
669
|
-
o[0] = new QHash<void*, void*>;
|
670
|
-
} else if (type.startsWith("QMap")) {
|
671
|
-
o[0] = new QMap<void*, void*>;
|
672
|
-
#ifdef QT_QTDBUS
|
673
|
-
} else if (type == "QDBusVariant") {
|
674
|
-
o[0] = new QDBusVariant;
|
675
|
-
#endif
|
676
|
-
} else {
|
677
|
-
Smoke::ModuleIndex ci = qtcore_Smoke->findClass(type);
|
678
|
-
if (ci.index != 0) {
|
679
|
-
Smoke::ModuleIndex mi = ci.smoke->findMethod(type, type);
|
680
|
-
if (mi.index) {
|
681
|
-
Smoke::Class& c = ci.smoke->classes[ci.index];
|
682
|
-
Smoke::Method& meth = mi.smoke->methods[mi.smoke->methodMaps[mi.index].method];
|
683
|
-
Smoke::StackItem _stack[1];
|
684
|
-
c.classFn(meth.method, 0, _stack);
|
685
|
-
o[0] = _stack[0].s_voidp;
|
686
|
-
}
|
687
|
-
}
|
688
|
-
}
|
689
|
-
}
|
690
|
-
} else if (_args[0]->argType == xmoc_QString) {
|
691
|
-
o[0] = new QString;
|
692
|
-
}
|
693
|
-
}
|
694
|
-
|
695
|
-
/*
|
696
|
-
Converts a ruby value returned by a slot invocation to a Qt slot
|
697
|
-
reply type
|
698
|
-
*/
|
699
|
-
class SlotReturnValue : public Marshall {
|
700
|
-
QList<MocArgument*> _replyType;
|
701
|
-
Smoke::Stack _stack;
|
702
|
-
VALUE * _result;
|
703
|
-
public:
|
704
|
-
SlotReturnValue(void ** o, VALUE * result, QList<MocArgument*> replyType)
|
705
|
-
{
|
706
|
-
_result = result;
|
707
|
-
_replyType = replyType;
|
708
|
-
_stack = new Smoke::StackItem[1];
|
709
|
-
Marshall::HandlerFn fn = getMarshallFn(type());
|
710
|
-
(*fn)(this);
|
711
|
-
|
712
|
-
QByteArray t(type().name());
|
713
|
-
t.replace("const ", "");
|
714
|
-
t.replace("&", "");
|
715
|
-
|
716
|
-
if (t == "QDBusVariant") {
|
717
|
-
#ifdef QT_QTDBUS
|
718
|
-
*reinterpret_cast<QDBusVariant*>(o[0]) = *(QDBusVariant*) _stack[0].s_class;
|
719
|
-
#endif
|
720
|
-
} else {
|
721
|
-
// Save any address in zeroth element of the arrary of 'void*'s passed to
|
722
|
-
// qt_metacall()
|
723
|
-
void * ptr = o[0];
|
724
|
-
smokeStackToQtStack(_stack, o, 0, 1, _replyType);
|
725
|
-
// Only if the zeroth element of the array of 'void*'s passed to qt_metacall()
|
726
|
-
// contains an address, is the return value of the slot needed.
|
727
|
-
if (ptr != 0) {
|
728
|
-
*(void**)ptr = *(void**)(o[0]);
|
729
|
-
}
|
730
|
-
}
|
731
|
-
}
|
732
|
-
|
733
|
-
SmokeType type() {
|
734
|
-
return _replyType[0]->st;
|
735
|
-
}
|
736
|
-
Marshall::Action action() { return Marshall::FromVALUE; }
|
737
|
-
Smoke::StackItem &item() { return _stack[0]; }
|
738
|
-
VALUE * var() {
|
739
|
-
return _result;
|
740
|
-
}
|
741
|
-
|
742
|
-
void unsupported()
|
743
|
-
{
|
744
|
-
rb_raise(rb_eArgError, "Cannot handle '%s' as slot reply-type", type().name());
|
745
|
-
}
|
746
|
-
Smoke *smoke() { return type().smoke(); }
|
747
|
-
|
748
|
-
void next() {}
|
749
|
-
|
750
|
-
bool cleanup() { return false; }
|
751
|
-
|
752
|
-
~SlotReturnValue() {
|
753
|
-
delete[] _stack;
|
754
|
-
}
|
755
|
-
};
|
756
|
-
|
757
|
-
InvokeSlot::InvokeSlot(VALUE obj, ID slotname, QList<MocArgument*> args, void ** o) : SigSlotBase(args),
|
758
|
-
_obj(obj), _slotname(slotname), _o(o)
|
759
|
-
{
|
760
|
-
_sp = (VALUE *) ALLOC_N(VALUE, _items - 1);
|
761
|
-
copyArguments();
|
762
|
-
}
|
763
|
-
|
764
|
-
InvokeSlot::~InvokeSlot()
|
765
|
-
{
|
766
|
-
xfree(_sp);
|
767
|
-
}
|
768
|
-
|
769
|
-
Marshall::Action
|
770
|
-
InvokeSlot::action()
|
771
|
-
{
|
772
|
-
return Marshall::ToVALUE;
|
773
|
-
}
|
774
|
-
|
775
|
-
const char *
|
776
|
-
InvokeSlot::mytype()
|
777
|
-
{
|
778
|
-
return "slot";
|
779
|
-
}
|
780
|
-
|
781
|
-
bool
|
782
|
-
InvokeSlot::cleanup()
|
783
|
-
{
|
784
|
-
return false;
|
785
|
-
}
|
786
|
-
|
787
|
-
void
|
788
|
-
InvokeSlot::copyArguments()
|
789
|
-
{
|
790
|
-
smokeStackFromQtStack(_stack, _o + 1, 1, _items, _args);
|
791
|
-
}
|
792
|
-
|
793
|
-
void
|
794
|
-
InvokeSlot::invokeSlot()
|
795
|
-
{
|
796
|
-
if (_called) return;
|
797
|
-
_called = true;
|
798
|
-
|
799
|
-
VALUE result;
|
800
|
-
QTRUBY_INIT_STACK
|
801
|
-
QTRUBY_FUNCALL2(result, _obj, _slotname, _items - 1, _sp)
|
802
|
-
QTRUBY_RELEASE_STACK
|
803
|
-
|
804
|
-
if (_args[0]->argType != xmoc_void) {
|
805
|
-
SlotReturnValue r(_o, &result, _args);
|
806
|
-
}
|
807
|
-
}
|
808
|
-
|
809
|
-
void
|
810
|
-
InvokeSlot::mainfunction()
|
811
|
-
{
|
812
|
-
invokeSlot();
|
813
|
-
}
|
814
|
-
|
815
|
-
}
|
1
|
+
/***************************************************************************
|
2
|
+
marshall_types.cpp - Derived from the PerlQt sources, see AUTHORS
|
3
|
+
for details
|
4
|
+
-------------------
|
5
|
+
begin : Fri Jul 4 2003
|
6
|
+
copyright : (C) 2003-2006 by Richard Dale
|
7
|
+
email : Richard_Dale@tipitina.demon.co.uk
|
8
|
+
***************************************************************************/
|
9
|
+
|
10
|
+
/***************************************************************************
|
11
|
+
* *
|
12
|
+
* This program is free software; you can redistribute it and/or modify *
|
13
|
+
* it under the terms of the GNU Lesser General Public License as *
|
14
|
+
* published by the Free Software Foundation; either version 2 of the *
|
15
|
+
* License, or (at your option) any later version. *
|
16
|
+
* *
|
17
|
+
***************************************************************************/
|
18
|
+
|
19
|
+
#include "marshall_types.h"
|
20
|
+
#include <smoke/qtcore_smoke.h>
|
21
|
+
|
22
|
+
#include <QtCore/qvector.h>
|
23
|
+
#include <QtCore/qlist.h>
|
24
|
+
#include <QtCore/qhash.h>
|
25
|
+
#include <QtCore/qmap.h>
|
26
|
+
|
27
|
+
#ifdef QT_QTDBUS
|
28
|
+
#include <QtDBus>
|
29
|
+
#endif
|
30
|
+
|
31
|
+
static bool qtruby_embedded = false;
|
32
|
+
|
33
|
+
extern "C" {
|
34
|
+
|
35
|
+
Q_DECL_EXPORT void
|
36
|
+
set_qtruby_embedded(bool yn) {
|
37
|
+
#if !defined(RUBY_INIT_STACK)
|
38
|
+
if (yn) {
|
39
|
+
qWarning("ERROR: set_qtruby_embedded(true) called but RUBY_INIT_STACK is undefined");
|
40
|
+
qWarning(" Upgrade to Ruby 1.8.6 or greater");
|
41
|
+
}
|
42
|
+
#endif
|
43
|
+
qtruby_embedded = yn;
|
44
|
+
}
|
45
|
+
|
46
|
+
}
|
47
|
+
|
48
|
+
// This is based on the SWIG SWIG_INIT_STACK and SWIG_RELEASE_STACK macros.
|
49
|
+
// If RUBY_INIT_STACK is only called when an embedded extension such as, a
|
50
|
+
// Ruby Plasma plugin is loaded, then later the C++ stack can drop below where the
|
51
|
+
// Ruby runtime thinks the stack should start (ie the stack position when the
|
52
|
+
// plugin was loaded), and result in sys stackerror exceptions
|
53
|
+
//
|
54
|
+
// TODO: While constructing the main class of a plugin when it is being loaded,
|
55
|
+
// there could be a problem when a custom virtual method is called or a slot is
|
56
|
+
// invoked, because RUBY_INIT_STACK will have aleady have been called from within
|
57
|
+
// the krubypluginfactory code, and it shouldn't be called again.
|
58
|
+
|
59
|
+
#if defined(RUBY_INIT_STACK)
|
60
|
+
# define QTRUBY_INIT_STACK \
|
61
|
+
if ( qtruby_embedded && nested_callback_count == 0 ) { RUBY_INIT_STACK } \
|
62
|
+
nested_callback_count++;
|
63
|
+
# define QTRUBY_RELEASE_STACK nested_callback_count--;
|
64
|
+
|
65
|
+
static unsigned int nested_callback_count = 0;
|
66
|
+
|
67
|
+
#else /* normal non-embedded extension */
|
68
|
+
|
69
|
+
# define QTRUBY_INIT_STACK
|
70
|
+
# define QTRUBY_RELEASE_STACK
|
71
|
+
#endif /* RUBY_EMBEDDED */
|
72
|
+
|
73
|
+
//
|
74
|
+
// This function was borrowed from the kross code. It puts out
|
75
|
+
// an error message and stacktrace on stderr for the current exception.
|
76
|
+
//
|
77
|
+
static void
|
78
|
+
show_exception_message()
|
79
|
+
{
|
80
|
+
VALUE info = rb_gv_get("$!");
|
81
|
+
VALUE bt = rb_funcall(info, rb_intern("backtrace"), 0);
|
82
|
+
VALUE message = RARRAY_PTR(bt)[0];
|
83
|
+
VALUE message2 = rb_obj_as_string(info);
|
84
|
+
|
85
|
+
QString errormessage = QString("%1: %2 (%3)")
|
86
|
+
.arg( StringValueCStr(message) )
|
87
|
+
.arg( StringValueCStr(message2) )
|
88
|
+
.arg( rb_class2name(CLASS_OF(info)) );
|
89
|
+
fprintf(stderr, "%s\n", errormessage.toLatin1().data());
|
90
|
+
|
91
|
+
QString tracemessage;
|
92
|
+
for(int i = 1; i < RARRAY_LEN(bt); ++i) {
|
93
|
+
if( TYPE(RARRAY_PTR(bt)[i]) == T_STRING ) {
|
94
|
+
QString s = QString("%1\n").arg( StringValueCStr(RARRAY_PTR(bt)[i]) );
|
95
|
+
Q_ASSERT( ! s.isNull() );
|
96
|
+
tracemessage += s;
|
97
|
+
fprintf(stderr, "\t%s", s.toLatin1().data());
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
static VALUE funcall2_protect_id = Qnil;
|
103
|
+
static int funcall2_protect_argc = 0;
|
104
|
+
static VALUE * funcall2_protect_args = 0;
|
105
|
+
|
106
|
+
static VALUE
|
107
|
+
funcall2_protect(VALUE obj)
|
108
|
+
{
|
109
|
+
VALUE result = Qnil;
|
110
|
+
result = rb_funcall2(obj, funcall2_protect_id, funcall2_protect_argc, funcall2_protect_args);
|
111
|
+
return result;
|
112
|
+
}
|
113
|
+
|
114
|
+
# define QTRUBY_FUNCALL2(result, obj, id, argc, args) \
|
115
|
+
if (qtruby_embedded) { \
|
116
|
+
int state = 0; \
|
117
|
+
funcall2_protect_id = id; \
|
118
|
+
funcall2_protect_argc = argc; \
|
119
|
+
funcall2_protect_args = args; \
|
120
|
+
result = rb_protect(funcall2_protect, obj, &state); \
|
121
|
+
if (state != 0) { \
|
122
|
+
show_exception_message(); \
|
123
|
+
result = Qnil; \
|
124
|
+
} \
|
125
|
+
} else { \
|
126
|
+
result = rb_funcall2(obj, id, argc, args); \
|
127
|
+
}
|
128
|
+
|
129
|
+
void
|
130
|
+
smokeStackToQtStack(Smoke::Stack stack, void ** o, int start, int end, QList<MocArgument*> args)
|
131
|
+
{
|
132
|
+
for (int i = start, j = 0; i < end; i++, j++) {
|
133
|
+
Smoke::StackItem *si = stack + j;
|
134
|
+
switch(args[i]->argType) {
|
135
|
+
case xmoc_bool:
|
136
|
+
o[j] = &si->s_bool;
|
137
|
+
break;
|
138
|
+
case xmoc_int:
|
139
|
+
o[j] = &si->s_int;
|
140
|
+
break;
|
141
|
+
case xmoc_uint:
|
142
|
+
o[j] = &si->s_uint;
|
143
|
+
break;
|
144
|
+
case xmoc_long:
|
145
|
+
o[j] = &si->s_long;
|
146
|
+
break;
|
147
|
+
case xmoc_ulong:
|
148
|
+
o[j] = &si->s_ulong;
|
149
|
+
break;
|
150
|
+
case xmoc_double:
|
151
|
+
o[j] = &si->s_double;
|
152
|
+
break;
|
153
|
+
case xmoc_charstar:
|
154
|
+
o[j] = &si->s_voidp;
|
155
|
+
break;
|
156
|
+
case xmoc_QString:
|
157
|
+
o[j] = si->s_voidp;
|
158
|
+
break;
|
159
|
+
default:
|
160
|
+
{
|
161
|
+
const SmokeType &t = args[i]->st;
|
162
|
+
void *p;
|
163
|
+
switch(t.elem()) {
|
164
|
+
case Smoke::t_bool:
|
165
|
+
p = &si->s_bool;
|
166
|
+
break;
|
167
|
+
case Smoke::t_char:
|
168
|
+
p = &si->s_char;
|
169
|
+
break;
|
170
|
+
case Smoke::t_uchar:
|
171
|
+
p = &si->s_uchar;
|
172
|
+
break;
|
173
|
+
case Smoke::t_short:
|
174
|
+
p = &si->s_short;
|
175
|
+
break;
|
176
|
+
case Smoke::t_ushort:
|
177
|
+
p = &si->s_ushort;
|
178
|
+
break;
|
179
|
+
case Smoke::t_int:
|
180
|
+
p = &si->s_int;
|
181
|
+
break;
|
182
|
+
case Smoke::t_uint:
|
183
|
+
p = &si->s_uint;
|
184
|
+
break;
|
185
|
+
case Smoke::t_long:
|
186
|
+
p = &si->s_long;
|
187
|
+
break;
|
188
|
+
case Smoke::t_ulong:
|
189
|
+
p = &si->s_ulong;
|
190
|
+
break;
|
191
|
+
case Smoke::t_float:
|
192
|
+
p = &si->s_float;
|
193
|
+
break;
|
194
|
+
case Smoke::t_double:
|
195
|
+
p = &si->s_double;
|
196
|
+
break;
|
197
|
+
case Smoke::t_enum:
|
198
|
+
{
|
199
|
+
// allocate a new enum value
|
200
|
+
Smoke::EnumFn fn = SmokeClass(t).enumFn();
|
201
|
+
if (!fn) {
|
202
|
+
rb_warning("Unknown enumeration %s\n", t.name());
|
203
|
+
p = new int((int)si->s_enum);
|
204
|
+
break;
|
205
|
+
}
|
206
|
+
Smoke::Index id = t.typeId();
|
207
|
+
(*fn)(Smoke::EnumNew, id, p, si->s_enum);
|
208
|
+
(*fn)(Smoke::EnumFromLong, id, p, si->s_enum);
|
209
|
+
// FIXME: MEMORY LEAK
|
210
|
+
break;
|
211
|
+
}
|
212
|
+
case Smoke::t_class:
|
213
|
+
case Smoke::t_voidp:
|
214
|
+
if (strchr(t.name(), '*') != 0) {
|
215
|
+
p = &si->s_voidp;
|
216
|
+
} else {
|
217
|
+
p = si->s_voidp;
|
218
|
+
}
|
219
|
+
break;
|
220
|
+
default:
|
221
|
+
p = 0;
|
222
|
+
break;
|
223
|
+
}
|
224
|
+
o[j] = p;
|
225
|
+
}
|
226
|
+
}
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
void
|
231
|
+
smokeStackFromQtStack(Smoke::Stack stack, void ** _o, int start, int end, QList<MocArgument*> args)
|
232
|
+
{
|
233
|
+
for (int i = start, j = 0; i < end; i++, j++) {
|
234
|
+
void *o = _o[j];
|
235
|
+
switch(args[i]->argType) {
|
236
|
+
case xmoc_bool:
|
237
|
+
stack[j].s_bool = *(bool*)o;
|
238
|
+
break;
|
239
|
+
case xmoc_int:
|
240
|
+
stack[j].s_int = *(int*)o;
|
241
|
+
break;
|
242
|
+
case xmoc_uint:
|
243
|
+
stack[j].s_uint = *(uint*)o;
|
244
|
+
break;
|
245
|
+
case xmoc_long:
|
246
|
+
stack[j].s_long = *(long*)o;
|
247
|
+
break;
|
248
|
+
case xmoc_ulong:
|
249
|
+
stack[j].s_ulong = *(ulong*)o;
|
250
|
+
break;
|
251
|
+
case xmoc_double:
|
252
|
+
stack[j].s_double = *(double*)o;
|
253
|
+
break;
|
254
|
+
case xmoc_charstar:
|
255
|
+
stack[j].s_voidp = o;
|
256
|
+
break;
|
257
|
+
case xmoc_QString:
|
258
|
+
stack[j].s_voidp = o;
|
259
|
+
break;
|
260
|
+
default: // case xmoc_ptr:
|
261
|
+
{
|
262
|
+
const SmokeType &t = args[i]->st;
|
263
|
+
switch(t.elem()) {
|
264
|
+
case Smoke::t_bool:
|
265
|
+
stack[j].s_bool = *(bool*)o;
|
266
|
+
break;
|
267
|
+
case Smoke::t_char:
|
268
|
+
stack[j].s_char = *(char*)o;
|
269
|
+
break;
|
270
|
+
case Smoke::t_uchar:
|
271
|
+
stack[j].s_uchar = *(unsigned char*)o;
|
272
|
+
break;
|
273
|
+
case Smoke::t_short:
|
274
|
+
stack[j].s_short = *(short*)o;
|
275
|
+
break;
|
276
|
+
case Smoke::t_ushort:
|
277
|
+
stack[j].s_ushort = *(unsigned short*)o;
|
278
|
+
break;
|
279
|
+
case Smoke::t_int:
|
280
|
+
stack[j].s_int = *(int*)o;
|
281
|
+
break;
|
282
|
+
case Smoke::t_uint:
|
283
|
+
stack[j].s_uint = *(unsigned int*)o;
|
284
|
+
break;
|
285
|
+
case Smoke::t_long:
|
286
|
+
stack[j].s_long = *(long*)o;
|
287
|
+
break;
|
288
|
+
case Smoke::t_ulong:
|
289
|
+
stack[j].s_ulong = *(unsigned long*)o;
|
290
|
+
break;
|
291
|
+
case Smoke::t_float:
|
292
|
+
stack[j].s_float = *(float*)o;
|
293
|
+
break;
|
294
|
+
case Smoke::t_double:
|
295
|
+
stack[j].s_double = *(double*)o;
|
296
|
+
break;
|
297
|
+
case Smoke::t_enum:
|
298
|
+
{
|
299
|
+
Smoke::EnumFn fn = SmokeClass(t).enumFn();
|
300
|
+
if (!fn) {
|
301
|
+
rb_warning("Unknown enumeration %s\n", t.name());
|
302
|
+
stack[j].s_enum = *(int*)o;
|
303
|
+
break;
|
304
|
+
}
|
305
|
+
Smoke::Index id = t.typeId();
|
306
|
+
(*fn)(Smoke::EnumToLong, id, o, stack[j].s_enum);
|
307
|
+
}
|
308
|
+
break;
|
309
|
+
case Smoke::t_class:
|
310
|
+
case Smoke::t_voidp:
|
311
|
+
if (strchr(t.name(), '*') != 0) {
|
312
|
+
stack[j].s_voidp = *(void **)o;
|
313
|
+
} else {
|
314
|
+
stack[j].s_voidp = o;
|
315
|
+
}
|
316
|
+
break;
|
317
|
+
}
|
318
|
+
}
|
319
|
+
}
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
namespace QtRuby {
|
324
|
+
|
325
|
+
MethodReturnValueBase::MethodReturnValueBase(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack) :
|
326
|
+
_smoke(smoke), _method(meth), _stack(stack)
|
327
|
+
{
|
328
|
+
_st.set(_smoke, method().ret);
|
329
|
+
}
|
330
|
+
|
331
|
+
const Smoke::Method&
|
332
|
+
MethodReturnValueBase::method()
|
333
|
+
{
|
334
|
+
return _smoke->methods[_method];
|
335
|
+
}
|
336
|
+
|
337
|
+
Smoke::StackItem&
|
338
|
+
MethodReturnValueBase::item()
|
339
|
+
{
|
340
|
+
return _stack[0];
|
341
|
+
}
|
342
|
+
|
343
|
+
Smoke *
|
344
|
+
MethodReturnValueBase::smoke()
|
345
|
+
{
|
346
|
+
return _smoke;
|
347
|
+
}
|
348
|
+
|
349
|
+
SmokeType
|
350
|
+
MethodReturnValueBase::type()
|
351
|
+
{
|
352
|
+
return _st;
|
353
|
+
}
|
354
|
+
|
355
|
+
void
|
356
|
+
MethodReturnValueBase::next() {}
|
357
|
+
|
358
|
+
bool
|
359
|
+
MethodReturnValueBase::cleanup()
|
360
|
+
{
|
361
|
+
return false;
|
362
|
+
}
|
363
|
+
|
364
|
+
void
|
365
|
+
MethodReturnValueBase::unsupported()
|
366
|
+
{
|
367
|
+
rb_raise(rb_eArgError, "Cannot handle '%s' as return-type of %s::%s",
|
368
|
+
type().name(),
|
369
|
+
classname(),
|
370
|
+
_smoke->methodNames[method().name]);
|
371
|
+
}
|
372
|
+
|
373
|
+
VALUE *
|
374
|
+
MethodReturnValueBase::var()
|
375
|
+
{
|
376
|
+
return _retval;
|
377
|
+
}
|
378
|
+
|
379
|
+
const char *
|
380
|
+
MethodReturnValueBase::classname()
|
381
|
+
{
|
382
|
+
return _smoke->className(method().classId);
|
383
|
+
}
|
384
|
+
|
385
|
+
|
386
|
+
VirtualMethodReturnValue::VirtualMethodReturnValue(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack, VALUE retval) :
|
387
|
+
MethodReturnValueBase(smoke,meth,stack), _retval2(retval)
|
388
|
+
{
|
389
|
+
_retval = &_retval2;
|
390
|
+
Marshall::HandlerFn fn = getMarshallFn(type());
|
391
|
+
(*fn)(this);
|
392
|
+
}
|
393
|
+
|
394
|
+
Marshall::Action
|
395
|
+
VirtualMethodReturnValue::action()
|
396
|
+
{
|
397
|
+
return Marshall::FromVALUE;
|
398
|
+
}
|
399
|
+
|
400
|
+
MethodReturnValue::MethodReturnValue(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack, VALUE * retval) :
|
401
|
+
MethodReturnValueBase(smoke,meth,stack)
|
402
|
+
{
|
403
|
+
_retval = retval;
|
404
|
+
Marshall::HandlerFn fn = getMarshallFn(type());
|
405
|
+
(*fn)(this);
|
406
|
+
}
|
407
|
+
|
408
|
+
Marshall::Action
|
409
|
+
MethodReturnValue::action()
|
410
|
+
{
|
411
|
+
return Marshall::ToVALUE;
|
412
|
+
}
|
413
|
+
|
414
|
+
const char *
|
415
|
+
MethodReturnValue::classname()
|
416
|
+
{
|
417
|
+
return qstrcmp(MethodReturnValueBase::classname(), "QGlobalSpace") == 0 ? "" : MethodReturnValueBase::classname();
|
418
|
+
}
|
419
|
+
|
420
|
+
|
421
|
+
MethodCallBase::MethodCallBase(Smoke *smoke, Smoke::Index meth) :
|
422
|
+
_smoke(smoke), _method(meth), _cur(-1), _called(false), _sp(0)
|
423
|
+
{
|
424
|
+
}
|
425
|
+
|
426
|
+
MethodCallBase::MethodCallBase(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack) :
|
427
|
+
_smoke(smoke), _method(meth), _stack(stack), _cur(-1), _called(false), _sp(0)
|
428
|
+
{
|
429
|
+
}
|
430
|
+
|
431
|
+
Smoke *
|
432
|
+
MethodCallBase::smoke()
|
433
|
+
{
|
434
|
+
return _smoke;
|
435
|
+
}
|
436
|
+
|
437
|
+
SmokeType
|
438
|
+
MethodCallBase::type()
|
439
|
+
{
|
440
|
+
return SmokeType(_smoke, _args[_cur]);
|
441
|
+
}
|
442
|
+
|
443
|
+
Smoke::StackItem &
|
444
|
+
MethodCallBase::item()
|
445
|
+
{
|
446
|
+
return _stack[_cur + 1];
|
447
|
+
}
|
448
|
+
|
449
|
+
const Smoke::Method &
|
450
|
+
MethodCallBase::method()
|
451
|
+
{
|
452
|
+
return _smoke->methods[_method];
|
453
|
+
}
|
454
|
+
|
455
|
+
void
|
456
|
+
MethodCallBase::next()
|
457
|
+
{
|
458
|
+
int oldcur = _cur;
|
459
|
+
_cur++;
|
460
|
+
while(!_called && _cur < items() ) {
|
461
|
+
Marshall::HandlerFn fn = getMarshallFn(type());
|
462
|
+
(*fn)(this);
|
463
|
+
_cur++;
|
464
|
+
}
|
465
|
+
|
466
|
+
callMethod();
|
467
|
+
_cur = oldcur;
|
468
|
+
}
|
469
|
+
|
470
|
+
void
|
471
|
+
MethodCallBase::unsupported()
|
472
|
+
{
|
473
|
+
rb_raise(rb_eArgError, "Cannot handle '%s' as argument of %s::%s",
|
474
|
+
type().name(),
|
475
|
+
classname(),
|
476
|
+
_smoke->methodNames[method().name]);
|
477
|
+
}
|
478
|
+
|
479
|
+
const char*
|
480
|
+
MethodCallBase::classname()
|
481
|
+
{
|
482
|
+
return _smoke->className(method().classId);
|
483
|
+
}
|
484
|
+
|
485
|
+
|
486
|
+
VirtualMethodCall::VirtualMethodCall(Smoke *smoke, Smoke::Index meth, Smoke::Stack stack, VALUE obj, VALUE *sp) :
|
487
|
+
MethodCallBase(smoke,meth,stack), _obj(obj)
|
488
|
+
{
|
489
|
+
_sp = sp;
|
490
|
+
_args = _smoke->argumentList + method().args;
|
491
|
+
}
|
492
|
+
|
493
|
+
VirtualMethodCall::~VirtualMethodCall()
|
494
|
+
{
|
495
|
+
}
|
496
|
+
|
497
|
+
Marshall::Action
|
498
|
+
VirtualMethodCall::action()
|
499
|
+
{
|
500
|
+
return Marshall::ToVALUE;
|
501
|
+
}
|
502
|
+
|
503
|
+
VALUE *
|
504
|
+
VirtualMethodCall::var()
|
505
|
+
{
|
506
|
+
return _sp + _cur;
|
507
|
+
}
|
508
|
+
|
509
|
+
int
|
510
|
+
VirtualMethodCall::items()
|
511
|
+
{
|
512
|
+
return method().numArgs;
|
513
|
+
}
|
514
|
+
|
515
|
+
void
|
516
|
+
VirtualMethodCall::callMethod()
|
517
|
+
{
|
518
|
+
if (_called) return;
|
519
|
+
_called = true;
|
520
|
+
|
521
|
+
VALUE _retval;
|
522
|
+
QTRUBY_INIT_STACK
|
523
|
+
QTRUBY_FUNCALL2(_retval, _obj, rb_intern(_smoke->methodNames[method().name]), method().numArgs, _sp)
|
524
|
+
QTRUBY_RELEASE_STACK
|
525
|
+
|
526
|
+
VirtualMethodReturnValue r(_smoke, _method, _stack, _retval);
|
527
|
+
}
|
528
|
+
|
529
|
+
bool
|
530
|
+
VirtualMethodCall::cleanup()
|
531
|
+
{
|
532
|
+
return false;
|
533
|
+
}
|
534
|
+
|
535
|
+
MethodCall::MethodCall(Smoke *smoke, Smoke::Index method, VALUE target, VALUE *sp, int items) :
|
536
|
+
MethodCallBase(smoke,method), _target(target), _o(0), _sp(sp), _items(items)
|
537
|
+
{
|
538
|
+
if (_target != Qnil) {
|
539
|
+
smokeruby_object *o = value_obj_info(_target);
|
540
|
+
if (o != 0 && o->ptr != 0) {
|
541
|
+
_o = o;
|
542
|
+
}
|
543
|
+
}
|
544
|
+
|
545
|
+
_args = _smoke->argumentList + _smoke->methods[_method].args;
|
546
|
+
_items = _smoke->methods[_method].numArgs;
|
547
|
+
_stack = new Smoke::StackItem[items + 1];
|
548
|
+
_retval = Qnil;
|
549
|
+
}
|
550
|
+
|
551
|
+
MethodCall::~MethodCall()
|
552
|
+
{
|
553
|
+
delete[] _stack;
|
554
|
+
}
|
555
|
+
|
556
|
+
Marshall::Action
|
557
|
+
MethodCall::action()
|
558
|
+
{
|
559
|
+
return Marshall::FromVALUE;
|
560
|
+
}
|
561
|
+
|
562
|
+
VALUE *
|
563
|
+
MethodCall::var()
|
564
|
+
{
|
565
|
+
if (_cur < 0) return &_retval;
|
566
|
+
return _sp + _cur;
|
567
|
+
}
|
568
|
+
|
569
|
+
int
|
570
|
+
MethodCall::items()
|
571
|
+
{
|
572
|
+
return _items;
|
573
|
+
}
|
574
|
+
|
575
|
+
bool
|
576
|
+
MethodCall::cleanup()
|
577
|
+
{
|
578
|
+
return true;
|
579
|
+
}
|
580
|
+
|
581
|
+
const char *
|
582
|
+
MethodCall::classname()
|
583
|
+
{
|
584
|
+
return qstrcmp(MethodCallBase::classname(), "QGlobalSpace") == 0 ? "" : MethodCallBase::classname();
|
585
|
+
}
|
586
|
+
|
587
|
+
SigSlotBase::SigSlotBase(QList<MocArgument*> args) : _cur(-1), _called(false)
|
588
|
+
{
|
589
|
+
_items = args.count();
|
590
|
+
_args = args;
|
591
|
+
_stack = new Smoke::StackItem[_items - 1];
|
592
|
+
}
|
593
|
+
|
594
|
+
SigSlotBase::~SigSlotBase()
|
595
|
+
{
|
596
|
+
delete[] _stack;
|
597
|
+
foreach (MocArgument * arg, _args) {
|
598
|
+
delete arg;
|
599
|
+
}
|
600
|
+
}
|
601
|
+
|
602
|
+
const MocArgument &
|
603
|
+
SigSlotBase::arg()
|
604
|
+
{
|
605
|
+
return *(_args[_cur + 1]);
|
606
|
+
}
|
607
|
+
|
608
|
+
SmokeType
|
609
|
+
SigSlotBase::type()
|
610
|
+
{
|
611
|
+
return arg().st;
|
612
|
+
}
|
613
|
+
|
614
|
+
Smoke::StackItem &
|
615
|
+
SigSlotBase::item()
|
616
|
+
{
|
617
|
+
return _stack[_cur];
|
618
|
+
}
|
619
|
+
|
620
|
+
VALUE *
|
621
|
+
SigSlotBase::var()
|
622
|
+
{
|
623
|
+
return _sp + _cur;
|
624
|
+
}
|
625
|
+
|
626
|
+
Smoke *
|
627
|
+
SigSlotBase::smoke()
|
628
|
+
{
|
629
|
+
return type().smoke();
|
630
|
+
}
|
631
|
+
|
632
|
+
void
|
633
|
+
SigSlotBase::unsupported()
|
634
|
+
{
|
635
|
+
rb_raise(rb_eArgError, "Cannot handle '%s' as %s argument\n", type().name(), mytype() );
|
636
|
+
}
|
637
|
+
|
638
|
+
void
|
639
|
+
SigSlotBase::next()
|
640
|
+
{
|
641
|
+
int oldcur = _cur;
|
642
|
+
_cur++;
|
643
|
+
|
644
|
+
while(!_called && _cur < _items - 1) {
|
645
|
+
Marshall::HandlerFn fn = getMarshallFn(type());
|
646
|
+
(*fn)(this);
|
647
|
+
_cur++;
|
648
|
+
}
|
649
|
+
|
650
|
+
mainfunction();
|
651
|
+
_cur = oldcur;
|
652
|
+
}
|
653
|
+
|
654
|
+
void
|
655
|
+
SigSlotBase::prepareReturnValue(void** o)
|
656
|
+
{
|
657
|
+
if (_args[0]->argType == xmoc_ptr) {
|
658
|
+
QByteArray type(_args[0]->st.name());
|
659
|
+
type.replace("const ", "");
|
660
|
+
if (!type.endsWith('*')) { // a real pointer type, so a simple void* will do
|
661
|
+
if (type.endsWith('&')) {
|
662
|
+
type.resize(type.size() - 1);
|
663
|
+
}
|
664
|
+
if (type.startsWith("QList")) {
|
665
|
+
o[0] = new QList<void*>;
|
666
|
+
} else if (type.startsWith("QVector")) {
|
667
|
+
o[0] = new QVector<void*>;
|
668
|
+
} else if (type.startsWith("QHash")) {
|
669
|
+
o[0] = new QHash<void*, void*>;
|
670
|
+
} else if (type.startsWith("QMap")) {
|
671
|
+
o[0] = new QMap<void*, void*>;
|
672
|
+
#ifdef QT_QTDBUS
|
673
|
+
} else if (type == "QDBusVariant") {
|
674
|
+
o[0] = new QDBusVariant;
|
675
|
+
#endif
|
676
|
+
} else {
|
677
|
+
Smoke::ModuleIndex ci = qtcore_Smoke->findClass(type);
|
678
|
+
if (ci.index != 0) {
|
679
|
+
Smoke::ModuleIndex mi = ci.smoke->findMethod(type, type);
|
680
|
+
if (mi.index) {
|
681
|
+
Smoke::Class& c = ci.smoke->classes[ci.index];
|
682
|
+
Smoke::Method& meth = mi.smoke->methods[mi.smoke->methodMaps[mi.index].method];
|
683
|
+
Smoke::StackItem _stack[1];
|
684
|
+
c.classFn(meth.method, 0, _stack);
|
685
|
+
o[0] = _stack[0].s_voidp;
|
686
|
+
}
|
687
|
+
}
|
688
|
+
}
|
689
|
+
}
|
690
|
+
} else if (_args[0]->argType == xmoc_QString) {
|
691
|
+
o[0] = new QString;
|
692
|
+
}
|
693
|
+
}
|
694
|
+
|
695
|
+
/*
|
696
|
+
Converts a ruby value returned by a slot invocation to a Qt slot
|
697
|
+
reply type
|
698
|
+
*/
|
699
|
+
class SlotReturnValue : public Marshall {
|
700
|
+
QList<MocArgument*> _replyType;
|
701
|
+
Smoke::Stack _stack;
|
702
|
+
VALUE * _result;
|
703
|
+
public:
|
704
|
+
SlotReturnValue(void ** o, VALUE * result, QList<MocArgument*> replyType)
|
705
|
+
{
|
706
|
+
_result = result;
|
707
|
+
_replyType = replyType;
|
708
|
+
_stack = new Smoke::StackItem[1];
|
709
|
+
Marshall::HandlerFn fn = getMarshallFn(type());
|
710
|
+
(*fn)(this);
|
711
|
+
|
712
|
+
QByteArray t(type().name());
|
713
|
+
t.replace("const ", "");
|
714
|
+
t.replace("&", "");
|
715
|
+
|
716
|
+
if (t == "QDBusVariant") {
|
717
|
+
#ifdef QT_QTDBUS
|
718
|
+
*reinterpret_cast<QDBusVariant*>(o[0]) = *(QDBusVariant*) _stack[0].s_class;
|
719
|
+
#endif
|
720
|
+
} else {
|
721
|
+
// Save any address in zeroth element of the arrary of 'void*'s passed to
|
722
|
+
// qt_metacall()
|
723
|
+
void * ptr = o[0];
|
724
|
+
smokeStackToQtStack(_stack, o, 0, 1, _replyType);
|
725
|
+
// Only if the zeroth element of the array of 'void*'s passed to qt_metacall()
|
726
|
+
// contains an address, is the return value of the slot needed.
|
727
|
+
if (ptr != 0) {
|
728
|
+
*(void**)ptr = *(void**)(o[0]);
|
729
|
+
}
|
730
|
+
}
|
731
|
+
}
|
732
|
+
|
733
|
+
SmokeType type() {
|
734
|
+
return _replyType[0]->st;
|
735
|
+
}
|
736
|
+
Marshall::Action action() { return Marshall::FromVALUE; }
|
737
|
+
Smoke::StackItem &item() { return _stack[0]; }
|
738
|
+
VALUE * var() {
|
739
|
+
return _result;
|
740
|
+
}
|
741
|
+
|
742
|
+
void unsupported()
|
743
|
+
{
|
744
|
+
rb_raise(rb_eArgError, "Cannot handle '%s' as slot reply-type", type().name());
|
745
|
+
}
|
746
|
+
Smoke *smoke() { return type().smoke(); }
|
747
|
+
|
748
|
+
void next() {}
|
749
|
+
|
750
|
+
bool cleanup() { return false; }
|
751
|
+
|
752
|
+
~SlotReturnValue() {
|
753
|
+
delete[] _stack;
|
754
|
+
}
|
755
|
+
};
|
756
|
+
|
757
|
+
InvokeSlot::InvokeSlot(VALUE obj, ID slotname, QList<MocArgument*> args, void ** o) : SigSlotBase(args),
|
758
|
+
_obj(obj), _slotname(slotname), _o(o)
|
759
|
+
{
|
760
|
+
_sp = (VALUE *) ALLOC_N(VALUE, _items - 1);
|
761
|
+
copyArguments();
|
762
|
+
}
|
763
|
+
|
764
|
+
InvokeSlot::~InvokeSlot()
|
765
|
+
{
|
766
|
+
xfree(_sp);
|
767
|
+
}
|
768
|
+
|
769
|
+
Marshall::Action
|
770
|
+
InvokeSlot::action()
|
771
|
+
{
|
772
|
+
return Marshall::ToVALUE;
|
773
|
+
}
|
774
|
+
|
775
|
+
const char *
|
776
|
+
InvokeSlot::mytype()
|
777
|
+
{
|
778
|
+
return "slot";
|
779
|
+
}
|
780
|
+
|
781
|
+
bool
|
782
|
+
InvokeSlot::cleanup()
|
783
|
+
{
|
784
|
+
return false;
|
785
|
+
}
|
786
|
+
|
787
|
+
void
|
788
|
+
InvokeSlot::copyArguments()
|
789
|
+
{
|
790
|
+
smokeStackFromQtStack(_stack, _o + 1, 1, _items, _args);
|
791
|
+
}
|
792
|
+
|
793
|
+
void
|
794
|
+
InvokeSlot::invokeSlot()
|
795
|
+
{
|
796
|
+
if (_called) return;
|
797
|
+
_called = true;
|
798
|
+
|
799
|
+
VALUE result;
|
800
|
+
QTRUBY_INIT_STACK
|
801
|
+
QTRUBY_FUNCALL2(result, _obj, _slotname, _items - 1, _sp)
|
802
|
+
QTRUBY_RELEASE_STACK
|
803
|
+
|
804
|
+
if (_args[0]->argType != xmoc_void) {
|
805
|
+
SlotReturnValue r(_o, &result, _args);
|
806
|
+
}
|
807
|
+
}
|
808
|
+
|
809
|
+
void
|
810
|
+
InvokeSlot::mainfunction()
|
811
|
+
{
|
812
|
+
invokeSlot();
|
813
|
+
}
|
814
|
+
|
815
|
+
}
|