mirror of
https://github.com/python-LimeReport/LimeReport.git
synced 2024-12-25 13:04:38 +03:00
Splittable band has been fixed
This commit is contained in:
parent
2338c9d8b7
commit
103ce472aa
@ -74,6 +74,7 @@ public:
|
|||||||
bool isEmpty() const;
|
bool isEmpty() const;
|
||||||
LayoutType layoutType() const;
|
LayoutType layoutType() const;
|
||||||
void setLayoutType(const LayoutType &layoutType);
|
void setLayoutType(const LayoutType &layoutType);
|
||||||
|
bool isSplittable() const { return true;}
|
||||||
protected:
|
protected:
|
||||||
void collectionLoadFinished(const QString &collectionName);
|
void collectionLoadFinished(const QString &collectionName);
|
||||||
void objectLoadFinished();
|
void objectLoadFinished();
|
||||||
|
@ -794,7 +794,7 @@ QString TextItem::getTextPart(int height, int skipHeight){
|
|||||||
int textPos = 0;
|
int textPos = 0;
|
||||||
|
|
||||||
TextPtr text = textDocument();
|
TextPtr text = textDocument();
|
||||||
|
text->documentLayout();
|
||||||
QTextBlock curBlock = text->begin();
|
QTextBlock curBlock = text->begin();
|
||||||
QString resultText = "";
|
QString resultText = "";
|
||||||
|
|
||||||
|
@ -123,7 +123,8 @@ BandDesignIntf::BandDesignIntf(BandsType bandType, const QString &xmlTypeName, Q
|
|||||||
m_startFromNewPage(false),
|
m_startFromNewPage(false),
|
||||||
m_printAlways(false),
|
m_printAlways(false),
|
||||||
m_repeatOnEachRow(false),
|
m_repeatOnEachRow(false),
|
||||||
m_useAlternateBackgroundColor(false)
|
m_useAlternateBackgroundColor(false),
|
||||||
|
m_bottomSpace()
|
||||||
{
|
{
|
||||||
setPossibleResizeDirectionFlags(ResizeBottom);
|
setPossibleResizeDirectionFlags(ResizeBottom);
|
||||||
setPossibleMoveFlags(TopBotom);
|
setPossibleMoveFlags(TopBotom);
|
||||||
@ -502,7 +503,8 @@ BaseDesignIntf* BandDesignIntf::cloneUpperPart(int height, QObject *owner, QGrap
|
|||||||
{
|
{
|
||||||
int maxBottom = 0;
|
int maxBottom = 0;
|
||||||
BandDesignIntf* upperPart = dynamic_cast<BandDesignIntf*>(createSameTypeItem(owner,parent));
|
BandDesignIntf* upperPart = dynamic_cast<BandDesignIntf*>(createSameTypeItem(owner,parent));
|
||||||
BaseDesignIntf* upperItem;
|
upperPart->m_bottomSpace = this->bottomSpace();
|
||||||
|
BaseDesignIntf* upperItem = 0;
|
||||||
|
|
||||||
upperPart->initFromItem(this);
|
upperPart->initFromItem(this);
|
||||||
|
|
||||||
@ -548,6 +550,7 @@ bool itemLessThen(QGraphicsItem* i1, QGraphicsItem* i2){
|
|||||||
BaseDesignIntf *BandDesignIntf::cloneBottomPart(int height, QObject *owner, QGraphicsItem *parent)
|
BaseDesignIntf *BandDesignIntf::cloneBottomPart(int height, QObject *owner, QGraphicsItem *parent)
|
||||||
{
|
{
|
||||||
BandDesignIntf* bottomPart = dynamic_cast<BandDesignIntf*>(createSameTypeItem(owner,parent));
|
BandDesignIntf* bottomPart = dynamic_cast<BandDesignIntf*>(createSameTypeItem(owner,parent));
|
||||||
|
bottomPart->m_bottomSpace = this->bottomSpace();
|
||||||
bottomPart->initFromItem(this);
|
bottomPart->initFromItem(this);
|
||||||
|
|
||||||
QList<QGraphicsItem*> bandItems;
|
QList<QGraphicsItem*> bandItems;
|
||||||
@ -564,17 +567,16 @@ BaseDesignIntf *BandDesignIntf::cloneBottomPart(int height, QObject *owner, QGra
|
|||||||
}
|
}
|
||||||
else if ((item->geometry().top()<height) && (item->geometry().bottom()>height)){
|
else if ((item->geometry().top()<height) && (item->geometry().bottom()>height)){
|
||||||
int sliceHeight = height-item->geometry().top();
|
int sliceHeight = height-item->geometry().top();
|
||||||
if (item->canBeSplitted(sliceHeight)) {
|
if (item->isSplittable() && item->canBeSplitted(sliceHeight)) {
|
||||||
BaseDesignIntf* tmpItem=item->cloneBottomPart(sliceHeight,bottomPart,bottomPart);
|
BaseDesignIntf* tmpItem=item->cloneBottomPart(sliceHeight,bottomPart,bottomPart);
|
||||||
tmpItem->setPos(tmpItem->pos().x(),0);
|
tmpItem->setPos(tmpItem->pos().x(),0);
|
||||||
if (tmpItem->pos().y()<0) 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();
|
BaseDesignIntf* slicedItem = m_slicedItems.value(tmpItem->objectName());
|
||||||
qreal bottomOffset = (height - m_slicedItems.value(tmpItem->objectName())->pos().y())-m_slicedItems.value(tmpItem->objectName())->height();
|
if (slicedItem){
|
||||||
moveItemsDown(item->pos().y()+item->height(), sizeOffset + bottomOffset);
|
qreal sizeOffset = (slicedItem->height()+tmpItem->height()) - item->height();
|
||||||
}
|
qreal bottomOffset = (height - slicedItem->pos().y())-m_slicedItems.value(tmpItem->objectName())->height();
|
||||||
else if (item->isSplittable()){
|
moveItemsDown(item->pos().y()+item->height(), sizeOffset + bottomOffset);
|
||||||
BaseDesignIntf* tmpItem = item->cloneItem(item->itemMode(),bottomPart,bottomPart);
|
}
|
||||||
tmpItem->setPos(tmpItem->pos().x(),0);
|
|
||||||
} else {
|
} else {
|
||||||
if ((item->geometry().bottom()-height)>height){
|
if ((item->geometry().bottom()-height)>height){
|
||||||
BaseDesignIntf* tmpItem = item->cloneItem(item->itemMode(),bottomPart,bottomPart);
|
BaseDesignIntf* tmpItem = item->cloneItem(item->itemMode(),bottomPart,bottomPart);
|
||||||
@ -765,6 +767,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)
|
void BandDesignIntf::slotPropertyObjectNameChanged(const QString &, const QString& newName)
|
||||||
{
|
{
|
||||||
update();
|
update();
|
||||||
@ -906,7 +913,7 @@ void BandDesignIntf::setKeepFooterTogether(bool value)
|
|||||||
void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight)
|
void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight)
|
||||||
{
|
{
|
||||||
qreal spaceBorder=0;
|
qreal spaceBorder=0;
|
||||||
if (keepBottomSpaceOption()) spaceBorder=height()-findMaxBottom();
|
if (keepBottomSpaceOption()) spaceBorder = bottomSpace();
|
||||||
if (borderLines()!=0){
|
if (borderLines()!=0){
|
||||||
spaceBorder += borderLineSize();
|
spaceBorder += borderLineSize();
|
||||||
}
|
}
|
||||||
|
@ -82,6 +82,18 @@ private:
|
|||||||
BandDesignIntf* m_band;
|
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
|
class BandDesignIntf : public ItemsContainerDesignInft
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -225,6 +237,7 @@ public:
|
|||||||
bool useAlternateBackgroundColor() const;
|
bool useAlternateBackgroundColor() const;
|
||||||
void setUseAlternateBackgroundColor(bool useAlternateBackgroundColor);
|
void setUseAlternateBackgroundColor(bool useAlternateBackgroundColor);
|
||||||
void replaceGroupsFunction(BandDesignIntf *band);
|
void replaceGroupsFunction(BandDesignIntf *band);
|
||||||
|
qreal bottomSpace() const;
|
||||||
signals:
|
signals:
|
||||||
void bandRendered(BandDesignIntf* band);
|
void bandRendered(BandDesignIntf* band);
|
||||||
protected:
|
protected:
|
||||||
@ -279,8 +292,9 @@ private:
|
|||||||
bool m_printAlways;
|
bool m_printAlways;
|
||||||
bool m_repeatOnEachRow;
|
bool m_repeatOnEachRow;
|
||||||
QMap<QString,BaseDesignIntf*> m_slicedItems;
|
QMap<QString,BaseDesignIntf*> m_slicedItems;
|
||||||
QColor m_alternateBackgroundColor;
|
QColor m_alternateBackgroundColor;
|
||||||
bool m_useAlternateBackgroundColor;
|
bool m_useAlternateBackgroundColor;
|
||||||
|
InitializedValue m_bottomSpace;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DataBandDesignIntf : public BandDesignIntf{
|
class DataBandDesignIntf : public BandDesignIntf{
|
||||||
|
@ -91,7 +91,7 @@ void ItemsContainerDesignInft::arrangeSubItems(RenderPass pass, DataSourceManage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal ItemsContainerDesignInft::findMaxBottom()
|
qreal ItemsContainerDesignInft::findMaxBottom() const
|
||||||
{
|
{
|
||||||
qreal maxBottom=0;
|
qreal maxBottom=0;
|
||||||
foreach(QGraphicsItem* item,childItems()){
|
foreach(QGraphicsItem* item,childItems()){
|
||||||
@ -103,7 +103,7 @@ qreal ItemsContainerDesignInft::findMaxBottom()
|
|||||||
return maxBottom;
|
return maxBottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
qreal ItemsContainerDesignInft::findMaxHeight()
|
qreal ItemsContainerDesignInft::findMaxHeight() const
|
||||||
{
|
{
|
||||||
qreal maxHeight=0;
|
qreal maxHeight=0;
|
||||||
foreach(QGraphicsItem* item,childItems()){
|
foreach(QGraphicsItem* item,childItems()){
|
||||||
|
@ -44,8 +44,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void snapshotItemsLayout();
|
void snapshotItemsLayout();
|
||||||
void arrangeSubItems(RenderPass pass, DataSourceManager *dataManager, ArrangeType type = AsNeeded);
|
void arrangeSubItems(RenderPass pass, DataSourceManager *dataManager, ArrangeType type = AsNeeded);
|
||||||
qreal findMaxBottom();
|
qreal findMaxBottom() const;
|
||||||
qreal findMaxHeight();
|
qreal findMaxHeight() const;
|
||||||
private:
|
private:
|
||||||
QVector<PItemSortContainer> m_containerItems;
|
QVector<PItemSortContainer> m_containerItems;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user