13 #ifndef __PLUGIN_API_SCOREELEMENT_H__
14 #define __PLUGIN_API_SCOREELEMENT_H__
16 #include "libmscore/property.h"
32 enum class Ownership {
60 Ms::ScoreElement*
const e;
63 ScoreElement(Ms::ScoreElement* _e =
nullptr, Ownership own = Ownership::PLUGIN)
64 : QObject(), _ownership(own), e(_e) {}
69 Ownership ownership()
const {
return _ownership; }
70 void setOwnership(Ownership o) { _ownership = o; }
72 Ms::ScoreElement* element() {
return e; };
73 const Ms::ScoreElement* element()
const {
return e; };
78 QVariant get(Ms::Pid pid)
const;
79 void set(Ms::Pid pid, QVariant val);
82 Q_INVOKABLE QString userName()
const;
92 template <
class Wrapper,
class T>
93 Wrapper* wrap(T* t, Ownership own = Ownership::SCORE)
95 Wrapper* w = t ?
new Wrapper(t, own) : nullptr;
97 QQmlEngine::setObjectOwnership(w, QQmlEngine::JavaScriptOwnership);
101 extern ScoreElement* wrap(Ms::ScoreElement* se, Ownership own = Ownership::SCORE);
109 template <
typename T,
class Container>
114 : QQmlListProperty<T>(obj,
const_cast<void*
>(
static_cast<const void*
>(&container)), &count, &at) {};
116 static int count(QQmlListProperty<T>* l) {
return int(
static_cast<Container*
>(l->data)->size()); }
117 static T* at(QQmlListProperty<T>* l,
int i) {
return wrap<T>(
static_cast<Container*
>(l->data)->at(i), Ownership::SCORE); }
122 template<
typename T,
class Container>