QJSEngine -> QQmlEngine

This commit is contained in:
Arin Alexander 2017-02-11 00:21:03 +03:00
parent c37a310918
commit 7406789cbb
5 changed files with 247 additions and 132 deletions

View File

@ -43,7 +43,8 @@
#endif #endif
#ifdef USE_QJSENGINE #ifdef USE_QJSENGINE
#include <QJSEngine> //#include <QJSEngine>
#include <QQmlEngine>
#else #else
#include <QScriptEngine> #include <QScriptEngine>
#endif #endif
@ -138,8 +139,15 @@ namespace Const{
#endif #endif
#ifdef USE_QJSENGINE #ifdef USE_QJSENGINE
typedef QJSEngine ScriptEngineType; typedef QQmlEngine ScriptEngineType;
typedef QJSValue ScriptValueType; typedef QJSValue ScriptValueType;
template <typename T>
static inline QJSValue getCppOwnedJSValue(QJSEngine &e, T *p)
{
QJSValue res = e.newQObject(p);
QQmlEngine::setObjectOwnership(p, QQmlEngine::CppOwnership);
return res;
}
#else #else
typedef QScriptEngine ScriptEngineType; typedef QScriptEngine ScriptEngineType;
typedef QScriptValue ScriptValueType; typedef QScriptValue ScriptValueType;

View File

@ -43,7 +43,8 @@
#endif #endif
#ifdef USE_QJSENGINE #ifdef USE_QJSENGINE
#include <QJSEngine> //#include <QJSEngine>
#include <QQmlEngine>
#else #else
#include <QScriptEngine> #include <QScriptEngine>
#endif #endif
@ -138,8 +139,15 @@ namespace Const{
#endif #endif
#ifdef USE_QJSENGINE #ifdef USE_QJSENGINE
typedef QJSEngine ScriptEngineType; typedef QQmlEngine ScriptEngineType;
typedef QJSValue ScriptValueType; typedef QJSValue ScriptValueType;
template <typename T>
static inline QJSValue getCppOwnedJSValue(QJSEngine &e, T *p)
{
QJSValue res = e.newQObject(p);
QQmlEngine::setObjectOwnership(p, QQmlEngine::CppOwnership);
return res;
}
#else #else
typedef QScriptEngine ScriptEngineType; typedef QScriptEngine ScriptEngineType;
typedef QScriptValue ScriptValueType; typedef QScriptValue ScriptValueType;

View File

@ -167,10 +167,21 @@ void ReportRender::setScriptContext(ScriptEngineContext* scriptContext)
bool ReportRender::runInitScript(){ bool ReportRender::runInitScript(){
if (m_scriptEngineContext){ if (m_scriptEngineContext){
QScriptEngine* engine = ScriptEngineManager::instance().scriptEngine(); ScriptEngineType* engine = ScriptEngineManager::instance().scriptEngine();
#ifndef USE_QJSENGINE
engine->pushContext(); engine->pushContext();
QScriptValue res = engine->evaluate(m_scriptEngineContext->initScript()); #endif
ScriptValueType res = engine->evaluate(m_scriptEngineContext->initScript());
if (res.isBool()) return res.toBool(); if (res.isBool()) return res.toBool();
#ifdef USE_QJSENGINE
if (res.isError()){
QMessageBox::critical(0,tr("Error"),
QString("Line %1: %2 ").arg(res.property("lineNumber").toString())
.arg(res.toString())
);
return false;
}
#else
if (engine->hasUncaughtException()) { if (engine->hasUncaughtException()) {
QMessageBox::critical(0,tr("Error"), QMessageBox::critical(0,tr("Error"),
QString("Line %1: %2 ").arg(engine->uncaughtExceptionLineNumber()) QString("Line %1: %2 ").arg(engine->uncaughtExceptionLineNumber())
@ -178,6 +189,7 @@ bool ReportRender::runInitScript(){
); );
return false; return false;
} }
#endif
} }
return true; return true;
} }
@ -269,8 +281,9 @@ void ReportRender::renderPage(PageDesignIntf* patternPage)
renderBand(tearOffBand, 0, StartNewPageAsNeeded); renderBand(tearOffBand, 0, StartNewPageAsNeeded);
savePage(true); savePage(true);
#ifndef USE_QJSENGINE
ScriptEngineManager::instance().scriptEngine()->popContext(); ScriptEngineManager::instance().scriptEngine()->popContext();
#endif
} }
} }
@ -1262,18 +1275,26 @@ void ReportRender::baseDesignIntfToScript(BaseDesignIntf *item)
if (item->metaObject()->indexOfSignal("afterRender()")!=-1) if (item->metaObject()->indexOfSignal("afterRender()")!=-1)
item->disconnect(SIGNAL(afterRender())); item->disconnect(SIGNAL(afterRender()));
QScriptEngine* engine = ScriptEngineManager::instance().scriptEngine(); ScriptEngineType* engine = ScriptEngineManager::instance().scriptEngine();
QScriptValue sItem = engine->globalObject().property(item->patternName());
#ifdef USE_QJSENGINE
//sItem = engine->newQObject(item);
ScriptValueType sItem = getCppOwnedJSValue(*engine, item);
engine->globalObject().setProperty(item->patternName(), sItem);
#else
ScriptValueType sItem = engine->globalObject().property(item->patternName());
if (sItem.isValid()){ if (sItem.isValid()){
engine->newQObject(sItem, item); engine->newQObject(sItem, item);
} else { } else {
sItem = engine->newQObject(item); sItem = engine->newQObject(item);
engine->globalObject().setProperty(item->patternName(),sItem); engine->globalObject().setProperty(item->patternName(),sItem);
} }
#endif
foreach(BaseDesignIntf* child, item->childBaseItems()){ foreach(BaseDesignIntf* child, item->childBaseItems()){
baseDesignIntfToScript(child); baseDesignIntfToScript(child);
} }
} }
} }
} }

