CuteLogger
Fast and simple logging solution for Qt based applications
qmlmetadata.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 QMLMETADATA_H
19#define QMLMETADATA_H
20
21#include <QObject>
22#include <QString>
23#include <QDir>
24#include <QUrl>
25#include <QQmlListProperty>
26
27class QmlKeyframesParameter : public QObject
28{
29 Q_OBJECT
30 Q_PROPERTY(RangeType rangeType MEMBER m_rangeType NOTIFY changed)
31 Q_PROPERTY(QString name MEMBER m_name NOTIFY changed)
32 Q_PROPERTY(QString property MEMBER m_property NOTIFY changed)
33 Q_PROPERTY(QStringList gangedProperties MEMBER m_gangedProperties NOTIFY changed)
34 Q_PROPERTY(bool isCurve MEMBER m_isCurve NOTIFY changed)
35 Q_PROPERTY(double minimum MEMBER m_minimum NOTIFY changed)
36 Q_PROPERTY(double maximum MEMBER m_maximum NOTIFY changed)
37 Q_PROPERTY(QString units MEMBER m_units NOTIFY changed)
38 Q_PROPERTY(bool isRectangle MEMBER m_isRectangle NOTIFY changed)
39
40public:
41 enum RangeType {
42 MinMax,
43 ClipLength,
44 };
45 Q_ENUM(RangeType)
46 explicit QmlKeyframesParameter(QObject *parent = 0);
47
48 QString name() const
49 {
50 return m_name;
51 }
52 QString property() const
53 {
54 return m_property;
55 }
56 QStringList gangedProperties() const
57 {
58 return m_gangedProperties;
59 }
60 bool isCurve() const
61 {
62 return m_isCurve;
63 }
64 double minimum() const
65 {
66 return m_minimum;
67 }
68 double maximum() const
69 {
70 return m_maximum;
71 }
72 QString units() const
73 {
74 return m_units;
75 }
76 bool isRectangle() const
77 {
78 return m_isRectangle;
79 }
80 RangeType rangeType() const
81 {
82 return m_rangeType;
83 }
84
85signals:
86 void changed();
87
88private:
89 QString m_name;
90 QString m_property;
91 QStringList m_gangedProperties;
92 bool m_isCurve;
93 double m_minimum;
94 double m_maximum;
95 QString m_units;
96 bool m_isRectangle;
97 RangeType m_rangeType;
98};
99
100class QmlKeyframesMetadata : public QObject
101{
102 Q_OBJECT
103 Q_PROPERTY(bool allowTrim MEMBER m_allowTrim NOTIFY changed)
104 Q_PROPERTY(bool allowAnimateIn MEMBER m_allowAnimateIn NOTIFY changed)
105 Q_PROPERTY(bool allowAnimateOut MEMBER m_allowAnimateOut NOTIFY changed)
106 Q_PROPERTY(QQmlListProperty<QmlKeyframesParameter> parameters READ parameters NOTIFY changed)
108 Q_PROPERTY(QList<QString> simpleProperties MEMBER m_simpleProperties NOTIFY changed)
109 Q_PROPERTY(QString minimumVersion MEMBER m_minimumVersion NOTIFY changed)
110 Q_PROPERTY(bool enabled MEMBER m_enabled NOTIFY changed)
111 Q_PROPERTY(bool allowSmooth MEMBER m_allowSmooth NOTIFY changed)
112
113public:
114 explicit QmlKeyframesMetadata(QObject *parent = 0);
115
116 bool allowTrim() const
117 {
118 return m_allowTrim;
119 }
120 bool allowAnimateIn() const
121 {
122 return m_allowAnimateIn;
123 }
124 bool allowAnimateOut() const
125 {
126 return m_allowAnimateOut;
127 }
128 QList<QString> simpleProperties() const
129 {
130 return m_simpleProperties;
131 }
132 bool allowSmooth() const
133 {
134 return m_allowSmooth;
135 }
136
137 QQmlListProperty<QmlKeyframesParameter> parameters()
138 {
139 return QQmlListProperty<QmlKeyframesParameter>(this, &m_parameters);
140 }
141 int parameterCount() const
142 {
143 return m_parameters.count();
144 }
145 QmlKeyframesParameter *parameter(int index) const
146 {
147 return m_parameters[index];
148 }
149 void checkVersion(const QString &version);
150 void setDisabled();
151
152signals:
153 void changed();
154
155private:
156 bool m_allowTrim;
157 bool m_allowAnimateIn;
158 bool m_allowAnimateOut;
159 QList<QmlKeyframesParameter *> m_parameters;
160 QList<QString> m_simpleProperties;
161 QString m_minimumVersion;
162 bool m_enabled;
163 bool m_allowSmooth;
164};
165
166
167class QmlMetadata : public QObject
168{
169 Q_OBJECT
170 Q_PROPERTY(PluginType type READ type WRITE setType NOTIFY changed)
171 Q_PROPERTY(QString name READ name WRITE setName NOTIFY changed)
172 Q_PROPERTY(QString mlt_service READ mlt_service WRITE set_mlt_service NOTIFY changed)
173 Q_PROPERTY(bool needsGPU READ needsGPU WRITE setNeedsGPU NOTIFY changed)
174 Q_PROPERTY(QString qml READ qmlFileName WRITE setQmlFileName NOTIFY changed)
175 Q_PROPERTY(QString vui READ vuiFileName WRITE setVuiFileName NOTIFY changed)
176 Q_PROPERTY(QUrl qmlFilePath READ qmlFilePath NOTIFY changed)
177 Q_PROPERTY(QUrl vuiFilePath READ vuiFilePath NOTIFY changed)
178 Q_PROPERTY(bool isAudio READ isAudio WRITE setIsAudio NOTIFY changed)
179 Q_PROPERTY(bool isHidden READ isHidden WRITE setIsHidden NOTIFY changed)
180 Q_PROPERTY(bool isFavorite READ isFavorite WRITE setIsFavorite NOTIFY changed)
181 Q_PROPERTY(QString gpuAlt READ gpuAlt WRITE setGpuAlt NOTIFY changed)
182 Q_PROPERTY(bool allowMultiple READ allowMultiple WRITE setAllowMultiple NOTIFY changed)
183 Q_PROPERTY(bool isClipOnly READ isClipOnly WRITE setIsClipOnly NOTIFY changed)
184 Q_PROPERTY(bool isTrackOnly READ isTrackOnly WRITE setIsTrackOnly NOTIFY changed)
185 Q_PROPERTY(bool isGpuCompatible READ isGpuCompatible() WRITE setIsGpuCompatible NOTIFY changed)
186 Q_PROPERTY(QmlKeyframesMetadata *keyframes READ keyframes NOTIFY changed)
187 Q_PROPERTY(bool isDeprecated READ isDeprecated WRITE setIsDeprecated NOTIFY changed)
188 Q_PROPERTY(QString minimumVersion MEMBER m_minimumVersion NOTIFY changed)
189 Q_PROPERTY(QString keywords MEMBER m_keywords NOTIFY changed)
190 Q_PROPERTY(QString icon READ iconFilePath WRITE setIconFileName NOTIFY changed)
191 Q_PROPERTY(bool seekReverse MEMBER m_seekReverse NOTIFY changed)
192
193public:
194 enum PluginType {
195 Filter,
196 Producer,
197 Transition,
198 Link,
199 FilterSet,
200 };
201 Q_ENUM(PluginType)
202 unsigned filterMask;
203
204 explicit QmlMetadata(QObject *parent = 0);
205 void loadSettings();
206
207 PluginType type() const
208 {
209 return m_type;
210 }
211 void setType(PluginType);
212 QString name() const
213 {
214 return m_name;
215 }
216 void setName(const QString &);
217 QString mlt_service() const
218 {
219 return m_mlt_service;
220 }
221 void set_mlt_service(const QString &);
222 QString uniqueId() const;
223 bool needsGPU() const
224 {
225 return m_needsGPU;
226 }
227 void setNeedsGPU(bool);
228 QString qmlFileName() const
229 {
230 return m_qmlFileName;
231 }
232 void setQmlFileName(const QString &);
233 QString vuiFileName() const
234 {
235 return m_vuiFileName;
236 }
237 void setVuiFileName(const QString &);
238 QDir path() const
239 {
240 return m_path;
241 }
242 void setPath(const QDir &path);
243 QUrl qmlFilePath() const;
244 QUrl vuiFilePath() const;
245 QString iconFilePath() const
246 {
247 return (m_icon.isEmpty() || m_icon.startsWith("qrc:")) ? m_icon :
248 QUrl::fromLocalFile(m_path.absoluteFilePath(m_icon)).toString();
249 }
250 void setIconFileName(const QString &);
251 bool isAudio() const
252 {
253 return m_isAudio;
254 }
255 void setIsAudio(bool isAudio);
256 bool isHidden() const
257 {
258 return m_isHidden;
259 }
260 void setIsHidden(bool isHidden);
261 bool isFavorite() const
262 {
263 return m_isFavorite;
264 }
265 void setIsFavorite(bool isFavorite);
266 QString gpuAlt() const
267 {
268 return m_gpuAlt;
269 }
270 void setGpuAlt(const QString &);
271 bool allowMultiple() const
272 {
273 return m_allowMultiple;
274 }
275 void setAllowMultiple(bool allowMultiple);
276 bool isClipOnly() const
277 {
278 return m_isClipOnly;
279 }
280 void setIsClipOnly(bool isClipOnly);
281 bool isTrackOnly() const
282 {
283 return m_isTrackOnly;
284 }
285 void setIsTrackOnly(bool isTrackOnly);
286 bool isGpuCompatible() const
287 {
288 return m_isGpuCompatible;
289 }
290 void setIsGpuCompatible(bool isCompatible)
291 {
292 m_isGpuCompatible = isCompatible;
293 }
294 QmlKeyframesMetadata *keyframes()
295 {
296 return &m_keyframes;
297 }
298 const QmlKeyframesMetadata *keyframes() const
299 {
300 return &m_keyframes;
301 }
302 bool isDeprecated() const
303 {
304 return m_isDeprecated;
305 }
306 void setIsDeprecated(bool deprecated)
307 {
308 m_isDeprecated = deprecated;
309 }
310 bool isMltVersion(const QString &version);
311 QString keywords() const
312 {
313 return m_keywords;
314 }
315 bool seekReverse() const
316 {
317 return m_seekReverse;
318 }
319
320signals:
321 void changed();
322
323private:
324 PluginType m_type;
325 QString m_name;
326 QString m_mlt_service;
327 bool m_needsGPU;
328 QString m_qmlFileName;
329 QString m_vuiFileName;
330 QDir m_path;
331 bool m_isAudio;
332 bool m_isHidden;
333 bool m_isFavorite;
334 QString m_gpuAlt;
335 bool m_allowMultiple;
336 bool m_isClipOnly;
337 bool m_isTrackOnly;
338 bool m_isGpuCompatible;
339 QmlKeyframesMetadata m_keyframes;
340 bool m_isDeprecated;
341 QString m_minimumVersion;
342 QString m_keywords;
343 QString m_icon;
344 bool m_seekReverse;
345};
346
347#endif // QMLMETADATA_H