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