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 
27 class 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 
41 public:
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 
90 signals:
91  void changed();
92 
93 private:
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 
106 class 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 
119 public:
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 
158 signals:
159  void changed();
160 
161 private:
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 
173 class 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 
200 public:
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 
332 signals:
333  void changed();
334 
335 private:
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