0
0
mirror of https://github.com/fralx/LimeReport.git synced 2025-11-07 00:21:24 +03:00

QJSEngine has been added

This commit is contained in:
Arin Alex
2016-11-01 20:42:45 +03:00
parent 3bf993eb5a
commit 2034aa15c8
15 changed files with 595 additions and 60 deletions

View File

@@ -39,11 +39,15 @@
#include <QScriptable>
#include <QFont>
//#include <QJSEngine>
#ifdef HAVE_UI_LOADER
#include <QDialog>
#endif
#include "base/lrsingleton.h"
#include "lrglobal.h"
#include "lrscriptenginemanagerintf.h"
#include "lrcollection.h"
@@ -53,7 +57,7 @@ class DataSourceManager;
struct ScriptFunctionDesc{
enum FuncType {Native,Script};
QScriptValue scriptValue;
ScriptValueType scriptValue;
QString name;
QString description;
QString category;
@@ -169,22 +173,91 @@ private:
QString m_initScript;
};
class JSFunctionDesc{
public:
JSFunctionDesc(){}
JSFunctionDesc(const QString& functionName,
const QString& functionCategory,
const QString& functionDescription,
const QString& functionManagerName,
QObject* functionManger,
const QString& functionScriptWrapper
): m_name(functionName), m_category(functionCategory), m_description(functionDescription),
m_managerName(functionManagerName), m_manager(functionManger), m_scriptWrapper(functionScriptWrapper)
{}
QString name() const;
void setName(const QString &name);
QString category() const;
void setCategory(const QString &category);
QString description() const;
void setDescription(const QString &description);
QString managerName() const;
void setManagerName(const QString &managerName);
QObject *manager() const;
void setManager(QObject *manager);
QString scriptWrapper() const;
void setScriptWrapper(const QString &scriptWrapper);
private:
QString m_name;
QString m_category;
QString m_description;
QString m_managerName;
QObject* m_manager;
QString m_scriptWrapper;
};
class ScriptFunctionsManager : public QObject{
Q_OBJECT
public:
explicit ScriptFunctionsManager(QObject* parent = 0):QObject(parent){}
Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& fieldName, const QString& bandName);
Q_INVOKABLE QVariant line(const QString& bandName);
Q_INVOKABLE QVariant numberFormat(QVariant value, const char &format, int precision, const QString &locale);
Q_INVOKABLE QVariant dateFormat(QVariant value, const QString& format);
Q_INVOKABLE QVariant timeFormat(QVariant value, const QString& format);
Q_INVOKABLE QVariant dateTimeFormat(QVariant value, const QString& format);
Q_INVOKABLE QVariant date();
Q_INVOKABLE QVariant now();
Q_INVOKABLE QVariant currencyFormat(QVariant value, const QString& locale);
Q_INVOKABLE QVariant currencyUSBasedFormat(QVariant value, const QString& currencySymbol);
Q_INVOKABLE void setVariable(const QString& name, QVariant value);
Q_INVOKABLE QVariant color(const QString& color){ return QColor(color);}
#ifdef USE_QJSENGINE
Q_INVOKABLE QFont font(const QString& family, int pointSize = -1, bool bold = false, bool italic = false, bool underLine = false);
#endif
Q_INVOKABLE QFont font(QVariantMap params);
ScriptEngineManager *scriptEngineManager() const;
void setScriptEngineManager(ScriptEngineManager *scriptEngineManager);
static QColor createQColor(const QString& color){ return QColor(color);}
private:
ScriptEngineManager* m_scriptEngineManager;
};
class ScriptEngineManager : public QObject, public Singleton<ScriptEngineManager>, public IScriptEngineManager
{
Q_OBJECT
public:
QScriptEngine* scriptEngine(){return m_scriptEngine;}
~ScriptEngineManager();
friend class Singleton<ScriptEngineManager>;
ScriptEngineType* scriptEngine(){return m_scriptEngine;}
~ScriptEngineManager();
bool isFunctionExists(const QString& functionName) const;
void deleteFunction(const QString& functionsName);
bool addFunction(const QString& name, QScriptEngine::FunctionSignature function,
const QString& category="", const QString& description="");
bool addFunction(const JSFunctionDesc& functionsDescriber);
#ifndef USE_QJSENGINE
bool addFunction(const QString &name, QScriptEngine::FunctionSignature function, const QString &category, const QString &description);
#endif
bool addFunction(const QString &name, const QString& script,
const QString &category="", const QString &description="");
const QString& lastError() const {return m_lastError;}
QStringList functionsNames();
const QList<ScriptFunctionDesc>& functionsDescriber(){return m_functions;}
const QList<ScriptFunctionDesc>& functionsDescribers(){return m_functions;}
ScriptEngineModel* model(){return m_model;}
void setContext(ScriptEngineContext* context){m_context=context;}
DataSourceManager* dataManager() const {return m_dataManager;}
@@ -195,14 +268,25 @@ protected:
bool containsFunction(const QString &functionName);
private:
Q_DISABLE_COPY(ScriptEngineManager)
bool createLineFunction();
bool createNumberFomatFunction();
bool createDateFormatFunction();
bool createTimeFormatFunction();
bool createDateTimeFormatFunction();
bool createDateFunction();
bool createNowFunction();
bool createCurrencyFormatFunction();
bool createCurrencyUSBasedFormatFunction();
bool createSetVariableFunction();
private:
ScriptEngineManager();
QScriptEngine* m_scriptEngine;
ScriptEngineType* m_scriptEngine;
QString m_lastError;
QList<ScriptFunctionDesc> m_functions;
ScriptEngineModel* m_model;
ScriptEngineContext* m_context;
DataSourceManager* m_dataManager;
ScriptFunctionsManager* m_functionManager;
};
class ScriptExtractor