Skip to content

Commit db93458

Browse files
steffenhaugbarche
authored andcommitted
Movie initialization of Makie support into separate JlCxx module
1 parent bece833 commit db93458

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

makie_viewport.cpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#include <QOpenGLContext>
77
#include <QQuickWindow>
8+
#include <julia.h>
89

910
namespace qmlwrap
1011
{
@@ -32,13 +33,17 @@ class MakieRenderFunction : public RenderFunction
3233

3334
jl_module_t* get_makie_support_module()
3435
{
35-
jl_value_t* mod = jl_get_global(MakieViewport::m_qml_mod, jl_symbol("MakieSupport"));
36-
if(mod == nullptr || !jl_is_module(mod))
36+
// MakieViewport::m_qml_mod is set when initializing the Julia module `QtMakie`,
37+
// corresponding to `JLCXX_MODULE define_julia_module_makie` in `wrap_qml.cpp`.
38+
jl_module_t* mod = MakieViewport::m_qml_mod;
39+
40+
// If `mod` is not initialized, you have not loaded the Julia module.
41+
if(mod == nullptr)
3742
{
38-
throw std::runtime_error("Makie is not loaded, did you forget \"Using Makie\" in your Julia file?");
43+
throw std::runtime_error("Makie Support not initialized. Have you loaded QtMakie?");
3944
}
40-
41-
return (jl_module_t*)mod;
45+
46+
return mod;
4247
}
4348

4449
/// Takes care of loading the MakieSupport Julia module

wrap_qml.cpp

+11-6
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ struct WrapQtIterator
247247
using WrappedT = typename TypeWrapperT::type;
248248
using KeyT = typename WrappedT::key_type;
249249
using ValueT = typename WrappedT::value_type;
250-
250+
251251
wrapped.method("iteratornext", [] (WrappedT it) -> WrappedT { ++(it.value); return it; });
252252
wrapped.method("iteratorkey", [] (WrappedT it) -> KeyT { validate_iterator(it); return it.value.key();} );
253253
wrapped.method("iteratorvalue", [] (WrappedT it) -> ValueT& { validate_iterator(it); return it.value.value(); } );
@@ -282,6 +282,12 @@ struct WrapQtAssociativeContainer
282282

283283
}
284284

285+
JLCXX_MODULE define_julia_module_makie(jlcxx::Module& qml_module)
286+
{
287+
using namespace jlcxx;
288+
qmlwrap::MakieViewport::m_qml_mod = qml_module.julia_module();
289+
}
290+
285291
JLCXX_MODULE define_julia_module(jlcxx::Module& qml_module)
286292
{
287293
using namespace jlcxx;
@@ -290,8 +296,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& qml_module)
290296
qmlwrap::JuliaFunction::m_qml_mod = qml_module.julia_module();
291297
qmlwrap::ApplicationManager::m_qml_mod = qml_module.julia_module();
292298
qmlwrap::JuliaItemModel::m_qml_mod = qml_module.julia_module();
293-
qmlwrap::MakieViewport::m_qml_mod = qml_module.julia_module();
294-
299+
295300
// Enums
296301
qml_module.add_bits<Qt::Orientation>("Orientation", jlcxx::julia_type("CppEnum"));
297302
qml_module.set_const("Horizontal", Qt::Horizontal);
@@ -390,7 +395,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& qml_module)
390395
.constructor<QString>()
391396
.method("toString", [] (const QUrl& url) { return url.toString(); });
392397
qml_module.method("QUrlFromLocalFile", QUrl::fromLocalFile);
393-
398+
394399
auto qvar_type = qml_module.add_type<QVariant>("QVariant");
395400
qvar_type.method("toString", &QVariant::toString);
396401

@@ -413,7 +418,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& qml_module)
413418
.apply<qmlwrap::QHashIteratorWrapper<int, QByteArray>>(qmlwrap::WrapQtIterator());
414419
qml_module.add_type<Parametric<TypeVar<1>,TypeVar<2>>>("QHash", julia_type("AbstractDict"))
415420
.apply<QHash<int, QByteArray>>(qmlwrap::WrapQtAssociativeContainer<qmlwrap::QHashIteratorWrapper>());
416-
421+
417422
qml_module.add_type<QQmlPropertyMap>("QQmlPropertyMap", julia_base_type<QObject>())
418423
.constructor<QObject *>(jlcxx::finalize_policy::no)
419424
.method("clear", &QQmlPropertyMap::clear)
@@ -439,7 +444,7 @@ JLCXX_MODULE define_julia_module(jlcxx::Module& qml_module)
439444
jlcxx::stl::apply_stl<QVariant>(qml_module);
440445

441446
qml_module.method("make_qvariant_map", [] ()
442-
{
447+
{
443448
QVariantMap m;
444449
m[QString("test")] = QVariant::fromValue(5);
445450
return QVariant::fromValue(m);

0 commit comments

Comments
 (0)