qml 0.0.7 → 1.0.0

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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/.travis.yml +5 -9
  4. data/LICENSE.txt +1 -1
  5. data/README.md +84 -114
  6. data/changes.md +5 -0
  7. data/examples/fizzbuzz/fizzbuzz.rb +3 -4
  8. data/examples/todo_array/todo_array.rb +4 -4
  9. data/examples/todo_sequel/todo_sequel.rb +7 -7
  10. data/examples/twitter/twitter.rb +5 -3
  11. data/ext/qml/application.c +88 -0
  12. data/ext/qml/application.h +9 -0
  13. data/ext/qml/component.c +89 -0
  14. data/ext/qml/component.h +10 -0
  15. data/ext/qml/conversion.c +60 -0
  16. data/ext/qml/conversion.h +8 -0
  17. data/ext/qml/dispatcher.c +31 -0
  18. data/ext/qml/dispatcher.h +7 -0
  19. data/ext/qml/engine.c +135 -0
  20. data/ext/qml/engine.h +10 -0
  21. data/ext/qml/exporter.c +93 -0
  22. data/ext/qml/exporter.h +7 -0
  23. data/ext/qml/extconf.rb +38 -97
  24. data/ext/qml/interface.c +156 -0
  25. data/ext/qml/interface.h +11 -0
  26. data/ext/qml/js_array.c +47 -0
  27. data/ext/qml/js_array.h +7 -0
  28. data/ext/qml/js_function.c +109 -0
  29. data/ext/qml/js_function.h +7 -0
  30. data/ext/qml/js_object.c +284 -0
  31. data/ext/qml/js_object.h +19 -0
  32. data/ext/qml/js_wrapper.c +19 -0
  33. data/ext/qml/js_wrapper.h +7 -0
  34. data/ext/qml/lib/libqmlbind/.gitignore +38 -0
  35. data/ext/qml/lib/libqmlbind/.gitmodules +3 -0
  36. data/ext/qml/lib/libqmlbind/.travis.yml +14 -0
  37. data/ext/qml/lib/libqmlbind/LICENSE.txt +22 -0
  38. data/ext/qml/lib/libqmlbind/libqmlbind.pro +3 -0
  39. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind.h +14 -0
  40. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/application.h +18 -0
  41. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/component.h +21 -0
  42. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/engine.h +34 -0
  43. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/exporter.h +37 -0
  44. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/interface.h +16 -0
  45. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/iterator.h +19 -0
  46. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/metaobject.h +13 -0
  47. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/plugin.h +17 -0
  48. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/qmlbind_global.h +78 -0
  49. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/register.h +17 -0
  50. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/signal_emitter.h +15 -0
  51. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/string.h +15 -0
  52. data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/value.h +100 -0
  53. data/ext/qml/lib/libqmlbind/qmlbind/qmlbind.pro +62 -0
  54. data/ext/qml/lib/libqmlbind/qmlbind/src/api_application.cpp +103 -0
  55. data/ext/qml/lib/libqmlbind/qmlbind/src/api_component.cpp +54 -0
  56. data/ext/qml/lib/libqmlbind/qmlbind/src/api_engine.cpp +65 -0
  57. data/ext/qml/lib/libqmlbind/qmlbind/src/api_exporter.cpp +52 -0
  58. data/ext/qml/lib/libqmlbind/qmlbind/src/api_interface.cpp +19 -0
  59. data/ext/qml/lib/libqmlbind/qmlbind/src/api_iterator.cpp +32 -0
  60. data/ext/qml/lib/libqmlbind/qmlbind/src/api_metaobject.cpp +19 -0
  61. data/ext/qml/lib/libqmlbind/qmlbind/src/api_plugin.cpp +27 -0
  62. data/ext/qml/lib/libqmlbind/qmlbind/src/api_register.cpp +17 -0
  63. data/ext/qml/lib/libqmlbind/qmlbind/src/api_signal_emitter.cpp +27 -0
  64. data/ext/qml/lib/libqmlbind/qmlbind/src/api_string.cpp +22 -0
  65. data/ext/qml/lib/libqmlbind/qmlbind/src/api_value.cpp +215 -0
  66. data/ext/qml/lib/libqmlbind/qmlbind/src/backref.cpp +54 -0
  67. data/ext/qml/lib/libqmlbind/qmlbind/src/backref.h +29 -0
  68. data/ext/qml/lib/libqmlbind/qmlbind/src/engine.cpp +32 -0
  69. data/ext/qml/lib/libqmlbind/qmlbind/src/engine.h +27 -0
  70. data/ext/qml/lib/libqmlbind/qmlbind/src/exporter.cpp +73 -0
  71. data/ext/qml/lib/libqmlbind/qmlbind/src/exporter.h +46 -0
  72. data/ext/qml/lib/libqmlbind/qmlbind/src/interface.cpp +75 -0
  73. data/ext/qml/lib/libqmlbind/qmlbind/src/interface.h +37 -0
  74. data/ext/qml/lib/libqmlbind/qmlbind/src/metaobject.cpp +101 -0
  75. data/ext/qml/lib/libqmlbind/qmlbind/src/metaobject.h +29 -0
  76. data/ext/qml/lib/libqmlbind/qmlbind/src/signalemitter.cpp +33 -0
  77. data/ext/qml/lib/libqmlbind/qmlbind/src/signalemitter.h +25 -0
  78. data/ext/qml/lib/libqmlbind/qmlbind/src/ticktimer.cpp +15 -0
  79. data/ext/qml/lib/libqmlbind/qmlbind/src/ticktimer.h +19 -0
  80. data/ext/qml/lib/libqmlbind/qmlbind/src/typeregisterer.cpp +112 -0
  81. data/ext/qml/lib/libqmlbind/qmlbind/src/typeregisterer.h +28 -0
  82. data/ext/qml/lib/libqmlbind/qmlbind/src/util.h +13 -0
  83. data/ext/qml/lib/libqmlbind/qmlbind/src/wrapper.cpp +23 -0
  84. data/ext/qml/lib/libqmlbind/qmlbind/src/wrapper.h +29 -0
  85. data/ext/qml/lib/libqmlbind/readme.md +14 -0
  86. data/ext/qml/lib/libqmlbind/test/api.c +1 -0
  87. data/ext/qml/lib/libqmlbind/test/application_test.cpp +16 -0
  88. data/ext/qml/lib/libqmlbind/test/component_test.cpp +57 -0
  89. data/ext/qml/lib/libqmlbind/test/engine_test.cpp +94 -0
  90. data/ext/qml/lib/libqmlbind/test/exporter_test.cpp +312 -0
  91. data/ext/qml/lib/libqmlbind/test/fixtures/emptyhandlers.cpp +36 -0
  92. data/ext/qml/lib/libqmlbind/test/fixtures/emptyhandlers.h +6 -0
  93. data/ext/qml/lib/libqmlbind/test/fixtures/test.qml +5 -0
  94. data/ext/qml/lib/libqmlbind/test/fixtures/testmodule/qmldir +2 -0
  95. data/ext/qml/lib/libqmlbind/test/fixtures/testmodule/test.qml +5 -0
  96. data/ext/qml/lib/libqmlbind/test/iterator_test.cpp +37 -0
  97. data/ext/qml/lib/libqmlbind/test/main.cpp +11 -0
  98. data/ext/qml/lib/libqmlbind/test/plugin_test.cpp +41 -0
  99. data/ext/qml/lib/libqmlbind/test/test.pro +26 -0
  100. data/ext/qml/lib/libqmlbind/test/test_helper.h +20 -0
  101. data/ext/qml/lib/libqmlbind/test/value_test.cpp +252 -0
  102. data/ext/qml/lib/libqmlbind/testplugin/testplugin.cpp +11 -0
  103. data/ext/qml/lib/libqmlbind/testplugin/testplugin.h +21 -0
  104. data/ext/qml/lib/libqmlbind/testplugin/testplugin.json +3 -0
  105. data/ext/qml/lib/libqmlbind/testplugin/testplugin.pro +21 -0
  106. data/ext/qml/meta_object.c +81 -0
  107. data/ext/qml/meta_object.h +8 -0
  108. data/ext/qml/plugin_loader.c +71 -0
  109. data/ext/qml/plugin_loader.h +7 -0
  110. data/ext/qml/qml.c +95 -0
  111. data/ext/qml/qml.h +10 -0
  112. data/ext/qml/rubyqml-plugin/listmodel.cpp +102 -0
  113. data/ext/qml/rubyqml-plugin/listmodel.h +37 -0
  114. data/ext/qml/rubyqml-plugin/rubyqml-plugin.pro +19 -0
  115. data/ext/qml/rubyqml-plugin/rubyqmlplugin.cpp +25 -0
  116. data/ext/qml/rubyqml-plugin/rubyqmlplugin.h +19 -0
  117. data/ext/qml/signal_emitter.c +71 -0
  118. data/ext/qml/signal_emitter.h +9 -0
  119. data/lib/qml.rb +11 -10
  120. data/lib/qml/access.rb +64 -86
  121. data/lib/qml/application.rb +20 -71
  122. data/lib/qml/component.rb +41 -33
  123. data/lib/qml/core_ext.rb +1 -0
  124. data/lib/qml/core_ext/to_qml.rb +70 -0
  125. data/lib/qml/data.rb +1 -0
  126. data/lib/qml/data/array_model.rb +99 -101
  127. data/lib/qml/data/list_model.rb +107 -131
  128. data/lib/qml/data/list_model_access.rb +44 -0
  129. data/lib/qml/data/query_model.rb +45 -47
  130. data/lib/qml/dispatcher.rb +5 -13
  131. data/lib/qml/engine.rb +9 -58
  132. data/lib/qml/errors.rb +0 -21
  133. data/lib/qml/interface.rb +21 -0
  134. data/lib/qml/js_array.rb +8 -0
  135. data/lib/qml/js_object.rb +69 -0
  136. data/lib/qml/js_util.rb +18 -0
  137. data/lib/qml/plugin_loader.rb +1 -13
  138. data/lib/qml/plugins.rb +3 -17
  139. data/lib/qml/proc_access.rb +28 -0
  140. data/lib/qml/qt.rb +21 -3
  141. data/lib/qml/reactive.rb +147 -8
  142. data/lib/qml/signal.rb +67 -0
  143. data/lib/qml/version.rb +1 -1
  144. data/qml.gemspec +8 -2
  145. data/spec/qml/access_spec.rb +33 -120
  146. data/spec/qml/application_spec.rb +11 -24
  147. data/spec/qml/component_spec.rb +4 -4
  148. data/spec/qml/data/array_model_spec.rb +2 -2
  149. data/spec/qml/data/list_model_spec.rb +2 -2
  150. data/spec/qml/data/query_model_spec.rb +4 -4
  151. data/spec/qml/engine_spec.rb +23 -21
  152. data/spec/qml/interface_spec.rb +20 -0
  153. data/spec/qml/js_array_spec.rb +29 -0
  154. data/spec/qml/js_function_spec.rb +32 -0
  155. data/spec/qml/js_object_spec.rb +113 -0
  156. data/spec/qml/plugin_loader_spec.rb +9 -11
  157. data/spec/qml/qt_spec.rb +9 -0
  158. data/spec/qml/reactive_spec.rb +37 -0
  159. data/spec/qml/signal_connect_spec.rb +27 -0
  160. data/spec/qml/signal_spec.rb +73 -0
  161. data/spec/qml/to_qml_spec.rb +76 -0
  162. data/spec/shared/qml/access_example.rb +21 -0
  163. data/spec/shared/qml/data/list_model.rb +12 -13
  164. data/spec/spec_helper.rb +2 -3
  165. metadata +141 -166
  166. data/examples/imageprovider/imageprovider.rb +0 -57
  167. data/examples/imageprovider/main.qml +0 -51
  168. data/ext/qml/accessclass.cpp +0 -65
  169. data/ext/qml/accessclass.h +0 -19
  170. data/ext/qml/accessobject.cpp +0 -30
  171. data/ext/qml/accessobject.h +0 -22
  172. data/ext/qml/common.h +0 -18
  173. data/ext/qml/conversionerror.h +0 -14
  174. data/ext/qml/ext_accesswrapperfactory.cpp +0 -75
  175. data/ext/qml/ext_accesswrapperfactory.h +0 -39
  176. data/ext/qml/ext_anywrapper.cpp +0 -34
  177. data/ext/qml/ext_anywrapper.h +0 -23
  178. data/ext/qml/ext_kernel.cpp +0 -81
  179. data/ext/qml/ext_kernel.h +0 -9
  180. data/ext/qml/ext_metaobject.cpp +0 -399
  181. data/ext/qml/ext_metaobject.h +0 -60
  182. data/ext/qml/ext_pluginloader.cpp +0 -53
  183. data/ext/qml/ext_pluginloader.h +0 -30
  184. data/ext/qml/ext_pointer.cpp +0 -132
  185. data/ext/qml/ext_pointer.h +0 -41
  186. data/ext/qml/ext_testutil.cpp +0 -40
  187. data/ext/qml/ext_testutil.h +0 -9
  188. data/ext/qml/foreignclass.cpp +0 -72
  189. data/ext/qml/foreignclass.h +0 -88
  190. data/ext/qml/foreignmetaobject.cpp +0 -345
  191. data/ext/qml/foreignmetaobject.h +0 -46
  192. data/ext/qml/foreignobject.cpp +0 -22
  193. data/ext/qml/foreignobject.h +0 -21
  194. data/ext/qml/functioninfo.h +0 -16
  195. data/ext/qml/init.cpp +0 -67
  196. data/ext/qml/kernel.cpp +0 -39
  197. data/ext/qml/kernel.h +0 -32
  198. data/ext/qml/listmodel.cpp +0 -137
  199. data/ext/qml/listmodel.h +0 -45
  200. data/ext/qml/markable.h +0 -12
  201. data/ext/qml/objectdata.cpp +0 -26
  202. data/ext/qml/objectdata.h +0 -20
  203. data/ext/qml/objectgc.cpp +0 -69
  204. data/ext/qml/objectgc.h +0 -28
  205. data/ext/qml/plugins/core/applicationextension.cpp +0 -29
  206. data/ext/qml/plugins/core/applicationextension.h +0 -25
  207. data/ext/qml/plugins/core/componentextension.cpp +0 -41
  208. data/ext/qml/plugins/core/componentextension.h +0 -28
  209. data/ext/qml/plugins/core/contextextension.cpp +0 -39
  210. data/ext/qml/plugins/core/contextextension.h +0 -29
  211. data/ext/qml/plugins/core/core.pro +0 -29
  212. data/ext/qml/plugins/core/coreplugin.cpp +0 -87
  213. data/ext/qml/plugins/core/coreplugin.h +0 -49
  214. data/ext/qml/plugins/core/engineextension.cpp +0 -43
  215. data/ext/qml/plugins/core/engineextension.h +0 -31
  216. data/ext/qml/plugins/core/imageprovider.cpp +0 -38
  217. data/ext/qml/plugins/core/imageprovider.h +0 -18
  218. data/ext/qml/plugins/core/imagerequestpromise.cpp +0 -19
  219. data/ext/qml/plugins/core/imagerequestpromise.h +0 -21
  220. data/ext/qml/plugins/core/qmlexception.cpp +0 -11
  221. data/ext/qml/plugins/core/qmlexception.h +0 -17
  222. data/ext/qml/plugins/testutil/imageprovidertest.cpp +0 -40
  223. data/ext/qml/plugins/testutil/imageprovidertest.h +0 -17
  224. data/ext/qml/plugins/testutil/objectlifechecker.cpp +0 -17
  225. data/ext/qml/plugins/testutil/objectlifechecker.h +0 -24
  226. data/ext/qml/plugins/testutil/ownershiptest.cpp +0 -26
  227. data/ext/qml/plugins/testutil/ownershiptest.h +0 -30
  228. data/ext/qml/plugins/testutil/testobject.cpp +0 -6
  229. data/ext/qml/plugins/testutil/testobject.h +0 -108
  230. data/ext/qml/plugins/testutil/testobjectsubclass.cpp +0 -10
  231. data/ext/qml/plugins/testutil/testobjectsubclass.h +0 -19
  232. data/ext/qml/plugins/testutil/testutil.pro +0 -22
  233. data/ext/qml/plugins/testutil/testutilplugin.cpp +0 -55
  234. data/ext/qml/plugins/testutil/testutilplugin.h +0 -36
  235. data/ext/qml/qmltyperegisterer.cpp +0 -74
  236. data/ext/qml/qmltyperegisterer.h +0 -30
  237. data/ext/qml/rubyclass.cpp +0 -82
  238. data/ext/qml/rubyclass.h +0 -230
  239. data/ext/qml/rubyvalue.cpp +0 -656
  240. data/ext/qml/rubyvalue.h +0 -224
  241. data/ext/qml/signalforwarder.cpp +0 -64
  242. data/ext/qml/signalforwarder.h +0 -29
  243. data/ext/qml/util.cpp +0 -112
  244. data/ext/qml/util.h +0 -82
  245. data/ext/qml/valuereference.cpp +0 -50
  246. data/ext/qml/valuereference.h +0 -22
  247. data/ext/qml/weakvaluereference.cpp +0 -51
  248. data/ext/qml/weakvaluereference.h +0 -21
  249. data/lib/qml/context.rb +0 -71
  250. data/lib/qml/data/error.rb +0 -5
  251. data/lib/qml/dispatchable.rb +0 -34
  252. data/lib/qml/error_converter.rb +0 -16
  253. data/lib/qml/geometry.rb +0 -3
  254. data/lib/qml/geometry/point.rb +0 -5
  255. data/lib/qml/geometry/rectangle.rb +0 -5
  256. data/lib/qml/geometry/size.rb +0 -5
  257. data/lib/qml/image_provider.rb +0 -87
  258. data/lib/qml/init.rb +0 -29
  259. data/lib/qml/meta_object.rb +0 -20
  260. data/lib/qml/models.rb +0 -1
  261. data/lib/qml/qt_classes.rb +0 -9
  262. data/lib/qml/qt_object_base.rb +0 -233
  263. data/lib/qml/reactive/bindable.rb +0 -79
  264. data/lib/qml/reactive/chained_signal.rb +0 -25
  265. data/lib/qml/reactive/error.rb +0 -5
  266. data/lib/qml/reactive/object.rb +0 -293
  267. data/lib/qml/reactive/property.rb +0 -19
  268. data/lib/qml/reactive/signal.rb +0 -115
  269. data/lib/qml/reactive/signal_spy.rb +0 -27
  270. data/lib/qml/reactive/signals/map_signal.rb +0 -21
  271. data/lib/qml/reactive/signals/merge_signal.rb +0 -21
  272. data/lib/qml/reactive/signals/select_signal.rb +0 -21
  273. data/lib/qml/reactive/simple_property.rb +0 -17
  274. data/lib/qml/reactive/unbound_property.rb +0 -42
  275. data/lib/qml/reactive/unbound_signal.rb +0 -51
  276. data/lib/qml/test_util.rb +0 -1
  277. data/lib/qml/test_util/object_life_checker.rb +0 -17
  278. data/lib/qml/wrappable.rb +0 -9
  279. data/spec/qml/context_spec.rb +0 -43
  280. data/spec/qml/conversion_spec.rb +0 -60
  281. data/spec/qml/dispatchable_spec.rb +0 -26
  282. data/spec/qml/dispatcher_spec.rb +0 -71
  283. data/spec/qml/geometry/point_spec.rb +0 -4
  284. data/spec/qml/geometry/rectangle_spec.rb +0 -4
  285. data/spec/qml/geometry/size_spec.rb +0 -4
  286. data/spec/qml/image_provider_spec.rb +0 -33
  287. data/spec/qml/qt_object_base_spec.rb +0 -119
  288. data/spec/qml/reactive/object_spec.rb +0 -249
  289. data/spec/qml/reactive/property_spec.rb +0 -70
  290. data/spec/qml/reactive/signal_spec.rb +0 -191
  291. data/spec/qml/reactive/signal_spy_spec.rb +0 -26
  292. data/spec/qml/reactive/unbound_property_spec.rb +0 -40
  293. data/spec/qml/reactive/unbound_signal_spec.rb +0 -70
  294. data/spec/qml/test_object_spec.rb +0 -186
  295. data/spec/qml/wrappable_spec.rb +0 -10
  296. data/spec/shared/qml/reactive/object.rb +0 -39
