/**************************************************************************
*   Copyright (C) 2005 by Jean-Michel Petit                               *
*   jm_petit@laposte.net                                                  *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU General Public License as published by  *
*   the Free Software Foundation; either version 2 of the License, or     *
*   (at your option) any later version.                                   *
*                                                                         *
*   This program is distributed in the hope that it will be useful,       *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU General Public License for more details.                          *
*                                                                         *
*   You should have received a copy of the GNU General Public License     *
*   along with this program; if not, write to the                         *
*   Free Software Foundation, Inc.,                                       *
*   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.             *
***************************************************************************/
#ifndef K9DVDTITLE_H
#define K9DVDTITLE_H

#include "k9common.h"
#include "k9dvd.h"
#include "k9dvdchapter.h"
#include <tqdatetime.h>
#include <tqstringlist.h>
#include <tqptrlist.h>

class k9DVDTitleSet;
  
class k9DVDVideoStream : public TQObject{
Q_OBJECT

friend class k9DVDTitle;
private: // Private attributes
public: // Public methods

};
  
class k9DVDAudioStream : public TQObject{
Q_OBJECT

friend class k9DVDTitle;
friend class k9DVD;
private: // Private attributes
  /**  */
  TQString langCod;
  /**  */
  TQString language;
  /**  */
  TQString format;
  /**  */
  TQString frequency;
  /**  */
  TQString quantization;
  /**  */
  int channels;
  /**  */
  int appMode;
  /**  */
  TQString content;
  /**  */
  float size_mb;
  /**  */
  bool selected;
    int id;
   k9DVDTitle *title;
  int m_streamId;
public: // Public methods
  k9DVDAudioStream();
  /** Read property of TQString langCod. */
  virtual const TQString& getlangCod();
  /** Read property of TQString language. */
  virtual const TQString& getlanguage();
  /** Read property of TQString format. */
  virtual const TQString& getformat();
  /** Read property of TQString frequency. */
  virtual const TQString& getfrequency();
  /** Read property of TQString quantization. */
  virtual const TQString& getquantization();
  /** Read property of int channels. */
  virtual const int& getchannels();
  /** Read property of int appMode. */
  virtual const int& getappMode();
  /** Read property of TQString content. */
  virtual const TQString& getcontent();
  /** Read property of float size_mb. */
  virtual const float& getsize_mb();
  /** Write property of bool selected. */
  virtual void setselected( const bool& _newVal);
  /** Read property of bool selected. */
  virtual const bool& getselected();

  virtual k9DVDTitle* gettitle();
  virtual  int getID();

  virtual int getStreamId() const {return m_streamId;};
	
};

class k9DVDSubtitle : public TQObject{
Q_OBJECT

friend class k9DVDTitle;
friend class k9DVD;
private: // Private attributes
  /**  */
  TQString langCod;
  /**  */
  TQString language;
  /**  */
  int num;
  /**  */
  TQString content;
  /**  */
  float size_mb;
  /**  */
  bool selected;
  TQValueList<int> id;
  k9DVDTitle *title;
public: // Public methods
  k9DVDSubtitle();
  /** Read property of TQString langCod. */
  virtual const TQString& getlangCod();
  /** Read property of TQString language. */
  virtual const TQString& getlanguage();
  /** Read property of int num. */
  virtual const int& getnum();
  /** Read property of TQString content. */
  virtual const TQString& getcontent();
  /** Read property of float size_mb. */
  virtual const float& getsize_mb();
  /** Write property of bool selected. */
  virtual void setselected( const bool& _newVal);
  /** Read property of bool selected. */
  virtual const bool& getselected();
  virtual k9DVDTitle* gettitle();
  virtual TQValueList<int>& getID();
};
  

class k9TitleEncOpt;


