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