1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the tools applications of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QTVARIANTPROPERTY_H 41 #define QTVARIANTPROPERTY_H 42 43 #include "qtpropertybrowser.h" 44 #include <QtCore/QVariant> 45 #include <QtGui/QIcon> 46 47 QT_BEGIN_NAMESPACE 48 49 typedef QMap<int, QIcon> QtIconMap; 50 51 class QtVariantPropertyManager; 52 53 class QtVariantProperty : public QtProperty 54 { 55 public: 56 ~QtVariantProperty(); 57 QVariant value() const; 58 QVariant attributeValue(const QString &attribute) const; 59 int valueType() const; 60 int propertyType() const; 61 62 void setValue(const QVariant &value); 63 void setAttribute(const QString &attribute, const QVariant &value); 64 protected: 65 QtVariantProperty(QtVariantPropertyManager *manager); 66 private: 67 friend class QtVariantPropertyManager; 68 QScopedPointer<class QtVariantPropertyPrivate> d_ptr; 69 }; 70 71 class QtVariantPropertyManager : public QtAbstractPropertyManager 72 { 73 Q_OBJECT 74 public: 75 QtVariantPropertyManager(QObject *parent = 0); 76 ~QtVariantPropertyManager(); 77 78 virtual QtVariantProperty *addProperty(int propertyType, const QString &name = QString()); 79 80 int propertyType(const QtProperty *property) const; 81 int valueType(const QtProperty *property) const; 82 QtVariantProperty *variantProperty(const QtProperty *property) const; 83 84 virtual bool isPropertyTypeSupported(int propertyType) const; 85 virtual int valueType(int propertyType) const; 86 virtual QStringList attributes(int propertyType) const; 87 virtual int attributeType(int propertyType, const QString &attribute) const; 88 89 virtual QVariant value(const QtProperty *property) const; 90 virtual QVariant attributeValue(const QtProperty *property, const QString &attribute) const; 91 92 static int enumTypeId(); 93 static int flagTypeId(); 94 static int groupTypeId(); 95 static int iconMapTypeId(); 96 public Q_SLOTS: 97 virtual void setValue(QtProperty *property, const QVariant &val); 98 virtual void setAttribute(QtProperty *property, 99 const QString &attribute, const QVariant &value); 100 Q_SIGNALS: 101 void valueChanged(QtProperty *property, const QVariant &val); 102 void attributeChanged(QtProperty *property, 103 const QString &attribute, const QVariant &val); 104 protected: 105 virtual bool hasValue(const QtProperty *property) const; 106 QString valueText(const QtProperty *property) const; 107 QIcon valueIcon(const QtProperty *property) const; 108 virtual void initializeProperty(QtProperty *property); 109 virtual void uninitializeProperty(QtProperty *property); 110 virtual QtProperty *createProperty(); 111 private: 112 QScopedPointer<class QtVariantPropertyManagerPrivate> d_ptr; 113 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, int)) 114 Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, int, int)) 115 Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, int)) 116 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, double)) 117 Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, double, double)) 118 Q_PRIVATE_SLOT(d_func(), void slotSingleStepChanged(QtProperty *, double)) 119 Q_PRIVATE_SLOT(d_func(), void slotDecimalsChanged(QtProperty *, int)) 120 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, bool)) 121 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QString &)) 122 Q_PRIVATE_SLOT(d_func(), void slotRegExpChanged(QtProperty *, const QRegExp &)) 123 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QDate &)) 124 Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, const QDate &, const QDate &)) 125 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QTime &)) 126 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QDateTime &)) 127 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QKeySequence &)) 128 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QChar &)) 129 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QLocale &)) 130 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QPoint &)) 131 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QPointF &)) 132 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QSize &)) 133 Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, const QSize &, const QSize &)) 134 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QSizeF &)) 135 Q_PRIVATE_SLOT(d_func(), void slotRangeChanged(QtProperty *, const QSizeF &, const QSizeF &)) 136 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QRect &)) 137 Q_PRIVATE_SLOT(d_func(), void slotConstraintChanged(QtProperty *, const QRect &)) 138 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QRectF &)) 139 Q_PRIVATE_SLOT(d_func(), void slotConstraintChanged(QtProperty *, const QRectF &)) 140 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QColor &)) 141 Q_PRIVATE_SLOT(d_func(), void slotEnumNamesChanged(QtProperty *, const QStringList &)) 142 Q_PRIVATE_SLOT(d_func(), void slotEnumIconsChanged(QtProperty *, const QMap<int, QIcon> &)) 143 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QSizePolicy &)) 144 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QFont &)) 145 Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QCursor &)) 146 Q_PRIVATE_SLOT(d_func(), void slotFlagNamesChanged(QtProperty *, const QStringList &)) 147 148 Q_PRIVATE_SLOT(d_func(), void slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)) 149 Q_PRIVATE_SLOT(d_func(), void slotPropertyRemoved(QtProperty *, QtProperty *)) 150 Q_DECLARE_PRIVATE(QtVariantPropertyManager) 151 Q_DISABLE_COPY_MOVE(QtVariantPropertyManager) 152 }; 153 154 class QtVariantEditorFactory : public QtAbstractEditorFactory<QtVariantPropertyManager> 155 { 156 Q_OBJECT 157 public: 158 QtVariantEditorFactory(QObject *parent = 0); 159 ~QtVariantEditorFactory(); 160 protected: 161 void connectPropertyManager(QtVariantPropertyManager *manager); 162 QWidget *createEditor(QtVariantPropertyManager *manager, QtProperty *property, 163 QWidget *parent); 164 void disconnectPropertyManager(QtVariantPropertyManager *manager); 165 private: 166 QScopedPointer<class QtVariantEditorFactoryPrivate> d_ptr; 167 Q_DECLARE_PRIVATE(QtVariantEditorFactory) 168 Q_DISABLE_COPY_MOVE(QtVariantEditorFactory) 169 }; 170 171 QT_END_NAMESPACE 172 173 Q_DECLARE_METATYPE(QIcon) 174 Q_DECLARE_METATYPE(QtIconMap) 175 #endif 176