tahoma2d/toonz/sources/include/toonz/scriptbinding.h

113 lines
3 KiB
C
Raw Normal View History

2016-05-17 03:04:11 +12:00
#pragma once
2016-03-19 06:57:51 +13:00
#ifndef SCRIPTBINDING_H
#define SCRIPTBINDING_H
#include <QObject>
#include <QScriptable>
#include <QScriptValue>
#include <QScriptEngine>
#include <QMetaType>
#include <QColor>
#include "timage.h"
#include "toonz/vectorizerparameters.h"
#include "toonz/txshsimplelevel.h"
#include "tlevel.h"
#include "tgeometry.h"
#include "tcommon.h"
#undef DVAPI
#undef DVVAR
#ifdef TOONZLIB_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
2016-06-15 18:43:10 +12:00
#define WRAPPER_STD_METHODS(T) \
static QScriptValue ctor(QScriptContext *context, QScriptEngine *engine); \
static QScriptValue toScriptValue(QScriptEngine *engine, T *const &in) { \
return engine->newQObject(in); \
} \
static void fromScriptValue(const QScriptValue &object, T *&out) { \
out = qobject_cast<T *>(object.toQObject()); \
}
#define WRAPPER_STD_CTOR_IMPL(T) \
QScriptValue T::ctor(QScriptContext *context, QScriptEngine *engine) { \
return engine->newQObject(new T(), QScriptEngine::AutoOwnership); \
}
2016-03-19 06:57:51 +13:00
class TAffine;
class TLevelReader;
class ToonzScene;
class TFilePath;
2016-06-15 18:43:10 +12:00
namespace TScriptBinding {
2016-03-19 06:57:51 +13:00
class DVAPI Void final : public QObject {
2016-06-15 18:43:10 +12:00
Q_OBJECT
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
WRAPPER_STD_METHODS(Void)
2016-03-19 06:57:51 +13:00
};
2016-06-15 18:43:10 +12:00
class DVAPI Wrapper : public QObject, protected QScriptable {
Q_OBJECT
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
static int m_count;
int m_id;
2016-03-19 06:57:51 +13:00
public:
2016-06-15 18:43:10 +12:00
Wrapper();
virtual ~Wrapper();
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
Q_PROPERTY(int id READ getId())
int getId() const { return m_id; }
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void print(const QString &msg);
void print(const QScriptValueList &lst);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
void warning(const QString &msg);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
template <class T>
QScriptValue create(QScriptEngine *engine) {
return create(engine, static_cast<T *>(this));
}
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
template <class T>
static QScriptValue create(QScriptEngine *engine, T *obj) {
return engine->newQObject(obj, QScriptEngine::AutoOwnership,
QScriptEngine::ExcludeSuperClassContents |
QScriptEngine::ExcludeChildObjects);
}
2016-03-19 06:57:51 +13:00
protected:
2016-06-15 18:43:10 +12:00
template <class T>
QScriptValue create(T *obj) {
return create(engine(), obj);
}
2016-03-19 06:57:51 +13:00
};
void bindAll(QScriptEngine &engine);
// helper functions
// check the number of arguments: if it is out of range returns an error object
2016-06-15 18:43:10 +12:00
QScriptValue checkArgumentCount(QScriptContext *context, const QString &name,
int minCount, int maxCount);
QScriptValue checkArgumentCount(QScriptContext *context, const QString &name,
int count);
2016-03-19 06:57:51 +13:00
// check the color. if colorName is not valid then an error is returned
2016-06-15 18:43:10 +12:00
QScriptValue checkColor(QScriptContext *context, const QString &colorName,
QColor &color);
2016-03-19 06:57:51 +13:00
2016-06-15 18:43:10 +12:00
} // namespace TScriptBinding
2016-03-19 06:57:51 +13:00
Q_DECLARE_METATYPE(TScriptBinding::Void *)
#endif