mirror of
https://github.com/fralx/LimeReport.git
synced 2025-01-11 17:18:10 +03:00
Merge branch 'develop' into feature/Translate
This commit is contained in:
commit
c085944ac9
@ -69,7 +69,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc
|
||||
|
||||
LIMEREPORT_VERSION_MAJOR = 1
|
||||
LIMEREPORT_VERSION_MINOR = 4
|
||||
LIMEREPORT_VERSION_RELEASE = 34
|
||||
LIMEREPORT_VERSION_RELEASE = 38
|
||||
|
||||
LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"'
|
||||
DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\"
|
||||
|
@ -74,6 +74,7 @@ public:
|
||||
bool isEmpty() const;
|
||||
LayoutType layoutType() const;
|
||||
void setLayoutType(const LayoutType &layoutType);
|
||||
bool isSplittable() const { return true;}
|
||||
protected:
|
||||
void collectionLoadFinished(const QString &collectionName);
|
||||
void objectLoadFinished();
|
||||
|
@ -117,16 +117,16 @@ void TextItem::processPopUpAction(QAction *action)
|
||||
this->showEditorDialog();
|
||||
}
|
||||
if (action->text().compare(tr("Auto height")) == 0){
|
||||
setProperty("autoHeight",action->isChecked());
|
||||
page()->setPropertyToSelectedItems("autoHeight",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Allow HTML")) == 0){
|
||||
setProperty("allowHTML",action->isChecked());
|
||||
page()->setPropertyToSelectedItems("allowHTML",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Allow HTML in fields")) == 0){
|
||||
setProperty("allowHTMLInFields",action->isChecked());
|
||||
page()->setPropertyToSelectedItems("allowHTMLInFields",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Stretch to max height")) == 0){
|
||||
setProperty("stretchToMaxHeight",action->isChecked());
|
||||
page()->setPropertyToSelectedItems("stretchToMaxHeight",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Transparent")) == 0){
|
||||
if (action->isChecked()){
|
||||
@ -794,7 +794,7 @@ QString TextItem::getTextPart(int height, int skipHeight){
|
||||
int textPos = 0;
|
||||
|
||||
TextPtr text = textDocument();
|
||||
|
||||
text->documentLayout();
|
||||
QTextBlock curBlock = text->begin();
|
||||
QString resultText = "";
|
||||
|
||||
|
@ -123,7 +123,8 @@ BandDesignIntf::BandDesignIntf(BandsType bandType, const QString &xmlTypeName, Q
|
||||
m_startFromNewPage(false),
|
||||
m_printAlways(false),
|
||||
m_repeatOnEachRow(false),
|
||||
m_useAlternateBackgroundColor(false)
|
||||
m_useAlternateBackgroundColor(false),
|
||||
m_bottomSpace()
|
||||
{
|
||||
setPossibleResizeDirectionFlags(ResizeBottom);
|
||||
setPossibleMoveFlags(TopBotom);
|
||||
@ -292,6 +293,14 @@ void BandDesignIntf::setDataSourceName(const QString &datasource){
|
||||
m_dataSourceName=datasource;
|
||||
}
|
||||
|
||||
void BandDesignIntf::setKeepBottomSpaceOption(bool value){
|
||||
if (m_keepBottomSpace!=value){
|
||||
m_keepBottomSpace=value;
|
||||
if (!isLoading())
|
||||
notify("keepBottomSpace",!value,value);
|
||||
}
|
||||
}
|
||||
|
||||
void BandDesignIntf::addChildBand(BandDesignIntf *band)
|
||||
{
|
||||
m_childBands.append(band);
|
||||
@ -466,13 +475,25 @@ void BandDesignIntf::preparePopUpMenu(QMenu &menu)
|
||||
}
|
||||
|
||||
menu.addSeparator();
|
||||
QAction* autoHeightAction = menu.addAction(tr("Auto height"));
|
||||
autoHeightAction->setCheckable(true);
|
||||
autoHeightAction->setChecked(autoHeight());
|
||||
QAction* currAction = menu.addAction(tr("Auto height"));
|
||||
currAction->setCheckable(true);
|
||||
currAction->setChecked(autoHeight());
|
||||
|
||||
QAction* autoSplittableAction = menu.addAction(tr("Splittable"));
|
||||
autoSplittableAction->setCheckable(true);
|
||||
autoSplittableAction->setChecked(isSplittable());
|
||||
currAction = menu.addAction(tr("Splittable"));
|
||||
currAction->setCheckable(true);
|
||||
currAction->setChecked(isSplittable());
|
||||
|
||||
currAction = menu.addAction(tr("Keep bottom space"));
|
||||
currAction->setCheckable(true);
|
||||
currAction->setChecked(keepBottomSpaceOption());
|
||||
|
||||
currAction = menu.addAction(tr("Start from new page"));
|
||||
currAction->setCheckable(true);
|
||||
currAction->setChecked(startFromNewPage());
|
||||
|
||||
currAction = menu.addAction(tr("Start new page"));
|
||||
currAction->setCheckable(true);
|
||||
currAction->setChecked(startNewPage());
|
||||
}
|
||||
|
||||
void BandDesignIntf::processPopUpAction(QAction *action)
|
||||
@ -483,6 +504,15 @@ void BandDesignIntf::processPopUpAction(QAction *action)
|
||||
if (action->text().compare(tr("Splittable")) == 0){
|
||||
setProperty("splittable",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Keep bottom space")) == 0){
|
||||
setProperty("keepBottomSpace",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Start new page")) == 0){
|
||||
setProperty("startNewPage",action->isChecked());
|
||||
}
|
||||
if (action->text().compare(tr("Start from new page")) == 0){
|
||||
setProperty("startFromNewPage",action->isChecked());
|
||||
}
|
||||
}
|
||||
|
||||
void BandDesignIntf::recalcItems(DataSourceManager* dataManager)
|
||||
@ -502,7 +532,8 @@ BaseDesignIntf* BandDesignIntf::cloneUpperPart(int height, QObject *owner, QGrap
|
||||
{
|
||||
int maxBottom = 0;
|
||||
BandDesignIntf* upperPart = dynamic_cast<BandDesignIntf*>(createSameTypeItem(owner,parent));
|
||||
BaseDesignIntf* upperItem;
|
||||
upperPart->m_bottomSpace = this->bottomSpace();
|
||||
BaseDesignIntf* upperItem = 0;
|
||||
|
||||
upperPart->initFromItem(this);
|
||||
|
||||
@ -548,6 +579,7 @@ bool itemLessThen(QGraphicsItem* i1, QGraphicsItem* i2){
|
||||
BaseDesignIntf *BandDesignIntf::cloneBottomPart(int height, QObject *owner, QGraphicsItem *parent)
|
||||
{
|
||||
BandDesignIntf* bottomPart = dynamic_cast<BandDesignIntf*>(createSameTypeItem(owner,parent));
|
||||
bottomPart->m_bottomSpace = this->bottomSpace();
|
||||
bottomPart->initFromItem(this);
|
||||
|
||||
QList<QGraphicsItem*> bandItems;
|
||||
@ -564,17 +596,16 @@ BaseDesignIntf *BandDesignIntf::cloneBottomPart(int height, QObject *owner, QGra
|
||||
}
|
||||
else if ((item->geometry().top()<height) && (item->geometry().bottom()>height)){
|
||||
int sliceHeight = height-item->geometry().top();
|
||||
if (item->canBeSplitted(sliceHeight)) {
|
||||
if (item->isSplittable() && item->canBeSplitted(sliceHeight)) {
|
||||
BaseDesignIntf* tmpItem=item->cloneBottomPart(sliceHeight,bottomPart,bottomPart);
|
||||
tmpItem->setPos(tmpItem->pos().x(),0);
|
||||
if (tmpItem->pos().y()<0) tmpItem->setPos(tmpItem->pos().x(),0);
|
||||
qreal sizeOffset = (m_slicedItems.value(tmpItem->objectName())->height()+tmpItem->height()) - item->height();
|
||||
qreal bottomOffset = (height - m_slicedItems.value(tmpItem->objectName())->pos().y())-m_slicedItems.value(tmpItem->objectName())->height();
|
||||
moveItemsDown(item->pos().y()+item->height(), sizeOffset + bottomOffset);
|
||||
}
|
||||
else if (item->isSplittable()){
|
||||
BaseDesignIntf* tmpItem = item->cloneItem(item->itemMode(),bottomPart,bottomPart);
|
||||
tmpItem->setPos(tmpItem->pos().x(),0);
|
||||
BaseDesignIntf* slicedItem = m_slicedItems.value(tmpItem->objectName());
|
||||
if (slicedItem){
|
||||
qreal sizeOffset = (slicedItem->height()+tmpItem->height()) - item->height();
|
||||
qreal bottomOffset = (height - slicedItem->pos().y())-m_slicedItems.value(tmpItem->objectName())->height();
|
||||
moveItemsDown(item->pos().y()+item->height(), sizeOffset + bottomOffset);
|
||||
}
|
||||
} else {
|
||||
if ((item->geometry().bottom()-height)>height){
|
||||
BaseDesignIntf* tmpItem = item->cloneItem(item->itemMode(),bottomPart,bottomPart);
|
||||
@ -765,6 +796,11 @@ void BandDesignIntf::setAlternateBackgroundColor(const QColor &alternateBackgrou
|
||||
}
|
||||
}
|
||||
|
||||
qreal BandDesignIntf::bottomSpace() const
|
||||
{
|
||||
return m_bottomSpace.isValid() ? m_bottomSpace.value() : height()-findMaxBottom();
|
||||
}
|
||||
|
||||
void BandDesignIntf::slotPropertyObjectNameChanged(const QString &, const QString& newName)
|
||||
{
|
||||
update();
|
||||
@ -799,7 +835,11 @@ bool BandDesignIntf::startFromNewPage() const
|
||||
|
||||
void BandDesignIntf::setStartFromNewPage(bool startWithNewPage)
|
||||
{
|
||||
m_startFromNewPage = startWithNewPage;
|
||||
if (m_startFromNewPage != startWithNewPage){
|
||||
m_startFromNewPage = startWithNewPage;
|
||||
if (!isLoading())
|
||||
notify("startFromNewPage", !startWithNewPage, startWithNewPage);
|
||||
}
|
||||
}
|
||||
|
||||
bool BandDesignIntf::startNewPage() const
|
||||
@ -809,7 +849,11 @@ bool BandDesignIntf::startNewPage() const
|
||||
|
||||
void BandDesignIntf::setStartNewPage(bool startNewPage)
|
||||
{
|
||||
m_startNewPage = startNewPage;
|
||||
if (m_startNewPage != startNewPage){
|
||||
m_startNewPage = startNewPage;
|
||||
if (!isLoading())
|
||||
notify("startNewPage", !startNewPage, startNewPage);
|
||||
}
|
||||
}
|
||||
|
||||
void BandDesignIntf::setAutoHeight(bool value){
|
||||
@ -906,7 +950,7 @@ void BandDesignIntf::setKeepFooterTogether(bool value)
|
||||
void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight)
|
||||
{
|
||||
qreal spaceBorder=0;
|
||||
if (keepBottomSpaceOption()) spaceBorder=height()-findMaxBottom();
|
||||
if (keepBottomSpaceOption()) spaceBorder = bottomSpace();
|
||||
if (borderLines()!=0){
|
||||
spaceBorder += borderLineSize();
|
||||
}
|
||||
|
@ -82,6 +82,18 @@ private:
|
||||
BandDesignIntf* m_band;
|
||||
};
|
||||
|
||||
class InitializedValue{
|
||||
public:
|
||||
InitializedValue(): m_value(-1), m_isInitialized(false){}
|
||||
InitializedValue(qreal value): m_value(value), m_isInitialized(true){}
|
||||
qreal value() const { return m_value;}
|
||||
void setValue( qreal value){ m_value = value; m_isInitialized = true;}
|
||||
bool isValid() const{ return m_isInitialized;}
|
||||
private:
|
||||
qreal m_value;
|
||||
bool m_isInitialized;
|
||||
};
|
||||
|
||||
class BandDesignIntf : public ItemsContainerDesignInft
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -140,7 +152,7 @@ public:
|
||||
QString datasourceName();
|
||||
void setDataSourceName(const QString& datasourceName);
|
||||
|
||||
void setKeepBottomSpaceOption(bool value){m_keepBottomSpace=value;}
|
||||
void setKeepBottomSpaceOption(bool value);
|
||||
bool keepBottomSpaceOption() const {return m_keepBottomSpace;}
|
||||
|
||||
void addChildBand(BandDesignIntf* band);
|
||||
@ -225,6 +237,7 @@ public:
|
||||
bool useAlternateBackgroundColor() const;
|
||||
void setUseAlternateBackgroundColor(bool useAlternateBackgroundColor);
|
||||
void replaceGroupsFunction(BandDesignIntf *band);
|
||||
qreal bottomSpace() const;
|
||||
signals:
|
||||
void bandRendered(BandDesignIntf* band);
|
||||
protected:
|
||||
@ -279,8 +292,9 @@ private:
|
||||
bool m_printAlways;
|
||||
bool m_repeatOnEachRow;
|
||||
QMap<QString,BaseDesignIntf*> m_slicedItems;
|
||||
QColor m_alternateBackgroundColor;
|
||||
bool m_useAlternateBackgroundColor;
|
||||
QColor m_alternateBackgroundColor;
|
||||
bool m_useAlternateBackgroundColor;
|
||||
InitializedValue m_bottomSpace;
|
||||
};
|
||||
|
||||
class DataBandDesignIntf : public BandDesignIntf{
|
||||
|
@ -91,7 +91,7 @@ void ItemsContainerDesignInft::arrangeSubItems(RenderPass pass, DataSourceManage
|
||||
}
|
||||
}
|
||||
|
||||
qreal ItemsContainerDesignInft::findMaxBottom()
|
||||
qreal ItemsContainerDesignInft::findMaxBottom() const
|
||||
{
|
||||
qreal maxBottom=0;
|
||||
foreach(QGraphicsItem* item,childItems()){
|
||||
@ -103,7 +103,7 @@ qreal ItemsContainerDesignInft::findMaxBottom()
|
||||
return maxBottom;
|
||||
}
|
||||
|
||||
qreal ItemsContainerDesignInft::findMaxHeight()
|
||||
qreal ItemsContainerDesignInft::findMaxHeight() const
|
||||
{
|
||||
qreal maxHeight=0;
|
||||
foreach(QGraphicsItem* item,childItems()){
|
||||
|
@ -44,8 +44,8 @@ public:
|
||||
protected:
|
||||
void snapshotItemsLayout();
|
||||
void arrangeSubItems(RenderPass pass, DataSourceManager *dataManager, ArrangeType type = AsNeeded);
|
||||
qreal findMaxBottom();
|
||||
qreal findMaxHeight();
|
||||
qreal findMaxBottom() const;
|
||||
qreal findMaxHeight() const;
|
||||
private:
|
||||
QVector<PItemSortContainer> m_containerItems;
|
||||
|
||||
|
@ -1071,6 +1071,14 @@ void PageDesignIntf::setReportSettings(ReportSettings *reportSettings)
|
||||
m_pageItem->setReportSettings(m_reportSettings);
|
||||
}
|
||||
|
||||
void PageDesignIntf::setPropertyToSelectedItems(const char* name, const QVariant& value)
|
||||
{
|
||||
foreach(QGraphicsItem* gi, selectedItems()){
|
||||
BaseDesignIntf* item = dynamic_cast<BaseDesignIntf*>(gi);
|
||||
if(item && item->metaObject()->indexOfProperty(name) != -1 ) item->setProperty(name,value);
|
||||
}
|
||||
}
|
||||
|
||||
bool PageDesignIntf::magneticMovement() const
|
||||
{
|
||||
return m_magneticMovement;
|
||||
|
@ -182,6 +182,8 @@ namespace LimeReport {
|
||||
ReportSettings *getReportSettings() const;
|
||||
void setReportSettings(ReportSettings *reportSettings);
|
||||
|
||||
void setPropertyToSelectedItems(const char *name, const QVariant &value);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void keyPressEvent(QKeyEvent *event);
|
||||
|
Loading…
Reference in New Issue
Block a user