Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-19 08:26:22

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QITEMEDITORFACTORY_H
0006 #define QITEMEDITORFACTORY_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtCore/qmetaobject.h>
0010 #include <QtCore/qbytearray.h>
0011 #include <QtCore/qhash.h>
0012 #include <QtCore/qvariant.h>
0013 
0014 QT_REQUIRE_CONFIG(itemviews);
0015 
0016 QT_BEGIN_NAMESPACE
0017 
0018 class QWidget;
0019 
0020 class Q_WIDGETS_EXPORT QItemEditorCreatorBase
0021 {
0022 public:
0023     virtual ~QItemEditorCreatorBase();
0024 
0025     virtual QWidget *createWidget(QWidget *parent) const = 0;
0026     virtual QByteArray valuePropertyName() const = 0;
0027 };
0028 
0029 template <class T>
0030 class QItemEditorCreator : public QItemEditorCreatorBase
0031 {
0032 public:
0033     inline explicit QItemEditorCreator(const QByteArray &valuePropertyName);
0034     inline QWidget *createWidget(QWidget *parent) const override { return new T(parent); }
0035     inline QByteArray valuePropertyName() const override { return propertyName; }
0036 
0037 private:
0038     QByteArray propertyName;
0039 };
0040 
0041 template <class T>
0042 class QStandardItemEditorCreator: public QItemEditorCreatorBase
0043 {
0044 public:
0045     inline QStandardItemEditorCreator()
0046         : propertyName(T::staticMetaObject.userProperty().name())
0047     {}
0048     inline QWidget *createWidget(QWidget *parent) const override { return new T(parent); }
0049     inline QByteArray valuePropertyName() const override { return propertyName; }
0050 
0051 private:
0052     QByteArray propertyName;
0053 };
0054 
0055 
0056 template <class T>
0057 Q_INLINE_TEMPLATE QItemEditorCreator<T>::QItemEditorCreator(const QByteArray &avaluePropertyName)
0058     : propertyName(avaluePropertyName) {}
0059 
0060 class Q_WIDGETS_EXPORT QItemEditorFactory
0061 {
0062 public:
0063     inline QItemEditorFactory() {}
0064     virtual ~QItemEditorFactory();
0065 
0066     virtual QWidget *createEditor(int userType, QWidget *parent) const;
0067     virtual QByteArray valuePropertyName(int userType) const;
0068 
0069     void registerEditor(int userType, QItemEditorCreatorBase *creator);
0070 
0071     static const QItemEditorFactory *defaultFactory();
0072     static void setDefaultFactory(QItemEditorFactory *factory);
0073 
0074 private:
0075     QHash<int, QItemEditorCreatorBase *> creatorMap;
0076 };
0077 
0078 QT_END_NAMESPACE
0079 
0080 #endif // QITEMEDITORFACTORY_H