class k9DVDTitle : public TQObject{
Q_OBJECT
  
friend class k9DVD;
private: // Public attributes
  unsigned int ts_nr;
  int chapterCount;
  int streamCount;
  int audioStreamCount;
  int subPictureCount;
  TQTime length;
  k9DVDVideoStream videoStream;
  TQObjectList audioStreams;
  TQObjectList subtitles;
  int VTS;
  int TTN;
  float FPS;
  TQString format;
  TQString aspectRatio;
  int numTitle;
  TQString width;
  TQString height;
  TQStringList palette;
  TQString DF;
  float size_mb;
  int angleCount;
  float videosize_mb;
  float vobusize_mb;
  TQString name;
   k9DVDTitle* nextTitle;
  int id;
  k9DVDTitleset *m_titleset;
  k9DVDAudioStream *m_defAudio;
  k9DVDSubtitle *m_defSubtitle;
  bool m_defAudioSet;
  bool m_defSubtitleSet;
  TQPtrList <k9DVDTitle> m_titles;
  uint32_t m_sectors;
  bool m_forceFactor;
  float m_factor;
  k9TitleEncOpt *m_encOpt;
public: // Public methods
  k9DVDTitle();
  virtual k9DVDTitleset *gettitleset() {return m_titleset;};
  virtual const int& getchapterCount();
  virtual const int& getstreamCount();
  virtual const int& getaudioStreamCount();
  virtual const int& getsubPictureCount();    
  virtual const TQTime& getlength();
  virtual TQTime gettotallength();
  virtual TQTime getSelectedLength();

  virtual const int& getVTS();
  virtual const int& getTTN();
  virtual const float& getFPS();
  virtual const TQString& getformat();
  virtual const TQString& getaspectRatio();
  virtual const TQString& getwidth();
  virtual const TQString& getheight();
  virtual void getpalette(int i,TQString & c);
  virtual const TQString& getDF();
  virtual const int& getangleCount();
  virtual const int& getnumTitle();
  virtual k9DVDAudioStream *getaudioStream(int num);
  virtual k9DVDSubtitle *getsubtitle(int num);
  virtual const float& getsize_mb();
  virtual const float  gettotalsize_mb();
  virtual const float  gettotalvideosize_mb();
  virtual const float  getChaptersSize_mb(bool _selected);
  virtual const uint64_t  getChaptersSize(bool _selected);
  virtual const float& getvideosize_mb();
  virtual bool isSelected();
  virtual void setname( const TQString& _newVal);
  virtual const TQString& getname();
  virtual int getpgc();
  virtual void setnextTitle(k9DVDTitle * nTitle);
  virtual k9DVDTitle* getnextTitle();
  virtual k9DVDChapter *getChapter(int num);
  virtual bool getIndexed() {return indexed;};
  virtual void setforceSelection(bool _state);
  virtual int getId() {return id;};
  virtual void setDefAudio(k9DVDAudioStream* _value);
  virtual k9DVDAudioStream* getDefAudio() const;
  virtual void setDefSubtitle(k9DVDSubtitle* _value);
  virtual k9DVDSubtitle* getDefSubtitle() const;
  virtual bool getDefAudioSet() const {return m_defAudioSet;};
  virtual bool getDefSubtitleSet() const {return m_defSubtitleSet;};
  virtual TQPtrList< k9DVDTitle > getTitles() const {return m_titles;};
  virtual uint32_t getsectors() { return m_sectors;};	
  virtual float getfactor() { return m_factor;};
  virtual bool getforceFactor() { return m_forceFactor;};
  virtual void selectChapters(bool _state);
  virtual TQPtrList< k9DVDChapter > getChapters() const {return chapters;};
  virtual k9TitleEncOpt* getEncOpt() ;
  
public slots:
  virtual void setfactor(float _value) {m_factor=_value;};
  virtual void setforceFactor(bool _value) {m_forceFactor=_value;};	
	
signals:
  void selectionChanged();
private: // Private methods
  k9DVDAudioStream* addAudioStream();
  k9DVDChapter* addChapter(int num);
  k9DVDSubtitle* addSubtitle(int num);
  TQPtrList <k9DVDChapter> chapters;
  bool indexed;
  bool forceSelection;
   int pgc;

public: // Public attributes
};
  



#endif