2018-06-21 14:29:00 +03:00
|
|
|
#ifndef LRABSTRACTLAYOUT_H
|
|
|
|
#define LRABSTRACTLAYOUT_H
|
|
|
|
|
|
|
|
#include "lritemdesignintf.h"
|
|
|
|
#include "lrlayoutmarker.h"
|
2020-03-03 05:19:59 +03:00
|
|
|
#include <QtGlobal>
|
2018-06-21 14:29:00 +03:00
|
|
|
|
|
|
|
namespace LimeReport{
|
|
|
|
class AbstractLayout: public LayoutDesignIntf
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY(bool hideEmptyItems READ hideEmptyItems WRITE setHideEmptyItems)
|
2019-02-05 23:25:18 +03:00
|
|
|
Q_PROPERTY(int layoutSpacing READ layoutSpacing WRITE setLayoutSpacing)
|
2018-06-21 14:29:00 +03:00
|
|
|
public:
|
|
|
|
enum LayoutType{Layout,Table};
|
2021-08-24 10:22:30 +03:00
|
|
|
#if QT_VERSION >= 0x050500
|
2020-02-17 07:17:02 +03:00
|
|
|
Q_ENUM(LayoutType)
|
2020-03-03 05:19:59 +03:00
|
|
|
#else
|
|
|
|
Q_ENUMS(LayoutType)
|
|
|
|
#endif
|
2018-06-21 14:29:00 +03:00
|
|
|
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 restoreChild(BaseDesignIntf *item);
|
|
|
|
bool isEmpty() const;
|
2019-01-15 13:59:00 +03:00
|
|
|
void paintChild(BaseDesignIntf* child, QPointF parentPos, QPainter* painter);
|
|
|
|
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
|
2018-06-21 14:29:00 +03:00
|
|
|
|
|
|
|
bool hideEmptyItems() const;
|
|
|
|
void setHideEmptyItems(bool hideEmptyItems);
|
2019-02-04 19:40:29 +03:00
|
|
|
Q_INVOKABLE QObject* at(int index);
|
2018-06-21 14:29:00 +03:00
|
|
|
int childrenCount();
|
2019-02-05 23:25:18 +03:00
|
|
|
int layoutSpacing() const;
|
|
|
|
void setLayoutSpacing(int layoutSpacing);
|
2019-09-09 21:25:08 +03:00
|
|
|
qreal layoutSpacingMM(){ return m_layoutSpacing * Const::mmFACTOR;}
|
2019-02-04 19:40:29 +03:00
|
|
|
protected:
|
2018-06-21 14:29:00 +03:00
|
|
|
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);
|
2019-02-02 00:28:30 +03:00
|
|
|
void rebuildChildrenIfNeeded();
|
2018-06-21 14:29:00 +03:00
|
|
|
private:
|
2019-02-02 00:28:30 +03:00
|
|
|
virtual void sortChildren() = 0;
|
2018-06-21 14:29:00 +03:00
|
|
|
virtual void divideSpace() = 0;
|
|
|
|
virtual void updateLayoutSize() = 0;
|
|
|
|
virtual void relocateChildren() = 0;
|
2019-02-02 00:28:30 +03:00
|
|
|
virtual BaseDesignIntf* findNext(BaseDesignIntf *item);
|
|
|
|
virtual BaseDesignIntf* findPrior(BaseDesignIntf *item);
|
2018-06-21 14:29:00 +03:00
|
|
|
virtual void placeItemInLayout(BaseDesignIntf* item) = 0;
|
|
|
|
virtual void insertItemInLayout(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;
|
2019-02-05 23:25:18 +03:00
|
|
|
int m_layoutSpacing;
|
2018-06-21 14:29:00 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace LimeReport
|
|
|
|
|
|
|
|
#endif // LRABSTRACTLAYOUT_H
|