diff --git a/common.pri b/common.pri index 0a7442e..755d4d0 100644 --- a/common.pri +++ b/common.pri @@ -120,7 +120,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc LIMEREPORT_VERSION_MAJOR = 1 LIMEREPORT_VERSION_MINOR = 4 -LIMEREPORT_VERSION_RELEASE = 110 +LIMEREPORT_VERSION_RELEASE = 111 LIMEREPORT_VERSION = '$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}' DEFINES *= LIMEREPORT_VERSION_STR=\\\"$${LIMEREPORT_VERSION}\\\" diff --git a/limereport/lrbanddesignintf.cpp b/limereport/lrbanddesignintf.cpp index 1b689b6..25db826 100644 --- a/limereport/lrbanddesignintf.cpp +++ b/limereport/lrbanddesignintf.cpp @@ -381,7 +381,7 @@ int BandDesignIntf::maxChildIndex(BandDesignIntf::BandsType bandType) const{ int BandDesignIntf::maxChildIndex(QSet ignoredBands) const{ int curIndex = bandIndex(); foreach(BandDesignIntf* childBand, childBands()){ - if (!ignoredBands.contains(childBand->bandType()) && childBand->bandIndex()>bandIndex()){ + if (!ignoredBands.contains(childBand->bandType())){ curIndex = std::max(curIndex,childBand->maxChildIndex(ignoredBands)); } } diff --git a/limereport/lrpageitemdesignintf.cpp b/limereport/lrpageitemdesignintf.cpp index 66a1983..68700f3 100644 --- a/limereport/lrpageitemdesignintf.cpp +++ b/limereport/lrpageitemdesignintf.cpp @@ -225,17 +225,22 @@ int PageItemDesignIntf::calcBandIndex(BandDesignIntf::BandsType bandType, BandDe int bandIndex=-1; qSort(m_bands.begin(),m_bands.end(),bandSortBandLessThenByIndex); - foreach(BandDesignIntf* band,m_bands){ - if ((band->bandType() == BandDesignIntf::GroupHeader) && ( band->bandType() > bandType)) break; - if ((band->bandType() <= bandType)){ - if (bandIndex <= band->bandIndex()) { - if (bandType != BandDesignIntf::Data){ + if (bandType != BandDesignIntf::Data){ + foreach(BandDesignIntf* band,m_bands){ + if ((band->bandType() == BandDesignIntf::GroupHeader) && ( band->bandType() > bandType)) break; + if ((band->bandType() <= bandType)){ + if (bandIndex <= band->bandIndex()) { bandIndex=band->maxChildIndex(bandType)+1; - } else { - bandIndex=band->maxChildIndex()+1; } - } - } else { increaseBandIndex = true; break;} + } else { increaseBandIndex = true; break;} + } + } else { + int maxChildIndex = 0; + foreach(BandDesignIntf* band, m_bands){ + if (band->bandType() == BandDesignIntf::Data) + maxChildIndex = std::max(maxChildIndex, band->maxChildIndex()); + } + bandIndex = std::max(bandIndex, maxChildIndex+1); } if (bandIndex==-1) { diff --git a/limereport/lrreportrender.cpp b/limereport/lrreportrender.cpp index 2d70895..1088cf5 100644 --- a/limereport/lrreportrender.cpp +++ b/limereport/lrreportrender.cpp @@ -789,22 +789,11 @@ void ReportRender::renderGroupHeader(BandDesignIntf *parentBand, IDataSource* da if (gb&&gb->isNeedToClose(datasources())){ if (band->childBands().count()>0){ bool didGoBack = dataSource->prior(); - foreach (BandDesignIntf* subBand, band->childrenByType(BandDesignIntf::GroupHeader)) { - foreach(BandDesignIntf* footer, subBand->childrenByType(BandDesignIntf::GroupFooter)){ - renderBand(footer, 0, StartNewPageAsNeeded); - } - closeDataGroup(subBand); - } - - foreach (BandDesignIntf* footer, band->childrenByType(BandDesignIntf::GroupFooter)) { - renderBand(footer, 0, StartNewPageAsNeeded); - } - + renderGroupFooterByHeader(band); if (didGoBack){ dataSource->next(); } } - closeDataGroup(band); } if (gb && !gb->isStarted()){ @@ -834,13 +823,14 @@ void ReportRender::renderGroupHeader(BandDesignIntf *parentBand, IDataSource* da } void ReportRender::renderGroupFooterByHeader(BandDesignIntf* groupHeader){ + if (groupHeader->reprintOnEachPage()) m_reprintableBands.removeOne(groupHeader); foreach (BandDesignIntf* header, groupHeader->childrenByType(BandDesignIntf::GroupHeader)){ renderGroupFooterByHeader(header); } foreach (BandDesignIntf* footer, groupHeader->childrenByType(BandDesignIntf::GroupFooter)){ renderBand(footer, 0, StartNewPageAsNeeded); } - recalcIfNeeded(groupHeader); + closeDataGroup(groupHeader); } void ReportRender::renderGroupFooter(BandDesignIntf *parentBand) @@ -848,14 +838,7 @@ void ReportRender::renderGroupFooter(BandDesignIntf *parentBand) foreach(BandDesignIntf* band,parentBand->childrenByType(BandDesignIntf::GroupHeader)){ IGroupBand* gb = dynamic_cast(band); if (gb && gb->isStarted()){ - if (band->reprintOnEachPage()) m_reprintableBands.removeOne(band); - foreach(BandDesignIntf* header, band->childrenByType(BandDesignIntf::GroupHeader)){ - renderGroupFooterByHeader(header); - } - foreach(BandDesignIntf* footer, band->childrenByType(BandDesignIntf::GroupFooter)){ - renderBand(footer, 0, StartNewPageAsNeeded); - } - closeDataGroup(band); + renderGroupFooterByHeader(band); } } }