CuteLogger
Fast and simple logging solution for Qt based applications
attachedfiltersmodel.h
1/*
2 * Copyright (c) 2013-2023 Meltytech, LLC
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef ATTACHEDFILTERSMODEL_H
19#define ATTACHEDFILTERSMODEL_H
20
21#include <QAbstractListModel>
22#include <MltFilter.h>
23#include <MltProducer.h>
24#include <MltEvent.h>
25
26class QmlMetadata;
27
28class AttachedFiltersModel : public QAbstractListModel
29{
30 Q_OBJECT
31 Q_PROPERTY(QString producerTitle READ producerTitle NOTIFY trackTitleChanged)
32 Q_PROPERTY(bool isProducerSelected READ isProducerSelected NOTIFY isProducerSelectedChanged)
33 Q_PROPERTY(bool supportsLinks READ supportsLinks NOTIFY supportsLinksChanged)
34public:
35 enum ModelRoles {
36 TypeDisplayRole = Qt::UserRole + 1,
37 PluginTypeRole,
38 };
39
40 explicit AttachedFiltersModel(QObject *parent = 0);
41
42 Mlt::Service *getService(int row) const;
43 QmlMetadata *getMetadata(int row) const;
44 void setProducer(Mlt::Producer *producer = 0);
45 QString producerTitle() const;
46 bool isProducerSelected() const;
47 bool supportsLinks() const;
48 Mlt::Producer *producer() const
49 {
50 return m_producer.data();
51 }
52
53 // QAbstractListModel Implementation
54 int rowCount(const QModelIndex &parent = QModelIndex()) const;
55 Qt::ItemFlags flags(const QModelIndex &index) const;
56 QVariant data(const QModelIndex &index, int role) const;
57 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
58 QHash<int, QByteArray> roleNames() const;
59 Qt::DropActions supportedDropActions() const;
60 bool insertRows(int row, int count, const QModelIndex &parent);
61 bool removeRows(int row, int count, const QModelIndex &parent);
62 bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count,
63 const QModelIndex &destinationParent, int destinationRow);
64
65signals:
66 void changed();
67 void duplicateAddFailed(int index);
68 void trackTitleChanged();
69 void isProducerSelectedChanged();
70 void supportsLinksChanged();
71 void addedOrRemoved(Mlt::Producer *);
72 void requestConvert(QString, bool set709Convert, bool withSubClip);
73
74public slots:
75 void add(QmlMetadata *meta);
76 void remove(int row);
77 bool move(int fromRow, int toRow);
78
79private:
80 static void producerChanged(mlt_properties owner, AttachedFiltersModel *model);
81 void reset(Mlt::Producer *producer = 0);
82 int mltFilterIndex(int row) const;
83 int mltLinkIndex(int row) const;
84 void addFilter(QmlMetadata *meta, int insertRow);
85 void addLink(QmlMetadata *meta, int insertRow);
86 void addFilterSet(QmlMetadata *meta, int insertRow);
87
88 int m_dropRow;
89 int m_removeRow;
90 int m_normFilterCount;
91 int m_normLinkCount;
92 QScopedPointer<Mlt::Producer> m_producer;
93 QScopedPointer<Mlt::Event> m_event;
94 typedef QList<QmlMetadata *> MetadataList;
95 MetadataList m_metaList;
96};
97
98#endif // ATTACHEDFILTERSMODEL_H