Tear-off band has been added

Tear-off band has been added

Tear-off band has been added
This commit is contained in:
Arin Alexander
2016-10-04 04:21:22 +04:00
parent 46e89b8e9d
commit dc41959d52
17 changed files with 228 additions and 26 deletions

View File

@@ -170,8 +170,11 @@ void ReportRender::initDatasources(){
void ReportRender::initDatasource(const QString& name){
try{
if (datasources()->containsDatasource(name))
datasources()->dataSource(name)->first();
if (datasources()->containsDatasource(name)){
IDataSource* ds = datasources()->dataSource(name);
if (ds)
ds->first();
}
} catch(ReportError &exception){
QMessageBox::critical(0,tr("Error"),exception.what());
return;
@@ -211,7 +214,11 @@ void ReportRender::renderPage(PageDesignIntf* patternPage)
if (lastRenderedBand && lastRenderedBand->keepFooterTogether())
closeFooterGroup(lastRenderedBand);
savePage();
BandDesignIntf* tearOffBand = m_patternPageItem->bandByType(BandDesignIntf::TearOffBand);
if (tearOffBand)
renderBand(tearOffBand,StartNewPageAsNeeded);
savePage(true);
if (!m_renderCanceled)
secondRenderPass();
}
@@ -461,7 +468,12 @@ void ReportRender::renderDataBand(BandDesignIntf *dataBand)
void ReportRender::renderPageHeader(PageItemDesignIntf *patternPage)
{
BandDesignIntf* band = patternPage->bandByType(BandDesignIntf::PageHeader);
if (band) renderBand(band);
if (band){
if (m_datasources->variable("#PAGE").toInt()!=1 ||
band->property("printOnFirstPage").toBool()
)
renderBand(band);
}
}
void ReportRender::renderPageFooter(PageItemDesignIntf *patternPage)
@@ -497,7 +509,10 @@ qreal ReportRender::calcPageFooterHeight(PageItemDesignIntf *patternPage)
{
BandDesignIntf* band = patternPage->bandByType(BandDesignIntf::PageFooter);
if (band){
return band->height();
if (m_datasources->variable("#PAGE")!=1)
return band->height();
else if (band->property("printOnFirstPage").toBool())
return band->height();
}
return 0;
}
@@ -988,10 +1003,12 @@ void ReportRender::checkLostHeadersOnPrevPage()
QMutableListIterator<BandDesignIntf*>it(page->bands());
it.toBack();
if (it.hasPrevious())
if (it.previous()->isFooter())
if (it.hasPrevious()){
if (it.previous()->isFooter()){
if (it.hasPrevious()) it.previous();
else return;
}
}
while (it.hasPrevious()){
if (it.value()->isHeader()){
@@ -1022,13 +1039,36 @@ BandDesignIntf* ReportRender::findEnclosingGroup()
return result;
}
void ReportRender::savePage()
void ReportRender::moveTearOffBand(){
BandDesignIntf* tearOffBand = m_renderPageItem->bandByType(BandDesignIntf::TearOffBand);
if (tearOffBand){
BandDesignIntf* pageFooter = m_renderPageItem->bandByType(BandDesignIntf::PageFooter);
if (pageFooter){
tearOffBand->setItemPos(m_patternPageItem->pageRect().x(),
m_patternPageItem->pageRect().bottom()-(tearOffBand->height()+pageFooter->height()));
} else {
tearOffBand->setItemPos(m_patternPageItem->pageRect().x(),m_patternPageItem->pageRect().bottom()-tearOffBand->height());
}
}
}
void ReportRender::savePage(bool isLast)
{
checkFooterGroup(m_lastDataBand);
cutGroups();
rearrangeColumnsItems();
m_columnedBandItems.clear();
renderPageFooter(m_patternPageItem);
BandDesignIntf* pf = m_patternPageItem->bandByType(BandDesignIntf::PageFooter);
if (pf && m_datasources->variable("#PAGE").toInt()!=1 && !isLast){
renderPageFooter(m_patternPageItem);
} else {
if (pf && pf->property("printOnFirstPage").toBool() && m_datasources->variable("#PAGE").toInt()==1){
renderPageFooter(m_patternPageItem);
} else if(pf && pf->property("printOnLastPage").toBool() && isLast){
renderPageFooter(m_patternPageItem);
}
}
if (m_ranges.last().lastPage==0 && m_ranges.count()>1) {
m_datasources->setReportVariable("#PAGE",1);
@@ -1043,6 +1083,15 @@ void ReportRender::savePage()
m_renderedPages.append(PageItemDesignIntf::Ptr(m_renderPageItem));
emit pageRendered(m_pageCount);
m_pageCount++;
if (isLast){
BandDesignIntf* ph = m_renderPageItem->bandByType(BandDesignIntf::PageHeader);
if (ph && !ph->property("printOnLastPage").toBool()){
delete ph;
}
}
moveTearOffBand();
}
QString ReportRender::toString()