0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-23 16:22:58 +03:00
LimeReport/limereport/items/lrabstractlayout.h
Андрей Лухнов 0fca7169d3 Define code style and format all source file using clang-format-14
except those placed in 3rdparty directories.
2024-09-19 21:09:38 +03:00

92 lines
3.2 KiB
C++

#ifndef LRABSTRACTLAYOUT_H
#define LRABSTRACTLAYOUT_H
#include "lritemdesignintf.h"
#include "lrlayoutmarker.h"
#include <QtGlobal>
namespace LimeReport {
class AbstractLayout: public LayoutDesignIntf {
Q_OBJECT
Q_PROPERTY(bool hideEmptyItems READ hideEmptyItems WRITE setHideEmptyItems)
Q_PROPERTY(int layoutSpacing READ layoutSpacing WRITE setLayoutSpacing)
public:
enum LayoutType {
Layout,
Table
};
#if QT_VERSION >= 0x050500
Q_ENUM(LayoutType)
#else
Q_ENUMS(LayoutType)
#endif
AbstractLayout(QString xmlTag, QObject* owner = 0, QGraphicsItem* parent = 0);
~AbstractLayout();
QList<BaseDesignIntf*>& layoutsChildren();
LayoutMarker* layoutMarker() const;
bool isRelocating() const;
void setIsRelocating(bool isRelocating);
LayoutType layoutType() const;
void setLayoutType(const LayoutType& layoutType);
void addChild(BaseDesignIntf* item, bool updateSize = true);
void removeChild(BaseDesignIntf* item);
void restoreChild(BaseDesignIntf* item);
bool isEmpty() const;
void paintChild(BaseDesignIntf* child, QPointF parentPos, QPainter* painter);
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
bool hideEmptyItems() const;
void setHideEmptyItems(bool hideEmptyItems);
Q_INVOKABLE QObject* at(int index);
int childrenCount();
int layoutSpacing() const;
void setLayoutSpacing(int layoutSpacing);
qreal layoutSpacingMM() { return m_layoutSpacing * Const::mmFACTOR; }
protected:
void beforeDelete();
void childAddedEvent(BaseDesignIntf* child);
void geometryChangedEvent(QRectF newRect, QRectF);
void initMode(ItemMode mode);
void setBorderLinesFlags(BorderLines flags);
void collectionLoadFinished(const QString& collectionName);
void objectLoadFinished();
bool isNeedUpdateSize(RenderPass pass) const;
QVariant itemChange(GraphicsItemChange change, const QVariant& value);
void updateItemSize(DataSourceManager* dataManager, RenderPass pass, int maxHeight);
void rebuildChildrenIfNeeded();
void connectToLayout(BaseDesignIntf* item);
void disconnectFromLayout(BaseDesignIntf* item);
virtual void insertItemInLayout(BaseDesignIntf* item);
private:
virtual void sortChildren() = 0;
virtual void divideSpace() = 0;
virtual void updateLayoutSize() = 0;
virtual void relocateChildren() = 0;
virtual BaseDesignIntf* findNext(BaseDesignIntf* item);
virtual BaseDesignIntf* findPrior(BaseDesignIntf* item);
virtual void placeItemInLayout(BaseDesignIntf* item) = 0;
private slots:
void slotOnChildDestroy(QObject* child);
void slotOnChildGeometryChanged(QObject* item, QRectF newGeometry, QRectF oldGeometry);
void slotOnChildItemAlignChanged(BaseDesignIntf* item, const ItemAlign&, const ItemAlign&);
void slotOnChildVisibleHasChanged(BaseDesignIntf*);
void slotOnChildSelectionHasChanged(BaseDesignIntf* item, bool value);
private:
QList<BaseDesignIntf*> m_children;
bool m_isRelocating;
LayoutMarker* m_layoutMarker;
LayoutType m_layoutType;
bool m_hideEmptyItems;
int m_layoutSpacing;
};
} // namespace LimeReport
#endif // LRABSTRACTLAYOUT_H