18#ifndef FILTERCONTROLLER_H
19#define FILTERCONTROLLER_H
21#include "addonqmlgenerator.h"
22#include "models/addonservicemodel.h"
23#include "models/attachedfiltersmodel.h"
24#include "models/metadatamodel.h"
25#include "models/motiontrackermodel.h"
26#include "qmltypes/qmlfilter.h"
27#include "qmltypes/qmlmetadata.h"
31#include <QScopedPointer>
32#include <QTemporaryDir>
36class FilterController :
public QObject
41 explicit FilterController(QObject *parent = 0);
43 MetadataModel *metadataModel();
44 AddOnServiceModel *addOnServiceModel() {
return &m_addOnServiceModel; }
45 MotionTrackerModel *motionTrackerModel() {
return &m_motionTrackerModel; }
46 AttachedFiltersModel *attachedModel();
48 QmlMetadata *metadata(
const QString &
id);
49 QmlMetadata *metadataForService(Mlt::Service *service);
50 QmlFilter *currentFilter()
const {
return m_currentFilter.data(); }
51 bool isOutputTrackSelected()
const;
52 void onUndoOrRedo(Mlt::Service &service);
53 int currentIndex()
const {
return m_currentFilterIndex; }
54 void addOrEditFilter(Mlt::Filter *filter,
const QStringList &key_properties);
55 void setTrackTransitionService(
const QString &service);
58 void timerEvent(QTimerEvent *);
61 void currentFilterChanged(QmlFilter *filter, QmlMetadata *meta,
int index);
62 void statusChanged(QString);
63 void filterChanged(Mlt::Service *);
67 void setProducer(Mlt::Producer *producer = 0);
68 void setCurrentFilter(
int attachedIndex);
69 void onFadeInChanged();
70 void onFadeOutChanged();
72 void onServiceInChanged(
int delta, Mlt::Service *service = 0);
73 void onServiceOutChanged(
int delta, Mlt::Service *service = 0);
75 void onProducerChanged();
76 void pauseUndoTracking();
77 void resumeUndoTracking();
80 void handleAddOnServicesChanged();
81 void handleAttachedModelChange();
82 void handleAttachedModelAboutToReset();
83 void addMetadata(QmlMetadata *);
84 void handleAttachedRowsAboutToBeRemoved(
const QModelIndex &parent,
int first,
int last);
85 void handleAttachedRowsRemoved(
const QModelIndex &parent,
int first,
int last);
86 void handleAttachedRowsInserted(
const QModelIndex &parent,
int first,
int last);
87 void handleAttachDuplicateFailed(
int index);
88 void onQmlFilterChanged(
const QString &name);
91 bool ensureAddOnTempDir();
92 bool ensureAddOnFilterQml(QmlMetadata *meta);
93 void loadAddOnFilterMetadata(Mlt::Properties *mltFilters);
94 void loadFilterSets();
95 void loadFilterMetadata();
97 QFuture<void> m_future;
98 QScopedPointer<QmlFilter> m_currentFilter;
99 Mlt::Service m_mltService;
100 QTemporaryDir *m_addOnTempDir =
nullptr;
101 QHash<QString, AddOnFilterDescriptor> m_addOnDescriptors;
102 AddOnQmlGenerator m_addOnQmlGenerator;
103 MetadataModel m_metadataModel;
104 AddOnServiceModel m_addOnServiceModel;
105 MotionTrackerModel m_motionTrackerModel;
106 AttachedFiltersModel m_attachedModel;
107 int m_currentFilterIndex;