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,19 +0,0 @@
1
- require 'qml/reactive/error'
2
- require 'qml/reactive/simple_property'
3
- require 'qml/reactive/bindable'
4
-
5
- module QML
6
- module Reactive
7
- class Property < SimpleProperty
8
- include Bindable
9
-
10
- # @param initial_value the initial value.
11
- # @yield the initial property binding (optional).
12
- def initialize(initial_value = nil, &block)
13
- super()
14
- self.value = initial_value if initial_value
15
- bind(&block) if block
16
- end
17
- end
18
- end
19
- end
@@ -1,115 +0,0 @@
1
- module QML
2
- module Reactive
3
-
4
- class Signal
5
-
6
- class Connection
7
- def initialize(signal, listener)
8
- @signal = signal
9
- @listener = listener
10
- end
11
-
12
- # Disconnects the connection.
13
- def disconnect
14
- @signal.disconnect(@listener)
15
- end
16
- end
17
-
18
- attr_reader :arity
19
-
20
- # Initializes the Signal.
21
- # @param [Array<#to_sym>, nil] params the parameter names (the signal will be variadic if nil).
22
- def initialize(params)
23
- @listeners = []
24
- if params
25
- @params = params.map(&:to_sym)
26
- @arity = params.size
27
- else
28
- @params = nil
29
- @arity = -1
30
- end
31
- end
32
-
33
- # Calls every connected procedure with given arguments.
34
- # Raises an ArgumentError when the arity is wrong.
35
- # @param args the arguments.
36
- def emit(*args)
37
- if @arity >= 0 && args.size != @arity
38
- fail ::ArgumentError ,"wrong number of arguments for signal (#{args.size} for #{@arity})"
39
- end
40
- @listeners.each do |listener|
41
- listener.call(*args)
42
- end
43
- end
44
-
45
- alias_method :call, :emit
46
- alias_method :[], :emit
47
-
48
- # Returns the format of the parameters in the same format as Proc#parameters.
49
- # @return [Array<Array<Symbol>>]
50
- def parameters
51
- @params ? @params.map { |arg| [:req, arg] } : [[:rest, :args]]
52
- end
53
-
54
- # Converts the signal into a Proc.
55
- # @return [Proc]
56
- def to_proc
57
- method(:emit).to_proc
58
- end
59
-
60
- # Returns the number of connections.
61
- # @return [Integer]
62
- def connection_count
63
- @listeners.size
64
- end
65
-
66
- # Connects a procedure.
67
- # @yield called when #emit is called.
68
- # @return [QML::Reactive::Signal::Connection]
69
- def connect(&listener)
70
- @listeners << listener
71
- connected(listener)
72
- Connection.new(self, listener)
73
- end
74
-
75
- alias_method :each, :connect
76
-
77
- # Disconnects a procedure.
78
- # @param listener
79
- # @return [self]
80
- def disconnect(listener)
81
- @listeners.delete(listener)
82
- disconnected(listener)
83
- self
84
- end
85
-
86
- # Creates a transformed version of the signal.
87
- # @return [QML::Reactive::Signal]
88
- def map(&block)
89
- Signals::MapSignal.new(self, block)
90
- end
91
-
92
- alias_method :collect, :map
93
-
94
- # Creates a filtered version of the signal.
95
- # @return [QML::Reactive::Signal]
96
- def select(&block)
97
- Signals::SelectSignal.new(self, block)
98
- end
99
-
100
- # Creates a merged signal.
101
- # @return [QML::Reactive::Signal]
102
- def merge(*others)
103
- Signals::MergeSignal.new([self] + others)
104
- end
105
-
106
- private
107
-
108
- def connected(listener)
109
- end
110
-
111
- def disconnected(listener)
112
- end
113
- end
114
- end
115
- end
@@ -1,27 +0,0 @@
1
- module QML
2
- module Reactive
3
-
4
- class Signal
5
- def spy
6
- SignalSpy.new(self)
7
- end
8
- end
9
-
10
- class SignalSpy
11
-
12
- attr_reader :args
13
-
14
- def initialize(signal)
15
- @args = []
16
- signal.connect(&method(:on_emitted))
17
- end
18
-
19
- private
20
-
21
- def on_emitted(*args)
22
- @args << args
23
- end
24
- end
25
-
26
- end
27
- end
@@ -1,21 +0,0 @@
1
- require 'qml/reactive/chained_signal'
2
-
3
- module QML
4
- module Reactive
5
- module Signals
6
- class MapSignal < ChainedSignal
7
- def initialize(source, func)
8
- super([:mapped])
9
- @source = source
10
- @func = func
11
- end
12
-
13
- def connect_to_sources
14
- @source.connect do |*args|
15
- emit(@func[*args])
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- require 'qml/reactive/chained_signal'
2
-
3
- module QML
4
- module Reactive
5
- module Signals
6
- class MergeSignal < ChainedSignal
7
- def initialize(sources)
8
- param_count = sources.map(&:arity).max
9
- super(param_count.times.map { |i| :"arg#{i}" })
10
- @sources = sources
11
- end
12
-
13
- def connect_to_sources
14
- @sources.each do |source|
15
- source.connect(&method(:emit))
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- require 'qml/reactive/chained_signal'
2
-
3
- module QML
4
- module Reactive
5
- module Signals
6
- class SelectSignal < ChainedSignal
7
- def initialize(source, pred)
8
- super(source.parameters.map(&:last))
9
- @source = source
10
- @pred = pred
11
- end
12
-
13
- def connect_to_sources
14
- @source.connect do |*args|
15
- emit(*args) if @pred.call(*args)
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- require 'qml/reactive/signal'
2
-
3
- module QML
4
- module Reactive
5
- class SimpleProperty
6
- attr_accessor :value
7
-
8
- # @!attribute [r] changed
9
- # @return [QML::Reactive::Signal] The notification signal that is emitted when the value is changed
10
- attr_reader :changed
11
-
12
- def initialize
13
- @changed = Signal.new([:new_value])
14
- end
15
- end
16
- end
17
- end
@@ -1,42 +0,0 @@
1
- require 'qml/reactive/property'
2
- require 'qml/reactive/unbound_signal'
3
-
4
- module QML
5
- module Reactive
6
- class UnboundProperty
7
- attr_reader :name, :initial_value, :initial_binding, :owner, :notifier_signal, :original
8
-
9
- def initialize(name, initial_value, initial_binding, owner, factory = nil)
10
- @name = name
11
- @initial_value = initial_value
12
- @initial_binding = initial_binding
13
- @owner = owner
14
- @notifier_signal = UnboundSignal.new(:"#{name}_changed", [:new_value], false, owner)
15
- @factory = factory
16
- @original = name
17
- end
18
-
19
- def alias(name)
20
- notifier_signal_orig = @notifier_signal
21
- dup.tap do |property|
22
- property.instance_eval do
23
- @name = name
24
- @notifier_signal = notifier_signal_orig.alias(:"#{name}_changed")
25
- end
26
- end
27
- end
28
-
29
- def alias?
30
- @original != @name
31
- end
32
-
33
- def bind(obj)
34
- return obj.instance_exec(&@factory) if @factory
35
- Property.new.tap do |p|
36
- p.value = @initial_value if @initial_value
37
- p.bind { obj.instance_eval &@initial_binding } if @initial_binding
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,51 +0,0 @@
1
- require 'qml/reactive/signal'
2
-
3
- module QML
4
- module Reactive
5
- class UnboundSignal
6
- attr_reader :name, :owner, :original
7
-
8
- def initialize(name, params, variadic, owner, factory = nil)
9
- @name = name
10
- @params = params
11
- @variadic = variadic
12
- @owner = owner
13
- @factory = factory
14
- @original = name
15
- end
16
-
17
- def alias(name)
18
- dup.tap do |signal|
19
- signal.instance_eval do
20
- @name = name
21
- end
22
- end
23
- end
24
-
25
- def variadic?
26
- @variadic
27
- end
28
-
29
- def alias?
30
- @original != @name
31
- end
32
-
33
- def arity
34
- @params ? @params.size : -1
35
- end
36
-
37
- def parameters
38
- @params ? @params.map { |arg| [:req, arg] } : [[:rest, :args]]
39
- end
40
-
41
- def bind(obj)
42
- return obj.instance_exec(&@factory) if @factory
43
- if @variadic
44
- Signal.new(nil)
45
- else
46
- Signal.new(@params)
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1 +0,0 @@
1
- require 'qml/test_util/object_life_checker'
@@ -1,17 +0,0 @@
1
- require 'qml/plugins'
2
-
3
- module QML
4
- module TestUtil
5
-
6
- ObjectLifeChecker = Plugins.test_util.meta_objects['RubyQml::ObjectLifeChecker'].build_class
7
-
8
- class ObjectLifeChecker
9
-
10
- def self.new(obj)
11
- Plugins.test_util.create_object_life_checker(obj)
12
- end
13
- alias_method :alive?, :is_alive
14
- alias_method :owned_by_qml?, :is_owned_by_qml
15
- end
16
- end
17
- end
@@ -1,9 +0,0 @@
1
- module QML
2
- module Wrappable
3
- # @abstract
4
- # @return [QtObjectBase] The created wrapper Qt Object
5
- def create_wrapper
6
- fail ::NotImplementedError
7
- end
8
- end
9
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe QML::Context do
4
-
5
- let(:context) { QML::Context.new }
6
- let(:component) do
7
- QML::Component.new context: context, data: <<-EOS
8
- import QtQuick 2.0
9
- QtObject {
10
- }
11
- EOS
12
- end
13
- let(:object) { component.create }
14
-
15
- describe '#[]=' do
16
- it 'makes a value available to QML context' do
17
- context[:foo] = 'foo'
18
- expect(object.qml_eval('foo')).to eq 'foo'
19
- end
20
-
21
- it 'takes ownership of Qt object' do
22
- life_checker = lambda do
23
- obj = QML::Plugins.test_util.create_test_object
24
- context[:obj] = obj
25
- QML::TestUtil::ObjectLifeChecker.new(obj)
26
- end.call
27
-
28
- QML.application.collect_garbage
29
- expect(life_checker.alive?).to eq true
30
-
31
- context[:obj] = nil
32
- QML.application.collect_garbage
33
- expect(life_checker.alive?).to eq false
34
- end
35
- end
36
-
37
- describe '#[]' do
38
- it 'returns the value previously set by []=' do
39
- context[:foo] = 'foo'
40
- expect(context[:foo]).to eq 'foo'
41
- end
42
- end
43
- end
@@ -1,60 +0,0 @@
1
- # coding: utf-8
2
- require 'spec_helper'
3
-
4
- def convert(value)
5
- QML::TestUtil.echo_conversion(value)
6
- end
7
-
8
- describe 'Conversion between C++ and Ruby' do
9
-
10
- class Foo
11
- include QML::Access
12
- end
13
-
14
- samples = {
15
- 'Integer' => 1234,
16
- 'true' => true,
17
- 'false' => false,
18
- 'nil' => nil,
19
- 'Float' => 3.1416,
20
- 'String' => 'hoge',
21
- 'non-ascii String' => 'ほげ',
22
- 'Array' => [1, "foobar", true],
23
- 'Hash' => {'one' => 1, 'two' => 2, '三' => 3},
24
- 'Date' => Date.today,
25
- 'Access derived' => Foo.new,
26
- 'QML Point' => QML::Geometry::Point.new(1,2),
27
- 'QML Size' => QML::Geometry::Size.new(1,2),
28
- 'QML Rectangle' => QML::Geometry::Rectangle.new(1,2,3,4)
29
- }
30
-
31
- samples.each do |k, v|
32
- it "can convert #{k}" do
33
- actual = convert(v)
34
- expect(actual).to eq v
35
- end
36
- end
37
-
38
- it 'can convert Symbol as String' do
39
- expected = :hogehoge
40
- actual = convert(expected)
41
- expect(actual).to eq expected.to_s
42
- end
43
-
44
- [4/24.to_r, 8/24.to_r].each do |offset|
45
- it "can convert DateTime with offset #{offset}" do
46
- time = DateTime.now.new_offset(offset)
47
- result = convert(time)
48
- # QDateTime has msec precision
49
- expect((result.to_time.to_r * 1000).to_i).to eq (time.to_time.to_r * 1000).to_i
50
- expect(result.offset).to eq(time.offset)
51
- end
52
- end
53
-
54
- it 'can convert meta object' do
55
- metaobj = QML::MetaObject.new
56
- actual = convert(metaobj)
57
- expect(actual).to eq metaobj
58
- end
59
-
60
- end