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/init.cpp
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#include "ext_metaobject.h"
|
|
2
|
-
#include "ext_pointer.h"
|
|
3
|
-
#include "ext_pluginloader.h"
|
|
4
|
-
#include "ext_anywrapper.h"
|
|
5
|
-
#include "ext_accesswrapperfactory.h"
|
|
6
|
-
#include "ext_testutil.h"
|
|
7
|
-
#include "ext_kernel.h"
|
|
8
|
-
#include "kernel.h"
|
|
9
|
-
#include "signalforwarder.h"
|
|
10
|
-
#include "valuereference.h"
|
|
11
|
-
#include "objectgc.h"
|
|
12
|
-
#include "listmodel.h"
|
|
13
|
-
#include <QtCore/QSet>
|
|
14
|
-
|
|
15
|
-
using namespace RubyQml;
|
|
16
|
-
|
|
17
|
-
namespace {
|
|
18
|
-
|
|
19
|
-
void defineMetaTypes()
|
|
20
|
-
{
|
|
21
|
-
qRegisterMetaType<const QMetaObject *>();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
void defineClasses()
|
|
25
|
-
{
|
|
26
|
-
Ext_MetaObject::defineClass();
|
|
27
|
-
Ext_Pointer::defineClass();
|
|
28
|
-
Ext_PluginLoader::defineClass();
|
|
29
|
-
Ext_AnyWrapper::defineClass();
|
|
30
|
-
Ext_AccessWrapperFactory::defineClass();
|
|
31
|
-
Ext_TestUtil::defineModule();
|
|
32
|
-
Ext_Kernel::defineModule();
|
|
33
|
-
ListModel::defineUtilMethods();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
void setupGlobalGCMarking()
|
|
37
|
-
{
|
|
38
|
-
auto marker = Ext_AnyWrapper::create(QVariant(), [](const QVariant &) {
|
|
39
|
-
ValueReference::markAllReferences();
|
|
40
|
-
ObjectGC::instance()->markNonOwnedObjects();
|
|
41
|
-
});
|
|
42
|
-
rb_gc_register_mark_object(marker);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
void cleanup()
|
|
46
|
-
{
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
void setupEndProc()
|
|
50
|
-
{
|
|
51
|
-
rb_set_end_proc([](VALUE) { cleanup(); }, Qnil);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
extern "C"
|
|
57
|
-
void Init_qml()
|
|
58
|
-
{
|
|
59
|
-
rb_require("date");
|
|
60
|
-
rb_require("qml/errors");
|
|
61
|
-
rb_require("qml/error_converter");
|
|
62
|
-
|
|
63
|
-
defineMetaTypes();
|
|
64
|
-
defineClasses();
|
|
65
|
-
setupGlobalGCMarking();
|
|
66
|
-
setupEndProc();
|
|
67
|
-
}
|
data/ext/qml/kernel.cpp
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
#include "kernel.h"
|
|
2
|
-
#include "util.h"
|
|
3
|
-
#include <QTimer>
|
|
4
|
-
|
|
5
|
-
namespace RubyQml {
|
|
6
|
-
|
|
7
|
-
Kernel *Kernel::instance()
|
|
8
|
-
{
|
|
9
|
-
if (!mInstance) {
|
|
10
|
-
fail("QML::UninitializedError", "ruby-qml not yet initialized");
|
|
11
|
-
}
|
|
12
|
-
return mInstance;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
void Kernel::init(const QList<QByteArray> &args)
|
|
16
|
-
{
|
|
17
|
-
if (mInstance) {
|
|
18
|
-
fail("QML::AlreadyInitializedErryr", "ruby-qml already initialized");
|
|
19
|
-
}
|
|
20
|
-
mInstance = new Kernel(args);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
Kernel::Kernel(const QList<QByteArray> &args)
|
|
24
|
-
{
|
|
25
|
-
mArgc = args.size();
|
|
26
|
-
mArgData = args;
|
|
27
|
-
mArgv = new char*[mArgc];
|
|
28
|
-
std::transform(mArgData.begin(), mArgData.end(), mArgv, [](QByteArray &ba) { return ba.data(); });
|
|
29
|
-
|
|
30
|
-
mApplication = new QApplication(mArgc, mArgv);
|
|
31
|
-
mEngine = new QQmlEngine();
|
|
32
|
-
mEventLoopHookTimer = new QTimer();
|
|
33
|
-
mEventLoopHookTimer->setInterval(0);
|
|
34
|
-
mEventLoopHookTimer->setSingleShot(false);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
Kernel *Kernel::mInstance = nullptr;
|
|
38
|
-
|
|
39
|
-
} // namespace RubyQml
|
data/ext/qml/kernel.h
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <QList>
|
|
4
|
-
#include <QApplication>
|
|
5
|
-
#include <QQmlEngine>
|
|
6
|
-
|
|
7
|
-
namespace RubyQml {
|
|
8
|
-
|
|
9
|
-
class Kernel
|
|
10
|
-
{
|
|
11
|
-
public:
|
|
12
|
-
QApplication *application() { return mApplication; }
|
|
13
|
-
QQmlEngine *engine() { return mEngine; }
|
|
14
|
-
QTimer *eventLoopHookTimer() { return mEventLoopHookTimer; }
|
|
15
|
-
|
|
16
|
-
static bool initialized() { return mInstance; }
|
|
17
|
-
static void init(const QList<QByteArray> &args);
|
|
18
|
-
static Kernel *instance();
|
|
19
|
-
|
|
20
|
-
private:
|
|
21
|
-
Kernel(const QList<QByteArray> &args);
|
|
22
|
-
static Kernel *mInstance;
|
|
23
|
-
|
|
24
|
-
QList<QByteArray> mArgData;
|
|
25
|
-
int mArgc;
|
|
26
|
-
char **mArgv;
|
|
27
|
-
QApplication *mApplication = nullptr;
|
|
28
|
-
QQmlEngine *mEngine = nullptr;
|
|
29
|
-
QTimer *mEventLoopHookTimer = nullptr;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
} // namespace RubyQml
|
data/ext/qml/listmodel.cpp
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
#include "listmodel.h"
|
|
2
|
-
#include "rubyclass.h"
|
|
3
|
-
#include <QMetaObject>
|
|
4
|
-
#include <QMetaMethod>
|
|
5
|
-
|
|
6
|
-
namespace RubyQml {
|
|
7
|
-
|
|
8
|
-
ListModel::ListModel(RubyValue rubyModel, QObject *parent) :
|
|
9
|
-
QAbstractListModel(parent),
|
|
10
|
-
mRubyModel(rubyModel)
|
|
11
|
-
{
|
|
12
|
-
auto columns = rubyModel.send("columns").to<QList<QByteArray>>();
|
|
13
|
-
for (int i = 0; i < columns.size(); ++i) {
|
|
14
|
-
auto role = Qt::UserRole + i;
|
|
15
|
-
mColumnNames[role] = columns[i];
|
|
16
|
-
mColumnIDs[role] = rb_intern(columns[i]);
|
|
17
|
-
}
|
|
18
|
-
rubyModel.send("qt_models").send("push", RubyValue::fromQObject(this, false));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
ListModel::~ListModel()
|
|
22
|
-
{
|
|
23
|
-
mRubyModel.send("qt_models").send("delete", RubyValue::fromQObject(this, false));
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
QHash<int, QByteArray> ListModel::roleNames() const
|
|
27
|
-
{
|
|
28
|
-
return mColumnNames;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
QVariant ListModel::data(const QModelIndex &index, int role) const
|
|
32
|
-
{
|
|
33
|
-
if (!index.isValid()) {
|
|
34
|
-
return QVariant();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
QVariant result;
|
|
38
|
-
withGvl([&] {
|
|
39
|
-
RubyValue value;
|
|
40
|
-
rescueNotify([&] {
|
|
41
|
-
auto subscribe = RUBYQML_INTERN("[]");
|
|
42
|
-
auto record = rb_funcall(mRubyModel, subscribe, 1, INT2NUM(index.row()));
|
|
43
|
-
value = rb_funcall(record, subscribe, 1, ID2SYM(mColumnIDs[role]));
|
|
44
|
-
});
|
|
45
|
-
result = value.toVariant();
|
|
46
|
-
});
|
|
47
|
-
return result;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
int ListModel::rowCount(const QModelIndex &parent) const
|
|
51
|
-
{
|
|
52
|
-
if (parent.isValid()) {
|
|
53
|
-
return 0;
|
|
54
|
-
}
|
|
55
|
-
int count;
|
|
56
|
-
withGvl([&] {
|
|
57
|
-
rescueNotify([&] {
|
|
58
|
-
count = NUM2INT(rb_funcall(mRubyModel, RUBYQML_INTERN("count"), 0));
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
return count;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
QModelIndex ListModel::index(int row, int column, const QModelIndex &parent) const
|
|
65
|
-
{
|
|
66
|
-
if (parent.isValid()) {
|
|
67
|
-
return QModelIndex();
|
|
68
|
-
}
|
|
69
|
-
return createIndex(row, column);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
void ListModel::beginMove(int first, int last, int destination)
|
|
73
|
-
{
|
|
74
|
-
beginMoveRows(QModelIndex(), first, last ,QModelIndex(), destination);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
void ListModel::endMove()
|
|
78
|
-
{
|
|
79
|
-
endMoveRows();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
void ListModel::beginInsert(int first, int last)
|
|
83
|
-
{
|
|
84
|
-
beginInsertRows(QModelIndex(), first, last);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
void ListModel::endInsert()
|
|
88
|
-
{
|
|
89
|
-
endInsertRows();
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
void ListModel::beginRemove(int first, int last)
|
|
93
|
-
{
|
|
94
|
-
beginRemoveRows(QModelIndex(), first, last);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
void ListModel::endRemove()
|
|
98
|
-
{
|
|
99
|
-
endRemoveRows();
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
void ListModel::beginReset()
|
|
103
|
-
{
|
|
104
|
-
beginResetModel();
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
void ListModel::endReset()
|
|
108
|
-
{
|
|
109
|
-
endResetModel();
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
void ListModel::update(int first, int last)
|
|
113
|
-
{
|
|
114
|
-
emit dataChanged(index(first), index(last));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
void ListModel::gc_mark()
|
|
118
|
-
{
|
|
119
|
-
rb_gc_mark(mRubyModel);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
namespace {
|
|
123
|
-
|
|
124
|
-
RubyValue createWrapper(RubyValue self)
|
|
125
|
-
{
|
|
126
|
-
return RubyValue::fromQObject(new ListModel(self), false);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
void ListModel::defineUtilMethods()
|
|
132
|
-
{
|
|
133
|
-
auto klass = RubyClass(RubyModule(RubyModule("QML"), "Data"), "ListModel");
|
|
134
|
-
klass.defineMethod("create_wrapper", RUBYQML_FUNCTION_INFO(&createWrapper));
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
} // namespace RubyQml
|
data/ext/qml/listmodel.h
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "markable.h"
|
|
4
|
-
#include "rubyvalue.h"
|
|
5
|
-
#include <QAbstractListModel>
|
|
6
|
-
|
|
7
|
-
namespace RubyQml {
|
|
8
|
-
|
|
9
|
-
class ListModel : public QAbstractListModel, public Markable
|
|
10
|
-
{
|
|
11
|
-
Q_OBJECT
|
|
12
|
-
public:
|
|
13
|
-
explicit ListModel(RubyValue rubyModel, QObject *parent = 0);
|
|
14
|
-
~ListModel();
|
|
15
|
-
|
|
16
|
-
RubyValue rubyModel() { return mRubyModel; }
|
|
17
|
-
|
|
18
|
-
QHash<int, QByteArray> roleNames() const override;
|
|
19
|
-
|
|
20
|
-
QVariant data(const QModelIndex &index, int role) const override;
|
|
21
|
-
int rowCount(const QModelIndex &parent) const override;
|
|
22
|
-
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
|
|
23
|
-
|
|
24
|
-
void gc_mark() override;
|
|
25
|
-
|
|
26
|
-
static void defineUtilMethods();
|
|
27
|
-
|
|
28
|
-
public slots:
|
|
29
|
-
void beginMove(int first, int last, int destination);
|
|
30
|
-
void endMove();
|
|
31
|
-
void beginInsert(int first, int last);
|
|
32
|
-
void endInsert();
|
|
33
|
-
void beginRemove(int first, int last);
|
|
34
|
-
void endRemove();
|
|
35
|
-
void beginReset();
|
|
36
|
-
void endReset();
|
|
37
|
-
void update(int first, int last);
|
|
38
|
-
|
|
39
|
-
private:
|
|
40
|
-
RubyValue mRubyModel;
|
|
41
|
-
QHash<int, QByteArray> mColumnNames;
|
|
42
|
-
QHash<int, ID> mColumnIDs;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
} // namespace RubyQml
|
data/ext/qml/markable.h
DELETED
data/ext/qml/objectdata.cpp
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#include "objectdata.h"
|
|
2
|
-
|
|
3
|
-
namespace RubyQml {
|
|
4
|
-
|
|
5
|
-
ObjectData::ObjectData(QObject *target) :
|
|
6
|
-
QObject(target)
|
|
7
|
-
{
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
ObjectData *ObjectData::getOrCreate(QObject *target)
|
|
11
|
-
{
|
|
12
|
-
for (auto child : target->children()) {
|
|
13
|
-
auto data = dynamic_cast<ObjectData *>(child);
|
|
14
|
-
if (data) {
|
|
15
|
-
return data;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
return new ObjectData(target);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
void ObjectData::gc_mark()
|
|
22
|
-
{
|
|
23
|
-
rb_gc_mark(rubyObject);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
} // namespace RubyQml
|
data/ext/qml/objectdata.h
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#include <QObject>
|
|
3
|
-
#include "rubyvalue.h"
|
|
4
|
-
#include "markable.h"
|
|
5
|
-
|
|
6
|
-
namespace RubyQml {
|
|
7
|
-
|
|
8
|
-
class ObjectData : public QObject, public Markable
|
|
9
|
-
{
|
|
10
|
-
public:
|
|
11
|
-
ObjectData(QObject *target);
|
|
12
|
-
RubyValue rubyObject;
|
|
13
|
-
bool owned = false;
|
|
14
|
-
|
|
15
|
-
void gc_mark() override;
|
|
16
|
-
|
|
17
|
-
static ObjectData *getOrCreate(QObject *target);
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
} // namespace RubyQml
|
data/ext/qml/objectgc.cpp
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
#include "objectgc.h"
|
|
2
|
-
#include "markable.h"
|
|
3
|
-
#include "objectdata.h"
|
|
4
|
-
#include <QObject>
|
|
5
|
-
#include <QDebug>
|
|
6
|
-
#include <QBuffer>
|
|
7
|
-
|
|
8
|
-
namespace RubyQml {
|
|
9
|
-
|
|
10
|
-
void ObjectGC::addObject(QObject *obj)
|
|
11
|
-
{
|
|
12
|
-
mObjects << obj;
|
|
13
|
-
connect(obj, &QObject::destroyed, this, [this](QObject *obj) {
|
|
14
|
-
mObjects.remove(obj);
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
void ObjectGC::mark(QObject *obj, bool markOwned)
|
|
19
|
-
{
|
|
20
|
-
auto objData = dynamic_cast<ObjectData *>(obj);
|
|
21
|
-
if (!markOwned) {
|
|
22
|
-
if (objData && objData->owned) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
auto markable = dynamic_cast<Markable *>(obj);
|
|
28
|
-
if (markable) {
|
|
29
|
-
debug() << "\u270F\uFE0F marking object:" << obj << "parent:" << obj->parent();
|
|
30
|
-
markable->gc_mark();
|
|
31
|
-
}
|
|
32
|
-
for (auto child : obj->children()) {
|
|
33
|
-
mark(child, markOwned);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
void ObjectGC::markOwnedObject(QObject *obj)
|
|
38
|
-
{
|
|
39
|
-
mark(obj, true);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
void ObjectGC::markNonOwnedObjects()
|
|
43
|
-
{
|
|
44
|
-
for (auto obj : mObjects) {
|
|
45
|
-
mark(obj, false);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
QDebug ObjectGC::debug()
|
|
50
|
-
{
|
|
51
|
-
static auto emptyBuffer = [] {
|
|
52
|
-
auto buf = new QBuffer();
|
|
53
|
-
buf->open(QIODevice::WriteOnly);
|
|
54
|
-
return buf;
|
|
55
|
-
}();
|
|
56
|
-
if (mDebugMessageEnabled) {
|
|
57
|
-
return qDebug();
|
|
58
|
-
} else {
|
|
59
|
-
return QDebug(emptyBuffer);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
ObjectGC *ObjectGC::instance()
|
|
64
|
-
{
|
|
65
|
-
static auto gc = new ObjectGC();
|
|
66
|
-
return gc;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
} // namespace RubyQml
|