diff --git a/limereport/bands/lrdataband.cpp b/limereport/bands/lrdataband.cpp index d6a4b94..c9e809d 100644 --- a/limereport/bands/lrdataband.cpp +++ b/limereport/bands/lrdataband.cpp @@ -101,6 +101,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); @@ -113,6 +147,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) { @@ -120,5 +186,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 f2ea27a..870ac9e 100644 --- a/limereport/bands/lrdataband.h +++ b/limereport/bands/lrdataband.h @@ -57,6 +57,8 @@ public: void processPopUpAction(QAction *action); protected: QColor bandColor() const; + void preparePopUpMenu(QMenu &menu); + void processPopUpAction(QAction *action); private: BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0); }; @@ -74,6 +76,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); @@ -91,6 +96,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 ff8710e..75f420f 100644 --- a/limereport/lrreportrender.cpp +++ b/limereport/lrreportrender.cpp @@ -603,7 +603,8 @@ void ReportRender::renderDataBand(BandDesignIntf *dataBand) firstTime = false; } - m_reprintableBands.removeOne(header); + if (!dataBand->keepFooterTogether()) + m_reprintableBands.removeOne(header); if (header) recalcIfNeeded(header); if (bandDatasource->prior()){ @@ -611,8 +612,11 @@ void ReportRender::renderDataBand(BandDesignIntf *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); @@ -620,8 +624,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)