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 isSourceClip() const;
48 bool supportsLinks() const;
49 Mlt::Producer *producer() const
50 {
51 return m_producer.data();
52 }
53 QString name(int row) const;
54
55 // The below are used by QUndoCommands
56 void doAddService(Mlt::Producer &producer, Mlt::Service &service, int row);
57 void doRemoveService(Mlt::Producer &producer, int row);
58 void doMoveService(Mlt::Producer &producer, int fromRow, int toRow);
59 void doSetDisabled(Mlt::Producer &producer, int row, bool disable);
60 Mlt::Service doGetService(Mlt::Producer &producer, int row);
61
62 // QAbstractListModel Implementation
63 int rowCount(const QModelIndex &parent = QModelIndex()) const;
64 Qt::ItemFlags flags(const QModelIndex &index) const;
65 QVariant data(const QModelIndex &index, int role) const;
66 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
67 QHash<int, QByteArray> roleNames() const;
68 Qt::DropActions supportedDropActions() const;
69 bool insertRows(int row, int count, const QModelIndex &parent);
70 bool removeRows(int row, int count, const QModelIndex &parent);
71 bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count,
72 const QModelIndex &destinationParent, int destinationRow);
73
74signals:
75 void changed();
76 void duplicateAddFailed(int index);
77 void trackTitleChanged();
78 void isProducerSelectedChanged();
79 void supportsLinksChanged();
80 void addedOrRemoved(Mlt::Producer *);
81 void requestConvert(QString, bool set709Convert, bool withSubClip);
82
83public slots:
84 int add(QmlMetadata *meta);
85 void remove(int row);
86 bool move(int fromRow, int toRow);
87
88private:
89 static void producerChanged(mlt_properties owner, AttachedFiltersModel *model);
90 void reset(Mlt::Producer *producer = 0);
91 bool isProducerLoaded(Mlt::Producer &producer) const;
92 int findInsertRow(QmlMetadata *meta);
93 Mlt::Producer getFilterSetProducer(QmlMetadata *meta);
94
95 int m_dropRow;
96 int m_removeRow;
97 QScopedPointer<Mlt::Producer> m_producer;
98 QScopedPointer<Mlt::Event> m_event;
99 typedef QList<QmlMetadata *> MetadataList;
100 MetadataList m_metaList;
101};
102
103#endif // ATTACHEDFILTERSMODEL_H