View File

@ -196,141 +196,141 @@ void ScriptEngineModel::updateModel()
endResetModel(); endResetModel();
} }
QScriptValue line(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue line(QScriptContext* pcontext, QScriptEngine* pengine){
ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data()); // ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data());
DataSourceManager* dm = sm->dataManager(); // DataSourceManager* dm = sm->dataManager();
QString band = pcontext->argument(0).toString(); // QString band = pcontext->argument(0).toString();
QScriptValue res; // QScriptValue res;
QString varName = QLatin1String("line_")+band.toLower(); // QString varName = QLatin1String("line_")+band.toLower();
if (dm->variable(varName).isValid()){ // if (dm->variable(varName).isValid()){
res=pengine->newVariant(dm->variable(varName)); // res=pengine->newVariant(dm->variable(varName));
} else res=pengine->newVariant(QString("Variable line for band %1 not found").arg(band)); // } else res=pengine->newVariant(QString("Variable line for band %1 not found").arg(band));
return res; // return res;
} //}
QScriptValue setVariable(QScriptContext* pcontext, QScriptEngine* /*pengine*/){ //QScriptValue setVariable(QScriptContext* pcontext, QScriptEngine* /*pengine*/){
QString name = pcontext->argument(0).toString(); // QString name = pcontext->argument(0).toString();
QVariant value = pcontext->argument(1).toVariant(); // QVariant value = pcontext->argument(1).toVariant();
ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data()); // ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data());
DataSourceManager* dm = sm->dataManager(); // DataSourceManager* dm = sm->dataManager();
dm->changeVariable(name,value); // dm->changeVariable(name,value);
return QScriptValue(); // return QScriptValue();
} //}
QScriptValue getVariable(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue getVariable(QScriptContext* pcontext, QScriptEngine* pengine){
QString name = pcontext->argument(0).toString(); // QString name = pcontext->argument(0).toString();
ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data()); // ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data());
DataSourceManager* dm = sm->dataManager(); // DataSourceManager* dm = sm->dataManager();
QScriptValue res = pengine->newVariant(dm->variable(name)); // QScriptValue res = pengine->newVariant(dm->variable(name));
return res; // return res;
} //}
QScriptValue getField(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue getField(QScriptContext* pcontext, QScriptEngine* pengine){
QString name = pcontext->argument(0).toString(); // QString name = pcontext->argument(0).toString();
ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data()); // ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data());
DataSourceManager* dm = sm->dataManager(); // DataSourceManager* dm = sm->dataManager();
QScriptValue res = pengine->newVariant(dm->fieldData(name)); // QScriptValue res = pengine->newVariant(dm->fieldData(name));
return res; // return res;
} //}
QScriptValue numberFormat(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue numberFormat(QScriptContext* pcontext, QScriptEngine* pengine){
QVariant value = pcontext->argument(0).toVariant(); // QVariant value = pcontext->argument(0).toVariant();
char format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString()[0].toLatin1():'f'; // char format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString()[0].toLatin1():'f';
int precision = (pcontext->argumentCount()>2)?pcontext->argument(2).toInt32():2; // int precision = (pcontext->argumentCount()>2)?pcontext->argument(2).toInt32():2;
QString locale = (pcontext->argumentCount()>3)?pcontext->argument(3).toString():""; // QString locale = (pcontext->argumentCount()>3)?pcontext->argument(3).toString():"";
QScriptValue res = (locale.isEmpty())?pengine->newVariant(QString::number(value.toDouble(),format,precision)): // QScriptValue res = (locale.isEmpty())?pengine->newVariant(QString::number(value.toDouble(),format,precision)):
pengine->newVariant(QLocale(locale).toString(value.toDouble(),format,precision)); // pengine->newVariant(QLocale(locale).toString(value.toDouble(),format,precision));
return res; // return res;
} //}
#if QT_VERSION>0x040800 //#if QT_VERSION>0x040800
QScriptValue currencyFormat(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue currencyFormat(QScriptContext* pcontext, QScriptEngine* pengine){
QVariant value = pcontext->argument(0).toVariant(); // QVariant value = pcontext->argument(0).toVariant();
QString locale = (pcontext->argumentCount()>1)?pcontext->argument(1).toString():QLocale::system().name(); // QString locale = (pcontext->argumentCount()>1)?pcontext->argument(1).toString():QLocale::system().name();
return pengine->newVariant(QLocale(locale).toCurrencyString(value.toDouble())); // return pengine->newVariant(QLocale(locale).toCurrencyString(value.toDouble()));
} //}
QScriptValue currencyUSBasedFormat(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue currencyUSBasedFormat(QScriptContext* pcontext, QScriptEngine* pengine){
QVariant value = pcontext->argument(0).toVariant(); // QVariant value = pcontext->argument(0).toVariant();
QString CurrencySymbol = (pcontext->argumentCount()>1)?pcontext->argument(1).toString():QLocale::system().currencySymbol(); // QString CurrencySymbol = (pcontext->argumentCount()>1)?pcontext->argument(1).toString():QLocale::system().currencySymbol();
// Format it using USA locale // // Format it using USA locale
QString vTempStr=QLocale(QLocale::English, QLocale::UnitedStates).toCurrencyString(value.toDouble()); // QString vTempStr=QLocale(QLocale::English, QLocale::UnitedStates).toCurrencyString(value.toDouble());
// Replace currency symbol if necesarry // // Replace currency symbol if necesarry
if (CurrencySymbol!="") vTempStr.replace("$", CurrencySymbol); // if (CurrencySymbol!="") vTempStr.replace("$", CurrencySymbol);
return pengine->newVariant(vTempStr); // return pengine->newVariant(vTempStr);
} //}
#endif //#endif
QScriptValue dateFormat(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue dateFormat(QScriptContext* pcontext, QScriptEngine* pengine){
QVariant value = pcontext->argument(0).toVariant(); // QVariant value = pcontext->argument(0).toVariant();
QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"dd.MM.yyyy"; // QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"dd.MM.yyyy";
QScriptValue res = pengine->newVariant(QLocale().toString(value.toDate(),format)); // QScriptValue res = pengine->newVariant(QLocale().toString(value.toDate(),format));
return res; // return res;
} //}
QScriptValue timeFormat(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue timeFormat(QScriptContext* pcontext, QScriptEngine* pengine){
QVariant value = pcontext->argument(0).toVariant(); // QVariant value = pcontext->argument(0).toVariant();
QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"hh:mm"; // QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"hh:mm";
QScriptValue res = pengine->newVariant(QLocale().toString(value.toTime(),format)); // QScriptValue res = pengine->newVariant(QLocale().toString(value.toTime(),format));
return res; // return res;
} //}
QScriptValue dateTimeFormat(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue dateTimeFormat(QScriptContext* pcontext, QScriptEngine* pengine){
QVariant value = pcontext->argument(0).toVariant(); // QVariant value = pcontext->argument(0).toVariant();
QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"dd.MM.yyyy hh:mm"; // QString format = (pcontext->argumentCount()>1)?pcontext->argument(1).toString().toLatin1():"dd.MM.yyyy hh:mm";
QScriptValue res = pengine->newVariant(QLocale().toString(value.toDateTime(),format)); // QScriptValue res = pengine->newVariant(QLocale().toString(value.toDateTime(),format));
return res; // return res;
} //}
QScriptValue now(QScriptContext* /*pcontext*/, QScriptEngine* pengine){ //QScriptValue now(QScriptContext* /*pcontext*/, QScriptEngine* pengine){
return pengine->newVariant(QDateTime::currentDateTime()); // return pengine->newVariant(QDateTime::currentDateTime());
} //}
QScriptValue date(QScriptContext* /*pcontext*/, QScriptEngine* pengine){ //QScriptValue date(QScriptContext* /*pcontext*/, QScriptEngine* pengine){
return pengine->newVariant(QDate::currentDate()); // return pengine->newVariant(QDate::currentDate());
} //}
QScriptValue callGroupFunction(const QString& functionName, QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue callGroupFunction(const QString& functionName, QScriptContext* pcontext, QScriptEngine* pengine){
ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data()); // ScriptEngineManager* sm = qscriptvalue_cast<ScriptEngineManager*>(pcontext->callee().data());
DataSourceManager* dm = sm->dataManager(); // DataSourceManager* dm = sm->dataManager();
QString expression; // QString expression;
QString band; // QString band;
if (functionName.compare("COUNT",Qt::CaseInsensitive) == 0 && pcontext->argumentCount()==1){ // if (functionName.compare("COUNT",Qt::CaseInsensitive) == 0 && pcontext->argumentCount()==1){
expression = " "; // expression = " ";
band = pcontext->argument(0).toString(); // band = pcontext->argument(0).toString();
} else { // } else {
expression = dm->getExpression(pcontext->argument(0).toString()); // expression = dm->getExpression(pcontext->argument(0).toString());
band = pcontext->argument(1).toString(); // band = pcontext->argument(1).toString();
} // }
QScriptValue res; // QScriptValue res;
GroupFunction* gf = dm->groupFunction(functionName,expression,band); // GroupFunction* gf = dm->groupFunction(functionName,expression,band);
if (gf){ // if (gf){
if (gf->isValid()){ // if (gf->isValid()){
res=pengine->newVariant(gf->calculate()); // res=pengine->newVariant(gf->calculate());
}else{ // }else{
res=pengine->newVariant(gf->error()); // res=pengine->newVariant(gf->error());
} // }
} // }
else { // else {
res=pengine->newVariant(QString(QObject::tr("Function %1 not found or have wrong arguments").arg(functionName))); // res=pengine->newVariant(QString(QObject::tr("Function %1 not found or have wrong arguments").arg(functionName)));
} // }
return res; // return res;
} //}
QScriptValue groupFunction(QScriptContext* pcontext, QScriptEngine* pengine){ //QScriptValue groupFunction(QScriptContext* pcontext, QScriptEngine* pengine){
return callGroupFunction(pcontext->callee().property("functionName").toString(),pcontext,pengine); // return callGroupFunction(pcontext->callee().property("functionName").toString(),pcontext,pengine);
} //}
ScriptEngineManager::~ScriptEngineManager() ScriptEngineManager::~ScriptEngineManager()
{ {
@ -589,16 +589,24 @@ QString ScriptEngineManager::expandScripts(QString context, QVariant& varValue,
if (ScriptEngineManager::instance().dataManager()!=dataManager()) if (ScriptEngineManager::instance().dataManager()!=dataManager())
ScriptEngineManager::instance().setDataManager(dataManager()); ScriptEngineManager::instance().setDataManager(dataManager());
QScriptEngine* se = ScriptEngineManager::instance().scriptEngine(); ScriptEngineType* se = ScriptEngineManager::instance().scriptEngine();
if (reportItem){ if (reportItem){
QScriptValue svThis = se->globalObject().property("THIS");
ScriptValueType svThis;
#ifdef USE_QJSENGINE
svThis = getCppOwnedJSValue(*se, reportItem);
se->globalObject().setProperty("THIS",svThis);
#else
svThis = se->globalObject().property("THIS");
if (svThis.isValid()){ if (svThis.isValid()){
se->newQObject(svThis, this); se->newQObject(svThis, reportItem);
} else { } else {
svThis = se->newQObject(this); svThis = se->newQObject(reportItem);
se->globalObject().setProperty("THIS",svThis); se->globalObject().setProperty("THIS",svThis);
} }
#endif
} }
ScriptExtractor scriptExtractor(context); ScriptExtractor scriptExtractor(context);
@ -606,16 +614,26 @@ QString ScriptEngineManager::expandScripts(QString context, QVariant& varValue,
for(int i=0; i<scriptExtractor.count();++i){ for(int i=0; i<scriptExtractor.count();++i){
QString scriptBody = expandDataFields(scriptExtractor.bodyAt(i),EscapeSymbols, varValue, reportItem); QString scriptBody = expandDataFields(scriptExtractor.bodyAt(i),EscapeSymbols, varValue, reportItem);
scriptBody = expandUserVariables(scriptBody, FirstPass, EscapeSymbols, varValue); scriptBody = expandUserVariables(scriptBody, FirstPass, EscapeSymbols, varValue);
QScriptValue value = se->evaluate(scriptBody); ScriptValueType value = se->evaluate(scriptBody);
#ifdef USE_QJSENGINE
if (!value.isError()){
varValue = value.toVariant();
context.replace(scriptExtractor.scriptAt(i),value.toString());
} else {
context.replace(scriptExtractor.scriptAt(i),value.toString());
}
#else
if (!se->hasUncaughtException()) { if (!se->hasUncaughtException()) {
varValue = value.toVariant(); varValue = value.toVariant();
context.replace(scriptExtractor.scriptAt(i),value.toString()); context.replace(scriptExtractor.scriptAt(i),value.toString());
} else { } else {
context.replace(scriptExtractor.scriptAt(i),se->uncaughtException().toString()); context.replace(scriptExtractor.scriptAt(i),se->uncaughtException().toString());
} }
#endif
} }
} }
} }
return context; return context;
} }
@ -629,14 +647,18 @@ QVariant ScriptEngineManager::evaluateScript(const QString& script){
if (ScriptEngineManager::instance().dataManager()!=dataManager()) if (ScriptEngineManager::instance().dataManager()!=dataManager())
ScriptEngineManager::instance().setDataManager(dataManager()); ScriptEngineManager::instance().setDataManager(dataManager());
QScriptEngine* se = ScriptEngineManager::instance().scriptEngine(); ScriptEngineType* se = ScriptEngineManager::instance().scriptEngine();
ScriptExtractor scriptExtractor(script); ScriptExtractor scriptExtractor(script);
if (scriptExtractor.parse()){ if (scriptExtractor.parse()){
QString scriptBody = expandDataFields(scriptExtractor.bodyAt(0),EscapeSymbols, varValue, 0); QString scriptBody = expandDataFields(scriptExtractor.bodyAt(0),EscapeSymbols, varValue, 0);
scriptBody = expandUserVariables(scriptBody, FirstPass, EscapeSymbols, varValue); scriptBody = expandUserVariables(scriptBody, FirstPass, EscapeSymbols, varValue);
QScriptValue value = se->evaluate(scriptBody); ScriptValueType value = se->evaluate(scriptBody);
#ifdef USE_QJSENGINE
if (!value.isError()){
#else
if (!se->hasUncaughtException()) { if (!se->hasUncaughtException()) {
#endif
return value.toVariant(); return value.toVariant();
} }
} }
@ -820,6 +842,36 @@ bool ScriptEngineManager::createSetVariableFunction(){
return addFunction(fd); return addFunction(fd);
} }
bool ScriptEngineManager::createGetVariableFunction()
{
JSFunctionDesc fd;
fd.setManager(m_functionManager);
fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME);
fd.setCategory("GENERAL");
fd.setName("getVariable");
fd.setDescription("getVariable(\""+tr("Name")+"\")");
fd.setScriptWrapper(QString("function getVariable(name){"
"return %1.getVariable(name);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
bool ScriptEngineManager::createGetFieldFunction()
{
JSFunctionDesc fd;
fd.setManager(m_functionManager);
fd.setManagerName(LimeReport::Const::FUNCTION_MANAGER_NAME);
fd.setCategory("GENERAL");
fd.setName("getField");
fd.setDescription("getField(\""+tr("Name")+"\")");
fd.setScriptWrapper(QString("function getField(name){"
"return %1.getField(name);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
ScriptEngineManager::ScriptEngineManager() ScriptEngineManager::ScriptEngineManager()
:m_model(0), m_dataManager(0) :m_model(0), m_dataManager(0)
{ {
@ -839,6 +891,8 @@ ScriptEngineManager::ScriptEngineManager()
createCurrencyUSBasedFormatFunction(); createCurrencyUSBasedFormatFunction();
#endif #endif
createSetVariableFunction(); createSetVariableFunction();
createGetFieldFunction();
createGetVariableFunction();
// addFunction("line",line,"SYSTEM", "line(\""+tr("BandName")+"\")"); // addFunction("line",line,"SYSTEM", "line(\""+tr("BandName")+"\")");
// addFunction("numberFormat",numberFormat,"NUMBER", "numberFormat(\""+tr("Value")+"\",\""+tr("Format")+"\",\""+ // addFunction("numberFormat",numberFormat,"NUMBER", "numberFormat(\""+tr("Value")+"\",\""+tr("Format")+"\",\""+
@ -1235,10 +1289,17 @@ void JSFunctionDesc::setScriptWrapper(const QString &scriptWrapper)
m_scriptWrapper = scriptWrapper; m_scriptWrapper = scriptWrapper;
} }
QVariant ScriptFunctionsManager::calcGroupFunction(const QString &name, const QString &fieldName, const QString &bandName) QVariant ScriptFunctionsManager::calcGroupFunction(const QString &name, const QString &expressionID, const QString &bandName)
{ {
if (m_scriptEngineManager->dataManager()){ if (m_scriptEngineManager->dataManager()){
GroupFunction* gf = m_scriptEngineManager->dataManager()->groupFunction(name,fieldName,bandName); QString expression = "";
if (name.compare("COUNT",Qt::CaseInsensitive) == 0){
expression = " ";
} else {
expression = m_scriptEngineManager->dataManager()->getExpression(expressionID);
}
GroupFunction* gf = m_scriptEngineManager->dataManager()->groupFunction(name,expression,bandName);
if (gf){ if (gf){
if (gf->isValid()){ if (gf->isValid()){
return gf->calculate(); return gf->calculate();
@ -1316,6 +1377,19 @@ void ScriptFunctionsManager::setVariable(const QString &name, QVariant value)
DataSourceManager* dm = scriptEngineManager()->dataManager(); DataSourceManager* dm = scriptEngineManager()->dataManager();
dm->changeVariable(name,value); dm->changeVariable(name,value);
} }
QVariant ScriptFunctionsManager::getVariable(const QString &name)
{
DataSourceManager* dm = scriptEngineManager()->dataManager();
return dm->variable(name);
}
QVariant ScriptFunctionsManager::getField(const QString &field)
{
DataSourceManager* dm = scriptEngineManager()->dataManager();
return dm->fieldData(field);
}
#ifdef USE_QJSENGINE #ifdef USE_QJSENGINE
QFont ScriptFunctionsManager::font(const QString &family, int pointSize, bool bold, bool italic, bool underLine) QFont ScriptFunctionsManager::font(const QString &family, int pointSize, bool bold, bool italic, bool underLine)
{ {

View File

@ -216,7 +216,7 @@ class ScriptFunctionsManager : public QObject{
Q_OBJECT Q_OBJECT
public: public:
explicit ScriptFunctionsManager(QObject* parent = 0):QObject(parent){} explicit ScriptFunctionsManager(QObject* parent = 0):QObject(parent){}
Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& fieldName, const QString& bandName); Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& expressionID, const QString& bandName);
Q_INVOKABLE QVariant line(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 numberFormat(QVariant value, const char &format, int precision, const QString &locale);
Q_INVOKABLE QVariant dateFormat(QVariant value, const QString& format); Q_INVOKABLE QVariant dateFormat(QVariant value, const QString& format);
@ -227,6 +227,8 @@ public:
Q_INVOKABLE QVariant currencyFormat(QVariant value, const QString& locale); Q_INVOKABLE QVariant currencyFormat(QVariant value, const QString& locale);
Q_INVOKABLE QVariant currencyUSBasedFormat(QVariant value, const QString& currencySymbol); Q_INVOKABLE QVariant currencyUSBasedFormat(QVariant value, const QString& currencySymbol);
Q_INVOKABLE void setVariable(const QString& name, QVariant value); Q_INVOKABLE void setVariable(const QString& name, QVariant value);
Q_INVOKABLE QVariant getVariable(const QString& name);
Q_INVOKABLE QVariant getField(const QString& field);
Q_INVOKABLE QVariant color(const QString& color){ return QColor(color);} Q_INVOKABLE QVariant color(const QString& color){ return QColor(color);}
#ifdef USE_QJSENGINE #ifdef USE_QJSENGINE
Q_INVOKABLE QFont font(const QString& family, int pointSize = -1, bool bold = false, bool italic = false, bool underLine = false); Q_INVOKABLE QFont font(const QString& family, int pointSize = -1, bool bold = false, bool italic = false, bool underLine = false);
@ -283,6 +285,8 @@ private:
bool createCurrencyFormatFunction(); bool createCurrencyFormatFunction();
bool createCurrencyUSBasedFormatFunction(); bool createCurrencyUSBasedFormatFunction();
bool createSetVariableFunction(); bool createSetVariableFunction();
bool createGetVariableFunction();
bool createGetFieldFunction();
private: private:
ScriptEngineManager(); ScriptEngineManager();
ScriptEngineType* m_scriptEngine; ScriptEngineType* m_scriptEngine;