Layouts have been refactored

This commit is contained in:
Arin Alexander 2019-02-02 00:28:30 +03:00
parent d32b42d933
commit 72fb6692c6
6 changed files with 53 additions and 70 deletions

View File

@ -259,6 +259,34 @@ void AbstractLayout::updateItemSize(DataSourceManager* dataManager, RenderPass p
BaseDesignIntf::updateItemSize(dataManager, pass, maxHeight); BaseDesignIntf::updateItemSize(dataManager, pass, maxHeight);
} }
void AbstractLayout::rebuildChildrenIfNeeded(){
if (layoutsChildren().count() < childItems().size()-1){
layoutsChildren().clear();
foreach (BaseDesignIntf* childItem, childBaseItems()) {
layoutsChildren().append(childItem);
}
sortChildren();
}
}
BaseDesignIntf *AbstractLayout::findNext(BaseDesignIntf *item)
{
rebuildChildrenIfNeeded();
for (int i=0; i<layoutsChildren().count();++i){
if (layoutsChildren()[i]==item && layoutsChildren().size()>i+1){ return layoutsChildren()[i+1];}
}
return 0;
}
BaseDesignIntf *AbstractLayout::findPrior(BaseDesignIntf *item)
{
rebuildChildrenIfNeeded();
for (int i=0; i<layoutsChildren().count();++i){
if (layoutsChildren()[i]==item && i!=0){ return layoutsChildren()[i-1];}
}
return 0;
}
void AbstractLayout::slotOnChildDestroy(QObject* child) void AbstractLayout::slotOnChildDestroy(QObject* child)
{ {
m_children.removeAll(static_cast<BaseDesignIntf*>(child)); m_children.removeAll(static_cast<BaseDesignIntf*>(child));
@ -323,6 +351,13 @@ void AbstractLayout::setHideEmptyItems(bool hideEmptyItems)
} }
} }
BaseDesignIntf *AbstractLayout::at(int index)
{
rebuildChildrenIfNeeded();
if (layoutsChildren().size() > index) return layoutsChildren()[index];
return 0;
}
LayoutMarker* AbstractLayout::layoutMarker() const LayoutMarker* AbstractLayout::layoutMarker() const
{ {
return m_layoutMarker; return m_layoutMarker;

View File

@ -29,7 +29,7 @@ public:
bool hideEmptyItems() const; bool hideEmptyItems() const;
void setHideEmptyItems(bool hideEmptyItems); void setHideEmptyItems(bool hideEmptyItems);
BaseDesignIntf* at(int index);
protected: protected:
int childrenCount(); int childrenCount();
void beforeDelete(); void beforeDelete();
@ -42,12 +42,14 @@ protected:
bool isNeedUpdateSize(RenderPass pass) const; bool isNeedUpdateSize(RenderPass pass) const;
QVariant itemChange(GraphicsItemChange change, const QVariant &value); QVariant itemChange(GraphicsItemChange change, const QVariant &value);
void updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight); void updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight);
void rebuildChildrenIfNeeded();
private: private:
virtual void sortChildren() = 0;
virtual void divideSpace() = 0; virtual void divideSpace() = 0;
virtual void updateLayoutSize() = 0; virtual void updateLayoutSize() = 0;
virtual void relocateChildren() = 0; virtual void relocateChildren() = 0;
virtual BaseDesignIntf *findNext(BaseDesignIntf *item) = 0; virtual BaseDesignIntf* findNext(BaseDesignIntf *item);
virtual BaseDesignIntf *findPrior(BaseDesignIntf *item) = 0; virtual BaseDesignIntf* findPrior(BaseDesignIntf *item);
virtual void placeItemInLayout(BaseDesignIntf* item) = 0; virtual void placeItemInLayout(BaseDesignIntf* item) = 0;
virtual void insertItemInLayout(BaseDesignIntf* item) = 0; virtual void insertItemInLayout(BaseDesignIntf* item) = 0;
private slots: private slots:

View File

