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.
- checksums.yaml +4 -4
- data/.gitmodules +3 -0
- data/.travis.yml +5 -9
- data/LICENSE.txt +1 -1
- data/README.md +84 -114
- data/changes.md +5 -0
- data/examples/fizzbuzz/fizzbuzz.rb +3 -4
- data/examples/todo_array/todo_array.rb +4 -4
- data/examples/todo_sequel/todo_sequel.rb +7 -7
- data/examples/twitter/twitter.rb +5 -3
- data/ext/qml/application.c +88 -0
- data/ext/qml/application.h +9 -0
- data/ext/qml/component.c +89 -0
- data/ext/qml/component.h +10 -0
- data/ext/qml/conversion.c +60 -0
- data/ext/qml/conversion.h +8 -0
- data/ext/qml/dispatcher.c +31 -0
- data/ext/qml/dispatcher.h +7 -0
- data/ext/qml/engine.c +135 -0
- data/ext/qml/engine.h +10 -0
- data/ext/qml/exporter.c +93 -0
- data/ext/qml/exporter.h +7 -0
- data/ext/qml/extconf.rb +38 -97
- data/ext/qml/interface.c +156 -0
- data/ext/qml/interface.h +11 -0
- data/ext/qml/js_array.c +47 -0
- data/ext/qml/js_array.h +7 -0
- data/ext/qml/js_function.c +109 -0
- data/ext/qml/js_function.h +7 -0
- data/ext/qml/js_object.c +284 -0
- data/ext/qml/js_object.h +19 -0
- data/ext/qml/js_wrapper.c +19 -0
- data/ext/qml/js_wrapper.h +7 -0
- data/ext/qml/lib/libqmlbind/.gitignore +38 -0
- data/ext/qml/lib/libqmlbind/.gitmodules +3 -0
- data/ext/qml/lib/libqmlbind/.travis.yml +14 -0
- data/ext/qml/lib/libqmlbind/LICENSE.txt +22 -0
- data/ext/qml/lib/libqmlbind/libqmlbind.pro +3 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind.h +14 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/application.h +18 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/component.h +21 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/engine.h +34 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/exporter.h +37 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/interface.h +16 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/iterator.h +19 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/metaobject.h +13 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/plugin.h +17 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/qmlbind_global.h +78 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/register.h +17 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/signal_emitter.h +15 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/string.h +15 -0
- data/ext/qml/lib/libqmlbind/qmlbind/include/qmlbind/value.h +100 -0
- data/ext/qml/lib/libqmlbind/qmlbind/qmlbind.pro +62 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_application.cpp +103 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_component.cpp +54 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_engine.cpp +65 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_exporter.cpp +52 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_interface.cpp +19 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_iterator.cpp +32 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_metaobject.cpp +19 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_plugin.cpp +27 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_register.cpp +17 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_signal_emitter.cpp +27 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_string.cpp +22 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/api_value.cpp +215 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/backref.cpp +54 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/backref.h +29 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/engine.cpp +32 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/engine.h +27 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/exporter.cpp +73 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/exporter.h +46 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/interface.cpp +75 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/interface.h +37 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/metaobject.cpp +101 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/metaobject.h +29 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/signalemitter.cpp +33 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/signalemitter.h +25 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/ticktimer.cpp +15 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/ticktimer.h +19 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/typeregisterer.cpp +112 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/typeregisterer.h +28 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/util.h +13 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/wrapper.cpp +23 -0
- data/ext/qml/lib/libqmlbind/qmlbind/src/wrapper.h +29 -0
- data/ext/qml/lib/libqmlbind/readme.md +14 -0
- data/ext/qml/lib/libqmlbind/test/api.c +1 -0
- data/ext/qml/lib/libqmlbind/test/application_test.cpp +16 -0
- data/ext/qml/lib/libqmlbind/test/component_test.cpp +57 -0
- data/ext/qml/lib/libqmlbind/test/engine_test.cpp +94 -0
- data/ext/qml/lib/libqmlbind/test/exporter_test.cpp +312 -0
- data/ext/qml/lib/libqmlbind/test/fixtures/emptyhandlers.cpp +36 -0
- data/ext/qml/lib/libqmlbind/test/fixtures/emptyhandlers.h +6 -0
- data/ext/qml/lib/libqmlbind/test/fixtures/test.qml +5 -0
- data/ext/qml/lib/libqmlbind/test/fixtures/testmodule/qmldir +2 -0
- data/ext/qml/lib/libqmlbind/test/fixtures/testmodule/test.qml +5 -0
- data/ext/qml/lib/libqmlbind/test/iterator_test.cpp +37 -0
- data/ext/qml/lib/libqmlbind/test/main.cpp +11 -0
- data/ext/qml/lib/libqmlbind/test/plugin_test.cpp +41 -0
- data/ext/qml/lib/libqmlbind/test/test.pro +26 -0
- data/ext/qml/lib/libqmlbind/test/test_helper.h +20 -0
- data/ext/qml/lib/libqmlbind/test/value_test.cpp +252 -0
- data/ext/qml/lib/libqmlbind/testplugin/testplugin.cpp +11 -0
- data/ext/qml/lib/libqmlbind/testplugin/testplugin.h +21 -0
- data/ext/qml/lib/libqmlbind/testplugin/testplugin.json +3 -0
- data/ext/qml/lib/libqmlbind/testplugin/testplugin.pro +21 -0
- data/ext/qml/meta_object.c +81 -0
- data/ext/qml/meta_object.h +8 -0
- data/ext/qml/plugin_loader.c +71 -0
- data/ext/qml/plugin_loader.h +7 -0
- data/ext/qml/qml.c +95 -0
- data/ext/qml/qml.h +10 -0
- data/ext/qml/rubyqml-plugin/listmodel.cpp +102 -0
- data/ext/qml/rubyqml-plugin/listmodel.h +37 -0
- data/ext/qml/rubyqml-plugin/rubyqml-plugin.pro +19 -0
- data/ext/qml/rubyqml-plugin/rubyqmlplugin.cpp +25 -0
- data/ext/qml/rubyqml-plugin/rubyqmlplugin.h +19 -0
- data/ext/qml/signal_emitter.c +71 -0
- data/ext/qml/signal_emitter.h +9 -0
- data/lib/qml.rb +11 -10
- data/lib/qml/access.rb +64 -86
- data/lib/qml/application.rb +20 -71
- data/lib/qml/component.rb +41 -33
- data/lib/qml/core_ext.rb +1 -0
- data/lib/qml/core_ext/to_qml.rb +70 -0
- data/lib/qml/data.rb +1 -0
- data/lib/qml/data/array_model.rb +99 -101
- data/lib/qml/data/list_model.rb +107 -131
- data/lib/qml/data/list_model_access.rb +44 -0
- data/lib/qml/data/query_model.rb +45 -47
- data/lib/qml/dispatcher.rb +5 -13
- data/lib/qml/engine.rb +9 -58
- data/lib/qml/errors.rb +0 -21
- data/lib/qml/interface.rb +21 -0
- data/lib/qml/js_array.rb +8 -0
- data/lib/qml/js_object.rb +69 -0
- data/lib/qml/js_util.rb +18 -0
- data/lib/qml/plugin_loader.rb +1 -13
- data/lib/qml/plugins.rb +3 -17
- data/lib/qml/proc_access.rb +28 -0
- data/lib/qml/qt.rb +21 -3
- data/lib/qml/reactive.rb +147 -8
- data/lib/qml/signal.rb +67 -0
- data/lib/qml/version.rb +1 -1
- data/qml.gemspec +8 -2
- data/spec/qml/access_spec.rb +33 -120
- data/spec/qml/application_spec.rb +11 -24
- data/spec/qml/component_spec.rb +4 -4
- data/spec/qml/data/array_model_spec.rb +2 -2
- data/spec/qml/data/list_model_spec.rb +2 -2
- data/spec/qml/data/query_model_spec.rb +4 -4
- data/spec/qml/engine_spec.rb +23 -21
- data/spec/qml/interface_spec.rb +20 -0
- data/spec/qml/js_array_spec.rb +29 -0
- data/spec/qml/js_function_spec.rb +32 -0
- data/spec/qml/js_object_spec.rb +113 -0
- data/spec/qml/plugin_loader_spec.rb +9 -11
- data/spec/qml/qt_spec.rb +9 -0
- data/spec/qml/reactive_spec.rb +37 -0
- data/spec/qml/signal_connect_spec.rb +27 -0
- data/spec/qml/signal_spec.rb +73 -0
- data/spec/qml/to_qml_spec.rb +76 -0
- data/spec/shared/qml/access_example.rb +21 -0
- data/spec/shared/qml/data/list_model.rb +12 -13
- data/spec/spec_helper.rb +2 -3
- metadata +141 -166
- data/examples/imageprovider/imageprovider.rb +0 -57
- data/examples/imageprovider/main.qml +0 -51
- data/ext/qml/accessclass.cpp +0 -65
- data/ext/qml/accessclass.h +0 -19
- data/ext/qml/accessobject.cpp +0 -30
- data/ext/qml/accessobject.h +0 -22
- data/ext/qml/common.h +0 -18
- data/ext/qml/conversionerror.h +0 -14
- data/ext/qml/ext_accesswrapperfactory.cpp +0 -75
- data/ext/qml/ext_accesswrapperfactory.h +0 -39
- data/ext/qml/ext_anywrapper.cpp +0 -34
- data/ext/qml/ext_anywrapper.h +0 -23
- data/ext/qml/ext_kernel.cpp +0 -81
- data/ext/qml/ext_kernel.h +0 -9
- data/ext/qml/ext_metaobject.cpp +0 -399
- data/ext/qml/ext_metaobject.h +0 -60
- data/ext/qml/ext_pluginloader.cpp +0 -53
- data/ext/qml/ext_pluginloader.h +0 -30
- data/ext/qml/ext_pointer.cpp +0 -132
- data/ext/qml/ext_pointer.h +0 -41
- data/ext/qml/ext_testutil.cpp +0 -40
- data/ext/qml/ext_testutil.h +0 -9
- data/ext/qml/foreignclass.cpp +0 -72
- data/ext/qml/foreignclass.h +0 -88
- data/ext/qml/foreignmetaobject.cpp +0 -345
- data/ext/qml/foreignmetaobject.h +0 -46
- data/ext/qml/foreignobject.cpp +0 -22
- data/ext/qml/foreignobject.h +0 -21
- data/ext/qml/functioninfo.h +0 -16
- data/ext/qml/init.cpp +0 -67
- data/ext/qml/kernel.cpp +0 -39
- data/ext/qml/kernel.h +0 -32
- data/ext/qml/listmodel.cpp +0 -137
- data/ext/qml/listmodel.h +0 -45
- data/ext/qml/markable.h +0 -12
- data/ext/qml/objectdata.cpp +0 -26
- data/ext/qml/objectdata.h +0 -20
- data/ext/qml/objectgc.cpp +0 -69
- data/ext/qml/objectgc.h +0 -28
- data/ext/qml/plugins/core/applicationextension.cpp +0 -29
- data/ext/qml/plugins/core/applicationextension.h +0 -25
- data/ext/qml/plugins/core/componentextension.cpp +0 -41
- data/ext/qml/plugins/core/componentextension.h +0 -28
- data/ext/qml/plugins/core/contextextension.cpp +0 -39
- data/ext/qml/plugins/core/contextextension.h +0 -29
- data/ext/qml/plugins/core/core.pro +0 -29
- data/ext/qml/plugins/core/coreplugin.cpp +0 -87
- data/ext/qml/plugins/core/coreplugin.h +0 -49
- data/ext/qml/plugins/core/engineextension.cpp +0 -43
- data/ext/qml/plugins/core/engineextension.h +0 -31
- data/ext/qml/plugins/core/imageprovider.cpp +0 -38
- data/ext/qml/plugins/core/imageprovider.h +0 -18
- data/ext/qml/plugins/core/imagerequestpromise.cpp +0 -19
- data/ext/qml/plugins/core/imagerequestpromise.h +0 -21
- data/ext/qml/plugins/core/qmlexception.cpp +0 -11
- data/ext/qml/plugins/core/qmlexception.h +0 -17
- data/ext/qml/plugins/testutil/imageprovidertest.cpp +0 -40
- data/ext/qml/plugins/testutil/imageprovidertest.h +0 -17
- data/ext/qml/plugins/testutil/objectlifechecker.cpp +0 -17
- data/ext/qml/plugins/testutil/objectlifechecker.h +0 -24
- data/ext/qml/plugins/testutil/ownershiptest.cpp +0 -26
- data/ext/qml/plugins/testutil/ownershiptest.h +0 -30
- data/ext/qml/plugins/testutil/testobject.cpp +0 -6
- data/ext/qml/plugins/testutil/testobject.h +0 -108
- data/ext/qml/plugins/testutil/testobjectsubclass.cpp +0 -10
- data/ext/qml/plugins/testutil/testobjectsubclass.h +0 -19
- data/ext/qml/plugins/testutil/testutil.pro +0 -22
- data/ext/qml/plugins/testutil/testutilplugin.cpp +0 -55
- data/ext/qml/plugins/testutil/testutilplugin.h +0 -36
- data/ext/qml/qmltyperegisterer.cpp +0 -74
- data/ext/qml/qmltyperegisterer.h +0 -30
- data/ext/qml/rubyclass.cpp +0 -82
- data/ext/qml/rubyclass.h +0 -230
- data/ext/qml/rubyvalue.cpp +0 -656
- data/ext/qml/rubyvalue.h +0 -224
- data/ext/qml/signalforwarder.cpp +0 -64
- data/ext/qml/signalforwarder.h +0 -29
- data/ext/qml/util.cpp +0 -112
- data/ext/qml/util.h +0 -82
- data/ext/qml/valuereference.cpp +0 -50
- data/ext/qml/valuereference.h +0 -22
- data/ext/qml/weakvaluereference.cpp +0 -51
- data/ext/qml/weakvaluereference.h +0 -21
- data/lib/qml/context.rb +0 -71
- data/lib/qml/data/error.rb +0 -5
- data/lib/qml/dispatchable.rb +0 -34
- data/lib/qml/error_converter.rb +0 -16
- data/lib/qml/geometry.rb +0 -3
- data/lib/qml/geometry/point.rb +0 -5
- data/lib/qml/geometry/rectangle.rb +0 -5
- data/lib/qml/geometry/size.rb +0 -5
- data/lib/qml/image_provider.rb +0 -87
- data/lib/qml/init.rb +0 -29
- data/lib/qml/meta_object.rb +0 -20
- data/lib/qml/models.rb +0 -1
- data/lib/qml/qt_classes.rb +0 -9
- data/lib/qml/qt_object_base.rb +0 -233
- data/lib/qml/reactive/bindable.rb +0 -79
- data/lib/qml/reactive/chained_signal.rb +0 -25
- data/lib/qml/reactive/error.rb +0 -5
- data/lib/qml/reactive/object.rb +0 -293
- data/lib/qml/reactive/property.rb +0 -19
- data/lib/qml/reactive/signal.rb +0 -115
- data/lib/qml/reactive/signal_spy.rb +0 -27
- data/lib/qml/reactive/signals/map_signal.rb +0 -21
- data/lib/qml/reactive/signals/merge_signal.rb +0 -21
- data/lib/qml/reactive/signals/select_signal.rb +0 -21
- data/lib/qml/reactive/simple_property.rb +0 -17
- data/lib/qml/reactive/unbound_property.rb +0 -42
- data/lib/qml/reactive/unbound_signal.rb +0 -51
- data/lib/qml/test_util.rb +0 -1
- data/lib/qml/test_util/object_life_checker.rb +0 -17
- data/lib/qml/wrappable.rb +0 -9
- data/spec/qml/context_spec.rb +0 -43
- data/spec/qml/conversion_spec.rb +0 -60
- data/spec/qml/dispatchable_spec.rb +0 -26
- data/spec/qml/dispatcher_spec.rb +0 -71
- data/spec/qml/geometry/point_spec.rb +0 -4
- data/spec/qml/geometry/rectangle_spec.rb +0 -4
- data/spec/qml/geometry/size_spec.rb +0 -4
- data/spec/qml/image_provider_spec.rb +0 -33
- data/spec/qml/qt_object_base_spec.rb +0 -119
- data/spec/qml/reactive/object_spec.rb +0 -249
- data/spec/qml/reactive/property_spec.rb +0 -70
- data/spec/qml/reactive/signal_spec.rb +0 -191
- data/spec/qml/reactive/signal_spy_spec.rb +0 -26
- data/spec/qml/reactive/unbound_property_spec.rb +0 -40
- data/spec/qml/reactive/unbound_signal_spec.rb +0 -70
- data/spec/qml/test_object_spec.rb +0 -186
- data/spec/qml/wrappable_spec.rb +0 -10
- data/spec/shared/qml/reactive/object.rb +0 -39
data/ext/qml/ext_metaobject.h
DELETED
|
@@ -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
|
data/ext/qml/ext_pluginloader.h
DELETED
|
@@ -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
|
-
|
data/ext/qml/ext_pointer.cpp
DELETED
|
@@ -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
|
data/ext/qml/ext_pointer.h
DELETED
|
@@ -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
|
data/ext/qml/ext_testutil.cpp
DELETED
|
@@ -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
|
data/ext/qml/ext_testutil.h
DELETED
data/ext/qml/foreignclass.cpp
DELETED
|
@@ -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> ¶ms, 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> ¶ms)
|
|
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
|
data/ext/qml/foreignclass.h
DELETED
|
@@ -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> ¶ms, 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> ¶ms);
|
|
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
|