diff --git a/include/lrglobal.cpp b/include/lrglobal.cpp index 34bd880..47b31f0 100644 --- a/include/lrglobal.cpp +++ b/include/lrglobal.cpp @@ -31,10 +31,24 @@ #include #include "lrglobal.h" -QString LimeReport::extractClassName(QString className) +namespace LimeReport { + +QString extractClassName(QString className) { int startPos=className.lastIndexOf("::"); if(startPos==-1) startPos=0; else startPos+=2; return className.right(className.length()-startPos); } + +bool ReportSettings::suppressAbsentFieldsAndVarsWarnings() const +{ + return m_suppressAbsentFieldsAndVarsWarnings; +} + +void ReportSettings::setSuppressAbsentFieldsAndVarsWarnings(bool suppressAbsentFieldsAndVarsWarnings) +{ + m_suppressAbsentFieldsAndVarsWarnings = suppressAbsentFieldsAndVarsWarnings; +} + +} //namespace LimeReport diff --git a/include/lrglobal.h b/include/lrglobal.h index baf2bd8..4d1a456 100644 --- a/include/lrglobal.h +++ b/include/lrglobal.h @@ -84,6 +84,16 @@ namespace Const{ ReportError(const QString& message):std::runtime_error(message.toStdString()){} }; + class ReportSettings{ + public: + ReportSettings():m_suppressAbsentFieldsAndVarsWarnings(false){} + void setDefaultValues(){m_suppressAbsentFieldsAndVarsWarnings = false;} + bool suppressAbsentFieldsAndVarsWarnings() const; + void setSuppressAbsentFieldsAndVarsWarnings(bool suppressAbsentFieldsAndVarsWarnings); + private: + bool m_suppressAbsentFieldsAndVarsWarnings; + }; + } // namespace LimeReport diff --git a/limereport/lrbasedesignintf.cpp b/limereport/lrbasedesignintf.cpp index 5fe5db7..1a9f47b 100644 --- a/limereport/lrbasedesignintf.cpp +++ b/limereport/lrbasedesignintf.cpp @@ -75,7 +75,8 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q m_margin(4), m_itemAlign(DesignedItemAlign), m_changingItemAlign(false), - m_borderColor(Qt::black) + m_borderColor(Qt::black), + m_reportSettings(0) { setGeometry(QRectF(0, 0, m_width, m_height)); if (BaseDesignIntf *item = dynamic_cast(parent)) { @@ -626,6 +627,19 @@ void BaseDesignIntf::turnOnSelectionMarker(bool value) } } +ReportSettings *BaseDesignIntf::reportSettings() const +{ + return m_reportSettings; +} + +void BaseDesignIntf::setReportSettings(ReportSettings *reportSettings) +{ + m_reportSettings = reportSettings; + foreach(BaseDesignIntf* child, childBaseItems()){ + child->setReportSettings(reportSettings); + } +} + QColor BaseDesignIntf::borderColor() const { return m_borderColor; @@ -1187,6 +1201,7 @@ BaseDesignIntf *BaseDesignIntf::cloneItemWOChild(ItemMode mode, QObject *owner, clone->setObjectName(this->objectName()); clone->setItemMode(mode); clone->objectLoadStarted(); + clone->setReportSettings(this->reportSettings()); for (int i = 0; i < clone->metaObject()->propertyCount(); i++) { if (clone->metaObject()->property(i).isWritable()) clone->setProperty(clone->metaObject()->property(i).name(), property(clone->metaObject()->property(i).name())); diff --git a/limereport/lrbasedesignintf.h b/limereport/lrbasedesignintf.h index a3d21c6..440a53e 100644 --- a/limereport/lrbasedesignintf.h +++ b/limereport/lrbasedesignintf.h @@ -245,7 +245,9 @@ public: QColor borderColor() const; void setBorderColor(const QColor &borderColor); void setItemVisible(const bool& value); - virtual bool canContainChildren(){ return false;} + virtual bool canContainChildren(){ return false;} + ReportSettings* reportSettings() const; + void setReportSettings(ReportSettings *reportSettings); protected: //ICollectionContainer @@ -347,6 +349,7 @@ private: ItemAlign m_itemAlign; bool m_changingItemAlign; QColor m_borderColor; + ReportSettings* m_reportSettings; signals: void geometryChanged(QObject* object, QRectF newGeometry, QRectF oldGeometry); void posChanged(QObject* object, QPointF newPos, QPointF oldPos); diff --git a/limereport/lrdatasourcemanager.cpp b/limereport/lrdatasourcemanager.cpp index 1e7d5b9..d140a16 100644 --- a/limereport/lrdatasourcemanager.cpp +++ b/limereport/lrdatasourcemanager.cpp @@ -323,13 +323,16 @@ QSharedPointerDataSourceManager::previewSQL(const QString &c query.exec(); model->setQuery(query); m_lastError = model->lastError().text(); + putError(m_lastError); if (model->query().isActive()) return QSharedPointer(model); else return QSharedPointer(0); } - if (!db.isOpen()) + if (!db.isOpen()){ m_lastError = tr("Connection \"%1\" is not open").arg(connectionName); + putError(m_lastError); + } return QSharedPointer(0); } @@ -657,7 +660,7 @@ void DataSourceManager::putProxyDesc(ProxyDesc *proxyDesc) bool DataSourceManager::connectConnection(ConnectionDesc *connectionDesc) { bool connected = false; - clearErrorsList(); + clearErrors(); QString lastError =""; foreach(QString datasourceName, dataSourceNames()){ diff --git a/limereport/lrdatasourcemanager.h b/limereport/lrdatasourcemanager.h index 08d11cb..fc6226e 100644 --- a/limereport/lrdatasourcemanager.h +++ b/limereport/lrdatasourcemanager.h @@ -178,7 +178,7 @@ public: QString lastError() const { return m_lastError;} void putError(QString error){ if (!m_errorsList.contains(error)) m_errorsList.append(error);} - void clearErrorsList(){ m_errorsList.clear();} + void clearErrors(){ m_errorsList.clear(); m_lastError = "";} QStringList errorsList(){ return m_errorsList;} bool designTime() const; void setDesignTime(bool designTime); diff --git a/limereport/lrglobal.cpp b/limereport/lrglobal.cpp index 34bd880..47b31f0 100644 --- a/limereport/lrglobal.cpp +++ b/limereport/lrglobal.cpp @@ -31,10 +31,24 @@ #include #include "lrglobal.h" -QString LimeReport::extractClassName(QString className) +namespace LimeReport { + +QString extractClassName(QString className) { int startPos=className.lastIndexOf("::"); if(startPos==-1) startPos=0; else startPos+=2; return className.right(className.length()-startPos); } + +bool ReportSettings::suppressAbsentFieldsAndVarsWarnings() const +{ + return m_suppressAbsentFieldsAndVarsWarnings; +} + +void ReportSettings::setSuppressAbsentFieldsAndVarsWarnings(bool suppressAbsentFieldsAndVarsWarnings) +{ + m_suppressAbsentFieldsAndVarsWarnings = suppressAbsentFieldsAndVarsWarnings; +} + +} //namespace LimeReport diff --git a/limereport/lrglobal.h b/limereport/lrglobal.h index baf2bd8..4d1a456 100644 --- a/limereport/lrglobal.h +++ b/limereport/lrglobal.h @@ -84,6 +84,16 @@ namespace Const{ ReportError(const QString& message):std::runtime_error(message.toStdString()){} }; + class ReportSettings{ + public: + ReportSettings():m_suppressAbsentFieldsAndVarsWarnings(false){} + void setDefaultValues(){m_suppressAbsentFieldsAndVarsWarnings = false;} + bool suppressAbsentFieldsAndVarsWarnings() const; + void setSuppressAbsentFieldsAndVarsWarnings(bool suppressAbsentFieldsAndVarsWarnings); + private: + bool m_suppressAbsentFieldsAndVarsWarnings; + }; + } // namespace LimeReport diff --git a/limereport/lritemdesignintf.cpp b/limereport/lritemdesignintf.cpp index 8f48285..1cf1774 100644 --- a/limereport/lritemdesignintf.cpp +++ b/limereport/lritemdesignintf.cpp @@ -149,14 +149,12 @@ QString ContentItemDesignIntf::expandDataFields(QString context, ExpandType expa context.replace(rx.cap(0),fieldValue); } else { - QString error; - if (dataManager->lastError().isEmpty()){ - error = QString("Field %1 not found in %2 !!! ").arg(field).arg(this->objectName()); - dataManager->putError(error); - } else { - error = dataManager->lastError(); - } - context.replace(rx.cap(0),error); + QString error = QString("Field %1 not found in %2 !!! ").arg(field).arg(this->objectName()); + dataManager->putError(error); + if (!reportSettings() || !reportSettings()->suppressAbsentFieldsAndVarsWarnings()) + context.replace(rx.cap(0),error); + else + context.replace(rx.cap(0),""); } } } @@ -188,7 +186,13 @@ QString ContentItemDesignIntf::expandUserVariables(QString context, RenderPass p pos=0; } } else { - context.replace(rx.cap(0),tr("Variable %1 not found").arg(variable)); + QString error; + error = tr("Variable %1 not found").arg(variable); + dataManager->putError(error); + if (!reportSettings() || reportSettings()->suppressAbsentFieldsAndVarsWarnings()) + context.replace(rx.cap(0),error); + else + context.replace(rx.cap(0),""); } } } diff --git a/limereport/lrpagedesignintf.cpp b/limereport/lrpagedesignintf.cpp index dfda279..bb3f2b0 100644 --- a/limereport/lrpagedesignintf.cpp +++ b/limereport/lrpagedesignintf.cpp @@ -92,7 +92,8 @@ PageDesignIntf::PageDesignIntf(QObject *parent): m_multiSelectStarted(false), m_movedItem(0), m_joinItem(0), - m_magneticMovement(false) + m_magneticMovement(false), + m_reportSettings(0) { m_reportEditor = dynamic_cast(parent); updatePageRect(); @@ -1044,6 +1045,17 @@ void PageDesignIntf::changeSelectedGroupProperty(const QString &name, const QVar } } +ReportSettings *PageDesignIntf::getReportSettings() const +{ + return m_reportSettings; +} + +void PageDesignIntf::setReportSettings(ReportSettings *reportSettings) +{ + m_reportSettings = reportSettings; + m_pageItem->setReportSettings(m_reportSettings); +} + bool PageDesignIntf::magneticMovement() const { return m_magneticMovement; diff --git a/limereport/lrpagedesignintf.h b/limereport/lrpagedesignintf.h index b182a36..11e1229 100644 --- a/limereport/lrpagedesignintf.h +++ b/limereport/lrpagedesignintf.h @@ -179,6 +179,9 @@ namespace LimeReport { bool magneticMovement() const; void setMagneticMovement(bool magneticMovement); + ReportSettings *getReportSettings() const; + void setReportSettings(ReportSettings *reportSettings); + protected: virtual void keyPressEvent(QKeyEvent *event); @@ -310,6 +313,7 @@ namespace LimeReport { BaseDesignIntf* m_joinItem; JoinType m_joinType; bool m_magneticMovement; + ReportSettings* m_reportSettings; }; class AbstractPageCommand : public CommandIf{ diff --git a/limereport/lrreportdesignwidget.cpp b/limereport/lrreportdesignwidget.cpp index a7afece..0076ac4 100644 --- a/limereport/lrreportdesignwidget.cpp +++ b/limereport/lrreportdesignwidget.cpp @@ -506,11 +506,13 @@ void ReportDesignWidget::editSetting() setting.setVerticalGridStep(m_verticalGridStep); setting.setHorizontalGridStep(m_horizontalGridStep); setting.setDefaultFont(m_defaultFont); + setting.setSuppressAbsentFieldsAndVarsWarnings(m_report->suppressFieldAndVarError()); if (setting.exec()){ m_horizontalGridStep = setting.horizontalGridStep(); m_verticalGridStep = setting.verticalGridStep(); m_defaultFont = setting.defaultFont(); + m_report->setSuppressFieldAndVarError(setting.suppressAbsentFieldsAndVarsWarnings()); applySettings(); } } diff --git a/limereport/lrreportengine.cpp b/limereport/lrreportengine.cpp index aaf8dfa..e47f3ec 100644 --- a/limereport/lrreportengine.cpp +++ b/limereport/lrreportengine.cpp @@ -94,6 +94,7 @@ PageDesignIntf *ReportEnginePrivate::createPage(const QString &pageName) PageDesignIntf* page =new PageDesignIntf(); page->setObjectName(pageName); page->setReportEditor(this); + page->setReportSettings(&m_reportSettings); return page; } @@ -129,6 +130,7 @@ void ReportEnginePrivate::collectionLoadFinished(const QString &) { foreach (PageDesignIntf* page, m_pages) { page->setReportEditor(this); + page->setReportSettings(&m_reportSettings); page->setSceneRect(-Const::SCENE_MARGIN,-Const::SCENE_MARGIN, page->pageItem()->width()+Const::SCENE_MARGIN*2, page->pageItem()->height()+Const::SCENE_MARGIN*2); @@ -165,6 +167,7 @@ void ReportEnginePrivate::clearReport() m_datasources->clear(DataSourceManager::Owned); m_fileName=""; m_scriptEngineContext->clear(); + m_reportSettings.setDefaultValues(); emit cleared(); } @@ -614,6 +617,16 @@ QString ReportEnginePrivate::renderToString() }else return QString(); } +bool ReportEnginePrivate::suppressFieldAndVarError() const +{ + return m_reportSettings.suppressAbsentFieldsAndVarsWarnings(); +} + +void ReportEnginePrivate::setSuppressFieldAndVarError(bool suppressFieldAndVarError) +{ + m_reportSettings.setSuppressAbsentFieldsAndVarsWarnings(suppressFieldAndVarError); +} + QString ReportEnginePrivate::previewWindowTitle() const { return m_previewWindowTitle; @@ -637,7 +650,7 @@ void ReportEnginePrivate::setPreviewWindowIcon(const QIcon &previewWindowIcon) ReportPages ReportEnginePrivate::renderToPages() { m_reportRender = ReportRender::Ptr(new ReportRender); - dataManager()->clearErrorsList(); + dataManager()->clearErrors(); dataManager()->connectAllDatabases(); dataManager()->setDesignTime(false); connect(m_reportRender.data(),SIGNAL(pageRendered(int)), @@ -649,6 +662,7 @@ ReportPages ReportEnginePrivate::renderToPages() m_reportRender->setScriptContext(scriptContext()); foreach(PageDesignIntf* page , m_pages){ + m_pages.at(0)->setReportSettings(&m_reportSettings); result.append(m_reportRender->renderPageToPages(page)); } emit renderFinished(); diff --git a/limereport/lrreportengine_p.h b/limereport/lrreportengine_p.h index d015d50..aa83886 100644 --- a/limereport/lrreportengine_p.h +++ b/limereport/lrreportengine_p.h @@ -57,6 +57,7 @@ class ReportEnginePrivate : public QObject, public ICollectionContainer Q_PROPERTY(ACollectionProperty pages READ fakeCollectionReader()) Q_PROPERTY(QObject* datasourcesManager READ dataManager) Q_PROPERTY(QObject* scriptContext READ scriptContext) + Q_PROPERTY(bool suppressFieldAndVarError READ suppressFieldAndVarError WRITE setSuppressFieldAndVarError) friend class PreviewReportWidget; public: static void printReport(ItemsReaderIntf::Ptr reader, QPrinter &printer); @@ -118,6 +119,9 @@ public: QString previewWindowTitle() const; void setPreviewWindowTitle(const QString &previewWindowTitle); + bool suppressFieldAndVarError() const; + void setSuppressFieldAndVarError(bool suppressFieldAndVarError); + signals: void pagesLoadFinished(); void datasourceCollectionLoadFinished(const QString& collectionName); @@ -165,6 +169,7 @@ private: QIcon m_previewWindowIcon; QString m_previewWindowTitle; QPointer m_designerWindow; + ReportSettings m_reportSettings; }; } diff --git a/limereport/lrsettingdialog.cpp b/limereport/lrsettingdialog.cpp index 15a86c5..0b929be 100644 --- a/limereport/lrsettingdialog.cpp +++ b/limereport/lrsettingdialog.cpp @@ -32,6 +32,15 @@ QFont SettingDialog::defaultFont() return result; } +bool SettingDialog::suppressAbsentFieldsAndVarsWarnings() +{ + return ui->cbSuppressWarnings->isChecked(); +} + +void SettingDialog::setSuppressAbsentFieldsAndVarsWarnings(bool value){ + ui->cbSuppressWarnings->setChecked(value); +} + void SettingDialog::setHorizontalGridStep(int value) { ui->horizontalGridStep->setValue(value); diff --git a/limereport/lrsettingdialog.h b/limereport/lrsettingdialog.h index 5a2cb48..e9a740d 100644 --- a/limereport/lrsettingdialog.h +++ b/limereport/lrsettingdialog.h @@ -19,6 +19,8 @@ public: int verticalGridStep(); int horizontalGridStep(); QFont defaultFont(); + bool suppressAbsentFieldsAndVarsWarnings(); + void setSuppressAbsentFieldsAndVarsWarnings(bool value); void setHorizontalGridStep(int value); void setVerticalGridStep(int value); void setDefaultFont(const QFont& value); diff --git a/limereport/lrsettingdialog.ui b/limereport/lrsettingdialog.ui index 6fd8520..d3a143a 100644 --- a/limereport/lrsettingdialog.ui +++ b/limereport/lrsettingdialog.ui @@ -7,97 +7,122 @@ 0 0 351 - 185 + 318 Designer setting - + - - - - - Default font - - - - - - - - - - 10 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - + - Grid + Designer Setting - + - - - + + + - Vertical grid step + Default font - - + + + + + 10 - - - - Horizontal grid step + + + + Qt::Horizontal - - - - - - 10 + + + 40 + 20 + - + - - - Qt::Horizontal + + + Grid - - - 73 - 20 - + + + + + + + Vertical grid step + + + + + + + 10 + + + + + + + Horizontal grid step + + + + + + + 10 + + + + + + + + + Qt::Horizontal + + + + 73 + 20 + + + + + + + + + + + + + + Report Setting + + + + + + Suppress absent fields and variables warning - + @@ -153,8 +178,8 @@ accept() - 248 - 254 + 221 + 307 157 @@ -169,8 +194,8 @@ reject() - 316 - 260 + 221 + 307 286