18 #ifndef SUBTITLESMODEL_H
19 #define SUBTITLESMODEL_H
21 #include "models/subtitles.h"
23 #include <MltProducer.h>
24 #include <QAbstractItemModel>
30 class SubtitlesModel :
public QAbstractItemModel
33 Q_PROPERTY(
int trackCount READ trackCount NOTIFY tracksChanged)
37 TextRole = Qt::UserRole + 1,
53 explicit SubtitlesModel(QObject *parent = 0);
54 virtual ~SubtitlesModel();
56 void load(Mlt::Producer *producer);
58 int64_t maxTime()
const;
61 int trackCount()
const;
62 Q_INVOKABLE QModelIndex trackModelIndex(
int trackIndex)
const;
63 QList<SubtitlesModel::SubtitleTrack> getTracks()
const;
64 int getTrackIndex(
const QString &name);
65 SubtitlesModel::SubtitleTrack getTrack(
const QString &name);
66 SubtitlesModel::SubtitleTrack getTrack(
int index);
67 void addTrack(SubtitlesModel::SubtitleTrack &track);
68 void removeTrack(QString &name);
69 void editTrack(
int trackIndex, SubtitlesModel::SubtitleTrack &track);
72 Q_INVOKABLE
int itemCount(
int trackIndex)
const;
73 int64_t endTime(
int trackIndex)
const;
74 QModelIndex itemModelIndex(
int trackIndex,
int itemIndex)
const;
75 int itemIndexAtTime(
int trackIndex, int64_t msTime)
const;
76 int itemIndexBeforeTime(
int trackIndex, int64_t msTime)
const;
77 int itemIndexAfterTime(
int trackIndex, int64_t msTime)
const;
78 const Subtitles::SubtitleItem &getItem(
int trackIndex,
int itemIndex)
const;
79 void importSubtitles(
int trackIndex, int64_t msTime, QList<Subtitles::SubtitleItem> &items);
80 void importSubtitlesToNewTrack(SubtitlesModel::SubtitleTrack &track,
81 QList<Subtitles::SubtitleItem> &items);
82 void exportSubtitles(
const QString &filePath,
int trackIndex)
const;
83 void overwriteItem(
int trackIndex,
const Subtitles::SubtitleItem &item);
84 void appendItem(
int trackIndex,
const Subtitles::SubtitleItem &item);
85 void removeItems(
int trackIndex,
int firstItemIndex,
int lastItemIndex);
86 void setItemStart(
int trackIndex,
int itemIndex, int64_t msTime);
87 void setItemEnd(
int trackIndex,
int itemIndex, int64_t msTime);
88 void setText(
int trackIndex,
int itemIndex,
const QString &text);
89 Q_INVOKABLE
void moveItems(
int trackIndex,
93 Q_INVOKABLE
bool validateMove(
const QModelIndexList &items, int64_t msTime);
96 void doInsertTrack(
const SubtitlesModel::SubtitleTrack &track,
int trackIndex);
97 void doRemoveTrack(
int trackIndex);
98 void doEditTrack(
const SubtitlesModel::SubtitleTrack &track,
int trackIndex);
99 void doRemoveSubtitleItems(
int trackIndex,
const QList<Subtitles::SubtitleItem> &subtitles);
100 void doInsertSubtitleItems(
int trackIndex,
const QList<Subtitles::SubtitleItem> &subtitles);
101 void doSetText(
int trackIndex,
int itemIndex,
const QString &text);
102 void doSetTime(
int trackIndex,
int itemIndex, int64_t startTime, int64_t endTime);
105 void tracksChanged(
int count);
110 int rowCount(
const QModelIndex &parent)
const;
111 int columnCount(
const QModelIndex &parent)
const;
112 QVariant data(
const QModelIndex &index,
int role)
const;
113 QVariant headerData(
int section, Qt::Orientation orientation,
int role)
const;
114 QModelIndex index(
int row,
int column = 0,
const QModelIndex &parent = QModelIndex())
const;
115 QModelIndex parent(
const QModelIndex &index)
const;
116 QHash<int, QByteArray> roleNames()
const;
119 void requestFeedCommit(
int trackIndex);
120 void commitToFeed(
int trackIndex);
121 Mlt::Producer *m_producer;
122 QList<SubtitlesModel::SubtitleTrack> m_tracks;
123 QList<QList<Subtitles::SubtitleItem>> m_items;
124 QTimer *m_commitTimer;