Segment.h 1.56 KB
#ifndef SEGMENT_H
#define SEGMENT_H

#include <QString>
#include <QList>
#include <QJsonObject>

class Segment
{
 public:
  enum Source {
    Manual, Automatic, Both
  };

  Segment(Segment *parent = 0);
  Segment(qint64 position = 0, Segment *parent = 0, Source source = Manual);
  virtual ~Segment();
  virtual void read(const QJsonObject &json);
  virtual void write(QJsonObject &json) const;

  Segment *child(int row);
  void appendChild(Segment *childSegment);
  void insertChild(int row, Segment *segment);
  void removeChild(int row);
  int childCount() const;
  virtual QString display() const = 0;
  int row() const;
  Segment *parent();
  Segment *getNextSegment();

  qint64 getPosition() const;
  QString getFormattedPosition() const;
  QList<Segment *> getChildren() const;
  int getHeight() const;
  Source getSource() const;
  void containsSpeech(bool &flag) const;
  void setPosition(qint64 position);
  void setSource(Source source);

  void setChildren(const QList<Segment *> &children);
  void setParent(Segment *parent);
  int childIndexFromPosition(qint64 position);
  void clearChildren();
  void splitChildren(QList<Segment *> &subList1, QList<Segment *> &subList2, int pos, Segment *newParent);

  virtual void setEnd(qint64 end);
  virtual int getNumber() const;
  virtual qint64 getEnd() const;
  virtual QString getLabel() const;
  virtual void setLabel(const QString &label);
  virtual int getCamera(Segment::Source source) const;

 protected:
  qint64 m_position;
  Source m_source;
  QList<Segment *> m_childSegments;

 private:
  Segment *m_parentSegment;
};

#endif