diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-11-30 03:06:01 +0100 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-11-30 03:06:01 +0100 |
commit | 85b413ddf2d803f3138166b2d04eb0afac380d61 (patch) | |
tree | 50089c9b5c6351f0f5f2b616efd03d6539dcee7f /src/designer | |
parent | 091a7f46ab331fd45cab762e4237a5f0e24bc68e (diff) | |
parent | b88c474dbb4cc04ea39d9a80e84e94343c096dce (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Change-Id: I50a7c2b57add2be49cb42083df8584882d78ea44
Diffstat (limited to 'src/designer')
-rw-r--r-- | src/designer/src/lib/shared/qdesigner_propertysheet.cpp | 30 | ||||
-rw-r--r-- | src/designer/src/lib/shared/qdesigner_propertysheet_p.h | 9 |
2 files changed, 37 insertions, 2 deletions
diff --git a/src/designer/src/lib/shared/qdesigner_propertysheet.cpp b/src/designer/src/lib/shared/qdesigner_propertysheet.cpp index 5ec212ec3..c142ee7b1 100644 --- a/src/designer/src/lib/shared/qdesigner_propertysheet.cpp +++ b/src/designer/src/lib/shared/qdesigner_propertysheet.cpp @@ -44,9 +44,12 @@ #include <QtWidgets/qlayout.h> #include <QtWidgets/qdockwidget.h> #include <QtWidgets/qdialog.h> +#include <QtWidgets/qgroupbox.h> #include <QtWidgets/qlabel.h> #include <QtWidgets/qgroupbox.h> #include <QtWidgets/qstyle.h> +#include <QtWidgets/qabstractbutton.h> +#include <QtWidgets/qaction.h> #include <QtWidgets/qapplication.h> #include <QtWidgets/qtoolbar.h> #include <QtWidgets/qmainwindow.h> @@ -173,6 +176,7 @@ class QDesignerPropertySheetPrivate { public: using PropertyType = QDesignerPropertySheet::PropertyType; using ObjectType = QDesignerPropertySheet::ObjectType; + using ObjectFlags = QDesignerPropertySheet::ObjectFlags; explicit QDesignerPropertySheetPrivate(QDesignerPropertySheet *sheetPublic, QObject *object, QObject *sheetParent); @@ -227,6 +231,7 @@ public: QDesignerFormEditorInterface *m_core; const QDesignerMetaObjectInterface *m_meta; const ObjectType m_objectType; + const ObjectFlags m_objectFlags; using InfoHash = QHash<int, Info>; InfoHash m_info; @@ -388,6 +393,7 @@ QDesignerPropertySheetPrivate::QDesignerPropertySheetPrivate(QDesignerPropertySh m_core(formEditorForObject(sheetParent)), m_meta(m_core->introspection()->metaObject(object)), m_objectType(QDesignerPropertySheet::objectTypeFromObject(object)), + m_objectFlags(QDesignerPropertySheet::objectFlagsFromObject(object)), m_canHaveLayoutAttributes(hasLayoutAttributes(m_core, object)), m_object(object), m_lastLayout(nullptr), @@ -515,6 +521,17 @@ QDesignerPropertySheet::ObjectType QDesignerPropertySheet::objectTypeFromObject( return ObjectNone; } +QDesignerPropertySheet::ObjectFlags QDesignerPropertySheet::objectFlagsFromObject(const QObject *o) +{ + ObjectFlags result; + if ((o->isWidgetType() && (qobject_cast<const QAbstractButton *>(o) + || qobject_cast<const QGroupBox *>(o))) + || qobject_cast<const QAction *>(o)) { + result |= CheckableProperty; + } + return result; +} + QDesignerPropertySheet::PropertyType QDesignerPropertySheet::propertyTypeFromName(const QString &name) { typedef QHash<QString, PropertyType> PropertyTypeHash; @@ -540,6 +557,7 @@ QDesignerPropertySheet::PropertyType QDesignerPropertySheet::propertyTypeFromNam propertyTypeHash.insert(QLatin1String(layoutGridColumnMinimumWidthC), PropertyLayoutGridColumnMinimumWidth); propertyTypeHash.insert(QStringLiteral("buddy"), PropertyBuddy); propertyTypeHash.insert(QStringLiteral("geometry"), PropertyGeometry); + propertyTypeHash.insert(QStringLiteral("checked"), PropertyChecked); propertyTypeHash.insert(QStringLiteral("checkable"), PropertyCheckable); propertyTypeHash.insert(QStringLiteral("accessibleName"), PropertyAccessibility); propertyTypeHash.insert(QStringLiteral("accessibleDescription"), PropertyAccessibility); @@ -1567,8 +1585,16 @@ bool QDesignerPropertySheet::isEnabled(int index) const // as this might be done via TaskMenu/Cursor::setProperty. Note that those // properties are not visible. const QDesignerMetaPropertyInterface *p = d->m_meta->property(index); - return (p->accessFlags() & QDesignerMetaPropertyInterface::WriteAccess) && - designableState(p, d->m_object) != PropertyOfObjectNotDesignable; + if (!p->accessFlags().testFlag(QDesignerMetaPropertyInterface::WriteAccess)) + return false; + + if (designableState(p, d->m_object) == PropertyOfObjectNotDesignable) + return false; + + const PropertyType type = propertyType(index); + if (type == PropertyChecked && d->m_objectFlags.testFlag(CheckableProperty)) + return d->m_object->property("checkable").toBool(); + return true; } bool QDesignerPropertySheet::isAttribute(int index) const diff --git a/src/designer/src/lib/shared/qdesigner_propertysheet_p.h b/src/designer/src/lib/shared/qdesigner_propertysheet_p.h index 4da33b525..49380e1ee 100644 --- a/src/designer/src/lib/shared/qdesigner_propertysheet_p.h +++ b/src/designer/src/lib/shared/qdesigner_propertysheet_p.h @@ -155,6 +155,7 @@ public: PropertyBuddy, PropertyAccessibility, PropertyGeometry, + PropertyChecked, PropertyCheckable, PropertyWindowTitle, PropertyWindowIcon, @@ -168,8 +169,14 @@ public: }; enum ObjectType { ObjectNone, ObjectLabel, ObjectLayout, ObjectLayoutWidget }; + enum ObjectFlag + { + CheckableProperty = 0x1 // Has a "checked" property depending on "checkable" + }; + Q_DECLARE_FLAGS(ObjectFlags, ObjectFlag) static ObjectType objectTypeFromObject(const QObject *o); + static ObjectFlags objectFlagsFromObject(const QObject *o); static PropertyType propertyTypeFromName(const QString &name); protected: @@ -248,6 +255,8 @@ void QDesignerPropertySheetFactory<Object, PropertySheet>::registerExtension(QEx // Standard property sheet typedef QDesignerPropertySheetFactory<QObject, QDesignerPropertySheet> QDesignerDefaultPropertySheetFactory; +Q_DECLARE_OPERATORS_FOR_FLAGS(QDesignerPropertySheet::ObjectFlags) + QT_END_NAMESPACE #endif // QDESIGNER_PROPERTYSHEET_H |