diff --git a/limereport/bands/lrdataband.cpp b/limereport/bands/lrdataband.cpp index 342622a..fbb0ae8 100644 --- a/limereport/bands/lrdataband.cpp +++ b/limereport/bands/lrdataband.cpp @@ -84,6 +84,40 @@ QColor DataBand::bandColor() const return QColor(Qt::darkGreen); } +void DataBand::preparePopUpMenu(QMenu &menu) +{ + BandDesignIntf::preparePopUpMenu(menu); + QAction* currAction = menu.addAction(tr("Keep footer together")); + currAction->setCheckable(true); + currAction->setChecked(keepFooterTogether()); + + currAction = menu.addAction(tr("Keep subdetail together")); + currAction->setCheckable(true); + currAction->setChecked(tryToKeepTogether()); + + currAction = menu.addAction(tr("Slice last row")); + currAction->setCheckable(true); + currAction->setChecked(sliceLastRow()); + +} + +void DataBand::processPopUpAction(QAction *action) +{ + BandDesignIntf::processPopUpAction(action); + if (action->text().compare(tr("Keep footer together")) == 0){ + setProperty("keepFooterTogether",action->isChecked()); + } + + if (action->text().compare(tr("Keep subdetail together")) == 0){ + setProperty("keepSubdetailTogether",action->isChecked()); + } + + if (action->text().compare(tr("Slice last row")) == 0){ + setProperty("sliceLastRow",action->isChecked()); + } + +} + BaseDesignIntf *DataBand::createSameTypeItem(QObject *owner, QGraphicsItem *parent) { return new DataBand(owner,parent); @@ -96,6 +130,38 @@ DataHeaderBand::DataHeaderBand(QObject *owner, QGraphicsItem *parent) setMarkerColor(bandColor()); } +void DataHeaderBand::preparePopUpMenu(QMenu &menu) +{ + BandDesignIntf::preparePopUpMenu(menu); + QAction* currAction = menu.addAction(tr("Reprint on each page")); + currAction->setCheckable(true); + currAction->setChecked(reprintOnEachPage()); + + currAction = menu.addAction(tr("Repeat on each row")); + currAction->setCheckable(true); + currAction->setChecked(repeatOnEachRow()); + + currAction = menu.addAction(tr("Print always")); + currAction->setCheckable(true); + currAction->setChecked(printAlways()); +} + +void DataHeaderBand::processPopUpAction(QAction *action) +{ + BandDesignIntf::processPopUpAction(action); + if (action->text().compare(tr("Reprint on each page")) == 0){ + setProperty("repeatOnEachPage",action->isChecked()); + } + + if (action->text().compare(tr("Repeat on each row")) == 0){ + setProperty("repeatOnEachRow",action->isChecked()); + } + + if (action->text().compare(tr("Print always")) == 0){ + setProperty("printAlways",action->isChecked()); + } +} + DataFooterBand::DataFooterBand(QObject *owner, QGraphicsItem *parent) :BandDesignIntf(BandDesignIntf::DataFooter,xmlTagFooter,owner,parent) { @@ -103,5 +169,21 @@ DataFooterBand::DataFooterBand(QObject *owner, QGraphicsItem *parent) setMarkerColor(bandColor()); } +void DataFooterBand::preparePopUpMenu(QMenu &menu) +{ + BandDesignIntf::preparePopUpMenu(menu); + QAction* currAction = menu.addAction(tr("Print always")); + currAction->setCheckable(true); + currAction->setChecked(printAlways()); +} + +void DataFooterBand::processPopUpAction(QAction *action) +{ + BandDesignIntf::processPopUpAction(action); + if (action->text().compare(tr("Print always")) == 0){ + setProperty("printAlways",action->isChecked()); + } +} + } diff --git a/limereport/bands/lrdataband.h b/limereport/bands/lrdataband.h index fd180e8..4045d3a 100644 --- a/limereport/bands/lrdataband.h +++ b/limereport/bands/lrdataband.h @@ -54,6 +54,8 @@ public: bool isData() const {return true;} protected: QColor bandColor() const; + void preparePopUpMenu(QMenu &menu); + void processPopUpAction(QAction *action); private: BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0); }; @@ -71,6 +73,9 @@ public: bool isUnique() const {return false;} bool isHeader() const {return true;} QColor bandColor() const {return QColor(Qt::darkGreen);} +protected: + void preparePopUpMenu(QMenu &menu); + void processPopUpAction(QAction *action); private: BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0){ return new DataHeaderBand(owner,parent); @@ -88,6 +93,9 @@ public: bool isUnique() const {return false;} bool isFooter() const {return true;} QColor bandColor() const{return QColor(Qt::darkGreen);} +protected: + void preparePopUpMenu(QMenu &menu); + void processPopUpAction(QAction *action); private: BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0){ return new DataFooterBand(owner,parent); diff --git a/limereport/lrreportrender.cpp b/limereport/lrreportrender.cpp index 55f3de2..1999c77 100644 --- a/limereport/lrreportrender.cpp +++ b/limereport/lrreportrender.cpp @@ -577,15 +577,19 @@ void ReportRender::renderDataBand(BandDesignIntf *dataBand) firstTime = false; } - m_reprintableBands.removeOne(dataBand->bandHeader()); + if (!dataBand->keepFooterTogether()) + m_reprintableBands.removeOne(dataBand->bandHeader()); if (bandDatasource->prior()){ renderGroupFooter(dataBand); bandDatasource->next(); } - if (footer && !footer->printAlways()) + if (footer && !footer->printAlways()){ renderBand(footer, 0, StartNewPageAsNeeded); + if (dataBand->keepFooterTogether()) + m_reprintableBands.removeOne(dataBand); + } datasources()->deleteVariable(varName); @@ -593,8 +597,11 @@ void ReportRender::renderDataBand(BandDesignIntf *dataBand) renderBand(dataBand, 0, StartNewPageAsNeeded); } - if (footer && footer->printAlways()) + if (footer && footer->printAlways()){ renderBand(footer, 0, StartNewPageAsNeeded); + if (dataBand->keepFooterTogether()) + m_reprintableBands.removeOne(dataBand); + } } void ReportRender::renderPageHeader(PageItemDesignIntf *patternPage)