#ifndef FGCANVASGROUP_H
#define FGCANVASGROUP_H

#include "fgcanvaselement.h"

class FGCanvasGroup : public FGCanvasElement
{
    Q_OBJECT
public:
    explicit FGCanvasGroup(FGCanvasGroup* pr, LocalProp* prop);

    const FGCanvasElementVec& children() const;

    void markChildZIndicesDirty() const;

    bool hasChilden() const;

    unsigned int childCount() const;

    FGCanvasElement* childAt(unsigned int index) const;

    unsigned int indexOfChild(const FGCanvasElement* e) const;

    CanvasItem* createQuickItem(QQuickItem *parent) override;
    CanvasItem* quickItem() const override
    { return _quick; }

    void removeChild(FGCanvasElement* child);

    void dumpElement() override;
signals:
    void childAdded();
    void childRemoved(int index);

    void canvasSizeChanged();
protected:
    virtual void doPaint(FGCanvasPaintContext* context) const override;

    void doPolish() override;

    bool onChildAdded(LocalProp *prop) override;
    bool onChildRemoved(LocalProp *prop) override;

    virtual void markStyleDirty() override;

    void doDestroy() override;
private:
    void markCachedSymbolDirty();
    int indexOfChildWithProp(LocalProp *prop) const;
    void resetChildQuickItemZValues();

private:
    mutable FGCanvasElementVec _children;
    mutable bool _zIndicesDirty = false;
    mutable bool _cachedSymbolDirty = false;


    CanvasItem* _quick = nullptr;
};

#endif // FGCANVASGROUP_H