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,38 +0,0 @@
1
- #include "imageprovider.h"
2
- #include "imagerequestpromise.h"
3
- #include <QDebug>
4
- #include <QApplication>
5
-
6
- namespace RubyQml {
7
-
8
- ImageProvider::ImageProvider(QObject *rubyCallback) :
9
- QQuickImageProvider(QQuickImageProvider::Image, QQuickImageProvider::ForceAsynchronousImageLoading),
10
- mRubyCallback(rubyCallback)
11
- {
12
- rubyCallback->setParent(this);
13
- }
14
-
15
- QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
16
- {
17
- std::promise<QImage> promise;
18
- auto future = promise.get_future();
19
- auto promiseObj = new ImageRequestPromise(std::move(promise));
20
- promiseObj->moveToThread(qApp->thread());
21
-
22
- mRubyCallback->metaObject()->invokeMethod(
23
- mRubyCallback,
24
- "request",
25
- Qt::QueuedConnection,
26
- Q_ARG(QVariant, id),
27
- Q_ARG(QVariant, QVariant::fromValue(promiseObj)));
28
-
29
- auto image = future.get();
30
- if (requestedSize.isValid() && image.size() != requestedSize) {
31
- image = image.scaled(requestedSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
32
- }
33
-
34
- *size = image.size();
35
- return image;
36
- }
37
-
38
- } // namespace RubyQml
@@ -1,18 +0,0 @@
1
- #pragma once
2
- #include <QObject>
3
- #include <QQuickImageProvider>
4
-
5
- namespace RubyQml {
6
-
7
- class ImageProvider : public QObject, public QQuickImageProvider
8
- {
9
- Q_OBJECT
10
- public:
11
- explicit ImageProvider(QObject *rubyImageProvider);
12
- QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override;
13
-
14
- private:
15
- QObject *mRubyCallback = nullptr;
16
- };
17
-
18
- } // namespace RubyQml
@@ -1,19 +0,0 @@
1
- #include "imagerequestpromise.h"
2
- #include <QImage>
3
- #include <QDebug>
4
-
5
- namespace RubyQml {
6
-
7
- ImageRequestPromise::ImageRequestPromise(std::promise<QImage> &&promise, QObject *parent) :
8
- QObject(parent),
9
- mPromise(std::move(promise))
10
- {
11
- }
12
-
13
- void ImageRequestPromise::setData(const QByteArray &data)
14
- {
15
- auto image = QImage::fromData(data);
16
- mPromise.set_value(image);
17
- }
18
-
19
- } // namespace RubyQml
@@ -1,21 +0,0 @@
1
- #pragma once
2
- #include <QObject>
3
- #include <QImage>
4
- #include <future>
5
-
6
- namespace RubyQml {
7
-
8
- class ImageRequestPromise : public QObject
9
- {
10
- Q_OBJECT
11
- public:
12
- explicit ImageRequestPromise(std::promise<QImage> &&promise, QObject *parent = 0);
13
-
14
- public slots:
15
- void setData(const QByteArray &data);
16
-
17
- private:
18
- std::promise<QImage> mPromise;
19
- };
20
-
21
- } // namespace RubyQml
@@ -1,11 +0,0 @@
1
- #include "qmlexception.h"
2
- #include <QString>
3
-
4
- namespace RubyQml {
5
-
6
- QmlException::QmlException(const QString &error) :
7
- std::runtime_error(error.toStdString())
8
- {
9
- }
10
-
11
- } // namespace RubyQml
@@ -1,17 +0,0 @@
1
- #ifndef RUBYQML_QMLERROR_H
2
- #define RUBYQML_QMLERROR_H
3
-
4
- #include <stdexcept>
5
- class QString;
6
-
7
- namespace RubyQml {
8
-
9
- class QmlException : public std::runtime_error
10
- {
11
- public:
12
- QmlException(const QString &error);
13
- };
14
-
15
- } // namespace RubyQml
16
-
17
- #endif // RUBYQML_QMLERROR_H
@@ -1,40 +0,0 @@
1
- #include "imageprovidertest.h"
2
- #include <QQuickImageProvider>
3
- #include <QCoreApplication>
4
- #include <future>
5
- #include <atomic>
6
-
7
- namespace RubyQml {
8
-
9
- ImageProviderTest::ImageProviderTest(QObject *parent) :
10
- QObject(parent)
11
- {
12
- }
13
-
14
- bool ImageProviderTest::requestAndCompare(QObject *imageProvider, const QString &id, const QByteArray &imageData)
15
- {
16
- auto provider = dynamic_cast<QQuickImageProvider *>(imageProvider);
17
- if (!provider) {
18
- throw std::runtime_error("invalid iamge provider");
19
- }
20
- std::atomic_bool finished(false);
21
- auto result = std::async(std::launch::async, [=, &finished] {
22
- QSize size;
23
- auto result = provider->requestImage(id, &size, QSize());
24
- finished = true;
25
- return result;
26
- });
27
- auto start = std::chrono::steady_clock::now();
28
- while (!finished) {
29
- QCoreApplication::processEvents();
30
- auto current = std::chrono::steady_clock::now();
31
- if (current - start > std::chrono::seconds(1)) {
32
- throw std::runtime_error("image request timeout");
33
- }
34
- }
35
- auto actual = result.get();
36
- auto expected = QImage::fromData(imageData);
37
- return actual == expected;
38
- }
39
-
40
- }
@@ -1,17 +0,0 @@
1
- #pragma once
2
-
3
- #include <QObject>
4
-
5
- namespace RubyQml {
6
-
7
- class ImageProviderTest : public QObject
8
- {
9
- Q_OBJECT
10
- public:
11
- explicit ImageProviderTest(QObject *parent = 0);
12
-
13
- public slots:
14
- bool requestAndCompare(QObject *imageProvider, const QString &id, const QByteArray &imageData);
15
- };
16
-
17
- }
@@ -1,17 +0,0 @@
1
- #include "objectlifechecker.h"
2
- #include <QQmlEngine>
3
-
4
- namespace RubyQml {
5
-
6
- ObjectLifeChecker::ObjectLifeChecker(QObject *target) :
7
- mTarget(target)
8
- {
9
- }
10
-
11
- bool ObjectLifeChecker::isOwnedByQml() const
12
- {
13
- if (!mTarget) return false;
14
- return QQmlEngine::objectOwnership(mTarget) == QQmlEngine::JavaScriptOwnership;
15
- }
16
-
17
- } // namespace RubyQml
@@ -1,24 +0,0 @@
1
- #pragma once
2
- #include <QObject>
3
- #include <QPointer>
4
-
5
- namespace RubyQml {
6
-
7
- class ObjectLifeChecker : public QObject
8
- {
9
- Q_OBJECT
10
- Q_PROPERTY(QObject* target READ target)
11
- public:
12
- explicit ObjectLifeChecker(QObject *target);
13
- QObject *target() { return mTarget; }
14
- signals:
15
-
16
- public slots:
17
- bool isAlive() const { return mTarget; }
18
- bool isOwnedByQml() const;
19
-
20
- private:
21
- QPointer<QObject> mTarget;
22
- };
23
-
24
- } // namespace RubyQml
@@ -1,26 +0,0 @@
1
- #include "ownershiptest.h"
2
-
3
- namespace RubyQml {
4
-
5
- OwnershipTest::OwnershipTest(QObject *parent) :
6
- QObject(parent)
7
- {
8
- mSubObject = new QObject(this);
9
- connect(mSubObject, &QObject::destroyed, this, &OwnershipTest::subObjectDeleted);
10
- mPropertyObject = new QObject();
11
- connect(mPropertyObject, &QObject::destroyed, this, &OwnershipTest::subObjectDeleted);
12
- }
13
-
14
- OwnershipTest::~OwnershipTest()
15
- {
16
- delete mPropertyObject;
17
- }
18
-
19
- QObject *OwnershipTest::createObject()
20
- {
21
- auto obj = new QObject();
22
- connect(obj, &QObject::destroyed, this, &OwnershipTest::createdObjectDeleted);
23
- return obj;
24
- }
25
-
26
- } // namespace RubyQml
@@ -1,30 +0,0 @@
1
- #pragma once
2
- #include <QObject>
3
-
4
- namespace RubyQml {
5
-
6
- class OwnershipTest : public QObject
7
- {
8
- Q_OBJECT
9
- Q_PROPERTY(QObject* propertyObject READ propertyObject)
10
- public:
11
- explicit OwnershipTest(QObject *parent = 0);
12
- ~OwnershipTest();
13
-
14
- QObject *propertyObject() { return mPropertyObject; }
15
-
16
- signals:
17
- void subObjectDeleted();
18
- void propertyObjectDeleted();
19
- void createdObjectDeleted();
20
-
21
- public slots:
22
- QObject *subObject() { return mSubObject; }
23
- QObject *createObject();
24
-
25
- private:
26
- QObject *mSubObject;
27
- QObject *mPropertyObject;
28
- };
29
-
30
- } // namespace RubyQml
@@ -1,6 +0,0 @@
1
- #include "testobject.h"
2
-
3
- namespace RubyQml {
4
-
5
- } // namespace RubyQml
6
-
@@ -1,108 +0,0 @@
1
- #pragma once
2
-
3
- #include <QObject>
4
- #include <QVariant>
5
- #include <QDebug>
6
- #include <QtPlugin>
7
- #include <stdexcept>
8
-
9
- namespace RubyQml {
10
-
11
- class TestObject : public QObject
12
- {
13
- Q_OBJECT
14
- Q_PROPERTY(QString name MEMBER mName NOTIFY nameChanged)
15
- Q_PROPERTY(double someValue MEMBER mSomeValue NOTIFY someValueChanged)
16
- Q_PROPERTY(RubyQml::TestObject::Enums enumValue MEMBER mEnumValue NOTIFY enumValueChanged)
17
-
18
- public:
19
- explicit TestObject(QObject *parent = 0) : QObject(parent)
20
- {
21
- }
22
-
23
- enum Enums
24
- {
25
- Foo = 0,
26
- Bar = 1,
27
- FooBar = 2,
28
- };
29
-
30
- public slots:
31
-
32
- int normalMethod(int x, const QString &y)
33
- {
34
- return x + y.toInt();
35
- }
36
-
37
- QVariant variantMethod(const QVariant &x, const QVariant &y)
38
- {
39
- int sum = x.toInt();
40
- auto list = y.toList();
41
- for (const auto &variant : list) {
42
- sum += variant.toInt();
43
- }
44
- return sum;
45
- }
46
-
47
- QString overloadedMethod(int x)
48
- {
49
- Q_UNUSED(x);
50
- return "first";
51
- }
52
-
53
- QString overloadedMethod(const QString &x)
54
- {
55
- Q_UNUSED(x);
56
- return "last";
57
- }
58
-
59
- QString overloadedMethod(const QString &x, int y)
60
- {
61
- Q_UNUSED(x)
62
- Q_UNUSED(y)
63
- return "2 params";
64
- }
65
-
66
- void emitSomeSignal(const QString &arg)
67
- {
68
- emit someSignal(arg);
69
- }
70
-
71
- QString getName() const
72
- {
73
- return mName;
74
- }
75
-
76
- void throwingMethod() const
77
- {
78
- throw std::runtime_error("test error");
79
- }
80
-
81
- const QMetaObject *metaObjectMethod() const
82
- {
83
- return &TestObject::staticMetaObject;
84
- }
85
-
86
- QObject *selfReturningMethod()
87
- {
88
- return this;
89
- }
90
-
91
- signals:
92
-
93
- void someSignal(const QString &arg);
94
- void nameChanged(const QString &name);
95
- void someValueChanged(double value);
96
- void enumValueChanged(RubyQml::TestObject::Enums value);
97
-
98
- private:
99
-
100
- Q_ENUMS(Enums)
101
- QString mName;
102
- double mSomeValue = 0;
103
- Enums mEnumValue = Foo;
104
- };
105
-
106
- } // RubyQml
107
-
108
- Q_DECLARE_METATYPE(RubyQml::TestObject::Enums)
@@ -1,10 +0,0 @@
1
- #include "testobjectsubclass.h"
2
-
3
- namespace RubyQml {
4
-
5
- TestObjectSubclass::TestObjectSubclass(QObject *parent) :
6
- TestObject(parent)
7
- {
8
- }
9
-
10
- } // namespace RubyQml
@@ -1,19 +0,0 @@
1
- #pragma once
2
-
3
- #include "testobject.h"
4
-
5
- namespace RubyQml {
6
-
7
- class TestObjectSubclass : public TestObject
8
- {
9
- Q_OBJECT
10
- public:
11
- explicit TestObjectSubclass(QObject *parent = 0);
12
-
13
- signals:
14
-
15
- public slots:
16
-
17
- };
18
-
19
- } // namespace RubyQml
@@ -1,22 +0,0 @@
1
- TEMPLATE = lib
2
- CONFIG += plugin c++11
3
- QT += qml quick
4
-
5
- TARGET = rubyqml-testutil
6
- INCLUDEPATH += .
7
-
8
- # Input
9
- SOURCES += testobject.cpp \
10
- testobjectsubclass.cpp \
11
- ownershiptest.cpp \
12
- testutilplugin.cpp \
13
- objectlifechecker.cpp \
14
- imageprovidertest.cpp
15
-
16
- HEADERS += \
17
- testobject.h \
18
- testobjectsubclass.h \
19
- ownershiptest.h \
20
- testutilplugin.h \
21
- objectlifechecker.h \
22
- imageprovidertest.h