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 exportSubtitles(
const QString &filePath,
int trackIndex)
const;
82 void overwriteItem(
int trackIndex,
const Subtitles::SubtitleItem &item);
83 void appendItem(
int trackIndex,
const Subtitles::SubtitleItem &item);
84 void removeItems(
int trackIndex,
int firstItemIndex,
int lastItemIndex);
85 void setItemStart(
int trackIndex,
int itemIndex, int64_t msTime);
86 void setItemEnd(
int trackIndex,
int itemIndex, int64_t msTime);
87 void setText(
int trackIndex,
int itemIndex,
const QString &text);
88 Q_INVOKABLE
void moveItems(
int trackIndex,
int firstItemIndex,
int lastItemIndex, int64_t msTime);
89 Q_INVOKABLE
bool validateMove(
const QModelIndexList &items, int64_t msTime);
92 void doInsertTrack(
const SubtitlesModel::SubtitleTrack &track,
int trackIndex);
93 void doRemoveTrack(
int trackIndex);
94 void doEditTrack(
const SubtitlesModel::SubtitleTrack &track,
int trackIndex);
95 void doRemoveSubtitleItems(
int trackIndex,
const QList<Subtitles::SubtitleItem> &subtitles);
96 void doInsertSubtitleItems(
int trackIndex,
const QList<Subtitles::SubtitleItem> &subtitles);
97 void doSetText(
int trackIndex,
int itemIndex,
const QString &text);
98 void doSetTime(
int trackIndex,
int itemIndex, int64_t startTime, int64_t endTime);
101 void tracksChanged(
int count);
106 int rowCount(
const QModelIndex &parent)
const;
107 int columnCount(
const QModelIndex &parent)
const;
108 QVariant data(
const QModelIndex &index,
int role)
const;
109 QVariant headerData(
int section, Qt::Orientation orientation,
int role)
const;
110 QModelIndex index(
int row,
int column = 0,
const QModelIndex &parent = QModelIndex())
const;
111 QModelIndex parent(
const QModelIndex &index)
const;
112 QHash<int, QByteArray> roleNames()
const;
115 void requestFeedCommit(
int trackIndex);
116 void commitToFeed(
int trackIndex);
117 Mlt::Producer *m_producer;
118 QList<SubtitlesModel::SubtitleTrack> m_tracks;
119 QList<QList<Subtitles::SubtitleItem>> m_items;
120 QTimer *m_commitTimer;