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 <MltEvent.h>
22#include <MltFilter.h>
23#include <MltProducer.h>
24#include <QAbstractListModel>
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 { return m_producer.data(); }
50 QString name(int row) const;
51
52 // The below are used by QUndoCommands
53 void doAddService(Mlt::Producer &producer, Mlt::Service &service, int row);
54 void doRemoveService(Mlt::Producer &producer, int row);
55 void doMoveService(Mlt::Producer &producer, int fromRow, int toRow);
56 void doSetDisabled(Mlt::Producer &producer, int row, bool disable);
57 Mlt::Service doGetService(Mlt::Producer &producer, int row);
58
59 // QAbstractListModel Implementation
60 int rowCount(const QModelIndex &parent = QModelIndex()) const;
61 Qt::ItemFlags flags(const QModelIndex &index) const;
62 QVariant data(const QModelIndex &index, int role) const;
63 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
64 QHash<int, QByteArray> roleNames() const;
65 Qt::DropActions supportedDropActions() const;
66 bool insertRows(int row, int count, const QModelIndex &parent);
67 bool removeRows(int row, int count, const QModelIndex &parent);
68 bool moveRows(const QModelIndex &sourceParent,
69 int sourceRow,
70 int count,
71 const QModelIndex &destinationParent,
72 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 int addService(Mlt::Service *service);
86 void remove(int row);
87 bool move(int fromRow, int toRow);
88 void pasteFilters();
89
90private:
91 static void producerChanged(mlt_properties owner, AttachedFiltersModel *model);
92 void reset(Mlt::Producer *producer = 0);
93 bool isProducerLoaded(Mlt::Producer &producer) const;
94 int findInsertRow(QmlMetadata *meta);
95 Mlt::Producer getFilterSetProducer(QmlMetadata *meta);
96
97 int m_dropRow;
98 int m_removeRow;
99 QScopedPointer<Mlt::Producer> m_producer;
100 QScopedPointer<Mlt::Event> m_event;
101 typedef QList<QmlMetadata *> MetadataList;
102 MetadataList m_metaList;
103};
104
105#endif // ATTACHEDFILTERSMODEL_H