#ifndef SLIDEITEM_H
#define SLIDEITEM_H

#include <QEasingCurve>
#include <QList>
#include <QVariant>
#include <QVector>

#include "xmlobj.h"

class TreeItem;
class SlideModel;

class SlideItem : public XMLObj 
{
public:
    SlideItem(const QVector<QVariant> &data, SlideItem *parent = 0, SlideModel *sm = 0 );
    ~SlideItem();
    SlideModel* getModel(); 
    uint getID();
    SlideItem *child(int number);
    int childCount() const;
    int columnCount() const;
    QVariant data(int column) const;
    int row() const;
    void insertItem (int pos, SlideItem *si);
    void removeItem (int pos);
    bool insertChildren(int position, int count, int columns);
    bool insertColumns(int position, int columns);
    SlideItem* parent();
    bool removeChildren(int position, int count);
    bool removeColumns(int position, int columns);
    int childNumber() const;
    bool setData(int column, const QVariant &value);
    void setName (const QString &n);
    QString getName ();
    void setTreeItem (TreeItem *ti);
    int getTreeItemID();
    void setInScript (const QString &);
    QString getInScript ();
    void setOutScript (const QString &);
    QString getOutScript ();
    void setZoomFactor(const qreal &);
    qreal getZoomFactor ();
    void setRotationAngle(const qreal &);
    qreal getRotationAngle ();
    void setDuration (const int &);
    int getDuration();
    void setEasingCurve (const QEasingCurve &);
    QEasingCurve getEasingCurve();
    QString saveToDir();

private:
    SlideModel *model;
    QList<SlideItem*> childItems;
    QVector<QVariant> itemData;
    SlideItem *parentItem;

    static uint idLastSlide;	//! Last used unique ID for slide
    uint slideID;

    QString inScript;
    QString outScript;

    int treeItemID;
    qreal zoomFactor;
    qreal rotationAngle;
    int duration;
    QEasingCurve easingCurve;
};

#endif