@@ -1,60 +0,0 @@
1
- #pragma once
2
-
3
- #include "rubyvalue.h"
4
- #include <QtCore/QMetaObject>
5
- #include <QtCore/QVector>
6
- #include <QtCore/QHash>
7
- #include <QtCore/QObject>
8
-
9
- namespace RubyQml {
10
-
11
- class Ext_MetaObject
12
- {
13
- public:
14
- Ext_MetaObject(RubyValue self);
15
-
16
- RubyValue className() const;
17
-
18
- RubyValue methodNames() const;
19
- RubyValue isPublic(RubyValue name) const;
20
- RubyValue isProtected(RubyValue name) const;
21
- RubyValue isPrivate(RubyValue name) const;
22
- RubyValue isSignal(RubyValue name) const;
23
-
24
- RubyValue invokeMethod(RubyValue object, RubyValue methodName, RubyValue args) const;
25
- RubyValue connectSignal(RubyValue object, RubyValue signalName, RubyValue proc) const;
26
-
27
- RubyValue propertyNames() const;
28
- RubyValue getProperty(RubyValue object, RubyValue name) const;
29
- RubyValue setProperty(RubyValue object, RubyValue name, RubyValue newValue) const;
30
- RubyValue notifySignal(RubyValue name) const;
31
-
32
- RubyValue enumerators() const;
33
-
34
- RubyValue superClass() const;
35
-
36
- RubyValue isEqual(RubyValue other) const;
37
- RubyValue hash() const;
38
-
39
- void setMetaObject(const QMetaObject *metaObject);
40
- const QMetaObject *metaObject() const { return mMetaObject; }
41
-
42
- void gc_mark() {}
43
-
44
- static RubyValue fromMetaObject(const QMetaObject *metaObject);
45
- static void defineClass();
46
-
47
- private:
48
- void checkThread() const;
49
-
50
- QList<int> findMethods(RubyValue name) const;
51
- int findProperty(RubyValue name) const;
52
-
53
- const RubyValue self;
54
-
55
- const QMetaObject *mMetaObject = nullptr;
56
- QMultiHash<ID, int> mMethodHash;
57
- QHash<ID, int> mPropertyHash;
58
- };
59
-
60
- } // namespace RubyQml
@@ -1,53 +0,0 @@
1
- #include "ext_pluginloader.h"
2
- #include "ext_pointer.h"
3
- #include "rubyclass.h"
4
- #include <QtCore/QPluginLoader>
5
- #include <QtCore/QSet>
6
-
7
- namespace RubyQml {
8
-
9
- Ext_PluginLoader::Ext_PluginLoader(RubyValue self) :
10
- self(self),
11
- mPluginLoader(new QPluginLoader())
12
- {
13
- }
14
-
15
- Ext_PluginLoader::~Ext_PluginLoader()
16
- {
17
- }
18
-
19
- RubyValue Ext_PluginLoader::initialize(RubyValue path)
20
- {
21
- mPluginLoader->setFileName(path.to<QString>());
22
- return self;
23
- }
24
-
25
- RubyValue Ext_PluginLoader::load()
26
- {
27
- auto ok = mPluginLoader->load();
28
- if (!ok) {
29
- fail("QML::PluginError", mPluginLoader->errorString());
30
- }
31
- return self;
32
- }
33
-
34
- RubyValue Ext_PluginLoader::instance()
35
- {
36
- self.send("load");
37
- auto instance = mPluginLoader->instance();
38
- if (instance) {
39
- return RubyValue::from(instance);
40
- } else {
41
- return Qnil;
42
- }
43
- }
44
-
45
- void Ext_PluginLoader::defineClass()
46
- {
47
- WrapperRubyClass<Ext_PluginLoader> klass(RubyModule::fromPath("QML"), "PluginLoader");
48
- klass.defineMethod(MethodAccess::Private, "initialize", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_PluginLoader::initialize));
49
- klass.defineMethod(MethodAccess::Public, "load", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_PluginLoader::load));
50
- klass.defineMethod(MethodAccess::Public, "instance", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_PluginLoader::instance));
51
- }
52
-
53
- } // namespace RubyQml
@@ -1,30 +0,0 @@
1
- #pragma once
2
-
3
- #include "rubyvalue.h"
4
- #include <memory>
5
-
6
- class QPluginLoader;
7
-
8
- namespace RubyQml {
9
-
10
- class Ext_PluginLoader
11
- {
12
- public:
13
- Ext_PluginLoader(RubyValue self);
14
- ~Ext_PluginLoader();
15
-
16
- RubyValue initialize(RubyValue path);
17
- RubyValue load();
18
- RubyValue instance();
19
-
20
- void gc_mark() {}
21
-
22
- static void defineClass();
23
-
24
- private:
25
- const RubyValue self;
26
- std::unique_ptr<QPluginLoader> mPluginLoader;
27
- };
28
-
29
- } // namespace RubyQml
30
-
@@ -1,132 +0,0 @@
1
- #include "ext_pointer.h"
2
- #include "markable.h"
3
- #include "objectdata.h"
4
- #include "objectgc.h"
5
- #include "kernel.h"
6
- #include <QObject>
7
- #include <QHash>
8
- #include <QQmlEngine>
9
- #include <QQmlContext>
10
- #include <QDebug>
11
- #include <QCoreApplication>
12
-
13
- namespace RubyQml {
14
-
15
- Ext_Pointer::Ext_Pointer(RubyValue self) :
16
- self(self)
17
- {
18
- }
19
-
20
- Ext_Pointer::~Ext_Pointer()
21
- {
22
- ObjectGC::instance()->debug() << "\u267B\uFE0F releasing object:" << mObject << "managed:" << mIsManaged;
23
- }
24
-
25
- RubyValue Ext_Pointer::fromQObject(QObject *obj, bool owned)
26
- {
27
- auto klass = wrapperRubyClass<Ext_Pointer>();
28
- auto ptr = klass.newInstance();
29
- klass.unwrap(ptr)->setQObject(obj, owned);
30
- return ptr;
31
- }
32
-
33
- QObject *Ext_Pointer::fetchQObject()
34
- {
35
- if (!mObject) {
36
- fail("QML::QtObjectError", "referencing already deleted Qt Object");
37
- }
38
- return mObject;
39
- }
40
-
41
- void Ext_Pointer::setQObject(QObject *obj, bool managed)
42
- {
43
- if (!obj) {
44
- throw std::logic_error("null object");
45
- }
46
- mObject = obj;
47
- ObjectGC::instance()->addObject(obj);
48
-
49
- preferManaged(managed);
50
- ObjectGC::instance()->debug() << "\u2728 acquiring object:" << mObject;
51
- }
52
-
53
- void Ext_Pointer::setManaged(bool managed)
54
- {
55
- if (mObject) {
56
- if (managed) {
57
- QQmlEngine::setObjectOwnership(mObject, QQmlEngine::JavaScriptOwnership);
58
- mJSValue = Kernel::instance()->engine()->newQObject(mObject);
59
- } else {
60
- QQmlEngine::setObjectOwnership(mObject, QQmlEngine::CppOwnership);
61
- mJSValue = QJSValue();
62
- }
63
-
64
- ObjectData::getOrCreate(mObject)->owned = managed;
65
- mIsManaged = managed;
66
- }
67
- }
68
-
69
- void Ext_Pointer::preferManaged(bool managed)
70
- {
71
- auto ownership = QQmlEngine::objectOwnership(mObject);
72
-
73
- if (ownership == QQmlEngine::JavaScriptOwnership) {
74
- managed = true;
75
- } else {
76
- // owned by parent
77
- if (mObject->parent()) {
78
- managed = false;
79
- }
80
- }
81
-
82
- setManaged(managed);
83
- }
84
-
85
- RubyValue Ext_Pointer::ext_isManaged() const
86
- {
87
- return RubyValue::from(mIsManaged);
88
- }
89
-
90
- RubyValue Ext_Pointer::ext_setManaged(RubyValue managed)
91
- {
92
- setManaged(managed.to<bool>());
93
- return ext_isManaged();
94
- }
95
-
96
- RubyValue Ext_Pointer::ext_preferManaged(RubyValue managed)
97
- {
98
- preferManaged(managed.to<bool>());
99
- return ext_isManaged();
100
- }
101
-
102
- RubyValue Ext_Pointer::ext_isNull() const
103
- {
104
- return RubyValue::from(!mObject);
105
- }
106
-
107
- RubyValue Ext_Pointer::ext_toString() const
108
- {
109
- QString name;
110
- QDebug(&name) << mObject.data();
111
- return RubyValue::from(name);
112
- }
113
-
114
- void Ext_Pointer::gc_mark()
115
- {
116
- if (mIsManaged) {
117
- ObjectGC::instance()->markOwnedObject(mObject);
118
- }
119
- }
120
-
121
- void Ext_Pointer::defineClass()
122
- {
123
- WrapperRubyClass<Ext_Pointer> klass(RubyModule::fromPath("QML"), "Pointer");
124
- klass.defineMethod("managed?", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_Pointer::ext_isManaged));
125
- klass.defineMethod("managed=", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_Pointer::ext_setManaged));
126
- klass.defineMethod("prefer_managed", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_Pointer::ext_preferManaged));
127
- klass.defineMethod("null?", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_Pointer::ext_isNull));
128
- klass.defineMethod("to_s", RUBYQML_MEMBER_FUNCTION_INFO(&Ext_Pointer::ext_toString));
129
- klass.aliasMethod("inspect", "to_s");
130
- }
131
-
132
- } // namespace RubyQml
@@ -1,41 +0,0 @@
1
- #pragma once
2
- #include "rubyclass.h"
3
- #include <QPointer>
4
- #include <QJSValue>
5
-
6
- namespace RubyQml {
7
-
8
- class Ext_Pointer
9
- {
10
- public:
11
- Ext_Pointer(RubyValue self);
12
- ~Ext_Pointer();
13
-
14
- static RubyValue fromQObject(QObject *obj, bool owned);
15
-
16
- QObject *qObject() { return mObject; }
17
- QObject *fetchQObject();
18
- void setQObject(QObject *obj, bool managed);
19
- bool isManaged() const { return mIsManaged; }
20
- void setManaged(bool managed);
21
- void preferManaged(bool managed);
22
-
23
- RubyValue ext_isManaged() const;
24
- RubyValue ext_setManaged(RubyValue managed);
25
- RubyValue ext_preferManaged(RubyValue managed);
26
- RubyValue ext_isNull() const;
27
- RubyValue ext_toString() const;
28
-
29
- void gc_mark();
30
-
31
- static void defineClass();
32
-
33
- private:
34
- const RubyValue self;
35
-
36
- bool mIsManaged = false;
37
- QPointer<QObject> mObject;
38
- QJSValue mJSValue;
39
- };
40
-
41
- } // namespace RubyQml
@@ -1,40 +0,0 @@
1
- #include "ext_testutil.h"
2
- #include "rubyclass.h"
3
- #include "objectgc.h"
4
-
5
- namespace RubyQml {
6
- namespace Ext_TestUtil {
7
-
8
- namespace {
9
-
10
- RubyValue echoConversion(RubyValue self, RubyValue value)
11
- {
12
- Q_UNUSED(self);
13
- auto variant = RubyValue(value).to<QVariant>();
14
- return RubyValue::from(variant);
15
- }
16
-
17
- RubyValue gcDebugMessageEnabled(RubyValue self)
18
- {
19
- Q_UNUSED(self);
20
- return RubyValue::from(ObjectGC::instance()->debugMessageEnabled());
21
- }
22
-
23
- RubyValue setGCDebugMessageEnabled(RubyValue self, RubyValue enabled)
24
- {
25
- ObjectGC::instance()->setDebugMessageEnabled(enabled.to<bool>());
26
- return gcDebugMessageEnabled(self);
27
- }
28
-
29
- }
30
-
31
- void defineModule()
32
- {
33
- RubyModule testUtil(RubyModule::fromPath("QML"), "TestUtil");
34
- testUtil.defineModuleFunction("echo_conversion", RUBYQML_FUNCTION_INFO(&echoConversion));
35
- testUtil.defineModuleFunction("gc_debug_message_enabled?", RUBYQML_FUNCTION_INFO(&gcDebugMessageEnabled));
36
- testUtil.defineModuleFunction("gc_debug_message_enabled=", RUBYQML_FUNCTION_INFO(&setGCDebugMessageEnabled));
37
- }
38
-
39
- } // namespace TestUtil
40
- } // namespace RubyQml
@@ -1,9 +0,0 @@
1
- #pragma once
2
-
3
- namespace RubyQml {
4
- namespace Ext_TestUtil {
5
-
6
- void defineModule();
7
-
8
- } // namespace TestUtil
9
- } // namespace RubyQml
@@ -1,72 +0,0 @@
1
- #include "foreignclass.h"
2
- #include "foreignobject.h"
3
- #include <QDebug>
4
-
5
- namespace RubyQml {
6
-
7
- ForeignClass::ForeignClass()
8
- {
9
- }
10
-
11
- ForeignClass::~ForeignClass()
12
- {
13
- }
14
-
15
- QList<ForeignClass::Method> ForeignClass::signalMethods() const
16
- {
17
- QList<Method> sigs;
18
- std::copy_if(mMethods.begin(), mMethods.end(), std::back_inserter(sigs), [](const Method &m) {
19
- return m.type == Method::Type::Signal;
20
- });
21
- return sigs;
22
- }
23
-
24
- QList<ForeignClass::Method> ForeignClass::nonSignalMethods() const
25
- {
26
- QList<Method> sigs;
27
- std::copy_if(mMethods.begin(), mMethods.end(), std::back_inserter(sigs), [](const Method &m) {
28
- return m.type != Method::Type::Signal;
29
- });
30
- return sigs;
31
- }
32
-
33
- QVariant ForeignClass::callMethod(ForeignObject *obj, size_t id, const QVariantList &args)
34
- {
35
- Q_UNUSED(obj);
36
- Q_UNUSED(id);
37
- Q_UNUSED(args);
38
- return QVariant();
39
- }
40
-
41
- void ForeignClass::setProperty(ForeignObject *obj, size_t id, const QVariant &value)
42
- {
43
- Q_UNUSED(obj);
44
- Q_UNUSED(id);
45
- Q_UNUSED(value);
46
- }
47
-
48
- QVariant ForeignClass::getProperty(ForeignObject *obj, size_t id)
49
- {
50
- Q_UNUSED(obj);
51
- Q_UNUSED(id);
52
- return QVariant();
53
- }
54
-
55
- void ForeignClass::addMethod(const QByteArray &name, std::size_t id, const QList<QByteArray> &params, Method::Access access, Method::Type type)
56
- {
57
- Method method = { .name = name, .params = params, .access = access, .type = type, .id = id };
58
- mMethods << method;
59
- }
60
-
61
- void ForeignClass::addSignal(const QByteArray &name, std::size_t id, const QList<QByteArray> &params)
62
- {
63
- addMethod(name, id, params, Method::Access::Protected, Method::Type::Signal);
64
- }
65
-
66
- void ForeignClass::addProperty(const QByteArray &name, std::size_t getterId, std::size_t setterId, Property::Flags flags, bool hasNotifySignal,std::size_t notifySignalId)
67
- {
68
- Property property = { .name = name, .flags = flags, .setterId = setterId, .getterId = getterId, .hasNotifySignal = hasNotifySignal, .notifySignalId = notifySignalId};
69
- mProperties << property;
70
- }
71
-
72
- } // namespace RubyQml
@@ -1,88 +0,0 @@
1
- #pragma once
2
-
3
- #include <QVariant>
4
- #include <QMetaMethod>
5
- #include <QMetaProperty>
6
- #include <QFlag>
7
- #include "common.h"
8
-
9
- class QByteArray;
10
-
11
- namespace RubyQml {
12
-
13
- class ForeignObject;
14
-
15
- class ForeignClass
16
- {
17
- public:
18
- ForeignClass();
19
- virtual ~ForeignClass();
20
-
21
- struct Method
22
- {
23
- enum class Access
24
- {
25
- Private,
26
- Protected,
27
- Public
28
- };
29
-
30
- enum class Type
31
- {
32
- Method,
33
- Signal
34
- };
35
-
36
- QByteArray name;
37
- QList<QByteArray> params;
38
- Access access;
39
- Type type;
40
- std::size_t id;
41
- };
42
-
43
- struct Property
44
- {
45
- enum class Flag
46
- {
47
- Readable = 1,
48
- Writable = 1 << 1,
49
- Constant = 1 << 2,
50
- };
51
- Q_DECLARE_FLAGS(Flags, Flag)
52
-
53
- QByteArray name;
54
- Flags flags;
55
- std::size_t setterId;
56
- std::size_t getterId;
57
- bool hasNotifySignal;
58
- std::size_t notifySignalId;
59
- };
60
-
61
- QByteArray className() const { return mClassName; }
62
- QList<Method> methods() const { return mMethods; }
63
- QList<Method> signalMethods() const;
64
- QList<Method> nonSignalMethods() const;
65
- QList<Property> properties() const { return mProperties; }
66
-
67
- void setClassName(const QByteArray &name) { mClassName = name; }
68
- void addMethod(const QByteArray &name, std::size_t id, const QList<QByteArray> &params, Method::Access access = Method::Access::Public, Method::Type type = Method::Type::Method);
69
- void addSignal(const QByteArray &name, std::size_t id, const QList<QByteArray> &params);
70
- void addProperty(const QByteArray &name, std::size_t getterId, std::size_t setterId, Property::Flags flags, bool hasNotifySignal = false, std::size_t notifySignalId = 0);
71
-
72
- virtual QVariant callMethod(ForeignObject *obj, size_t id, const QVariantList &args);
73
- virtual void setProperty(ForeignObject *obj, size_t id, const QVariant &value);
74
- virtual QVariant getProperty(ForeignObject *obj, size_t id);
75
-
76
- protected:
77
-
78
-
79
- private:
80
-
81
- QByteArray mClassName;
82
- QList<Method> mMethods;
83
- QList<Property> mProperties;
84
- };
85
-
86
- Q_DECLARE_OPERATORS_FOR_FLAGS(ForeignClass::Property::Flags)
87
-
88
- } // namespace RubyQml