diff --git a/kexi/plugins/CMakeLists.txt b/kexi/plugins/CMakeLists.txt --- a/kexi/plugins/CMakeLists.txt +++ b/kexi/plugins/CMakeLists.txt @@ -1,17 +1,23 @@ add_definitions(-DKDE_DEFAULT_DEBUG_AREA=44021) +CHECK_SYMBOL_EXISTS(KREPORT_SCRIPTING "KReport/config-kreport.h" HAVE_KREPORT_SCRIPTING) +macro_log_feature(HAVE_KREPORT_SCRIPTING "libKReport Scripting Support" "KReport Scripting Library" "http://www.kde.org" FALSE "" "Required by Kexi report plugin") if (KEXI_MOBILE) else () add_subdirectory( tables ) add_subdirectory( queries ) add_subdirectory( forms ) - add_subdirectory( reports ) + + if (HAVE_KREPORT_SCRIPTING) + add_subdirectory( reports ) + endif () # KEXI3 TODO add_subdirectory( migration ) add_subdirectory( importexport ) if(SHOULD_BUILD_FEATURE_SCRIPTING AND KEXI_SCRIPTS_SUPPORT) # KEXI3 TODO add_subdirectory(scripting) endif() # KEXI3 TODO add_subdirectory( shapes ) endif () + \ No newline at end of file diff --git a/kexi/plugins/reports/kexidbreportdata.h b/kexi/plugins/reports/kexidbreportdata.h --- a/kexi/plugins/reports/kexidbreportdata.h +++ b/kexi/plugins/reports/kexidbreportdata.h @@ -25,6 +25,7 @@ #include #include +#include #include /** @@ -65,10 +66,8 @@ virtual qint64 recordCount() const; //Utility Functions -#ifdef KREPORT_SCRIPTING - virtual QStringList scriptList(const QString& language) const; - virtual QString scriptCode(const QString& script, const QString& language) const; -#endif + virtual QStringList scriptList() const; + virtual QString scriptCode(const QString& script) const; virtual QStringList dataSources() const; virtual KoReportData* data(const QString&); diff --git a/kexi/plugins/reports/kexidbreportdata.cpp b/kexi/plugins/reports/kexidbreportdata.cpp --- a/kexi/plugins/reports/kexidbreportdata.cpp +++ b/kexi/plugins/reports/kexidbreportdata.cpp @@ -285,17 +285,15 @@ return 1; } -#ifdef KREPORT_SCRIPTING -QStringList KexiDBReportData::scriptList(const QString& interpreter) const +QStringList KexiDBReportData::scriptList() const { QStringList scripts; if( d->connection) { QList scriptids = d->connection->objectIds(KexiPart::ScriptObjectType); QStringList scriptnames = d->connection->objectNames(KexiPart::ScriptObjectType); qDebug() << scriptids << scriptnames; - qDebug() << interpreter; //A blank entry scripts << ""; @@ -311,7 +309,7 @@ QDomElement scriptelem = domdoc.namedItem("script").toElement(); if (parsed && !scriptelem.isNull()) { - if (interpreter == scriptelem.attribute("language") && scriptelem.attribute("scripttype") == "object") { + if (scriptelem.attribute("scripttype") == "object" && (scriptelem.attribute("language").compare(QLatin1String("javascript"), Qt::CaseInsensitive) || scriptelem.attribute("language").compare(QLatin1String("qtscript"), Qt::CaseInsensitive))) { scripts << scriptnames[i]; } } else { @@ -328,7 +326,7 @@ return scripts; } -QString KexiDBReportData::scriptCode(const QString& scriptname, const QString& language) const +QString KexiDBReportData::scriptCode(const QString& scriptname) const { QString scripts; @@ -358,11 +356,10 @@ } QString interpretername = scriptelem.attribute("language"); - qDebug() << language << interpretername; qDebug() << scriptelem.attribute("scripttype"); qDebug() << scriptname << scriptnames[i]; - if (language == interpretername && (scriptelem.attribute("scripttype") == "module" || scriptname == scriptnames[i])) { + if (((interpretername.compare(QLatin1String("javascript"), Qt::CaseInsensitive) || interpretername.compare(QLatin1String("qtscript"), Qt::CaseInsensitive)) && scriptelem.attribute("scripttype") == "module") || scriptname == scriptnames[i]) { scripts += '\n' + scriptelem.text().toUtf8(); } ++i; @@ -373,7 +370,6 @@ } return scripts; } -#endif QStringList KexiDBReportData::dataSources() const { diff --git a/kexi/plugins/reports/kexireportview.h b/kexi/plugins/reports/kexireportview.h --- a/kexi/plugins/reports/kexireportview.h +++ b/kexi/plugins/reports/kexireportview.h @@ -23,6 +23,7 @@ #include +#include #include #include @@ -32,10 +33,8 @@ class KoReportPreRenderer; class ORODocument; class KReportView; -#ifdef KREPORT_SCRIPTING -class KexiScriptAdaptor; +//! @todo KEXI3 class KexiScriptAdaptor; class KRScriptFunctions; -#endif #ifndef KEXI_MOBILE class KexiRecordNavigator; #endif @@ -74,10 +73,8 @@ KexiReportPart::TempData* tempData() const; KoReportData* sourceData(QDomElement e); -#ifdef KREPORT_SCRIPTING - KexiScriptAdaptor *m_kexi; + //!todo KEXI3 KexiScriptAdaptor *m_kexi; KRScriptFunctions *m_functions; -#endif KoReportRendererFactory m_factory; //! @todo KEXI3 add equivalent of kfiledialog:/// for lastExportPathOrVariable diff --git a/kexi/plugins/reports/kexireportview.cpp b/kexi/plugins/reports/kexireportview.cpp --- a/kexi/plugins/reports/kexireportview.cpp +++ b/kexi/plugins/reports/kexireportview.cpp @@ -31,9 +31,7 @@ #include #include -#ifdef KREPORT_SCRIPTING -#include "../scripting/kexiscripting/kexiscriptadaptor.h" -#endif +//!todo KEXI3 #include "../scripting/kexiscripting/kexiscriptadaptor.h" #include #include @@ -167,10 +165,6 @@ { qDebug(); delete m_preRenderer; -#ifdef KREPORT_SCRIPTING - delete m_kexi; - delete m_functions; -#endif delete m_reportDocument; } @@ -402,23 +396,16 @@ m_preRenderer->setName(window()->partItem()->name()); -#ifdef KREPORT_SCRIPTING //Add a kexi object to provide kexidb and extra functionality - if(!m_kexi) { - m_kexi = new KexiScriptAdaptor(); - } - m_preRenderer->registerScriptObject(m_kexi, "Kexi"); +//!todo KEXI3 if we want this if(!m_kexi) { +// m_kexi = new KexiScriptAdaptor(); +// } +// m_preRenderer->registerScriptObject(m_kexi, "Kexi"); //If using a kexidb source, add a functions scripting object if (tempData()->connectionDefinition.attribute("type") == "internal") { - //Delete old functions - if (m_functions) { - delete m_functions; - } - m_functions = new KRScriptFunctions(reportData, KexiMainWindowIface::global()->project()->dbConnection()); m_preRenderer->registerScriptObject(m_functions, "field"); } -#endif if (m_reportDocument) { qDebug() << "=======================================Deleting old document"; diff --git a/kexi/plugins/reports/krscriptfunctions.cpp b/kexi/plugins/reports/krscriptfunctions.cpp --- a/kexi/plugins/reports/krscriptfunctions.cpp +++ b/kexi/plugins/reports/krscriptfunctions.cpp @@ -28,7 +28,10 @@ { m_cursor = kodata; m_connection = conn; - m_source = kodata->sourceName(); + + if (kodata) { + m_source = kodata->sourceName(); + } } KRScriptFunctions::~KRScriptFunctions() @@ -42,24 +45,23 @@ qreal KRScriptFunctions::math(const QString &function, const QString &field) { - qreal ret; + QString ret = QLatin1String("0.0"); + + if (!m_connection) { + return 0.0; + } + KDbEscapedString sql = KDbEscapedString("SELECT " + function + "(" + field + ") FROM (" + m_source + ")"); if (!m_where.isEmpty()) { sql += " WHERE(" + m_where + ')'; } qDebug() << sql; - KDbCursor *curs = m_connection->executeQuery(sql); - if (curs) { - ret = curs->value(0).toDouble(); - } else { - ret = 0.0; - } - delete curs; + m_connection->querySingleString(sql,&ret); - return ret; + return ret.toDouble(); } qreal KRScriptFunctions::sum(const QString &field)