mirror of
https://github.com/fralx/LimeReport.git
synced 2024-12-26 01:24:39 +03:00
Merge pull request #75 from asmaloney/add-file-watcher
Optionally monitor changes to files loaded with ReportEngine::loadFromFile()
This commit is contained in:
commit
36ed9443f7
@ -82,7 +82,7 @@ public:
|
|||||||
void setShowProgressDialog(bool value);
|
void setShowProgressDialog(bool value);
|
||||||
IDataSourceManager* dataManager();
|
IDataSourceManager* dataManager();
|
||||||
IScriptEngineManager* scriptManager();
|
IScriptEngineManager* scriptManager();
|
||||||
bool loadFromFile(const QString& fileName);
|
bool loadFromFile(const QString& fileName, bool autoLoadPreviewOnChange = false);
|
||||||
bool loadFromByteArray(QByteArray *data);
|
bool loadFromByteArray(QByteArray *data);
|
||||||
bool loadFromString(const QString& data);
|
bool loadFromString(const QString& data);
|
||||||
QString reportFileName();
|
QString reportFileName();
|
||||||
|
@ -136,6 +136,11 @@ void PreviewReportWindow::initPreview(int pagesCount)
|
|||||||
m_pagesNavigator->setValue(1);
|
m_pagesNavigator->setValue(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PreviewReportWindow::reloadPreview()
|
||||||
|
{
|
||||||
|
m_previewReportWidget->refreshPages();
|
||||||
|
}
|
||||||
|
|
||||||
void PreviewReportWindow::setSettings(QSettings* value)
|
void PreviewReportWindow::setSettings(QSettings* value)
|
||||||
{
|
{
|
||||||
if (m_ownedSettings)
|
if (m_ownedSettings)
|
||||||
|
@ -60,6 +60,7 @@ public:
|
|||||||
void setPages(ReportPages pages);
|
void setPages(ReportPages pages);
|
||||||
void exec();
|
void exec();
|
||||||
void initPreview(int pagesCount);
|
void initPreview(int pagesCount);
|
||||||
|
void reloadPreview();
|
||||||
void setSettings(QSettings* value);
|
void setSettings(QSettings* value);
|
||||||
void setErrorMessages(const QStringList& value);
|
void setErrorMessages(const QStringList& value);
|
||||||
void setToolBarVisible(bool value);
|
void setToolBarVisible(bool value);
|
||||||
|
@ -288,7 +288,7 @@ bool ReportDesignWidget::save()
|
|||||||
|
|
||||||
bool ReportDesignWidget::loadFromFile(const QString &fileName)
|
bool ReportDesignWidget::loadFromFile(const QString &fileName)
|
||||||
{
|
{
|
||||||
if (m_report->loadFromFile(fileName)){
|
if (m_report->loadFromFile(fileName,false)){
|
||||||
createTabs();
|
createTabs();
|
||||||
//connectPage(m_report->pageAt(0));
|
//connectPage(m_report->pageAt(0));
|
||||||
m_scriptEditor->setPlainText(m_report->scriptContext()->initScript());
|
m_scriptEditor->setPlainText(m_report->scriptContext()->initScript());
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
|
#include <QFileSystemWatcher>
|
||||||
|
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
|
|
||||||
@ -59,13 +60,15 @@ ReportEnginePrivate::ReportEnginePrivate(QObject *parent) :
|
|||||||
m_printer(new QPrinter(QPrinter::HighResolution)), m_printerSelected(false),
|
m_printer(new QPrinter(QPrinter::HighResolution)), m_printerSelected(false),
|
||||||
m_showProgressDialog(true), m_reportName(""), m_activePreview(0),
|
m_showProgressDialog(true), m_reportName(""), m_activePreview(0),
|
||||||
m_previewWindowIcon(":/report/images/logo32"), m_previewWindowTitle(tr("Preview")),
|
m_previewWindowIcon(":/report/images/logo32"), m_previewWindowTitle(tr("Preview")),
|
||||||
m_reportRendering(false), m_resultIsEditable(true), m_passPhrase("HjccbzHjlbyfCkjy")
|
m_reportRendering(false), m_resultIsEditable(true), m_passPhrase("HjccbzHjlbyfCkjy"),
|
||||||
|
m_fileWatcher( new QFileSystemWatcher( this ) )
|
||||||
{
|
{
|
||||||
m_datasources = new DataSourceManager(this);
|
m_datasources = new DataSourceManager(this);
|
||||||
m_datasources->setReportSettings(&m_reportSettings);
|
m_datasources->setReportSettings(&m_reportSettings);
|
||||||
m_scriptEngineContext = new ScriptEngineContext(this);
|
m_scriptEngineContext = new ScriptEngineContext(this);
|
||||||
m_datasources->setObjectName("datasources");
|
m_datasources->setObjectName("datasources");
|
||||||
connect(m_datasources,SIGNAL(loadCollectionFinished(QString)),this,SLOT(slotDataSourceCollectionLoaded(QString)));
|
connect(m_datasources,SIGNAL(loadCollectionFinished(QString)),this,SLOT(slotDataSourceCollectionLoaded(QString)));
|
||||||
|
connect(m_fileWatcher,SIGNAL(fileChanged(const QString &)),this,SLOT(slotLoadFromFile(const QString &)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ReportEnginePrivate::~ReportEnginePrivate()
|
ReportEnginePrivate::~ReportEnginePrivate()
|
||||||
@ -457,6 +460,63 @@ void ReportEnginePrivate::setCurrentReportsDir(const QString &dirName)
|
|||||||
m_reportsDir = dirName;
|
m_reportsDir = dirName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ReportEnginePrivate::slotLoadFromFile(const QString &fileName)
|
||||||
|
{
|
||||||
|
PreviewReportWindow *currentPreview = qobject_cast<PreviewReportWindow *>(m_activePreview);
|
||||||
|
|
||||||
|
if (!QFile::exists(fileName))
|
||||||
|
{
|
||||||
|
if ( hasActivePreview() )
|
||||||
|
{
|
||||||
|
QMessageBox::information( NULL,
|
||||||
|
tr( "Report File Change" ),
|
||||||
|
tr( "The report file \"%1\" has changed names or been deleted.\n\nThis preview is no longer valid." ).arg( fileName )
|
||||||
|
);
|
||||||
|
|
||||||
|
clearReport();
|
||||||
|
|
||||||
|
currentPreview->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearReport();
|
||||||
|
|
||||||
|
ItemsReaderIntf::Ptr reader = FileXMLReader::create(fileName);
|
||||||
|
reader->setPassPhrase(m_passPhrase);
|
||||||
|
if (reader->first()){
|
||||||
|
if (reader->readItem(this)){
|
||||||
|
m_fileName=fileName;
|
||||||
|
QFileInfo fi(fileName);
|
||||||
|
m_reportName = fi.fileName();
|
||||||
|
|
||||||
|
QString dbSettingFileName = fi.absolutePath()+"/"+fi.baseName()+".db";
|
||||||
|
if (QFile::exists(dbSettingFileName)){
|
||||||
|
QSettings dbcredentals(dbSettingFileName, QSettings::IniFormat);
|
||||||
|
foreach (ConnectionDesc* connection, dataManager()->conections()) {
|
||||||
|
if (!connection->keepDBCredentials()){
|
||||||
|
dbcredentals.beginGroup(connection->name());
|
||||||
|
connection->setUserName(dbcredentals.value("user").toString());
|
||||||
|
connection->setPassword(dbcredentals.value("password").toString());
|
||||||
|
dbcredentals.endGroup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dataManager()->connectAutoConnections();
|
||||||
|
|
||||||
|
if ( hasActivePreview() )
|
||||||
|
{
|
||||||
|
currentPreview->reloadPreview();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
m_lastError = reader->lastError();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void ReportEnginePrivate::cancelRender()
|
void ReportEnginePrivate::cancelRender()
|
||||||
{
|
{
|
||||||
if (m_reportRender)
|
if (m_reportRender)
|
||||||
@ -509,39 +569,20 @@ QSettings*ReportEnginePrivate::settings()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReportEnginePrivate::loadFromFile(const QString &fileName)
|
bool ReportEnginePrivate::loadFromFile(const QString &fileName, bool autoLoadPreviewOnChange)
|
||||||
{
|
{
|
||||||
if (!QFile::exists(fileName)) return false;
|
// only watch one file at a time
|
||||||
|
if ( !m_fileWatcher->files().isEmpty() )
|
||||||
clearReport();
|
{
|
||||||
|
m_fileWatcher->removePaths( m_fileWatcher->files() );
|
||||||
ItemsReaderIntf::Ptr reader = FileXMLReader::create(fileName);
|
|
||||||
reader->setPassPhrase(m_passPhrase);
|
|
||||||
if (reader->first()){
|
|
||||||
if (reader->readItem(this)){
|
|
||||||
m_fileName=fileName;
|
|
||||||
QFileInfo fi(fileName);
|
|
||||||
m_reportName = fi.fileName();
|
|
||||||
|
|
||||||
QString dbSettingFileName = fi.absolutePath()+"/"+fi.baseName()+".db";
|
|
||||||
if (QFile::exists(dbSettingFileName)){
|
|
||||||
QSettings dbcredentals(dbSettingFileName, QSettings::IniFormat);
|
|
||||||
foreach (ConnectionDesc* connection, dataManager()->conections()) {
|
|
||||||
if (!connection->keepDBCredentials()){
|
|
||||||
dbcredentals.beginGroup(connection->name());
|
|
||||||
connection->setUserName(dbcredentals.value("user").toString());
|
|
||||||
connection->setPassword(dbcredentals.value("password").toString());
|
|
||||||
dbcredentals.endGroup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dataManager()->connectAutoConnections();
|
if ( autoLoadPreviewOnChange )
|
||||||
return true;
|
{
|
||||||
};
|
m_fileWatcher->addPath( fileName );
|
||||||
}
|
}
|
||||||
m_lastError = reader->lastError();
|
|
||||||
return false;
|
return slotLoadFromFile( fileName );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReportEnginePrivate::loadFromByteArray(QByteArray* data, const QString &name){
|
bool ReportEnginePrivate::loadFromByteArray(QByteArray* data, const QString &name){
|
||||||
@ -880,10 +921,10 @@ IScriptEngineManager* ReportEngine::scriptManager()
|
|||||||
return d->scriptManagerIntf();
|
return d->scriptManagerIntf();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReportEngine::loadFromFile(const QString &fileName)
|
bool ReportEngine::loadFromFile(const QString &fileName, bool autoLoadPreviewOnChange)
|
||||||
{
|
{
|
||||||
Q_D(ReportEngine);
|
Q_D(ReportEngine);
|
||||||
return d->loadFromFile(fileName);
|
return d->loadFromFile(fileName, autoLoadPreviewOnChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReportEngine::loadFromByteArray(QByteArray* data){
|
bool ReportEngine::loadFromByteArray(QByteArray* data){
|
||||||
|
@ -82,7 +82,7 @@ public:
|
|||||||
void setShowProgressDialog(bool value);
|
void setShowProgressDialog(bool value);
|
||||||
IDataSourceManager* dataManager();
|
IDataSourceManager* dataManager();
|
||||||
IScriptEngineManager* scriptManager();
|
IScriptEngineManager* scriptManager();
|
||||||
bool loadFromFile(const QString& fileName);
|
bool loadFromFile(const QString& fileName, bool autoLoadPreviewOnChange = false);
|
||||||
bool loadFromByteArray(QByteArray *data);
|
bool loadFromByteArray(QByteArray *data);
|
||||||
bool loadFromString(const QString& data);
|
bool loadFromString(const QString& data);
|
||||||
QString reportFileName();
|
QString reportFileName();
|
||||||
|
@ -42,6 +42,8 @@
|
|||||||
#include "serializators/lrstorageintf.h"
|
#include "serializators/lrstorageintf.h"
|
||||||
#include "lrscriptenginemanager.h"
|
#include "lrscriptenginemanager.h"
|
||||||
|
|
||||||
|
class QFileSystemWatcher;
|
||||||
|
|
||||||
namespace LimeReport{
|
namespace LimeReport{
|
||||||
|
|
||||||
class PageDesignIntf;
|
class PageDesignIntf;
|
||||||
@ -91,7 +93,7 @@ public:
|
|||||||
void setSettings(QSettings* value);
|
void setSettings(QSettings* value);
|
||||||
void setShowProgressDialog(bool value){m_showProgressDialog = value;}
|
void setShowProgressDialog(bool value){m_showProgressDialog = value;}
|
||||||
QSettings* settings();
|
QSettings* settings();
|
||||||
bool loadFromFile(const QString& fileName);
|
bool loadFromFile(const QString& fileName, bool autoLoadPreviewOnChange);
|
||||||
bool loadFromByteArray(QByteArray *data, const QString& name = "");
|
bool loadFromByteArray(QByteArray *data, const QString& name = "");
|
||||||
bool loadFromString(const QString& report, const QString& name = "");
|
bool loadFromString(const QString& report, const QString& name = "");
|
||||||
QString reportFileName(){return m_fileName;}
|
QString reportFileName(){return m_fileName;}
|
||||||
@ -138,6 +140,7 @@ signals:
|
|||||||
void onSave();
|
void onSave();
|
||||||
void saveFinished();
|
void saveFinished();
|
||||||
public slots:
|
public slots:
|
||||||
|
bool slotLoadFromFile(const QString& fileName);
|
||||||
void cancelRender();
|
void cancelRender();
|
||||||
protected:
|
protected:
|
||||||
PageDesignIntf* createPage(const QString& pageName="");
|
PageDesignIntf* createPage(const QString& pageName="");
|
||||||
@ -178,6 +181,8 @@ private:
|
|||||||
bool m_reportRendering;
|
bool m_reportRendering;
|
||||||
bool m_resultIsEditable;
|
bool m_resultIsEditable;
|
||||||
QString m_passPhrase;
|
QString m_passPhrase;
|
||||||
|
|
||||||
|
QFileSystemWatcher *m_fileWatcher;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user