#ifndef LRVERTICALLAYOUT_H
#define LRVERTICALLAYOUT_H

#include "lrabstractlayout.h"
#include "lritemdesignintf.h"
#include "lrlayoutmarker.h"

namespace LimeReport {

class VerticalLayout: public AbstractLayout {
    Q_OBJECT
public:
    friend class BaseDesignIntf;
    VerticalLayout(QObject* owner = 0, QGraphicsItem* parent = 0);
    ~VerticalLayout();
    // BaseDesignIntf interface
    BaseDesignIntf* createSameTypeItem(QObject* owner, QGraphicsItem* parent);
    bool isSplittable() const { return true; }

protected:
    void updateLayoutSize();
    void relocateChildren();
    bool canBeSplitted(int height) const;
    BaseDesignIntf* cloneUpperPart(int height, QObject* owner = 0, QGraphicsItem* parent = 0);
    BaseDesignIntf* cloneBottomPart(int height, QObject* owner = 0, QGraphicsItem* parent = 0);

private:
    void sortChildren();
    void divideSpace();
    void placeItemInLayout(BaseDesignIntf* item);
};

} // namespace LimeReport
#endif // LRVERTICALLAYOUT_H