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.
Files changed (666) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING.LIB.txt +510 -510
  3. data/COPYING.txt +286 -286
  4. data/KNOWN_ISSUES.txt +17 -17
  5. data/Rakefile +5 -5
  6. data/bin/rbqtapi +0 -0
  7. data/bin/rbrcc +0 -0
  8. data/bin/rbuic4 +0 -0
  9. data/bin/smokeapi +0 -0
  10. data/bin/smokedeptool +0 -0
  11. data/examples/designer/calculatorbuilder/calculatorbuilder.qrc +5 -5
  12. data/examples/designer/calculatorbuilder/calculatorform.rb +60 -60
  13. data/examples/designer/calculatorbuilder/calculatorform.ui +299 -299
  14. data/examples/designer/calculatorbuilder/main.rb +34 -34
  15. data/examples/designer/calculatorbuilder/makefile +2 -2
  16. data/examples/designer/calculatorform/calculatorform.rb +46 -46
  17. data/examples/designer/calculatorform/calculatorform.ui +277 -277
  18. data/examples/designer/calculatorform/main.rb +32 -32
  19. data/examples/designer/calculatorform/makefile +3 -3
  20. data/examples/desktop/screenshot/main.rb +32 -32
  21. data/examples/desktop/screenshot/screenshot.rb +157 -157
  22. data/examples/desktop/systray/images/bad.svg +64 -64
  23. data/examples/desktop/systray/images/heart.svg +55 -55
  24. data/examples/desktop/systray/images/trash.svg +58 -58
  25. data/examples/desktop/systray/main.rb +41 -41
  26. data/examples/desktop/systray/makefile +2 -2
  27. data/examples/desktop/systray/systray.qrc +7 -7
  28. data/examples/desktop/systray/window.rb +219 -219
  29. data/examples/dialogs/complexwizard/complexwizard.rb +140 -140
  30. data/examples/dialogs/complexwizard/licensewizard.rb +294 -294
  31. data/examples/dialogs/complexwizard/main.rb +31 -31
  32. data/examples/dialogs/configdialog/configdialog.rb +109 -109
  33. data/examples/dialogs/configdialog/main.rb +31 -31
  34. data/examples/dialogs/configdialog/pages.rb +140 -140
  35. data/examples/dialogs/extension/finddialog.rb +89 -89
  36. data/examples/dialogs/extension/main.rb +31 -31
  37. data/examples/dialogs/findfiles/main.rb +32 -32
  38. data/examples/dialogs/findfiles/window.rb +177 -177
  39. data/examples/dialogs/simplewizard/classwizard.rb +374 -374
  40. data/examples/dialogs/simplewizard/main.rb +31 -31
  41. data/examples/dialogs/simplewizard/simplewizard.rb +110 -110
  42. data/examples/dialogs/standarddialogs/dialog.rb +340 -340
  43. data/examples/dialogs/standarddialogs/main.rb +31 -31
  44. data/examples/dialogs/tabdialog/main.rb +38 -38
  45. data/examples/dialogs/tabdialog/tabdialog.rb +178 -178
  46. data/examples/draganddrop/draggableicons/dragwidget.rb +125 -125
  47. data/examples/draganddrop/draggableicons/main.rb +41 -41
  48. data/examples/draganddrop/draggabletext/draglabel.rb +51 -51
  49. data/examples/draganddrop/draggabletext/dragwidget.rb +94 -94
  50. data/examples/draganddrop/draggabletext/main.rb +33 -33
  51. data/examples/draganddrop/draggabletext/words.txt +41 -41
  52. data/examples/draganddrop/dropsite/dropsitewidget.rb +99 -99
  53. data/examples/draganddrop/dropsite/dropsitewindow.rb +114 -114
  54. data/examples/draganddrop/dropsite/main.rb +33 -33
  55. data/examples/draganddrop/fridgemagnets/draglabel.rb +78 -78
  56. data/examples/draganddrop/fridgemagnets/dragwidget.rb +130 -130
  57. data/examples/draganddrop/fridgemagnets/main.rb +33 -33
  58. data/examples/draganddrop/fridgemagnets/words.txt +48 -48
  59. data/examples/draganddrop/puzzle/main.rb +33 -33
  60. data/examples/draganddrop/puzzle/mainwindow.rb +136 -136
  61. data/examples/draganddrop/puzzle/pieceslist.rb +95 -95
  62. data/examples/draganddrop/puzzle/puzzlewidget.rb +190 -190
  63. data/examples/graphicsview/collidingmice/main.rb +53 -53
  64. data/examples/graphicsview/collidingmice/makefile +2 -2
  65. data/examples/graphicsview/collidingmice/mice.qrc +5 -5
  66. data/examples/graphicsview/collidingmice/mouse.rb +176 -176
  67. data/examples/graphicsview/dragdroprobot/coloritem.rb +86 -86
  68. data/examples/graphicsview/dragdroprobot/main.rb +57 -57
  69. data/examples/graphicsview/dragdroprobot/makefile +2 -2
  70. data/examples/graphicsview/dragdroprobot/robot.qrc +5 -5
  71. data/examples/graphicsview/dragdroprobot/robot.rb +246 -246
  72. data/examples/itemviews/chart/chart.qrc +5 -5
  73. data/examples/itemviews/chart/main.rb +33 -33
  74. data/examples/itemviews/chart/mainwindow.rb +151 -151
  75. data/examples/itemviews/chart/makefile +2 -2
  76. data/examples/itemviews/chart/mydata.cht +8 -8
  77. data/examples/itemviews/chart/pieview.rb +516 -516
  78. data/examples/itemviews/chart/qtdata.cht +14 -14
  79. data/examples/itemviews/dirview/main.rb +39 -39
  80. data/examples/itemviews/pixelator/imagemodel.rb +51 -51
  81. data/examples/itemviews/pixelator/images.qrc +5 -5
  82. data/examples/itemviews/pixelator/main.rb +34 -34
  83. data/examples/itemviews/pixelator/mainwindow.rb +218 -218
  84. data/examples/itemviews/pixelator/makefile +3 -3
  85. data/examples/itemviews/pixelator/pixeldelegate.rb +67 -67
  86. data/examples/itemviews/puzzle/main.rb +36 -36
  87. data/examples/itemviews/puzzle/mainwindow.rb +143 -143
  88. data/examples/itemviews/puzzle/piecesmodel.rb +174 -174
  89. data/examples/itemviews/puzzle/puzzlewidget.rb +192 -192
  90. data/examples/itemviews/simpledommodel/domitem.rb +62 -62
  91. data/examples/itemviews/simpledommodel/dommodel.rb +139 -139
  92. data/examples/itemviews/simpledommodel/main.rb +33 -33
  93. data/examples/itemviews/simpledommodel/mainwindow.rb +66 -66
  94. data/examples/itemviews/simpletreemodel/default.txt +40 -40
  95. data/examples/itemviews/simpletreemodel/main.rb +41 -41
  96. data/examples/itemviews/simpletreemodel/makefile +2 -2
  97. data/examples/itemviews/simpletreemodel/simpletreemodel.qrc +5 -5
  98. data/examples/itemviews/simpletreemodel/treeitem.rb +67 -67
  99. data/examples/itemviews/simpletreemodel/treemodel.rb +164 -164
  100. data/examples/itemviews/sortingmodel/default.txt +40 -40
  101. data/examples/itemviews/sortingmodel/main.rb +53 -53
  102. data/examples/itemviews/sortingmodel/treeitem.rb +73 -73
  103. data/examples/itemviews/sortingmodel/treemodel.rb +166 -166
  104. data/examples/itemviews/spinboxdelegate/main.rb +47 -47
  105. data/examples/itemviews/spinboxdelegate/spinboxdelegate.rb +62 -62
  106. data/examples/killerfilter/killerfilter.rb +55 -55
  107. data/examples/layouts/basiclayouts/dialog.rb +110 -110
  108. data/examples/layouts/basiclayouts/main.rb +31 -31
  109. data/examples/layouts/borderlayout/borderlayout.rb +190 -190
  110. data/examples/layouts/borderlayout/main.rb +32 -32
  111. data/examples/layouts/borderlayout/window.rb +52 -52
  112. data/examples/layouts/flowlayouts/flowlayout.rb +108 -108
  113. data/examples/layouts/flowlayouts/main.rb +32 -32
  114. data/examples/layouts/flowlayouts/window.rb +43 -43
  115. data/examples/mainwindows/application/main.rb +32 -32
  116. data/examples/mainwindows/application/mainwindow.rb +285 -285
  117. data/examples/mainwindows/dockwidgets/main.rb +32 -32
  118. data/examples/mainwindows/dockwidgets/mainwindow.rb +302 -302
  119. data/examples/mainwindows/mdi/main.rb +32 -32
  120. data/examples/mainwindows/mdi/mainwindow.rb +363 -363
  121. data/examples/mainwindows/mdi/mdichild.rb +152 -152
  122. data/examples/mainwindows/menus/main.rb +32 -32
  123. data/examples/mainwindows/menus/mainwindow.rb +327 -327
  124. data/examples/mainwindows/recentfiles/main.rb +32 -32
  125. data/examples/mainwindows/recentfiles/mainwindow.rb +258 -258
  126. data/examples/mainwindows/sdi/main.rb +32 -32
  127. data/examples/mainwindows/sdi/mainwindow.rb +335 -335
  128. data/examples/network/broadcastreceiver/main.rb +32 -32
  129. data/examples/network/broadcastreceiver/receiver.rb +64 -64
  130. data/examples/network/broadcastsender/main.rb +32 -32
  131. data/examples/network/broadcastsender/sender.rb +72 -72
  132. data/examples/network/fortuneclient/client.rb +149 -149
  133. data/examples/network/fortuneclient/main.rb +32 -32
  134. data/examples/network/fortuneserver/main.rb +32 -32
  135. data/examples/network/fortuneserver/server.rb +88 -88
  136. data/examples/network/ftp/ftpwindow.rb +259 -259
  137. data/examples/network/ftp/main.rb +32 -32
  138. data/examples/network/http/httpwindow.rb +187 -187
  139. data/examples/network/http/main.rb +32 -32
  140. data/examples/network/loopback/dialog.rb +163 -163
  141. data/examples/network/loopback/main.rb +32 -32
  142. data/examples/opengl/grabber/glwidget.rb +265 -265
  143. data/examples/opengl/grabber/main.rb +32 -32
  144. data/examples/opengl/grabber/mainwindow.rb +189 -189
  145. data/examples/opengl/hellogl/glwidget.rb +226 -226
  146. data/examples/opengl/hellogl/main.rb +32 -32
  147. data/examples/opengl/hellogl/window.rb +66 -66
  148. data/examples/opengl/textures/glwidget.rb +151 -151
  149. data/examples/opengl/textures/main.rb +32 -32
  150. data/examples/opengl/textures/window.rb +77 -77
  151. data/examples/painting/basicdrawing/main.rb +32 -32
  152. data/examples/painting/basicdrawing/renderarea.rb +166 -166
  153. data/examples/painting/basicdrawing/window.rb +215 -215
  154. data/examples/painting/concentriccircles/circlewidget.rb +88 -88
  155. data/examples/painting/concentriccircles/main.rb +32 -32
  156. data/examples/painting/concentriccircles/window.rb +72 -72
  157. data/examples/painting/fontsampler/main.rb +32 -32
  158. data/examples/painting/fontsampler/mainwindow.rb +369 -369
  159. data/examples/painting/fontsampler/mainwindowbase.ui +136 -136
  160. data/examples/painting/fontsampler/makefile +8 -8
  161. data/examples/painting/fontsampler/previewdialog.rb +257 -257
  162. data/examples/painting/fontsampler/previewdialogbase.ui +224 -224
  163. data/examples/painting/fontsampler/previewlabel.rb +43 -43
  164. data/examples/painting/imagecomposition/imagecomposer.rb +152 -152
  165. data/examples/painting/imagecomposition/imagecomposition.qrc +6 -6
  166. data/examples/painting/imagecomposition/main.rb +33 -33
  167. data/examples/painting/imagecomposition/makefile +2 -2
  168. data/examples/painting/painterpaths/main.rb +32 -32
  169. data/examples/painting/painterpaths/renderarea.rb +97 -97
  170. data/examples/painting/painterpaths/window.rb +247 -247
  171. data/examples/painting/svgviewer/files/bubbles.svg +212 -212
  172. data/examples/painting/svgviewer/files/cubic.svg +77 -77
  173. data/examples/painting/svgviewer/files/spheres.svg +79 -79
  174. data/examples/painting/svgviewer/main.rb +38 -38
  175. data/examples/painting/svgviewer/mainwindow.rb +99 -99
  176. data/examples/painting/svgviewer/makefile +2 -2
  177. data/examples/painting/svgviewer/svgview.rb +156 -156
  178. data/examples/painting/svgviewer/svgviewer.qrc +6 -6
  179. data/examples/painting/svgviewer/svgwindow.rb +87 -87
  180. data/examples/painting/transformations/main.rb +32 -32
  181. data/examples/painting/transformations/renderarea.rb +127 -127
  182. data/examples/painting/transformations/window.rb +153 -153
  183. data/examples/passivepopup/passivepopup.rb +38 -38
  184. data/examples/qdbus/chat/chat.rb +146 -146
  185. data/examples/qdbus/chat/chat_adaptor.rb +12 -12
  186. data/examples/qdbus/chat/chat_interface.rb +13 -13
  187. data/examples/qdbus/chat/chatmainwindow.ui +184 -184
  188. data/examples/qdbus/chat/chatsetnickname.ui +145 -145
  189. data/examples/qdbus/chat/makefile +8 -8
  190. data/examples/qdbus/complexpingpong/complexping.rb +92 -92
  191. data/examples/qdbus/complexpingpong/complexpong.rb +83 -83
  192. data/examples/qdbus/complexpingpong/ping-common.rb +1 -1
  193. data/examples/qdbus/listnames/listnames.rb +69 -69
  194. data/examples/qdbus/pingpong/ping-common.rb +1 -1
  195. data/examples/qdbus/pingpong/ping.rb +52 -52
  196. data/examples/qdbus/pingpong/pong.rb +55 -55
  197. data/examples/qdbus/remotecontrolledcar/car/car.rb +151 -151
  198. data/examples/qdbus/remotecontrolledcar/car/main.rb +50 -50
  199. data/examples/qdbus/remotecontrolledcar/controller/controller.rb +66 -66
  200. data/examples/qdbus/remotecontrolledcar/controller/controller.ui +61 -61
  201. data/examples/qdbus/remotecontrolledcar/controller/main.rb +32 -32
  202. data/examples/qdbus/remotecontrolledcar/controller/makefile +2 -2
  203. data/examples/qtscribble/scribble.rb +270 -270
  204. data/examples/richtext/calendar/main.rb +33 -33
  205. data/examples/richtext/calendar/mainwindow.rb +173 -173
  206. data/examples/richtext/orderform/detailsdialog.rb +130 -130
  207. data/examples/richtext/orderform/main.rb +34 -34
  208. data/examples/richtext/orderform/mainwindow.rb +194 -194
  209. data/examples/richtext/syntaxhighlighter/examples/example +79 -79
  210. data/examples/richtext/syntaxhighlighter/highlighter.rb +90 -90
  211. data/examples/richtext/syntaxhighlighter/main.rb +34 -34
  212. data/examples/richtext/syntaxhighlighter/mainwindow.rb +105 -105
  213. data/examples/ruboids/LICENSE.txt +58 -58
  214. data/examples/ruboids/Manifest +26 -26
  215. data/examples/ruboids/README +53 -53
  216. data/examples/ruboids/TODO +29 -29
  217. data/examples/ruboids/boids.properties +33 -33
  218. data/examples/ruboids/generateManifest.rb +42 -42
  219. data/examples/ruboids/release.rb +152 -152
  220. data/examples/ruboids/ruboids/Boid.rb +141 -141
  221. data/examples/ruboids/ruboids/BoidView.rb +159 -159
  222. data/examples/ruboids/ruboids/Camera.rb +24 -24
  223. data/examples/ruboids/ruboids/CameraDialog.rb +218 -218
  224. data/examples/ruboids/ruboids/Canvas.rb +143 -143
  225. data/examples/ruboids/ruboids/Cloud.rb +61 -61
  226. data/examples/ruboids/ruboids/CloudView.rb +54 -54
  227. data/examples/ruboids/ruboids/Flock.rb +47 -47
  228. data/examples/ruboids/ruboids/Graphics.rb +278 -278
  229. data/examples/ruboids/ruboids/Params.rb +87 -87
  230. data/examples/ruboids/ruboids/Point.rb +153 -153
  231. data/examples/ruboids/ruboids/Thing.rb +34 -34
  232. data/examples/ruboids/ruboids/Triangle.rb +21 -21
  233. data/examples/ruboids/ruboids/View.rb +88 -88
  234. data/examples/ruboids/ruboids/World.rb +82 -82
  235. data/examples/ruboids/ruboids/WorldWindow.rb +52 -52
  236. data/examples/ruboids/ruboids/info.rb +12 -12
  237. data/examples/ruboids/ruboids/ruboids.rb +29 -29
  238. data/examples/threading/main_thread.rb +19 -19
  239. data/examples/tutorial/t1/t1.rb +10 -10
  240. data/examples/tutorial/t10/cannon.rb +72 -72
  241. data/examples/tutorial/t10/lcdrange.rb +45 -45
  242. data/examples/tutorial/t10/t10.rb +55 -55
  243. data/examples/tutorial/t11/cannon.rb +124 -124
  244. data/examples/tutorial/t11/lcdrange.rb +45 -45
  245. data/examples/tutorial/t11/t11.rb +65 -65
  246. data/examples/tutorial/t12/cannon.rb +158 -158
  247. data/examples/tutorial/t12/lcdrange.rb +59 -59
  248. data/examples/tutorial/t12/t12.rb +66 -66
  249. data/examples/tutorial/t13/cannon.rb +208 -208
  250. data/examples/tutorial/t13/gamebrd.rb +113 -113
  251. data/examples/tutorial/t13/lcdrange.rb +60 -60
  252. data/examples/tutorial/t13/t13.rb +11 -11
  253. data/examples/tutorial/t14/cannon.rb +263 -263
  254. data/examples/tutorial/t14/gamebrd.rb +123 -123
  255. data/examples/tutorial/t14/lcdrange.rb +63 -63
  256. data/examples/tutorial/t14/t14.rb +11 -11
  257. data/examples/tutorial/t2/t2.rb +16 -16
  258. data/examples/tutorial/t3/t3.rb +18 -18
  259. data/examples/tutorial/t4/t4.rb +25 -25
  260. data/examples/tutorial/t5/t5.rb +37 -37
  261. data/examples/tutorial/t6/t6.rb +52 -52
  262. data/examples/tutorial/t7/lcdrange.rb +32 -32
  263. data/examples/tutorial/t7/t7.rb +42 -42
  264. data/examples/tutorial/t8/cannon.rb +38 -38
  265. data/examples/tutorial/t8/lcdrange.rb +45 -45
  266. data/examples/tutorial/t8/t8.rb +43 -43
  267. data/examples/tutorial/t9/cannon.rb +45 -45
  268. data/examples/tutorial/t9/lcdrange.rb +46 -46
  269. data/examples/tutorial/t9/t9.rb +43 -43
  270. data/examples/widgets/analogclock/analogclock.rb +94 -94
  271. data/examples/widgets/analogclock/main.rb +9 -9
  272. data/examples/widgets/calculator/button.rb +45 -45
  273. data/examples/widgets/calculator/calculator.rb +382 -382
  274. data/examples/widgets/calculator/main.rb +32 -32
  275. data/examples/widgets/charactermap/characterwidget.rb +109 -109
  276. data/examples/widgets/charactermap/main.rb +32 -32
  277. data/examples/widgets/charactermap/mainwindow.rb +118 -118
  278. data/examples/widgets/digitalclock/digitalclock.rb +30 -30
  279. data/examples/widgets/digitalclock/main.rb +9 -9
  280. data/examples/widgets/groupbox/main.rb +32 -32
  281. data/examples/widgets/groupbox/window.rb +134 -134
  282. data/examples/widgets/icons/iconpreviewarea.rb +110 -110
  283. data/examples/widgets/icons/iconsizespinbox.rb +39 -39
  284. data/examples/widgets/icons/imagedelegate.rb +73 -73
  285. data/examples/widgets/icons/main.rb +32 -32
  286. data/examples/widgets/icons/mainwindow.rb +351 -351
  287. data/examples/widgets/imageviewer/imageviewer.rb +219 -219
  288. data/examples/widgets/imageviewer/main.rb +32 -32
  289. data/examples/widgets/lineedits/main.rb +32 -32
  290. data/examples/widgets/lineedits/window.rb +199 -199
  291. data/examples/widgets/movie/main.rb +32 -32
  292. data/examples/widgets/movie/movieplayer.rb +201 -201
  293. data/examples/widgets/screenshot/main.rb +32 -32
  294. data/examples/widgets/screenshot/screenshot.rb +154 -154
  295. data/examples/widgets/scribble/main.rb +32 -32
  296. data/examples/widgets/scribble/mainwindow.rb +202 -202
  297. data/examples/widgets/scribble/scribblearea.rb +154 -154
  298. data/examples/widgets/sliders/main.rb +32 -32
  299. data/examples/widgets/sliders/slidersgroup.rb +97 -97
  300. data/examples/widgets/sliders/window.rb +124 -124
  301. data/examples/widgets/spinboxes/main.rb +32 -32
  302. data/examples/widgets/spinboxes/window.rb +213 -213
  303. data/examples/widgets/tetrix/main.rb +33 -33
  304. data/examples/widgets/tetrix/tetrixboard.rb +346 -346
  305. data/examples/widgets/tetrix/tetrixpiece.rb +135 -135
  306. data/examples/widgets/tetrix/tetrixwindow.rb +88 -88
  307. data/examples/widgets/tooltips/main.rb +32 -32
  308. data/examples/widgets/tooltips/shapeitem.rb +31 -31
  309. data/examples/widgets/tooltips/sortingbox.rb +222 -222
  310. data/examples/widgets/wiggly/dialog.rb +48 -48
  311. data/examples/widgets/wiggly/main.rb +9 -9
  312. data/examples/widgets/wiggly/wigglywidget.rb +75 -75
  313. data/examples/widgets/windowflags/controllerwindow.rb +195 -195
  314. data/examples/widgets/windowflags/main.rb +32 -32
  315. data/examples/widgets/windowflags/previewwindow.rb +103 -103
  316. data/examples/xml/dombookmarks/frank.xbel +230 -230
  317. data/examples/xml/dombookmarks/jennifer.xbel +93 -93
  318. data/examples/xml/dombookmarks/main.rb +34 -34
  319. data/examples/xml/dombookmarks/mainwindow.rb +129 -129
  320. data/examples/xml/dombookmarks/xbeltree.rb +172 -172
  321. data/examples/xml/saxbookmarks/frank.xbel +230 -230
  322. data/examples/xml/saxbookmarks/jennifer.xbel +93 -93
  323. data/examples/xml/saxbookmarks/main.rb +34 -34
  324. data/examples/xml/saxbookmarks/mainwindow.rb +144 -144
  325. data/examples/xml/saxbookmarks/xbelgenerator.rb +95 -95
  326. data/examples/xml/saxbookmarks/xbelhandler.rb +122 -122
  327. data/ext/CMakeLists.txt +3 -0
  328. data/ext/cmake/modules/BasicFindPackageVersion.cmake.in +30 -30
  329. data/ext/cmake/modules/CMakeCSharpCompiler.cmake.in +7 -7
  330. data/ext/cmake/modules/CMakeCSharpInformation.cmake +366 -366
  331. data/ext/cmake/modules/CMakeDetermineCSharpCompiler.cmake +85 -85
  332. data/ext/cmake/modules/CMakeTestCSharpCompiler.cmake +1 -1
  333. data/ext/cmake/modules/FindLibraryWithDebug.cmake +113 -113
  334. data/ext/cmake/modules/FindMono.cmake +36 -36
  335. data/ext/cmake/modules/FindPHP5.cmake +179 -179
  336. data/ext/cmake/modules/FindPerlMore.cmake +78 -78
  337. data/ext/cmake/modules/FindPhonon.cmake +71 -71
  338. data/ext/cmake/modules/FindQImageBlitz.cmake +51 -51
  339. data/ext/cmake/modules/FindQScintilla.cmake +57 -57
  340. data/ext/cmake/modules/FindQwt5.cmake +104 -104
  341. data/ext/cmake/modules/FindRuby.cmake +279 -279
  342. data/ext/cmake/modules/FindSmoke.cmake +78 -78
  343. data/ext/cmake/modules/MacroLogFeature.cmake +146 -146
  344. data/ext/cmake/modules/MacroOptionalAddBindings.cmake +47 -47
  345. data/ext/cmake/modules/MacroOptionalFindPackage.cmake +28 -28
  346. data/ext/cmake/modules/MacroPushRequiredVars.cmake +47 -47
  347. data/ext/cmake/modules/MacroWriteBasicCMakeVersionFile.cmake +22 -22
  348. data/ext/cmake/modules/SmokeConfig.cmake.in +109 -109
  349. data/ext/generator/CMakeLists.txt +38 -38
  350. data/ext/generator/cmake/BasicFindPackageVersion.cmake.in +30 -30
  351. data/ext/generator/cmake/CMakeLists.txt +24 -24
  352. data/ext/generator/cmake/FindLibraryWithDebug.cmake +113 -113
  353. data/ext/generator/cmake/FindPhonon.cmake +71 -71
  354. data/ext/generator/cmake/FindQImageBlitz.cmake +51 -51
  355. data/ext/generator/cmake/FindQScintilla.cmake +57 -57
  356. data/ext/generator/cmake/FindQwt5.cmake +104 -104
  357. data/ext/generator/cmake/HandleImportedTargetsInCMakeRequiredLibraries.cmake +85 -85
  358. data/ext/generator/cmake/MacroLogFeature.cmake +146 -146
  359. data/ext/generator/cmake/MacroOptionalAddBindings.cmake +47 -47
  360. data/ext/generator/cmake/MacroOptionalFindPackage.cmake +28 -28
  361. data/ext/generator/cmake/MacroWriteBasicCMakeVersionFile.cmake +22 -22
  362. data/ext/generator/cmake/SmokeConfig.cmake.in +109 -109
  363. data/ext/generator/config.h +25 -25
  364. data/ext/generator/generator_export.h +31 -31
  365. data/ext/generator/generatorenvironment.cpp +52 -52
  366. data/ext/generator/generatorenvironment.h +35 -35
  367. data/ext/generator/generatorpreprocessor.cpp +303 -303
  368. data/ext/generator/generatorpreprocessor.h +83 -83
  369. data/ext/generator/generators/CMakeLists.txt +4 -4
  370. data/ext/generator/generators/dump/CMakeLists.txt +15 -15
  371. data/ext/generator/generators/dump/generator_dump.cpp +36 -36
  372. data/ext/generator/generators/smoke/CMakeLists.txt +18 -18
  373. data/ext/generator/generators/smoke/generator_smoke.cpp +240 -240
  374. data/ext/generator/generators/smoke/globals.h +140 -140
  375. data/ext/generator/generators/smoke/helpers.cpp +793 -793
  376. data/ext/generator/generators/smoke/writeClasses.cpp +502 -502
  377. data/ext/generator/generators/smoke/writeSmokeDataFile.cpp +754 -754
  378. data/ext/generator/generatorvisitor.cpp +922 -922
  379. data/ext/generator/generatorvisitor.h +119 -119
  380. data/ext/generator/name_compiler.cpp +205 -205
  381. data/ext/generator/name_compiler.h +76 -76
  382. data/ext/generator/options.cpp +33 -33
  383. data/ext/generator/options.h +46 -46
  384. data/ext/generator/parser/CMakeLists.txt +50 -50
  385. data/ext/generator/parser/ast.cpp +21 -21
  386. data/ext/generator/parser/ast.h +923 -923
  387. data/ext/generator/parser/astutilities.h +65 -65
  388. data/ext/generator/parser/codegenerator.cpp +867 -867
  389. data/ext/generator/parser/codegenerator.h +180 -180
  390. data/ext/generator/parser/codemodel_fwd.h +76 -76
  391. data/ext/generator/parser/commentformatter.cpp +54 -54
  392. data/ext/generator/parser/commentformatter.h +45 -45
  393. data/ext/generator/parser/commentparser.cpp +109 -109
  394. data/ext/generator/parser/commentparser.h +84 -84
  395. data/ext/generator/parser/control.cpp +40 -40
  396. data/ext/generator/parser/control.h +51 -51
  397. data/ext/generator/parser/cppparser_export.h +33 -33
  398. data/ext/generator/parser/default_visitor.cpp +470 -470
  399. data/ext/generator/parser/default_visitor.h +116 -116
  400. data/ext/generator/parser/dumptree.cpp +146 -146
  401. data/ext/generator/parser/dumptree.h +50 -50
  402. data/ext/generator/parser/indexedstring.cpp +213 -213
  403. data/ext/generator/parser/indexedstring.h +147 -147
  404. data/ext/generator/parser/kdevelop-parser-rev +1 -1
  405. data/ext/generator/parser/kdevvarlengtharray.h +346 -346
  406. data/ext/generator/parser/lexer.cpp +964 -964
  407. data/ext/generator/parser/lexer.h +308 -308
  408. data/ext/generator/parser/listnode.cpp +20 -20
  409. data/ext/generator/parser/listnode.h +97 -97
  410. data/ext/generator/parser/memorypool.cpp +20 -20
  411. data/ext/generator/parser/memorypool.h +41 -41
  412. data/ext/generator/parser/name_compiler.cpp +190 -190
  413. data/ext/generator/parser/name_compiler.h +77 -77
  414. data/ext/generator/parser/parser.cpp +4708 -4708
  415. data/ext/generator/parser/parser.h +290 -290
  416. data/ext/generator/parser/parsesession.cpp +106 -106
  417. data/ext/generator/parser/parsesession.h +87 -87
  418. data/ext/generator/parser/problem.h +21 -21
  419. data/ext/generator/parser/rpp/CMakeLists.txt +45 -45
  420. data/ext/generator/parser/rpp/Makefile.am +13 -13
  421. data/ext/generator/parser/rpp/anchor.h +51 -51
  422. data/ext/generator/parser/rpp/appendedlist.h +363 -363
  423. data/ext/generator/parser/rpp/chartools.cpp +146 -146
  424. data/ext/generator/parser/rpp/chartools.h +99 -99
  425. data/ext/generator/parser/rpp/macrorepository.cpp +44 -44
  426. data/ext/generator/parser/rpp/macrorepository.h +59 -59
  427. data/ext/generator/parser/rpp/pp-configuration +86 -86
  428. data/ext/generator/parser/rpp/pp-engine.h +267 -267
  429. data/ext/generator/parser/rpp/pp-environment.cpp +271 -271
  430. data/ext/generator/parser/rpp/pp-environment.h +119 -119
  431. data/ext/generator/parser/rpp/pp-internal.cpp +38 -38
  432. data/ext/generator/parser/rpp/pp-internal.h +37 -37
  433. data/ext/generator/parser/rpp/pp-location.cpp +191 -191
  434. data/ext/generator/parser/rpp/pp-location.h +89 -89
  435. data/ext/generator/parser/rpp/pp-macro-expander.cpp +568 -568
  436. data/ext/generator/parser/rpp/pp-macro-expander.cpp.orig +558 -558
  437. data/ext/generator/parser/rpp/pp-macro-expander.h +130 -130
  438. data/ext/generator/parser/rpp/pp-macro.cpp +153 -153
  439. data/ext/generator/parser/rpp/pp-macro.h +176 -176
  440. data/ext/generator/parser/rpp/pp-scanner.cpp +311 -311
  441. data/ext/generator/parser/rpp/pp-scanner.h +97 -97
  442. data/ext/generator/parser/rpp/pp-stream.cpp +425 -425
  443. data/ext/generator/parser/rpp/pp-stream.h +183 -183
  444. data/ext/generator/parser/rpp/preprocessor.cpp +65 -65
  445. data/ext/generator/parser/rpp/preprocessor.h +80 -80
  446. data/ext/generator/parser/rpp/rpp.pri +2 -2
  447. data/ext/generator/parser/rpp/test/t001.cpp +23 -23
  448. data/ext/generator/parser/rpp/test/t002.cpp +15 -15
  449. data/ext/generator/parser/rpp/test/t003.cpp +10 -10
  450. data/ext/generator/parser/rpp/test/t004.cpp +9 -9
  451. data/ext/generator/parser/rpp/test/t005.cpp +10 -10
  452. data/ext/generator/parser/rpp/test/t006.cpp +10 -10
  453. data/ext/generator/parser/rpp/test/t007.cpp +6 -6
  454. data/ext/generator/parser/rpp/test/t008.cpp +6 -6
  455. data/ext/generator/parser/rpp/test/t009.cpp +5 -5
  456. data/ext/generator/parser/rpp/test/t010.cpp +15 -15
  457. data/ext/generator/parser/rpp/test/t011.cpp +9 -9
  458. data/ext/generator/parser/rpp/tests/CMakeLists.txt +17 -17
  459. data/ext/generator/parser/rpp/tests/main.cpp +69 -69
  460. data/ext/generator/parser/rxx.pri +50 -50
  461. data/ext/generator/parser/rxx_allocator.h +128 -128
  462. data/ext/generator/parser/safetycounter.h +57 -57
  463. data/ext/generator/parser/simplecursor.h +74 -74
  464. data/ext/generator/parser/stringhelpers.cpp +577 -577
  465. data/ext/generator/parser/stringhelpers.h +118 -118
  466. data/ext/generator/parser/symbol.h +140 -140
  467. data/ext/generator/parser/tests/CMakeLists.txt +46 -46
  468. data/ext/generator/parser/tests/test_generator.cpp +259 -259
  469. data/ext/generator/parser/tests/test_parser.cpp +474 -474
  470. data/ext/generator/parser/tests/test_pool.cpp +109 -109
  471. data/ext/generator/parser/tests/test_pool.h +35 -35
  472. data/ext/generator/parser/tests/testconfig.h.cmake +4 -4
  473. data/ext/generator/parser/tokens.cpp +367 -367
  474. data/ext/generator/parser/tokens.h +148 -148
  475. data/ext/generator/parser/type_compiler.cpp +135 -135
  476. data/ext/generator/parser/type_compiler.h +68 -68
  477. data/ext/generator/parser/visitor.cpp +115 -115
  478. data/ext/generator/parser/visitor.h +138 -138
  479. data/ext/generator/smoke.h +557 -557
  480. data/ext/generator/smokegen_string.h +43 -43
  481. data/ext/generator/type.cpp +204 -204
  482. data/ext/generator/type.h +497 -497
  483. data/ext/generator/type_compiler.cpp +277 -277
  484. data/ext/generator/type_compiler.h +80 -80
  485. data/ext/ruby/CMakeLists.txt +64 -64
  486. data/ext/ruby/qtdeclarative/CMakeLists.txt +17 -17
  487. data/ext/ruby/qtdeclarative/qtdeclarative.cpp +67 -67
  488. data/ext/ruby/qtdeclarative/qtdeclarative.rb +17 -17
  489. data/ext/ruby/qtdeclarative/qtdeclarativehandlers.cpp +36 -36
  490. data/ext/ruby/qtruby/AUTHORS +54 -54
  491. data/ext/ruby/qtruby/COPYING +355 -355
  492. data/ext/ruby/qtruby/COPYING.LIB +510 -510
  493. data/ext/ruby/qtruby/ChangeLog +3732 -3732
  494. data/ext/ruby/qtruby/INSTALL +79 -79
  495. data/ext/ruby/qtruby/README +264 -264
  496. data/ext/ruby/qtruby/TODO +8 -8
  497. data/ext/ruby/qtruby/bin/rbqtapi +152 -152
  498. data/ext/ruby/qtruby/rails_support/CMakeLists.txt +1 -1
  499. data/ext/ruby/qtruby/rails_support/active_item_model.rb +234 -234
  500. data/ext/ruby/qtruby/rails_support/active_table_model.rb +122 -122
  501. data/ext/ruby/qtruby/src/Qt.cpp +8 -8
  502. data/ext/ruby/qtruby/src/marshall_basetypes.h +208 -208
  503. data/ext/ruby/qtruby/src/marshall_complex.h +175 -175
  504. data/ext/ruby/qtruby/src/marshall_macros.h +647 -647
  505. data/ext/ruby/qtruby/src/marshall_types.cpp +815 -815
  506. data/ext/ruby/qtruby/src/marshall_types.h +240 -240
  507. data/ext/ruby/qtruby/src/qtruby.cpp +69 -12
  508. data/ext/ruby/qtruby/src/qtruby.h +1 -1
  509. data/ext/ruby/qtruby/test/opoverloading.rb +46 -46
  510. data/ext/ruby/qtruby/test/unittests.rb +151 -151
  511. data/ext/ruby/qtruby/tools/rbrcc/main.cpp +173 -173
  512. data/ext/ruby/qtruby/tools/rbrcc/rbrcc.pro +14 -14
  513. data/ext/ruby/qtruby/tools/rbrcc/rcc.cpp +648 -648
  514. data/ext/ruby/qtruby/tools/rbrcc/rcc.h +165 -165
  515. data/ext/ruby/qtruby/tools/rbuic/LICENSE.GPL +280 -280
  516. data/ext/ruby/qtruby/tools/rbuic/TODO +4 -4
  517. data/ext/ruby/qtruby/tools/rbuic/customwidgetsinfo.cpp +106 -106
  518. data/ext/ruby/qtruby/tools/rbuic/customwidgetsinfo.h +95 -95
  519. data/ext/ruby/qtruby/tools/rbuic/databaseinfo.cpp +102 -102
  520. data/ext/ruby/qtruby/tools/rbuic/databaseinfo.h +85 -85
  521. data/ext/ruby/qtruby/tools/rbuic/driver.cpp +384 -384
  522. data/ext/ruby/qtruby/tools/rbuic/driver.h +141 -141
  523. data/ext/ruby/qtruby/tools/rbuic/option.h +3 -0
  524. data/ext/ruby/qtruby/tools/rbuic/rbuic.pri +23 -23
  525. data/ext/ruby/qtruby/tools/rbuic/rbuic4.pro +43 -43
  526. data/ext/ruby/qtruby/tools/rbuic/ruby/rbextractimages.cpp +150 -150
  527. data/ext/ruby/qtruby/tools/rbuic/ruby/rbextractimages.h +83 -83
  528. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwritedeclaration.cpp +217 -217
  529. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwritedeclaration.h +85 -85
  530. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondata.cpp +185 -185
  531. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondata.h +86 -86
  532. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondeclaration.cpp +88 -88
  533. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteicondeclaration.h +83 -83
  534. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteiconinitialization.cpp +126 -126
  535. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteiconinitialization.h +87 -87
  536. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteinitialization.cpp +2478 -2478
  537. data/ext/ruby/qtruby/tools/rbuic/ruby/rbwriteinitialization.h +314 -314
  538. data/ext/ruby/qtruby/tools/rbuic/ruby/ruby.pri +18 -18
  539. data/ext/ruby/qtruby/tools/rbuic/treewalker.cpp +318 -318
  540. data/ext/ruby/qtruby/tools/rbuic/treewalker.h +139 -139
  541. data/ext/ruby/qtruby/tools/rbuic/ui4.cpp +7623 -7623
  542. data/ext/ruby/qtruby/tools/rbuic/ui4.h +3180 -3180
  543. data/ext/ruby/qtruby/tools/rbuic/utils.h +125 -125
  544. data/ext/ruby/qtruby/tools/rbuic/validator.cpp +100 -100
  545. data/ext/ruby/qtruby/tools/rbuic/validator.h +80 -80
  546. data/ext/ruby/qtscript/CMakeLists.txt +19 -19
  547. data/ext/ruby/qtscript/qtscript.cpp +83 -83
  548. data/ext/ruby/qtscript/qtscript.rb +40 -40
  549. data/ext/ruby/qtscript/qtscripthandlers.cpp +37 -37
  550. data/ext/ruby/qtscript/smokedata.cpp +1403 -1403
  551. data/ext/ruby/qttest/CMakeLists.txt +18 -18
  552. data/ext/ruby/qttest/ChangeLog +9 -9
  553. data/ext/ruby/qttest/examples/myfirsttest.rb +30 -30
  554. data/ext/ruby/qttest/qttest.cpp +83 -83
  555. data/ext/ruby/qttest/qttest.rb +166 -166
  556. data/ext/ruby/qttest/qttesthandlers.cpp +37 -37
  557. data/ext/ruby/qtuitools/CMakeLists.txt +16 -16
  558. data/ext/ruby/qtuitools/qtuitools.cpp +83 -83
  559. data/ext/ruby/qtuitools/qtuitools.rb +17 -17
  560. data/ext/ruby/qtuitools/qtuitoolshandlers.cpp +32 -32
  561. data/ext/ruby/qtwebkit/CMakeLists.txt +17 -17
  562. data/ext/ruby/qtwebkit/qtwebkit.cpp +67 -67
  563. data/ext/ruby/qtwebkit/qtwebkit.rb +17 -17
  564. data/ext/ruby/qtwebkit/qtwebkithandlers.cpp +40 -40
  565. data/ext/smoke/deptool/CMakeLists.txt +7 -7
  566. data/ext/smoke/deptool/main.cpp +128 -128
  567. data/ext/smoke/qtcore/CMakeLists.txt +88 -88
  568. data/ext/smoke/qtcore/QtGuess.txt +180 -180
  569. data/ext/smoke/qtcore/config.xml.cmake +10 -10
  570. data/ext/smoke/qtcore/qt-config.xml.cmake +21 -21
  571. data/ext/smoke/qtcore/qtcore_includes.h +1 -1
  572. data/ext/smoke/qtcore/smokeconfig.xml +193 -193
  573. data/ext/smoke/qtcore/tests/CMakeLists.txt +13 -13
  574. data/ext/smoke/qtcore/tests/test.cpp +846 -846
  575. data/ext/smoke/qtcore_smoke.h +16 -16
  576. data/ext/smoke/qtdbus/CMakeLists.txt +38 -38
  577. data/ext/smoke/qtdbus/config.xml.cmake +11 -11
  578. data/ext/smoke/qtdbus/qtdbus_includes.h +2 -2
  579. data/ext/smoke/qtdbus/smokeconfig.xml +65 -65
  580. data/ext/smoke/qtdbus_smoke.h +16 -16
  581. data/ext/smoke/qtdeclarative/CMakeLists.txt +45 -45
  582. data/ext/smoke/qtdeclarative/config.xml.cmake +12 -12
  583. data/ext/smoke/qtdeclarative/qtdeclarative_includes.h +3 -3
  584. data/ext/smoke/qtdeclarative/smokeconfig.xml +59 -59
  585. data/ext/smoke/qtdeclarative_smoke.h +16 -16
  586. data/ext/smoke/qtgui/CMakeLists.txt +76 -76
  587. data/ext/smoke/qtgui/config.xml.cmake +11 -11
  588. data/ext/smoke/qtgui/qtgui_includes.h +7 -7
  589. data/ext/smoke/qtgui/smokeconfig.xml +500 -500
  590. data/ext/smoke/qtgui_smoke.h +16 -16
  591. data/ext/smoke/qthelp/CMakeLists.txt +45 -45
  592. data/ext/smoke/qthelp/config.xml.cmake +13 -13
  593. data/ext/smoke/qthelp/qthelp_includes.h +3 -3
  594. data/ext/smoke/qthelp/smokeconfig.xml +54 -54
  595. data/ext/smoke/qthelp_smoke.h +16 -16
  596. data/ext/smoke/qtmultimedia/CMakeLists.txt +42 -42
  597. data/ext/smoke/qtmultimedia/config.xml.cmake +12 -12
  598. data/ext/smoke/qtmultimedia/qtmultimedia_includes.h +3 -3
  599. data/ext/smoke/qtmultimedia/smokeconfig.xml +51 -51
  600. data/ext/smoke/qtmultimedia_smoke.h +16 -16
  601. data/ext/smoke/qtnetwork/CMakeLists.txt +38 -38
  602. data/ext/smoke/qtnetwork/config.xml.cmake +11 -11
  603. data/ext/smoke/qtnetwork/qtnetwork_includes.h +2 -2
  604. data/ext/smoke/qtnetwork/smokeconfig.xml +81 -81
  605. data/ext/smoke/qtnetwork_smoke.h +16 -16
  606. data/ext/smoke/qtopengl/CMakeLists.txt +43 -43
  607. data/ext/smoke/qtopengl/config.xml.cmake +13 -13
  608. data/ext/smoke/qtopengl/qtopengl_includes.h +3 -3
  609. data/ext/smoke/qtopengl/smokeconfig.xml +58 -58
  610. data/ext/smoke/qtopengl_smoke.h +16 -16
  611. data/ext/smoke/qtscript/CMakeLists.txt +31 -31
  612. data/ext/smoke/qtscript/config.xml.cmake +11 -11
  613. data/ext/smoke/qtscript/qtscript_includes.h +14 -14
  614. data/ext/smoke/qtscript/smokeconfig.xml +39 -39
  615. data/ext/smoke/qtscript_smoke.h +16 -16
  616. data/ext/smoke/qtsql/CMakeLists.txt +45 -45
  617. data/ext/smoke/qtsql/config.xml.cmake +11 -11
  618. data/ext/smoke/qtsql/qtsql_includes.h +3 -3
  619. data/ext/smoke/qtsql/smokeconfig.xml +60 -60
  620. data/ext/smoke/qtsql_smoke.h +16 -16
  621. data/ext/smoke/qtsvg/CMakeLists.txt +43 -43
  622. data/ext/smoke/qtsvg/config.xml.cmake +12 -12
  623. data/ext/smoke/qtsvg/qtsvg_includes.h +3 -3
  624. data/ext/smoke/qtsvg/smokeconfig.xml +46 -46
  625. data/ext/smoke/qtsvg_smoke.h +16 -16
  626. data/ext/smoke/qttest/CMakeLists.txt +35 -35
  627. data/ext/smoke/qttest/config.xml.cmake +12 -12
  628. data/ext/smoke/qttest/qttest_includes.h +14 -14
  629. data/ext/smoke/qttest/smokeconfig.xml +36 -36
  630. data/ext/smoke/qttest_smoke.h +16 -16
  631. data/ext/smoke/qtuitools/CMakeLists.txt +30 -30
  632. data/ext/smoke/qtuitools/config.xml.cmake +12 -12
  633. data/ext/smoke/qtuitools/qtuitools_includes.h +1 -1
  634. data/ext/smoke/qtuitools/smokeconfig.xml +20 -20
  635. data/ext/smoke/qtuitools_smoke.h +16 -16
  636. data/ext/smoke/qtwebkit/CMakeLists.txt +36 -36
  637. data/ext/smoke/qtwebkit/config.xml.cmake +11 -11
  638. data/ext/smoke/qtwebkit/qtwebkit_includes.h +1 -1
  639. data/ext/smoke/qtwebkit/smokeconfig.xml +48 -48
  640. data/ext/smoke/qtwebkit_smoke.h +16 -16
  641. data/ext/smoke/qtxml/CMakeLists.txt +41 -41
  642. data/ext/smoke/qtxml/config.xml.cmake +11 -11
  643. data/ext/smoke/qtxml/qtxml_includes.h +2 -2
  644. data/ext/smoke/qtxml/smokeconfig.xml +70 -70
  645. data/ext/smoke/qtxml_smoke.h +16 -16
  646. data/ext/smoke/qtxmlpatterns/CMakeLists.txt +42 -42
  647. data/ext/smoke/qtxmlpatterns/config.xml.cmake +12 -12
  648. data/ext/smoke/qtxmlpatterns/qtxmlpatterns_includes.h +3 -3
  649. data/ext/smoke/qtxmlpatterns/smokeconfig.xml +80 -80
  650. data/ext/smoke/qtxmlpatterns_smoke.h +16 -16
  651. data/ext/smoke/smokeapi/CMakeLists.txt +9 -9
  652. data/ext/smoke/smokeapi/main.cpp +309 -309
  653. data/ext/smoke/smokebase/CMakeLists.txt +11 -11
  654. data/ext/smoke/smokebase/smokebase.cpp +6 -6
  655. data/ext/smoke/solid_smoke.h +16 -16
  656. data/extconf.rb +2 -2
  657. data/lib/Qt.rb +1 -1
  658. data/lib/Qt4.rb +111 -111
  659. data/lib/qtbindings_version.rb +2 -2
  660. data/lib/qtdeclarative/qtdeclarative.rb +17 -17
  661. data/lib/qtscript/qtscript.rb +40 -40
  662. data/lib/qttest/qttest.rb +166 -166
  663. data/lib/qtuitools/qtuitools.rb +17 -17
  664. data/lib/qtwebkit/qtwebkit.rb +17 -17
  665. data/qtbindings.gemspec +18 -18
  666. 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
+ }