@ -138,6 +138,11 @@ void HorizontalLayout::setItemAlign(const BaseDesignIntf::ItemAlign &itemAlign)
BaseDesignIntf::setItemAlign(itemAlign); BaseDesignIntf::setItemAlign(itemAlign);
} }
void HorizontalLayout::sortChildren()
{
qSort(layoutsChildren().begin(),layoutsChildren().end(),horizontalLessThen);
}
void HorizontalLayout::updateLayoutSize() void HorizontalLayout::updateLayoutSize()
{ {
int spaceBorder = (borderLines() != 0) ? borderLineSize() : 0; int spaceBorder = (borderLines() != 0) ? borderLineSize() : 0;
@ -183,34 +188,6 @@ void HorizontalLayout::relocateChildren()
setIsRelocating(false); setIsRelocating(false);
} }
BaseDesignIntf* HorizontalLayout::findNext(BaseDesignIntf* item){
if (layoutsChildren().count() < childItems().size()-1){
layoutsChildren().clear();
foreach (BaseDesignIntf* childItem, childBaseItems()) {
layoutsChildren().append(childItem);
}
}
qSort(layoutsChildren().begin(),layoutsChildren().end(),horizontalLessThen);
for (int i=0; i<layoutsChildren().count();++i){
if (layoutsChildren()[i]==item && layoutsChildren().size()>i+1){ return layoutsChildren()[i+1];}
}
return 0;
}
BaseDesignIntf* HorizontalLayout::findPrior(BaseDesignIntf* item){
if (layoutsChildren().count()<childItems().size()-1){
layoutsChildren().clear();
foreach (BaseDesignIntf* childItem, childBaseItems()) {
layoutsChildren().append(childItem);
}
}
qSort(layoutsChildren().begin(),layoutsChildren().end(),horizontalLessThen);
for (int i=0; i<layoutsChildren().count();++i){
if (layoutsChildren()[i]==item && i!=0){ return layoutsChildren()[i-1];}
}
return 0;
}
void HorizontalLayout::divideSpace(){ void HorizontalLayout::divideSpace(){
setIsRelocating(true); setIsRelocating(true);
qreal itemsSumSize = 0; qreal itemsSumSize = 0;

View File

@ -53,16 +53,13 @@ public:
protected: protected:
void updateLayoutSize(); void updateLayoutSize();
void relocateChildren(); void relocateChildren();
BaseDesignIntf *findNext(BaseDesignIntf *item);
BaseDesignIntf *findPrior(BaseDesignIntf *item);
bool canBeSplitted(int height) const; bool canBeSplitted(int height) const;
BaseDesignIntf* cloneUpperPart(int height, QObject* owner=0, QGraphicsItem* parent=0); BaseDesignIntf* cloneUpperPart(int height, QObject* owner=0, QGraphicsItem* parent=0);
BaseDesignIntf* cloneBottomPart(int height, QObject *owner=0, QGraphicsItem *parent=0); BaseDesignIntf* cloneBottomPart(int height, QObject *owner=0, QGraphicsItem *parent=0);
void setItemAlign(const ItemAlign &itemAlign); void setItemAlign(const ItemAlign &itemAlign);
private: private:
void sortChildren();
void divideSpace(); void divideSpace();
void placeItemInLayout(BaseDesignIntf* item); void placeItemInLayout(BaseDesignIntf* item);
void insertItemInLayout(BaseDesignIntf* item); void insertItemInLayout(BaseDesignIntf* item);

View File

@ -142,6 +142,11 @@ BaseDesignIntf* VerticalLayout::cloneBottomPart(int height, QObject* owner, QGra
return bottomPart; return bottomPart;
} }
void VerticalLayout::sortChildren()
{
qSort(layoutsChildren().begin(),layoutsChildren().end(),verticalLessThen);
}
void VerticalLayout::divideSpace() void VerticalLayout::divideSpace()
{ {
setIsRelocating(true); setIsRelocating(true);
@ -187,34 +192,4 @@ void VerticalLayout::insertItemInLayout(BaseDesignIntf* item)
} }
} }
BaseDesignIntf*VerticalLayout::findNext(BaseDesignIntf* item) } // namespace LimeReport
{
if (layoutsChildren().count() < childItems().size()-1){
layoutsChildren().clear();
foreach (BaseDesignIntf* childItem, childBaseItems()) {
layoutsChildren().append(childItem);
}
}
qSort(layoutsChildren().begin(),layoutsChildren().end(),verticalLessThen);
for (int i=0; i<layoutsChildren().count();++i){
if (layoutsChildren()[i]==item && layoutsChildren().size()>i+1){ return layoutsChildren()[i+1];}
}
return 0;
}
BaseDesignIntf*VerticalLayout::findPrior(BaseDesignIntf* item)
{
if (layoutsChildren().count()<childItems().size()-1){
layoutsChildren().clear();
foreach (BaseDesignIntf* childItem, childBaseItems()) {
layoutsChildren().append(childItem);
}
}
qSort(layoutsChildren().begin(),layoutsChildren().end(),verticalLessThen);
for (int i=0; i<layoutsChildren().count();++i){
if (layoutsChildren()[i]==item && i!=0){ return layoutsChildren()[i-1];}
}
return 0;
}
}

View File

@ -24,13 +24,10 @@ protected:
BaseDesignIntf* cloneUpperPart(int height, QObject* owner=0, QGraphicsItem* parent=0); BaseDesignIntf* cloneUpperPart(int height, QObject* owner=0, QGraphicsItem* parent=0);
BaseDesignIntf* cloneBottomPart(int height, QObject *owner=0, QGraphicsItem *parent=0); BaseDesignIntf* cloneBottomPart(int height, QObject *owner=0, QGraphicsItem *parent=0);
private: private:
void sortChildren();
void divideSpace(); void divideSpace();
void placeItemInLayout(BaseDesignIntf* item); void placeItemInLayout(BaseDesignIntf* item);
void insertItemInLayout(BaseDesignIntf* item); void insertItemInLayout(BaseDesignIntf* item);
BaseDesignIntf *findNext(BaseDesignIntf *item);
BaseDesignIntf *findPrior(BaseDesignIntf* item);
private:
}; };
} // namespace LimeReport } // namespace LimeReport