#ifndef FRAMETREEMODEL_H
#define FRAMETREEMODEL_H

#include <QAbstractItemModel>
#include "sequenz.h"

/*
 * Das Modell des Objekt Baumes, welches alle Daten enthält, die dort angezeigt werden sollen
 */
class FrameTreeModel : public QAbstractItemModel
{
    Q_OBJECT

private:
    Sequenz *seq;

    // Prüft, ob ein Index valide ist
    bool isIndexValid( const QModelIndex &i ) const;

public:
    explicit FrameTreeModel();
    ~FrameTreeModel();
    // Setzt die Sequenz, welche momenatan annotiert wird
    //  s: die neue Sequenz
    void setSequenz( Sequenz *s );
    // Gibt zurück, was für einen bestimten Knoten angezeigt werden soll
    //  index: Der Index des Knotens
    //  role: Welche daten des Knotens abgefragt werden sollen (z.B.:Name oder Hintergrundfarbe...)
    QVariant data(const QModelIndex &index, int role) const override;
    // Gibt die Flags eines Knotens zurück
    //  index: Der Index des Knotens
    Qt::ItemFlags flags(const QModelIndex &index) const override;
    // Gibt die Grunddaten zurück, welche für das zeichnen benötigt werden
    QVariant headerData(int section, Qt::Orientation orientation,
                        int role = Qt::DisplayRole) const override;
    // gibt den Index eines Knotens zurück
    QModelIndex index(int row, int column,
                      const QModelIndex &parent = QModelIndex()) const override;
    // gibt den Index des Elternknotens zurück
    QModelIndex parent(const QModelIndex &index) const override;
    // gibt die Anzahl der Kindknoten zurück
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    // gibt die Anzahl der Attribute eines Kindknotens zurück
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
    // Ermittelt die zugehörige Kamera und das Zugehörige Bild eines Knotens
    bool clickedOnFrame( const QModelIndex &index, int &camera, int &frame ) const;
    // Gibt den Index des ausgewählten Bildes zurück
    QModelIndex getFrameSelectionIndex() const;
    // Gibt den Index der ausgewählten Kamera zurück
    QModelIndex getCameraSelectionIndex() const;
    // Gibt eine Liste mit ausgewählten Objekten zurück
    QList< QModelIndex > getSelectedPackages() const;
    // Aktualisiert die Tree View
    void update();
};

#endif // FRAMETREEMODEL_H
