summaryrefslogtreecommitdiffstats
path: root/src/designer
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-11-30 03:06:01 +0100
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-11-30 03:06:01 +0100
commit85b413ddf2d803f3138166b2d04eb0afac380d61 (patch)
tree50089c9b5c6351f0f5f2b616efd03d6539dcee7f /src/designer
parent091a7f46ab331fd45cab762e4237a5f0e24bc68e (diff)
parentb88c474dbb4cc04ea39d9a80e84e94343c096dce (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'src/designer')
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertysheet.cpp30
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertysheet_p.h9
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