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 isOutputOnly READ isOutputOnly WRITE setIsOutputOnly NOTIFY changed)
192 Q_PROPERTY(bool isGpuCompatible READ isGpuCompatible() WRITE setIsGpuCompatible NOTIFY changed)
193 Q_PROPERTY(QmlKeyframesMetadata *keyframes READ keyframes NOTIFY changed)
194 Q_PROPERTY(bool isDeprecated READ isDeprecated WRITE setIsDeprecated NOTIFY changed)
195 Q_PROPERTY(QString minimumVersion MEMBER m_minimumVersion NOTIFY changed)
196 Q_PROPERTY(QString keywords MEMBER m_keywords NOTIFY changed)
197 Q_PROPERTY(QString icon READ iconFilePath WRITE setIconFileName NOTIFY changed)
198 Q_PROPERTY(bool seekReverse MEMBER m_seekReverse NOTIFY changed)
199
200public:
201 enum PluginType {
202 Filter,
203 Producer,
204 Transition,
205 Link,
206 FilterSet,
207 };
208 Q_ENUM(PluginType)
209 unsigned filterMask;
210
211 explicit QmlMetadata(QObject *parent = 0);
212 void loadSettings();
213
214 PluginType type() const
215 {
216 return m_type;
217 }
218 void setType(PluginType);
219 QString name() const
220 {
221 return m_name;
222 }
223 void setName(const QString &);
224 QString mlt_service() const
225 {
226 return m_mlt_service;
227 }
228 void set_mlt_service(const QString &);
229 QString uniqueId() const;
230 bool needsGPU() const
231 {
232 return m_needsGPU;
233 }
234 void setNeedsGPU(bool);
235 QString qmlFileName() const
236 {
237 return m_qmlFileName;
238 }
239 void setQmlFileName(const QString &);
240 QString vuiFileName() const
241 {
242 return m_vuiFileName;
243 }
244 void setVuiFileName(const QString &);
245 QDir path() const
246 {
247 return m_path;
248 }
249 void setPath(const QDir &path);
250 QUrl qmlFilePath() const;
251 QUrl vuiFilePath() const;
252 QString iconFilePath() const
253 {
254 return (m_icon.isEmpty() || m_icon.startsWith("qrc:")) ? m_icon :
255 QUrl::fromLocalFile(m_path.absoluteFilePath(m_icon)).toString();
256 }
257 void setIconFileName(const QString &);
258 bool isAudio() const
259 {
260 return m_isAudio;
261 }
262 void setIsAudio(bool isAudio);
263 bool isHidden() const
264 {
265 return m_isHidden;
266 }
267 void setIsHidden(bool isHidden);
268 bool isFavorite() const
269 {
270 return m_isFavorite;
271 }
272 void setIsFavorite(bool isFavorite);
273 QString gpuAlt() const
274 {
275 return m_gpuAlt;
276 }
277 void setGpuAlt(const QString &);
278 bool allowMultiple() const
279 {
280 return m_allowMultiple;
281 }
282 void setAllowMultiple(bool allowMultiple);
283 bool isClipOnly() const
284 {
285 return m_isClipOnly;
286 }
287 void setIsClipOnly(bool isClipOnly);
288 bool isTrackOnly() const
289 {
290 return m_isTrackOnly;
291 }
292 void setIsTrackOnly(bool isTrackOnly);
293 bool isOutputOnly() const
294 {
295 return m_isOutputOnly;
296 }
297 void setIsOutputOnly(bool isOutputOnly);
298 bool isGpuCompatible() const
299 {
300 return m_isGpuCompatible;
301 }
302 void setIsGpuCompatible(bool isCompatible)
303 {
304 m_isGpuCompatible = isCompatible;
305 }
306 QmlKeyframesMetadata *keyframes()
307 {
308 return &m_keyframes;
309 }
310 const QmlKeyframesMetadata *keyframes() const
311 {
312 return &m_keyframes;
313 }
314 bool isDeprecated() const
315 {
316 return m_isDeprecated;
317 }
318 void setIsDeprecated(bool deprecated)
319 {
320 m_isDeprecated = deprecated;
321 }
322 bool isMltVersion(const QString &version);
323 QString keywords() const
324 {
325 return m_keywords;
326 }
327 bool seekReverse() const
328 {
329 return m_seekReverse;
330 }
331
332signals:
333 void changed();
334
335private:
336 PluginType m_type;
337 QString m_name;
338 QString m_mlt_service;
339 bool m_needsGPU;
340 QString m_qmlFileName;
341 QString m_vuiFileName;
342 QDir m_path;
343 bool m_isAudio;
344 bool m_isHidden;
345 bool m_isFavorite;
346 QString m_gpuAlt;
347 bool m_allowMultiple;
348 bool m_isClipOnly;
349 bool m_isTrackOnly;
350 bool m_isOutputOnly;
351 bool m_isGpuCompatible;
352 QmlKeyframesMetadata m_keyframes;
353 bool m_isDeprecated;
354 QString m_minimumVersion;
355 QString m_keywords;
356 QString m_icon;
357 bool m_seekReverse;
358};
359
360#endif // QMLMETADATA_H