CuteLogger
Fast and simple logging solution for Qt based applications
qmlmetadata.h
1/*
2 * Copyright (c) 2013-2026 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 <QDir>
22#include <QObject>
23#include <QQmlListProperty>
24#include <QString>
25#include <QUrl>
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(QStringList gangedRectProperties MEMBER m_gangedRectProperties NOTIFY changed)
35 Q_PROPERTY(bool isCurve MEMBER m_isCurve NOTIFY changed)
36 Q_PROPERTY(double minimum MEMBER m_minimum NOTIFY changed)
37 Q_PROPERTY(double maximum MEMBER m_maximum NOTIFY changed)
38 Q_PROPERTY(QString units MEMBER m_units NOTIFY changed)
39 Q_PROPERTY(bool isRectangle MEMBER m_isRectangle NOTIFY changed)
40 Q_PROPERTY(bool isColor MEMBER m_isColor NOTIFY changed)
41
42public:
43 enum RangeType {
44 MinMax,
45 ClipLength,
46 };
47 Q_ENUM(RangeType)
48 explicit QmlKeyframesParameter(QObject *parent = 0);
49
50 QString name() const { return m_name; }
51 QString property() const { return m_property; }
52 QStringList gangedProperties() const { return m_gangedProperties; }
53 QStringList gangedRectProperties() const { return m_gangedRectProperties; }
54 bool isCurve() const { return m_isCurve; }
55 double minimum() const { return m_minimum; }
56 double maximum() const { return m_maximum; }
57 QString units() const { return m_units; }
58 bool isRectangle() const { return m_isRectangle; }
59 RangeType rangeType() const { return m_rangeType; }
60 bool isColor() const { return m_isColor; }
61
62signals:
63 void changed();
64
65private:
66 QString m_name;
67 QString m_property;
68 QStringList m_gangedProperties;
69 QStringList m_gangedRectProperties;
70 bool m_isCurve;
71 double m_minimum;
72 double m_maximum;
73 QString m_units;
74 bool m_isRectangle;
75 RangeType m_rangeType;
76 bool m_isColor;
77};
78
79class QmlKeyframesMetadata : public QObject
80{
81 Q_OBJECT
82 Q_PROPERTY(bool allowTrim MEMBER m_allowTrim NOTIFY changed)
83 Q_PROPERTY(bool allowAnimateIn MEMBER m_allowAnimateIn NOTIFY changed)
84 Q_PROPERTY(bool allowAnimateOut MEMBER m_allowAnimateOut NOTIFY changed)
85 Q_PROPERTY(QQmlListProperty<QmlKeyframesParameter> parameters READ parameters NOTIFY changed)
87 Q_PROPERTY(QList<QString> simpleProperties MEMBER m_simpleProperties NOTIFY changed)
88 Q_PROPERTY(QString minimumVersion MEMBER m_minimumVersion NOTIFY changed)
89 Q_PROPERTY(bool enabled MEMBER m_enabled NOTIFY changed)
90 Q_PROPERTY(bool allowOvershoot MEMBER m_allowOvershoot NOTIFY changed)
91
92public:
93 explicit QmlKeyframesMetadata(QObject *parent = 0);
94
95 bool allowTrim() const { return m_allowTrim; }
96 bool allowAnimateIn() const { return m_allowAnimateIn; }
97 bool allowAnimateOut() const { return m_allowAnimateOut; }
98 QList<QString> simpleProperties() const { return m_simpleProperties; }
99 bool allowOvershoot() const { return m_allowOvershoot; }
100 QQmlListProperty<QmlKeyframesParameter> parameters()
101 {
102 return QQmlListProperty<QmlKeyframesParameter>(this, &m_parameters);
103 }
104 int parameterCount() const { return m_parameters.count(); }
105 QmlKeyframesParameter *parameter(int index) const { return m_parameters[index]; }
106 Q_INVOKABLE QmlKeyframesParameter *parameter(const QString &propertyName) const;
107 void checkVersion(const QString &version);
108 void setDisabled();
109
110signals:
111 void changed();
112
113private:
114 bool m_allowTrim;
115 bool m_allowAnimateIn;
116 bool m_allowAnimateOut;
117 QList<QmlKeyframesParameter *> m_parameters;
118 QList<QString> m_simpleProperties;
119 QString m_minimumVersion;
120 bool m_enabled;
121 bool m_allowOvershoot;
122};
123
124class QmlMetadata : public QObject
125{
126 Q_OBJECT
127 Q_PROPERTY(PluginType type READ type WRITE setType NOTIFY changed)
128 Q_PROPERTY(QString name READ name WRITE setName NOTIFY changed)
129 Q_PROPERTY(QString mlt_service READ mlt_service WRITE set_mlt_service NOTIFY changed)
130 Q_PROPERTY(bool needsGPU READ needsGPU WRITE setNeedsGPU NOTIFY changed)
131 Q_PROPERTY(QString qml READ qmlFileName WRITE setQmlFileName NOTIFY changed)
132 Q_PROPERTY(QString vui READ vuiFileName WRITE setVuiFileName NOTIFY changed)
133 Q_PROPERTY(QUrl qmlFilePath READ qmlFilePath NOTIFY changed)
134 Q_PROPERTY(QUrl vuiFilePath READ vuiFilePath NOTIFY changed)
135 Q_PROPERTY(bool isAudio READ isAudio WRITE setIsAudio NOTIFY changed)
136 Q_PROPERTY(bool isHidden READ isHidden WRITE setIsHidden NOTIFY changed)
137 Q_PROPERTY(bool isFavorite READ isFavorite WRITE setIsFavorite NOTIFY changed)
138 Q_PROPERTY(QString gpuAlt READ gpuAlt WRITE setGpuAlt NOTIFY changed)
139 Q_PROPERTY(bool allowMultiple READ allowMultiple WRITE setAllowMultiple NOTIFY changed)
140 Q_PROPERTY(bool isClipOnly READ isClipOnly WRITE setIsClipOnly NOTIFY changed)
141 Q_PROPERTY(bool isTrackOnly READ isTrackOnly WRITE setIsTrackOnly NOTIFY changed)
142 Q_PROPERTY(bool isOutputOnly READ isOutputOnly WRITE setIsOutputOnly NOTIFY changed)
143 Q_PROPERTY(bool isGpuCompatible READ isGpuCompatible() WRITE setIsGpuCompatible NOTIFY changed)
144 Q_PROPERTY(QmlKeyframesMetadata *keyframes READ keyframes NOTIFY changed)
145 Q_PROPERTY(bool isDeprecated READ isDeprecated WRITE setIsDeprecated NOTIFY changed)
146 Q_PROPERTY(QString minimumVersion MEMBER m_minimumVersion NOTIFY changed)
147 Q_PROPERTY(QString keywords MEMBER m_keywords NOTIFY changed)
148 Q_PROPERTY(QString icon READ iconFilePath WRITE setIconFileName NOTIFY changed)
149 Q_PROPERTY(bool seekReverse MEMBER m_seekReverse NOTIFY changed)
150 Q_PROPERTY(QString help MEMBER m_helpText NOTIFY changed)
151
152public:
153 enum PluginType {
154 Filter,
155 Producer,
156 Transition,
157 Link,
158 FilterSet,
159 };
160 Q_ENUM(PluginType)
161 unsigned filterMask;
162
163 explicit QmlMetadata(QObject *parent = 0);
164 void loadSettings();
165
166 PluginType type() const { return m_type; }
167 void setType(PluginType);
168 QString name() const { return m_name; }
169 void setName(const QString &);
170 QString mlt_service() const { return m_mlt_service; }
171 void set_mlt_service(const QString &);
172 QString uniqueId() const;
173 bool needsGPU() const { return m_needsGPU; }
174 void setNeedsGPU(bool);
175 QString qmlFileName() const { return m_qmlFileName; }
176 void setQmlFileName(const QString &);
177 QString vuiFileName() const { return m_vuiFileName; }
178 void setVuiFileName(const QString &);
179 QDir path() const { return m_path; }
180 void setPath(const QDir &path);
181 QUrl qmlFilePath() const;
182 QUrl vuiFilePath() const;
183 QString iconFilePath() const
184 {
185 return (m_icon.isEmpty() || m_icon.startsWith("qrc:"))
186 ? m_icon
187 : QUrl::fromLocalFile(m_path.absoluteFilePath(m_icon)).toString();
188 }
189 void setIconFileName(const QString &);
190 bool isAudio() const { return m_isAudio; }
191 void setIsAudio(bool isAudio);
192 bool isHidden() const { return m_isHidden; }
193 void setIsHidden(bool isHidden);
194 bool isFavorite() const { return m_isFavorite; }
195 void setIsFavorite(bool isFavorite);
196 QString gpuAlt() const { return m_gpuAlt; }
197 void setGpuAlt(const QString &);
198 bool allowMultiple() const { return m_allowMultiple; }
199 void setAllowMultiple(bool allowMultiple);
200 bool isClipOnly() const { return m_isClipOnly; }
201 void setIsClipOnly(bool isClipOnly);
202 bool isTrackOnly() const { return m_isTrackOnly; }
203 void setIsTrackOnly(bool isTrackOnly);
204 bool isOutputOnly() const { return m_isOutputOnly; }
205 void setIsOutputOnly(bool isOutputOnly);
206 bool isGpuCompatible() const { return m_isGpuCompatible; }
207 void setIsGpuCompatible(bool isCompatible) { m_isGpuCompatible = isCompatible; }
208 QmlKeyframesMetadata *keyframes() { return &m_keyframes; }
209 const QmlKeyframesMetadata *keyframes() const { return &m_keyframes; }
210 bool isDeprecated() const { return m_isDeprecated; }
211 void setIsDeprecated(bool deprecated) { m_isDeprecated = deprecated; }
212 bool isMltVersion(const QString &version);
213 QString keywords() const { return m_keywords; }
214 bool seekReverse() const { return m_seekReverse; }
215 QString helpText() const { return m_helpText; }
216
217signals:
218 void changed();
219
220private:
221 PluginType m_type;
222 QString m_name;
223 QString m_mlt_service;
224 bool m_needsGPU;
225 QString m_qmlFileName;
226 QString m_vuiFileName;
227 QDir m_path;
228 bool m_isAudio;
229 bool m_isHidden;
230 bool m_isFavorite;
231 QString m_gpuAlt;
232 bool m_allowMultiple;
233 bool m_isClipOnly;
234 bool m_isTrackOnly;
235 bool m_isOutputOnly;
236 bool m_isGpuCompatible;
237 QmlKeyframesMetadata m_keyframes;
238 bool m_isDeprecated;
239 QString m_minimumVersion;
240 QString m_keywords;
241 QString m_icon;
242 bool m_seekReverse;
243 QString m_helpText;
244};
245
246#endif // QMLMETADATA_H