diff --git a/common.pri b/common.pri index 6478d82..ff2c817 100644 --- a/common.pri +++ b/common.pri @@ -133,7 +133,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc LIMEREPORT_VERSION_MAJOR = 1 LIMEREPORT_VERSION_MINOR = 5 -LIMEREPORT_VERSION_RELEASE = 82 +LIMEREPORT_VERSION_RELEASE = 83 LIMEREPORT_VERSION = '$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}' DEFINES *= LIMEREPORT_VERSION_STR=\\\"$${LIMEREPORT_VERSION}\\\" diff --git a/limereport/lrreportrender.cpp b/limereport/lrreportrender.cpp index 829039b..58f0bd9 100644 --- a/limereport/lrreportrender.cpp +++ b/limereport/lrreportrender.cpp @@ -208,10 +208,12 @@ void ReportRender::analizeItem(ContentItemDesignIntf* contentItem, BandDesignInt } void ReportRender::analizeContainer(BaseDesignIntf* item, BandDesignIntf* band){ - foreach(BaseDesignIntf* child, item->childBaseItems()){ - ContentItemDesignIntf* contentItem = dynamic_cast(child); - if (contentItem) analizeItem(contentItem, band); - else analizeContainer(child, band); + if (item){ + foreach(BaseDesignIntf* child, item->childBaseItems()){ + ContentItemDesignIntf* contentItem = dynamic_cast(child); + if (contentItem) analizeItem(contentItem, band); + else analizeContainer(child, band); + } } } @@ -407,12 +409,13 @@ void ReportRender::extractGroupFuntionsFromItem(ContentItemDesignIntf* contentIt } void ReportRender::extractGroupFunctionsFromContainer(BaseDesignIntf* baseItem, BandDesignIntf* band){ - foreach (BaseDesignIntf* item, baseItem->childBaseItems()) { - ContentItemDesignIntf* contentItem = dynamic_cast(item); - if (contentItem) extractGroupFuntionsFromItem(contentItem, band); - else extractGroupFunctionsFromContainer(item, band); + if (baseItem){ + foreach (BaseDesignIntf* item, baseItem->childBaseItems()) { + ContentItemDesignIntf* contentItem = dynamic_cast(item); + if (contentItem) extractGroupFuntionsFromItem(contentItem, band); + else extractGroupFunctionsFromContainer(item, band); + } } - } void ReportRender::extractGroupFunctions(BandDesignIntf *band) @@ -436,11 +439,12 @@ void ReportRender::replaceGroupFunctionsInItem(ContentItemDesignIntf* contentIte if (captures.size()<5){ content.replace(captures.at(0),QString("%1(%2,%3)").arg(functionName).arg('"'+expressionIndex+'"').arg('"'+band->objectName()+'"')); } else { - content.replace(captures.at(0),QString("%1(%2,%3,%4)") - .arg(functionName) - .arg('"'+expressionIndex+'"') - .arg('"'+band->objectName()+'"') - .arg(captures.at(4))); + content.replace(captures.at(0),QString("%1(%2,%3,%4)").arg( + functionName, + '"'+expressionIndex+'"', + '"'+band->objectName()+'"', + captures.at(4) + )); } } pos += rx.matchedLength(); @@ -454,10 +458,12 @@ void ReportRender::replaceGroupFunctionsInItem(ContentItemDesignIntf* contentIte void ReportRender::replaceGroupFunctionsInContainer(BaseDesignIntf* baseItem, BandDesignIntf* band) { - foreach(BaseDesignIntf* item, baseItem->childBaseItems()){ - ContentItemDesignIntf* contentItem = dynamic_cast(item); - if (contentItem) replaceGroupFunctionsInItem(contentItem, band); - else replaceGroupFunctionsInContainer(item, band); + if (baseItem){ + foreach(BaseDesignIntf* item, baseItem->childBaseItems()){ + ContentItemDesignIntf* contentItem = dynamic_cast(item); + if (contentItem) replaceGroupFunctionsInItem(contentItem, band); + else replaceGroupFunctionsInContainer(item, band); + } } } @@ -574,8 +580,10 @@ BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesign return 0; } - if (patternBand->isFooter()) + if (patternBand->isFooter()){ datasources()->clearGroupFunctionValues(patternBand->objectName()); + } + emit(patternBand->afterRender()); return bandClone; } @@ -1301,7 +1309,7 @@ void ReportRender::startNewPage(bool isFirst) m_newPageStarted = true; initColumns(); initRenderPage(); - + m_scriptEngineContext->setCurrentPage(m_renderPageItem); m_scriptEngineContext->baseDesignIntfToScript(m_renderPageItem->patternName(), m_renderPageItem); emit m_patternPageItem->beforeRender(); @@ -1343,7 +1351,8 @@ void ReportRender::cutGroups() { m_popupedExpression.clear(); m_popupedValues.clear(); - foreach(BandDesignIntf* groupBand,m_childBands.keys()){ + //foreach(BandDesignIntf* groupBand,m_childBands.keys()){ + for(BandDesignIntf* groupBand : m_childBands.keys()){ if (m_childBands.value(groupBand)->tryToKeepTogether()){ foreach(BandDesignIntf* band, *m_childBands.value(groupBand)){ m_renderPageItem->removeBand(band); @@ -1419,7 +1428,8 @@ void ReportRender::checkLostHeadersOnPrevPage() if (lostHeaders.size() > 0){ m_lostHeadersMoved = true; - qSort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); + //qSort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); + std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); foreach(BandDesignIntf* header, lostHeaders){ registerBand(header); } @@ -1456,7 +1466,8 @@ void ReportRender::checkLostHeadersInPrevColumn() if (lostHeaders.size() > 0){ m_lostHeadersMoved = true; - qSort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); +// qSort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); + std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen); foreach(BandDesignIntf* header, lostHeaders){ registerBand(header); } @@ -1538,7 +1549,7 @@ void ReportRender::savePage(bool isLast) } m_renderPageItem->placeTearOffBand(); - m_scriptEngineContext->setCurrentPage(m_renderPageItem); + //m_scriptEngineContext->setCurrentPage(m_renderPageItem); emit m_patternPageItem->afterRender(); if (isLast) emit m_patternPageItem->afterLastPageRendered(); diff --git a/limereport/lrscriptenginemanager.cpp b/limereport/lrscriptenginemanager.cpp index 804a758..dcbec19 100644 --- a/limereport/lrscriptenginemanager.cpp +++ b/limereport/lrscriptenginemanager.cpp @@ -547,14 +547,13 @@ QVariant ScriptEngineManager::evaluateScript(const QString& script){ void ScriptEngineManager::addBookMark(const QString& uniqKey, const QString& content){ Q_ASSERT(m_context != 0); if (m_context){ - BandDesignIntf* currentBand = m_context->getCurrentBand(); + BandDesignIntf* currentBand = m_context->currentBand(); if (currentBand) currentBand->addBookmark(uniqKey, content); - else if (m_context->getCurrentPage()) { - m_context->getCurrentPage()->addBookmark(uniqKey, content); + else if (m_context->currentPage()) { + m_context->currentPage()->addBookmark(uniqKey, content); } } - } int ScriptEngineManager::findPageIndexByBookmark(const QString &uniqKey) @@ -570,6 +569,16 @@ int ScriptEngineManager::findPageIndexByBookmark(const QString &uniqKey) return -1; } +int ScriptEngineManager::getPageFreeSpace(PageItemDesignIntf* page){ + if (page){ + int height = 0; + foreach(BandDesignIntf* band, page->bands()){ + height += band->height(); + } + return page->height() - height; + } else return -1; +} + void ScriptEngineManager::addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent) { Q_ASSERT(m_context != 0); @@ -1306,7 +1315,7 @@ void ScriptEngineContext::setTableOfContents(TableOfContents* tableOfContents) m_tableOfContents = tableOfContents; } -PageItemDesignIntf* ScriptEngineContext::getCurrentPage() const +PageItemDesignIntf* ScriptEngineContext::currentPage() const { return m_currentPage; } @@ -1317,7 +1326,7 @@ void ScriptEngineContext::setCurrentPage(PageItemDesignIntf* currentPage) m_currentBand = 0; } -BandDesignIntf* ScriptEngineContext::getCurrentBand() const +BandDesignIntf* ScriptEngineContext::currentBand() const { return m_currentBand; } @@ -1693,6 +1702,10 @@ int ScriptFunctionsManager::findPageIndexByBookmark(const QString &uniqKey) return scriptEngineManager()->findPageIndexByBookmark(uniqKey); } +int ScriptFunctionsManager::getPageFreeSpace(QObject* page){ + return scriptEngineManager()->getPageFreeSpace(dynamic_cast(page)); +} + void ScriptFunctionsManager::addTableOfContentsItem(const QString& uniqKey, const QString& content, int indent) { scriptEngineManager()->addTableOfContentsItem(uniqKey, content, indent); diff --git a/limereport/lrscriptenginemanager.h b/limereport/lrscriptenginemanager.h index c5271f3..7862236 100644 --- a/limereport/lrscriptenginemanager.h +++ b/limereport/lrscriptenginemanager.h @@ -199,9 +199,9 @@ public: void setInitScript(const QString& initScript); bool runInitScript(); - BandDesignIntf* getCurrentBand() const; + BandDesignIntf* currentBand() const; void setCurrentBand(BandDesignIntf* currentBand); - PageItemDesignIntf* getCurrentPage() const; + PageItemDesignIntf* currentPage() const; void setCurrentPage(PageItemDesignIntf* currentPage); TableOfContents* tableOfContents() const; void setTableOfContents(TableOfContents* tableOfContents); @@ -389,6 +389,7 @@ 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);} @@ -473,6 +474,7 @@ public: 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();