#ifndef __VIEWELEMENTSDR_H
#define __VIEWELEMENTSDR_H

#include "viewelement.h"
#include "../extensions/scrapmanager.h"

// define recordingtypes
enum eRecType_t {
    NoRec = 0,
    NormalRec,
    TimeshiftRec
};

/******************************************************************
* cVeDrRecTitle
******************************************************************/
class cVeDrRecTitle : public cViewElement {
private:
    const cRecording *recording;
    const cEvent *event;
    char *title;
    eRecType_t timeShiftActive;
public:
    cVeDrRecTitle(void);
    virtual ~cVeDrRecTitle(void);
    void SetTokenContainer(void);
    void Set(const cRecording *recording = NULL, const cEvent *event = NULL, eRecType_t timeShiftActive = NoRec);
    void Set(const char *title = NULL);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrRecInfo
******************************************************************/
class cVeDrRecInfo : public cViewElement {
private:
    const cRecording *recording;
public:
    cVeDrRecInfo(void);
    virtual ~cVeDrRecInfo(void);
    void SetTokenContainer(void);
    void Set(const cRecording *recording);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrCurrentTime
******************************************************************/
class cVeDrCurrentTime : public cViewElement {
private:
    bool changed;
    char *current;
    eRecType_t timeShiftActive;
public:
    cVeDrCurrentTime(void);
    virtual ~cVeDrCurrentTime(void);
    void SetTokenContainer(void);
    void Set(const char *current, eRecType_t timeShiftActive = NoRec);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrTotalTime
******************************************************************/
class cVeDrTotalTime : public cViewElement {
private:
    bool changed;
    char *total;
    eRecType_t timeShiftActive;
    char *timeshiftDuration;
public:
    cVeDrTotalTime(void);
    virtual ~cVeDrTotalTime(void);
    void SetTokenContainer(void);
    void Set(const char *total, const char *timeshiftDuration = NULL, eRecType_t timeShiftActive = NoRec);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrTimeshiftTimes
******************************************************************/
class cVeDrTimeshiftTimes : public cViewElement {
private:
    cString start;
    cString playbacktime;
    cString timeshiftrest;
    bool changed;
    eRecType_t timeShiftActive;
public:
    cVeDrTimeshiftTimes(void);
    virtual ~cVeDrTimeshiftTimes(void);
    void SetTokenContainer(void);
    void Set(cString start, cString playbacktime, cString timeshiftrest, eRecType_t timeShiftActive = NoRec);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrEndTime
******************************************************************/
class cVeDrEndTime : public cViewElement {
private:
    cString end;
    eRecType_t timeShiftActive;
    bool changed;
public:
    cVeDrEndTime(void);
    virtual ~cVeDrEndTime(void);
    void SetTokenContainer(void);
    void Set(cString end, eRecType_t timeShiftActive = NoRec);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrProgressBar
******************************************************************/
class cVeDrProgressBar : public cViewElement {
private:
    int current;
    int total;
    eRecType_t timeShiftActive;
    int timeshiftTotal;
    bool changed;
public:
    cVeDrProgressBar(void);
    virtual ~cVeDrProgressBar(void);
    void SetTokenContainer(void);
    void Set(int current, int total, eRecType_t timeShiftActive = NoRec, int timeshiftTotal = 0);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrCutMarks
******************************************************************/
class cVeDrCutMarks : public cViewElement {
private:
    int cutmarksIndex;
    const cMarks *marks;
    int current;
    int total;
    eRecType_t timeShiftActive;
    int timeshiftTotal;
    int numMarksLast;
    bool changed;
public:
    cVeDrCutMarks(void);
    virtual ~cVeDrCutMarks(void);
    void SetTokenContainer(void);
    void Set(const cMarks *marks, int current, int total, eRecType_t timeShiftActive = NoRec, int timeshiftTotal = 0);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrControlIcons
******************************************************************/
class cVeDrControlIcons : public cViewElement {
private:
    bool play;
    bool forward;
    int speed;
    bool changed;
public:
    cVeDrControlIcons(void);
    virtual ~cVeDrControlIcons(void);
    void SetTokenContainer(void);
    void Set(bool play, bool forward, int speed);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrProgressModeonly
******************************************************************/
class cVeDrProgressModeonly : public cViewElement {
private:
    double fps;
    int current;
    int total;
    bool changed;
public:
    cVeDrProgressModeonly(void);
    virtual ~cVeDrProgressModeonly(void);
    void SetTokenContainer(void);
    void Set(double fps, int current, int total);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrJump
******************************************************************/
class cVeDrJump : public cViewElement {
private:
    char *jump;
    bool changed;
public:
    cVeDrJump(void);
    virtual ~cVeDrJump(void);
    void SetTokenContainer(void);
    void Set(const char *jump);
    bool Parse(bool forced = false);
};

/******************************************************************
* cVeDrOnPause
******************************************************************/
class cVeDrOnPause : public cViewElement, public cScrapManager {
private:
    bool started;
    int actorsIndex;
    char *recfilename;
public:
    cVeDrOnPause(void);
    virtual ~cVeDrOnPause(void);
    void Close(void);
    int Delay(void) { return attribs->Delay() * 1000; };
    void SetTokenContainer(void);
    void Set(const char *recfilename);
    bool Parse(bool forced = false);
    bool Started(void) { return started; };
    void ResetSleep(void);
};

/******************************************************************
* cVeDrScraperContent
******************************************************************/
class cVeDrScraperContent : public cViewElement, public cScrapManager {
private:
    const cRecording *recording;
public:
    cVeDrScraperContent(void);
    virtual ~cVeDrScraperContent(void);
    void SetTokenContainer(void);
    void Set(const cRecording *recording);
    bool Parse(bool forced = false);
};

#endif //__VIEWELEMENTSDR_H