CuteLogger
Fast and simple logging solution for Qt based applications
filtercontroller.h
1 /*
2  * Copyright (c) 2014-2024 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 FILTERCONTROLLER_H
19 #define FILTERCONTROLLER_H
20 
21 #include <QObject>
22 #include <QScopedPointer>
23 #include <QFuture>
24 #include "models/metadatamodel.h"
25 #include "models/motiontrackermodel.h"
26 #include "models/attachedfiltersmodel.h"
27 #include "qmltypes/qmlmetadata.h"
28 #include "qmltypes/qmlfilter.h"
29 
30 class QTimerEvent;
31 
32 
33 class FilterController : public QObject
34 {
35  Q_OBJECT
36 
37 public:
38  explicit FilterController(QObject *parent = 0);
39  MetadataModel *metadataModel();
40  MotionTrackerModel *motionTrackerModel()
41  {
42  return &m_motionTrackerModel;
43  }
44  AttachedFiltersModel *attachedModel();
45 
46  QmlMetadata *metadata(const QString &id);
47  QmlMetadata *metadataForService(Mlt::Service *service);
48  QmlFilter *currentFilter() const
49  {
50  return m_currentFilter.data();
51  }
52  bool isOutputTrackSelected() const;
53  void onUndoOrRedo(Mlt::Service &service);
54  int currentIndex() const
55  {
56  return m_currentFilterIndex;
57  }
58  void addOrEditFilter(Mlt::Filter *filter, const QStringList &key_properties);
59 
60 protected:
61  void timerEvent(QTimerEvent *);
62 
63 signals:
64  void currentFilterChanged(QmlFilter *filter, QmlMetadata *meta, int index);
65  void statusChanged(QString);
66  void filterChanged(Mlt::Service *);
67  void undoOrRedo();
68 
69 public slots:
70  void setProducer(Mlt::Producer *producer = 0);
71  void setCurrentFilter(int attachedIndex);
72  void onFadeInChanged();
73  void onFadeOutChanged();
74  void onServiceInChanged(int delta, Mlt::Service *service = 0);
75  void onServiceOutChanged(int delta, Mlt::Service *service = 0);
76  void removeCurrent();
77  void onProducerChanged();
78 
79 private slots:
80  void handleAttachedModelChange();
81  void handleAttachedModelAboutToReset();
82  void addMetadata(QmlMetadata *);
83  void handleAttachedRowsAboutToBeRemoved(const QModelIndex &parent, int first, int last);
84  void handleAttachedRowsRemoved(const QModelIndex &parent, int first, int last);
85  void handleAttachedRowsInserted(const QModelIndex &parent, int first, int last);
86  void handleAttachDuplicateFailed(int index);
87  void onQmlFilterChanged(const QString &name);
88 
89 private:
90  void loadFilterSets();
91  void loadFilterMetadata();
92 
93  QFuture<void> m_future;
94  QScopedPointer<QmlFilter> m_currentFilter;
95  Mlt::Service m_mltService;
96  MetadataModel m_metadataModel;
97  MotionTrackerModel m_motionTrackerModel;
98  AttachedFiltersModel m_attachedModel;
99  int m_currentFilterIndex;
100 };
101 
102 #endif // FILTERCONTROLLER_H