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