0
0
mirror of https://github.com/fralx/LimeReport.git synced 2025-11-25 00:18:06 +03:00

Define code style and format all source file using clang-format-14

except those placed in 3rdparty directories.
This commit is contained in:
Андрей Лухнов
2024-09-04 17:31:16 +03:00
parent c5b9ac265d
commit 0fca7169d3
285 changed files with 19120 additions and 17875 deletions

View File

@@ -30,16 +30,16 @@
#ifndef LRSCRIPTENGINEMANAGER_H
#define LRSCRIPTENGINEMANAGER_H
#ifdef USE_QTSCRIPTENGINE
#include <QtScript/QScriptEngine>
#include <QScriptable>
#include <QtScript/QScriptEngine>
#endif
#include <QVector>
#include <QIcon>
#include <QAbstractItemModel>
#include <QDebug>
#include <QtGlobal>
#include <QFont>
#include <QComboBox>
#include <QDebug>
#include <QFont>
#include <QIcon>
#include <QVector>
#include <QtGlobal>
//#include <QJSEngine>
@@ -48,16 +48,16 @@
#endif
#include "base/lrsingleton.h"
#include "lrglobal.h"
#include "lrscriptenginemanagerintf.h"
#include "lrcallbackdatasourceintf.h"
#include "lrcollection.h"
#include "lrdatasourceintf.h"
#include "lrdatasourcemanagerintf.h"
#include "lrglobal.h"
#include "lrhorizontallayout.h"
#include "lrscriptenginemanagerintf.h"
#include "lrverticallayout.h"
namespace LimeReport{
namespace LimeReport {
class DataSourceManager;
class BaseDesignIntf;
@@ -66,29 +66,32 @@ class BandDesignIntf;
struct ContentItem {
QString content;
int indent;
int pageNumber;
int indent;
int pageNumber;
QString uniqKey;
};
class TableOfContents : public QObject{
class TableOfContents: public QObject {
Q_OBJECT
public:
TableOfContents(QObject* parent = 0):QObject(parent){}
TableOfContents(QObject* parent = 0): QObject(parent) { }
~TableOfContents();
void setItem(const QString& uniqKey, const QString& content, int pageNumber, int indent = 0);
void clear();
bool isEmpty(){ return m_tableOfContents.isEmpty();}
bool isEmpty() { return m_tableOfContents.isEmpty(); }
private slots:
void slotOneSlotDS(LimeReport::CallbackInfo info, QVariant &data);
void slotOneSlotDS(LimeReport::CallbackInfo info, QVariant& data);
private:
QVector<ContentItem*> m_tableOfContents;
QHash<QString, ContentItem* > m_hash;
QVector<ContentItem*> m_tableOfContents;
QHash<QString, ContentItem*> m_hash;
};
struct ScriptFunctionDesc{
enum FuncType {Native,Script};
struct ScriptFunctionDesc {
enum FuncType {
Native,
Script
};
ScriptValueType scriptValue;
QString name;
QString description;
@@ -98,78 +101,87 @@ struct ScriptFunctionDesc{
class ScriptEngineNode {
public:
enum NodeType{Root, Category, Function, Dialog, DialogElement};
ScriptEngineNode(const QString& name = "", const QString& description = "", NodeType type = Root,
ScriptEngineNode* parent = 0, const QIcon& icon = QIcon());
enum NodeType {
Root,
Category,
Function,
Dialog,
DialogElement
};
ScriptEngineNode(const QString& name = "", const QString& description = "",
NodeType type = Root, ScriptEngineNode* parent = 0,
const QIcon& icon = QIcon());
virtual ~ScriptEngineNode();
int childCount(){return m_childs.count();}
ScriptEngineNode* child(int index){return m_childs[index];}
ScriptEngineNode* parent(){return m_parent;}
ScriptEngineNode* addChild(const QString& name = "", const QString &description = "",
int childCount() { return m_childs.count(); }
ScriptEngineNode* child(int index) { return m_childs[index]; }
ScriptEngineNode* parent() { return m_parent; }
ScriptEngineNode* addChild(const QString& name = "", const QString& description = "",
NodeType type = Root, const QIcon& icon = QIcon());
int row();
QString name(){return m_name;}
QString description(){return m_description;}
QIcon icon(){return m_icon;}
void clear();
NodeType type(){return m_type;}
int row();
QString name() { return m_name; }
QString description() { return m_description; }
QIcon icon() { return m_icon; }
void clear();
NodeType type() { return m_type; }
private:
QString m_name;
QString m_description;
QIcon m_icon;
NodeType m_type;
ScriptEngineNode* m_parent;
QString m_name;
QString m_description;
QIcon m_icon;
NodeType m_type;
ScriptEngineNode* m_parent;
QVector<ScriptEngineNode*> m_childs;
};
class ScriptEngineManager;
class ScriptEngineModel : public QAbstractItemModel{
class ScriptEngineModel: public QAbstractItemModel {
Q_OBJECT
public:
friend class ScriptEngineManager;
explicit ScriptEngineModel():m_scriptManager(0), m_rootNode(new ScriptEngineNode()){}
explicit ScriptEngineModel(): m_scriptManager(0), m_rootNode(new ScriptEngineNode()) { }
explicit ScriptEngineModel(ScriptEngineManager* scriptManager);
~ScriptEngineModel();
QModelIndex parent(const QModelIndex &child) const;
QModelIndex index(int row, int column, const QModelIndex &parent) const;
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QModelIndex parent(const QModelIndex& child) const;
QModelIndex index(int row, int column, const QModelIndex& parent) const;
int rowCount(const QModelIndex& parent) const;
int columnCount(const QModelIndex& parent) const;
QVariant data(const QModelIndex& index, int role) const;
void setScriptEngineManager(ScriptEngineManager* scriptManager);
inline ScriptEngineManager* scriptEngineManager(){return m_scriptManager;}
inline ScriptEngineManager* scriptEngineManager() { return m_scriptManager; }
private slots:
void slotScriptEngineChanged();
private:
ScriptEngineNode* nodeFromIndex(const QModelIndex &index) const;
ScriptEngineNode* nodeFromIndex(const QModelIndex& index) const;
void updateModel();
private:
ScriptEngineManager* m_scriptManager;
ScriptEngineNode* m_rootNode;
};
class DialogDescriber : public QObject
{
class DialogDescriber: public QObject {
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QByteArray description READ description WRITE setDescription)
public:
typedef QSharedPointer<DialogDescriber> Ptr;
static Ptr create(const QString& name, const QByteArray &desc);
static Ptr create(){return Ptr(new DialogDescriber);}
static Ptr create(const QString& name, const QByteArray& desc);
static Ptr create() { return Ptr(new DialogDescriber); }
QString name() const;
void setName(const QString& name);
QByteArray description() const;
void setDescription(const QByteArray& description);
private :
private:
QString m_name;
QByteArray m_description;
};
typedef QList< QSharedPointer<PageItemDesignIntf> > ReportPages;
typedef QList<QSharedPointer<PageItemDesignIntf>> ReportPages;
class ScriptEngineContext : public QObject, public ICollectionContainer
{
class ScriptEngineContext: public QObject, public ICollectionContainer {
Q_OBJECT
Q_PROPERTY(ACollectionProperty dialogs READ fakeCollectionReader)
Q_PROPERTY(QString initScript READ initScript WRITE setInitScript)
@@ -177,27 +189,32 @@ public:
#ifdef HAVE_UI_LOADER
typedef QSharedPointer<QDialog> DialogPtr;
#endif
explicit ScriptEngineContext(QObject* parent=0):
QObject(parent), m_currentBand(0), m_currentPage(0),
m_tableOfContents(new TableOfContents(this)), m_hasChanges(false) {}
explicit ScriptEngineContext(QObject* parent = 0):
QObject(parent),
m_currentBand(0),
m_currentPage(0),
m_tableOfContents(new TableOfContents(this)),
m_hasChanges(false)
{
}
#ifdef HAVE_UI_LOADER
void addDialog(const QString& name, const QByteArray& description);
bool changeDialog(const QString& name, const QByteArray &description);
bool changeDialogName(const QString& oldName, const QString& newName);
bool previewDialog(const QString& dialogName);
bool containsDialog(const QString& dialogName);
const QVector<DialogDescriber::Ptr>& dialogDescribers(){return m_dialogs;}
void deleteDialog(const QString& dialogName);
QDialog *getDialog(const QString &dialogName);
void addDialog(const QString& name, const QByteArray& description);
bool changeDialog(const QString& name, const QByteArray& description);
bool changeDialogName(const QString& oldName, const QString& newName);
bool previewDialog(const QString& dialogName);
bool containsDialog(const QString& dialogName);
const QVector<DialogDescriber::Ptr>& dialogDescribers() { return m_dialogs; }
void deleteDialog(const QString& dialogName);
QDialog* getDialog(const QString& dialogName);
QString getNewDialogName();
void initDialogs();
void initDialogs();
#endif
void baseDesignIntfToScript(const QString& pageName, BaseDesignIntf *item);
void qobjectToScript(const QString &name, QObject* item);
void clear();
void baseDesignIntfToScript(const QString& pageName, BaseDesignIntf* item);
void qobjectToScript(const QString& name, QObject* item);
void clear();
QString initScript() const;
void setInitScript(const QString& initScript);
bool runInitScript();
void setInitScript(const QString& initScript);
bool runInitScript();
BandDesignIntf* currentBand() const;
void setCurrentBand(BandDesignIntf* currentBand);
@@ -205,24 +222,24 @@ public:
void setCurrentPage(PageItemDesignIntf* currentPage);
TableOfContents* tableOfContents() const;
void setTableOfContents(TableOfContents* tableOfContents);
void dropChanges(){ m_hasChanges = false;}
bool hasChanges(){ return m_hasChanges;}
void dropChanges() { m_hasChanges = false; }
bool hasChanges() { return m_hasChanges; }
ReportPages* reportPages() const;
void setReportPages(ReportPages* value);
#ifdef HAVE_UI_LOADER
signals:
void dialogNameChanged(QString dialogName);
void dialogDeleted(QString dialogName);
void dialogAdded(QString dialogName);
void dialogNameChanged(QString dialogName);
void dialogDeleted(QString dialogName);
void dialogAdded(QString dialogName);
#endif
protected:
QObject* createElement(const QString& collectionName,const QString& elementType);
int elementsCount(const QString& collectionName);
QObject* elementAt(const QString& collectionName,int index);
void collectionLoadFinished(const QString &collectionName);
QObject* createElement(const QString& collectionName, const QString& elementType);
int elementsCount(const QString& collectionName);
QObject* elementAt(const QString& collectionName, int index);
void collectionLoadFinished(const QString& collectionName);
#ifdef HAVE_UI_LOADER
QDialog *createDialog(DialogDescriber *cont);
QDialog *findDialog(const QString &dialogName);
QDialog* createDialog(DialogDescriber* cont);
QDialog* findDialog(const QString& dialogName);
DialogDescriber* findDialogContainer(const QString& dialogName);
#endif
private:
@@ -239,88 +256,95 @@ private:
ReportPages* m_reportPages;
};
class JSFunctionDesc{
class JSFunctionDesc {
public:
JSFunctionDesc(){}
JSFunctionDesc(const QString& functionName,
const QString& functionCategory,
const QString& functionDescription,
const QString& functionManagerName,
QObject* functionManager,
const QString& functionScriptWrapper
): m_name(functionName), m_category(functionCategory), m_description(functionDescription),
m_managerName(functionManagerName), m_manager(functionManager), m_scriptWrapper(functionScriptWrapper)
{}
JSFunctionDesc() { }
JSFunctionDesc(const QString& functionName, const QString& functionCategory,
const QString& functionDescription, const QString& functionManagerName,
QObject* functionManager, const QString& functionScriptWrapper):
m_name(functionName),
m_category(functionCategory),
m_description(functionDescription),
m_managerName(functionManagerName),
m_manager(functionManager),
m_scriptWrapper(functionScriptWrapper)
{
}
QString name() const;
void setName(const QString &name);
void setName(const QString& name);
QString category() const;
void setCategory(const QString &category);
void setCategory(const QString& category);
QString description() const;
void setDescription(const QString &description);
void setDescription(const QString& description);
QString managerName() const;
void setManagerName(const QString &managerName);
void setManagerName(const QString& managerName);
QObject *manager() const;
void setManager(QObject *manager);
QObject* manager() const;
void setManager(QObject* manager);
QString scriptWrapper() const;
void setScriptWrapper(const QString &scriptWrapper);
void setScriptWrapper(const QString& scriptWrapper);
private:
QString m_name;
QString m_category;
QString m_description;
QString m_managerName;
QString m_name;
QString m_category;
QString m_description;
QString m_managerName;
QObject* m_manager;
QString m_scriptWrapper;
QString m_scriptWrapper;
};
#ifdef USE_QTSCRIPTENGINE
class ComboBoxPrototype : public QObject, public QScriptable{
class ComboBoxPrototype: public QObject, public QScriptable {
Q_OBJECT
public:
ComboBoxPrototype(QObject* parent = 0):QObject(parent){}
ComboBoxPrototype(QObject* parent = 0): QObject(parent) { }
public slots:
void addItem( const QString& text);
void addItem(const QString& text);
void addItems(const QStringList& texts);
};
#endif
class IWrapperCreator{
class IWrapperCreator {
public:
virtual QObject* createWrapper(QObject* item) = 0;
virtual ~IWrapperCreator(){}
virtual ~IWrapperCreator() { }
};
class ComboBoxWrapper : public QObject{
class ComboBoxWrapper: public QObject {
Q_OBJECT
public:
ComboBoxWrapper(QComboBox* comboBox, QObject* parent = 0) : QObject(parent), m_comboBox(comboBox){}
Q_INVOKABLE void addItems(const QStringList& texts){ m_comboBox->addItems(texts);}
Q_INVOKABLE void addItem(const QString& text){ m_comboBox->addItem(text);}
ComboBoxWrapper(QComboBox* comboBox, QObject* parent = 0): QObject(parent), m_comboBox(comboBox)
{
}
Q_INVOKABLE void addItems(const QStringList& texts) { m_comboBox->addItems(texts); }
Q_INVOKABLE void addItem(const QString& text) { m_comboBox->addItem(text); }
private:
QComboBox* m_comboBox;
};
class ComboBoxWrapperCreator: public IWrapperCreator{
class ComboBoxWrapperCreator: public IWrapperCreator {
private:
QObject* createWrapper(QObject* item);
};
class TableBuilder: public QObject{
class TableBuilder: public QObject {
Q_OBJECT
public:
TableBuilder(LimeReport::HorizontalLayout* layout, DataSourceManager* dataManager);
~TableBuilder(){delete m_patternLayout;}
~TableBuilder() { delete m_patternLayout; }
Q_INVOKABLE QObject* addRow();
Q_INVOKABLE QObject* currentRow();
Q_INVOKABLE void fillInRowData(QObject* row);
Q_INVOKABLE void buildTable(const QString& datasourceName);
private:
void checkBaseLayout();
private:
LimeReport::HorizontalLayout* m_horizontalLayout;
LimeReport::HorizontalLayout* m_patternLayout;
@@ -328,92 +352,110 @@ private:
DataSourceManager* m_dataManager;
};
class DatasourceFunctions : public QObject{
class DatasourceFunctions: public QObject {
Q_OBJECT
public:
explicit DatasourceFunctions(IDataSourceManager* dataManager)
: m_dataManager(dynamic_cast<DataSourceManager*>(dataManager)){}
explicit DatasourceFunctions(IDataSourceManager* dataManager):
m_dataManager(dynamic_cast<DataSourceManager*>(dataManager))
{
}
Q_INVOKABLE bool first(const QString& datasourceName);
Q_INVOKABLE bool next(const QString& datasourceName);
Q_INVOKABLE bool prior(const QString& datasourceName);
Q_INVOKABLE bool isEOF(const QString& datasourceName);
Q_INVOKABLE int rowCount(const QString& datasourceName);
Q_INVOKABLE bool invalidate(const QString& datasourceName);
Q_INVOKABLE QObject *createTableBuilder(QObject *horizontalLayout);
Q_INVOKABLE QObject* createTableBuilder(QObject* horizontalLayout);
private:
DataSourceManager* m_dataManager;
};
class ScriptFunctionsManager : public QObject{
class ScriptFunctionsManager: public QObject {
Q_OBJECT
public:
explicit ScriptFunctionsManager(QObject* parent = 0):QObject(parent){
m_wrappersFactory.insert("QComboBox",new ComboBoxWrapperCreator());
explicit ScriptFunctionsManager(QObject* parent = 0): QObject(parent)
{
m_wrappersFactory.insert("QComboBox", new ComboBoxWrapperCreator());
}
~ScriptFunctionsManager(){
foreach(IWrapperCreator* wrapper, m_wrappersFactory.values()){ delete wrapper;} m_wrappersFactory.clear();
~ScriptFunctionsManager()
{
foreach (IWrapperCreator* wrapper, m_wrappersFactory.values()) {
delete wrapper;
}
m_wrappersFactory.clear();
}
Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& expressionID, const QString& bandName, QObject* currentPage);
Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& expressionID, const QString& bandName);
Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& expressionID,
const QString& bandName, QObject* currentPage);
Q_INVOKABLE QVariant calcGroupFunction(const QString& name, const QString& expressionID,
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, const QString& locale);
Q_INVOKABLE QVariant timeFormat(QVariant value, const QString& format);
Q_INVOKABLE QVariant dateTimeFormat(QVariant value, const QString& format, const QString& locale);
Q_INVOKABLE QVariant dateTimeFormat(QVariant value, const QString& format,
const QString& locale);
Q_INVOKABLE QVariant sectotimeFormat(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 void setVariable(const QString& name, QVariant value);
Q_INVOKABLE QVariant getVariable(const QString& name);
Q_INVOKABLE QVariant getField(const QString& field);
Q_INVOKABLE QVariant getFieldByKeyField(const QString& datasourceName, const QString& valueFieldName, const QString& keyFieldName, QVariant keyValue);
Q_INVOKABLE QVariant getFieldByKeyField(const QString& datasourceName,
const QString& valueFieldName,
const QString& keyFieldName, QVariant keyValue);
Q_INVOKABLE QVariant getFieldByRowIndex(const QString& fieldName, int rowIndex);
Q_INVOKABLE void reopenDatasource(const QString& datasourceName);
Q_INVOKABLE QVariant color(const QString& color){ return QColor(color);}
Q_INVOKABLE void addBookmark(const QString& uniqKey, const QString& content);
Q_INVOKABLE int findPageIndexByBookmark(const QString &uniqKey);
Q_INVOKABLE void addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent = 0);
Q_INVOKABLE void clearTableOfContents();
Q_INVOKABLE QFont font(const QString& family, int pointSize = -1, bool bold = false, bool italic = false, bool underLine = false);
Q_INVOKABLE void reopenDatasource(const QString& datasourceName);
Q_INVOKABLE QVariant color(const QString& color) { return QColor(color); }
Q_INVOKABLE void addBookmark(const QString& uniqKey, const QString& content);
Q_INVOKABLE int findPageIndexByBookmark(const QString& uniqKey);
Q_INVOKABLE void addTableOfContentsItem(const QString& uniqKey, const QString& content,
int indent = 0);
Q_INVOKABLE void clearTableOfContents();
Q_INVOKABLE QFont font(const QString& family, int pointSize = -1, bool bold = false,
bool italic = false, bool underLine = false);
/*!
* \brief getFieldByRowIndexEx Выдает для поля значение заданной роли
* \param fieldName имя источника данных + имя поля
* \param rowIndex индекс строки
* \param role код роли
* \return
*/
Q_INVOKABLE QVariant getFieldByRowIndexEx(const QString &fieldName, int rowIndex, const int role);
*/
Q_INVOKABLE QVariant getFieldByRowIndexEx(const QString& fieldName, int rowIndex,
const int role);
/*!
* \brief getFieldByRowIndexEx2 Выдает для поля значение заданной роли
* \param fieldName имя источника данных + имя поля
* \param rowIndex индекс строки
* \param roleName имя роли из roleNames()
* \return
*/
Q_INVOKABLE QVariant getFieldByRowIndexEx2(const QString &fieldName, int rowIndex, const QString &roleName);
*/
Q_INVOKABLE QVariant getFieldByRowIndexEx2(const QString& fieldName, int rowIndex,
const QString& roleName);
/*!
* \brief getHeaderData Выдает для поля заголовка значение заданной роли
* \param fieldName имя источника данных + имя поля
* \param role имя роли из roleNames()
* \return
*/
Q_INVOKABLE QVariant getHeaderData(const QString &fieldName, const QString &roleName);
*/
Q_INVOKABLE QVariant getHeaderData(const QString& fieldName, const QString& roleName);
/*!
* \brief getHeaderColumnNameByIndex Выдает имя колонки по ее индексу (имя используемое LR)
* \param datasourceName имя источника данных
* \param columnIndex индекс колонки
* \return
*/
Q_INVOKABLE QVariant getHeaderColumnNameByIndex(const QString &datasourceName, const int columnIndex);
*/
Q_INVOKABLE QVariant getHeaderColumnNameByIndex(const QString& datasourceName,
const int columnIndex);
/*!
* \brief getColumnCount Выдает число столбцов в источнике данных
* \param datasourceName имя источника данных
* \return возможно -1 при ошибке
*/
Q_INVOKABLE int getColumnCount(const QString &datasourceName);
*/
Q_INVOKABLE int getColumnCount(const QString& datasourceName);
#ifdef USE_QJSENGINE
Q_INVOKABLE void addItemsToComboBox(QJSValue object, const QStringList& values);
@@ -427,100 +469,126 @@ public:
Q_INVOKABLE QScriptValue createWrapper(QScriptValue item);
#endif
Q_INVOKABLE QFont font(QVariantMap params);
Q_INVOKABLE int getPageFreeSpace(QObject *page);
ScriptEngineManager *scriptEngineManager() const;
void setScriptEngineManager(ScriptEngineManager *scriptEngineManager);
static QColor createQColor(const QString& color){ return QColor(color);}
Q_INVOKABLE int getPageFreeSpace(QObject* page);
ScriptEngineManager* scriptEngineManager() const;
void setScriptEngineManager(ScriptEngineManager* scriptEngineManager);
static QColor createQColor(const QString& color) { return QColor(color); }
private:
ScriptEngineManager* m_scriptEngineManager;
QMap<QString, IWrapperCreator*> m_wrappersFactory;
};
class ScriptNode{
class ScriptNode {
public:
typedef QSharedPointer<ScriptNode> Ptr;
QString body(){
QString body()
{
if (m_body.isEmpty() && m_children.count() > 0)
return m_children.at(0)->body();
return m_children.at(0)->body();
return m_body;
}
void setBody(const QString& body){ m_body = body;}
void setStartLex(const QString startLex){ m_startLex = startLex;}
QString script(){return m_startLex + m_body + '}';}
Ptr createChildNode(){
void setBody(const QString& body) { m_body = body; }
void setStartLex(const QString startLex) { m_startLex = startLex; }
QString script() { return m_startLex + m_body + '}'; }
Ptr createChildNode()
{
Ptr result = Ptr(new ScriptNode());
m_children.append(result);
return result;
}
QVector<Ptr> children() const {return m_children;}
QVector<Ptr> children() const { return m_children; }
private:
QVector<Ptr> m_children;
QString m_body;
QString m_startLex;
};
class ScriptExtractor
{
class ScriptExtractor {
public:
enum State{None,BuksFound,SFound,StartScriptFound,OpenBracketFound,CloseBracketFound,DFound,VFound, SignFound};
enum State {
None,
BuksFound,
SFound,
StartScriptFound,
OpenBracketFound,
CloseBracketFound,
DFound,
VFound,
SignFound
};
explicit ScriptExtractor(const QString& value):
m_context(value), m_scriptTree(ScriptNode::Ptr(new ScriptNode())){}
m_context(value),
m_scriptTree(ScriptNode::Ptr(new ScriptNode()))
{
}
bool parse();
ScriptNode::Ptr scriptTree(){return m_scriptTree;}
ScriptNode::Ptr scriptTree() { return m_scriptTree; }
private:
bool isStartLexem(int &curPos, QChar value);
bool parse(int& curPos, const State &state, ScriptNode::Ptr scriptNode);
void skipField(int &curPos);
void extractScript(int& curPos, const QString &startStr, ScriptNode::Ptr scriptNode);
bool isStartLexem(int& curPos, QChar value);
bool parse(int& curPos, const State& state, ScriptNode::Ptr scriptNode);
void skipField(int& curPos);
void extractScript(int& curPos, const QString& startStr, ScriptNode::Ptr scriptNode);
bool extractBracket(int& curPos, ScriptNode::Ptr scriptNode);
bool isStartScriptLexem(int &curPos);
bool isStartFieldLexem(int &curPos);
bool isStartVariableLexem(int &curPos);
bool isStartScriptLexem(int& curPos);
bool isStartFieldLexem(int& curPos);
bool isStartVariableLexem(int& curPos);
QString substring(const QString& value, int start, int end);
private:
QString m_context;
ScriptNode::Ptr m_scriptTree;
};
class ScriptEngineManager : public QObject, public Singleton<ScriptEngineManager>, public IScriptEngineManager
{
class ScriptEngineManager:
public QObject,
public Singleton<ScriptEngineManager>,
public IScriptEngineManager {
Q_OBJECT
public:
friend class Singleton<ScriptEngineManager>;
ScriptEngineType* scriptEngine(){return m_scriptEngine;}
ScriptEngineType* scriptEngine() { return m_scriptEngine; }
~ScriptEngineManager();
bool isFunctionExists(const QString& functionName) const;
void deleteFunction(const QString& functionsName);
bool addFunction(const JSFunctionDesc& functionsDescriber);
#ifdef USE_QTSCRIPTENGINE
bool addFunction(const QString &name, QScriptEngine::FunctionSignature function, const QString &category, const QString &description);
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;}
bool addFunction(const QString& name, const QString& script, const QString& category = "",
const QString& description = "");
const QString& lastError() const { return m_lastError; }
QStringList functionsNames();
const QHash<QString,ScriptFunctionDesc>& functionsDescribers(){return m_functions;}
ScriptEngineModel* model(){return m_model;}
void setContext(ScriptEngineContext* context){m_context=context;}
DataSourceManager* dataManager() const {return m_dataManager;}
const QHash<QString, ScriptFunctionDesc>& functionsDescribers() { return m_functions; }
ScriptEngineModel* model() { return m_model; }
void setContext(ScriptEngineContext* context) { m_context = context; }
DataSourceManager* dataManager() const { return m_dataManager; }
void setDataManager(DataSourceManager* dataManager);
QString expandUserVariables(QString context, RenderPass pass, ExpandType expandType, QVariant &varValue);
QString expandDataFields(QString context, ExpandType expandType, QVariant &varValue, QObject* reportItem);
QString expandScripts(QString context, QVariant &varValue, QObject* reportItem);
QString expandUserVariables(QString context, RenderPass pass, ExpandType expandType,
QVariant& varValue);
QString expandDataFields(QString context, ExpandType expandType, QVariant& varValue,
QObject* reportItem);
QString expandScripts(QString context, QVariant& varValue, QObject* reportItem);
QString replaceScripts(QString context, QVariant& varValue, QObject *reportItem, ScriptEngineType *se, ScriptNode::Ptr scriptTree);
QString replaceScripts(QString context, QVariant& varValue, QObject* reportItem,
ScriptEngineType* se, ScriptNode::Ptr scriptTree);
QVariant evaluateScript(const QString &script);
void addBookMark(const QString &uniqKey, const QString &content);
int findPageIndexByBookmark(const QString& uniqKey);
void addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent);
void clearTableOfContents();
int getPageFreeSpace(PageItemDesignIntf *page);
QVariant evaluateScript(const QString& script);
void addBookMark(const QString& uniqKey, const QString& content);
int findPageIndexByBookmark(const QString& uniqKey);
void addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent);
void clearTableOfContents();
int getPageFreeSpace(PageItemDesignIntf* page);
ScriptValueType moveQObjectToScript(QObject* object, const QString objectName);
protected:
void updateModel();
private:
Q_DISABLE_COPY(ScriptEngineManager)
bool createLineFunction();
@@ -551,18 +619,17 @@ private:
private:
ScriptEngineManager();
ScriptEngineType* m_scriptEngine;
ScriptEngineType* m_scriptEngine;
QString m_lastError;
QHash<QString,ScriptFunctionDesc> m_functions;
QHash<QString, ScriptFunctionDesc> m_functions;
ScriptEngineModel* m_model;
ScriptEngineContext* m_context;
DataSourceManager* m_dataManager;
ScriptFunctionsManager* m_functionManager;
};
#ifdef USE_QTSCRIPTENGINE
class QFontPrototype : public QObject, public QScriptable {
class QFontPrototype: public QObject, public QScriptable {
Q_OBJECT
Q_PROPERTY(QString family READ family)
Q_PROPERTY(int size READ size)
@@ -570,38 +637,51 @@ class QFontPrototype : public QObject, public QScriptable {
Q_PROPERTY(bool italic READ italic)
Q_PROPERTY(bool underline READ underline)
public:
QFontPrototype(QObject * parent = NULL) : QObject(parent) , QScriptable() {
QFontPrototype(QObject* parent = NULL): QObject(parent), QScriptable()
{
this->setObjectName("QFontPrototype");
}
QString family() const {
QString family() const
{
QFont font(qScriptValueToValue<QFont>(this->thisObject()));
return font.family();
}
int size(){
int size()
{
QFont font = qScriptValueToValue<QFont>(thisObject());
return font.pointSize();
}
bool bold(){
bool bold()
{
QFont font = qScriptValueToValue<QFont>(thisObject());
return font.bold();
}
bool italic(){
bool italic()
{
QFont font = qScriptValueToValue<QFont>(thisObject());
return font.italic();
}
bool underline(){
bool underline()
{
QFont font = qScriptValueToValue<QFont>(thisObject());
return font.underline();
}
static QScriptValue constructorQFont(QScriptContext * context, QScriptEngine * engine) {
static QScriptValue constructorQFont(QScriptContext* context, QScriptEngine* engine)
{
QFont font;
switch (context->argumentCount()) {
case 5: font.setUnderline(qScriptValueToValue<bool>(context->argument(4)));
case 4: font.setBold(qScriptValueToValue<bool>(context->argument(3)));
case 3: font.setItalic(qScriptValueToValue<bool>(context->argument(2)));
case 2: font.setPointSize(qScriptValueToValue<int>(context->argument(1)));
case 1: font.setFamily(qScriptValueToValue<QString>(context->argument(0)));
case 0: break;
case 5:
font.setUnderline(qScriptValueToValue<bool>(context->argument(4)));
case 4:
font.setBold(qScriptValueToValue<bool>(context->argument(3)));
case 3:
font.setItalic(qScriptValueToValue<bool>(context->argument(2)));
case 2:
font.setPointSize(qScriptValueToValue<int>(context->argument(1)));
case 1:
font.setFamily(qScriptValueToValue<QString>(context->argument(0)));
case 0:
break;
default:
break;
}
@@ -610,7 +690,7 @@ public:
};
#endif
}
} // namespace LimeReport
#ifdef USE_QTSCRIPTENGINE
Q_DECLARE_METATYPE(LimeReport::ComboBoxPrototype*)
Q_DECLARE_METATYPE(QComboBox*)