0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 16:44:39 +03:00
LimeReport/limereport/scripteditor/lrscripteditor.h

103 lines
2.8 KiB
C
Raw Normal View History

2017-09-13 17:16:54 +03:00
#ifndef LRSCRIPTEDITOR_H
#define LRSCRIPTEDITOR_H
#include "lrcompletermodel.h"
2017-09-13 17:16:54 +03:00
#include <QCompleter>
#include <QKeyEvent>
#include <QScrollBar>
#include <QStandardItemModel>
#include <QTextEdit>
#include <QWidget>
2017-09-13 17:16:54 +03:00
namespace LimeReport {
2017-09-13 17:16:54 +03:00
2017-11-24 00:13:47 +03:00
class ReportEnginePrivateInterface;
2017-09-13 17:16:54 +03:00
class BaseDesignIntf;
2017-09-21 00:44:09 +03:00
class PageDesignIntf;
class BandDesignIntf;
2017-10-05 01:27:04 +03:00
class DataSourceManager;
2017-09-13 17:16:54 +03:00
namespace Ui {
class ScriptEditor;
2017-09-13 17:16:54 +03:00
}
struct CacheItem {
QList<QSharedPointer<CompleterItem>> propsItems;
QList<QSharedPointer<CompleterItem>> slotsItems;
};
class ReportStructureCompleater: public QCompleter {
Q_OBJECT
public:
explicit ReportStructureCompleater(QObject* parent = 0): QCompleter(parent)
{
setModel(&m_newModel);
}
explicit ReportStructureCompleater(QAbstractItemModel* model, QObject* parent = 0):
QCompleter(model, parent)
{
setModel(&m_newModel);
}
public:
// QCompleter interface
QString pathFromIndex(const QModelIndex& index) const;
QStringList splitPath(const QString& path) const;
void updateCompleaterModel(ReportEnginePrivateInterface* report);
void updateCompleaterModel(DataSourceManager* dataManager);
protected:
QStringList extractSignalNames(BaseDesignIntf* item);
QStringList extractProperties(BaseDesignIntf* item);
void addChildItem(BaseDesignIntf* item, const QString& pageName, CompleterItem* parent);
void addAdditionalDatawords(CompleterModel* model, DataSourceManager* dataManager);
private:
CompleterModel m_newModel;
QMap<QString, QStringList> m_properties;
QMap<QString, QStringList> m_signals;
};
class ScriptEditor: public QWidget {
2017-09-13 17:16:54 +03:00
Q_OBJECT
public:
explicit ScriptEditor(QWidget* parent = 0);
2017-09-13 17:16:54 +03:00
~ScriptEditor();
2017-11-24 00:13:47 +03:00
void setReportEngine(LimeReport::ReportEnginePrivateInterface* reportEngine);
2017-09-21 00:44:09 +03:00
void setReportPage(PageDesignIntf* page);
void setPageBand(BandDesignIntf* band);
2019-01-29 23:18:24 +03:00
void setTabIndention(int charCount);
2017-09-13 17:16:54 +03:00
void initCompleter();
2017-09-20 00:51:17 +03:00
QByteArray saveState();
void restoreState(QByteArray state);
void setPlainText(const QString& text);
2017-09-21 00:44:09 +03:00
void setEditorFont(QFont font);
QFont editorFont();
2017-09-20 00:51:17 +03:00
QString toPlainText();
2019-02-05 21:51:46 +03:00
bool hasChanges() const;
void setHasChanges(bool hasChanges);
2017-09-21 00:44:09 +03:00
signals:
void splitterMoved(int, int);
2019-02-05 21:51:46 +03:00
void textChanged();
2017-10-05 01:27:04 +03:00
protected:
void initEditor(DataSourceManager* dm);
2017-09-20 00:51:17 +03:00
private slots:
void on_twData_doubleClicked(const QModelIndex& index);
void on_twScriptEngine_doubleClicked(const QModelIndex& index);
2017-10-05 01:27:04 +03:00
void slotOnCurrentChanged(const QModelIndex& to, const QModelIndex&);
2019-02-05 21:51:46 +03:00
2017-09-13 17:16:54 +03:00
private:
Ui::ScriptEditor* ui;
2017-11-24 00:13:47 +03:00
ReportEnginePrivateInterface* m_reportEngine;
2017-09-21 00:44:09 +03:00
PageDesignIntf* m_page;
ReportStructureCompleater* m_completer;
2019-01-29 23:18:24 +03:00
int m_tabIndention;
2017-09-13 17:16:54 +03:00
};
} // namespace LimeReport
#endif // LRSCRIPTEDITOR_H