drop support for some properties annotations, revisioned properties and methods

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2024-04-26 22:40:51 +03:00
parent 2fa4e0cdc5
commit 65d8629a0c
42 changed files with 104 additions and 766 deletions

View file

@ -619,7 +619,6 @@ katie_generate_obsolete(QSizeF QtCore qsize.h)
katie_generate_obsolete(QSpacerItem QtGui qlayoutitem.h)
katie_generate_obsolete(QSplitterHandle QtGui qsplitter.h)
katie_generate_obsolete(QSpontaneKeyEvent QtTest qtestspontaneevent.h)
katie_generate_obsolete(QStandardItemEditorCreator QtGui qitemeditorfactory.h)
katie_generate_obsolete(QStandardItem QtGui qstandarditemmodel.h)
katie_generate_obsolete(QStatusTipEvent QtGui qevent.h)
katie_generate_obsolete(QStringListIterator QtCore qstringlist.h)

View file

@ -502,7 +502,6 @@ include/katie/QtGui/QSplitterHandle
include/katie/QtGui/QStackedLayout
include/katie/QtGui/QStackedWidget
include/katie/QtGui/QStandardItem
include/katie/QtGui/QStandardItemEditorCreator
include/katie/QtGui/QStandardItemModel
include/katie/QtGui/QStatusBar
include/katie/QtGui/QStatusTipEvent

View file

@ -177,7 +177,6 @@ incmap = {
'QSpacerItem': 'qlayoutitem.h',
'QSplitterHandle': 'qsplitter.h',
'QStandardItem': 'qstandarditemmodel.h',
'QStandardItemEditorCreator': 'qitemeditorfactory.h',
'QStatusTipEvent': 'qevent.h',
'QStyleHintReturn': 'qstyleoption.h',
'QStyleHintReturnMask': 'qstyleoption.h',

View file

@ -386,7 +386,6 @@ classlist = [
"QStackedLayout",
"QStackedWidget",
"QStandardItem",
"QStandardItemEditorCreator",
"QStandardItemModel",
"QStandardPaths",
"QStatusBar",

View file

@ -99,11 +99,7 @@ QT_BEGIN_NAMESPACE
\value ReadProperty
\value WriteProperty
\value ResetProperty
\value QueryPropertyDesignable
\value QueryPropertyScriptable
\value QueryPropertyStored
\value QueryPropertyEditable
\value QueryPropertyUser
\value CreateInstance
*/
@ -784,24 +780,6 @@ QMetaProperty QMetaObject::property(int index) const
return result;
}
/*!
\since 4.2
Returns the property that has the \c USER flag set to true.
\sa QMetaProperty::isUser()
*/
QMetaProperty QMetaObject::userProperty() const
{
const int propCount = propertyCount();
for (int i = propCount - 1; i >= 0; --i) {
const QMetaProperty prop = property(i);
if (prop.isUser())
return prop;
}
return QMetaProperty();
}
/*!
Returns the meta-data for the item of class information with the
given \a index.
@ -1343,25 +1321,6 @@ int QMetaMethod::methodIndex() const
return ((handle - priv(mobj->d.data)->methodData) / 5) + mobj->methodOffset();
}
/*!
\internal
Returns the method revision if one was
specified by Q_REVISION, otherwise returns 0.
*/
int QMetaMethod::revision() const
{
if (!mobj)
return 0;
if ((QMetaMethod::Access)(mobj->d.data[handle + 4] & MethodRevisioned)) {
int offset = priv(mobj->d.data)->methodData
+ priv(mobj->d.data)->methodCount * 5
+ (handle - priv(mobj->d.data)->methodData) / 5;
return mobj->d.data[offset];
}
return 0;
}
/*!
Returns the access specification of this method (private,
protected, or public).
@ -1968,8 +1927,8 @@ inline static QByteArray qualifiedName(const QMetaEnum &e)
\section1 Property Meta-Data
A property has a name() and a type(), as well as various
attributes that specify its behavior: isReadable(), isWritable(),
isDesignable(), isScriptable(), and isStored().
attributes that specify its behavior: isReadable(), isWritable()
and isScriptable().
If the property is an enumeration, isEnumType() returns true; if the
property is an enumeration that is also a flag (i.e. its values
@ -2379,35 +2338,6 @@ int QMetaProperty::notifySignalIndex() const
}
}
/*!
\internal
Returns the property revision if one was
specified by REVISION, otherwise returns 0.
*/
int QMetaProperty::revision() const
{
if (!mobj)
return 0;
int flags = mobj->d.data[handle + 2];
if (flags & Revisioned) {
int offset = priv(mobj->d.data)->propertyData +
priv(mobj->d.data)->propertyCount * 3 + idx;
// Revision data is placed after NOTIFY data, if present.
// Iterate through properties to discover whether we have NOTIFY signals.
for (int i = 0; i < priv(mobj->d.data)->propertyCount; ++i) {
int handle = priv(mobj->d.data)->propertyData + 3*i;
if (mobj->d.data[handle + 2] & Notify) {
offset += priv(mobj->d.data)->propertyCount;
break;
}
}
return mobj->d.data[offset];
} else {
return 0;
}
}
/*!
Returns true if this property is writable; otherwise returns
false.
@ -2422,33 +2352,6 @@ bool QMetaProperty::isWritable() const
return flags & Writable;
}
/*!
Returns true if this property is designable for the given \a object;
otherwise returns false.
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c DESIGNABLE attribute is false; otherwise
returns true (if the attribute is true or is a function or expression).
\sa isScriptable(), isStored()
*/
bool QMetaProperty::isDesignable(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & Designable;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyDesignable,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*!
Returns true if the property is scriptable for the given \a object;
otherwise returns false.
@ -2456,8 +2359,6 @@ bool QMetaProperty::isDesignable(const QObject *object) const
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c SCRIPTABLE attribute is false; otherwise returns
true (if the attribute is true or is a function or expression).
\sa isDesignable(), isStored()
*/
bool QMetaProperty::isScriptable(const QObject *object) const
{
@ -2473,113 +2374,6 @@ bool QMetaProperty::isScriptable(const QObject *object) const
return b;
}
/*!
Returns true if the property is stored for \a object; otherwise returns
false.
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c STORED attribute is false; otherwise returns
true (if the attribute is true or is a function or expression).
\sa isDesignable(), isScriptable()
*/
bool QMetaProperty::isStored(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & Stored;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyStored,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*!
Returns true if this property is designated as the \c USER
property, i.e., the one that the user can edit for \a object or
that is significant in some other way. Otherwise it returns
false. e.g., the \c text property is the \c USER editable property
of a QLineEdit.
If \a object is null, the function returns false if the \c
{Q_PROPERTY()}'s \c USER attribute is false. Otherwise it returns
true.
\sa QMetaObject::userProperty(), isDesignable(), isScriptable()
*/
bool QMetaProperty::isUser(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & User;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyUser,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*!
\since 4.6
Returns true if the property is constant; otherwise returns false.
A property is constant if the \c{Q_PROPERTY()}'s \c CONSTANT attribute
is set.
*/
bool QMetaProperty::isConstant() const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
return flags & Constant;
}
/*!
\since 4.6
Returns true if the property is final; otherwise returns false.
A property is final if the \c{Q_PROPERTY()}'s \c FINAL attribute
is set.
*/
bool QMetaProperty::isFinal() const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
return flags & Final;
}
/*!
\obsolete
Returns true if the property is editable for the given \a object;
otherwise returns false.
If no \a object is given, the function returns false if the
\c{Q_PROPERTY()}'s \c EDITABLE attribute is false; otherwise returns
true (if the attribute is true or is a function or expression).
\sa isDesignable(), isScriptable(), isStored()
*/
bool QMetaProperty::isEditable(const QObject *object) const
{
if (!mobj)
return false;
int flags = mobj->d.data[handle + 2];
bool b = flags & Editable;
if (object) {
void *argv[] = { &b };
QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::QueryPropertyEditable,
idx + mobj->propertyOffset(), argv);
}
return b;
}
/*!
\class QMetaClassInfo

View file

@ -45,7 +45,6 @@ public:
enum Attributes { Cloned = 0x1, Scriptable = 0x2 };
int attributes() const;
int methodIndex() const;
int revision() const;
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
@ -162,13 +161,7 @@ public:
bool isReadable() const;
bool isWritable() const;
bool isResettable() const;
bool isDesignable(const QObject *obj = nullptr) const;
bool isScriptable(const QObject *obj = nullptr) const;
bool isStored(const QObject *obj = nullptr) const;
bool isEditable(const QObject *obj = nullptr) const;
bool isUser(const QObject *obj = nullptr) const;
bool isConstant() const;
bool isFinal() const;
bool isFlagType() const;
bool isEnumType() const;
@ -178,8 +171,6 @@ public:
QMetaMethod notifySignal() const;
int notifySignalIndex() const;
int revision() const;
QVariant read(const QObject *obj) const;
bool write(QObject *obj, const QVariant &value) const;
bool reset(QObject *obj) const;

View file

@ -54,20 +54,9 @@ enum PropertyFlags {
EnumOrFlag = 0x00000008,
StdCppSet = 0x00000100,
// Override = 0x00000200,
Constant = 0x00000400,
Final = 0x00000800,
Designable = 0x00001000,
ResolveDesignable = 0x00002000,
Scriptable = 0x00004000,
ResolveScriptable = 0x00008000,
Stored = 0x00010000,
ResolveStored = 0x00020000,
Editable = 0x00040000,
ResolveEditable = 0x00080000,
User = 0x00100000,
ResolveUser = 0x00200000,
Notify = 0x00400000,
Revisioned = 0x00800000
Scriptable = 0x00000400,
ResolveScriptable = 0x00000800,
Notify = 0x00001000,
};
enum MethodFlags {
@ -83,8 +72,7 @@ enum MethodFlags {
MethodTypeMask = 0x0c,
MethodCloned = 0x10,
MethodScriptable = 0x20,
MethodRevisioned = 0x40
MethodScriptable = 0x20
};
enum MetaObjectFlags {

View file

@ -51,7 +51,6 @@ class QString;
#define Q_INTERFACES(x)
#define Q_PROPERTY(text)
#define Q_PRIVATE_PROPERTY(d, text)
#define Q_REVISION(v)
#define Q_OVERRIDE(text)
#define Q_ENUMS(x)
#define Q_FLAGS(x)
@ -119,7 +118,6 @@ private:
#define Q_INTERFACES(x) Q_INTERFACES(x)
#define Q_PROPERTY(text) Q_PROPERTY(text)
#define Q_PRIVATE_PROPERTY(d, text) Q_PRIVATE_PROPERTY(d, text)
#define Q_REVISION(v) Q_REVISION(v)
#define Q_OVERRIDE(text) Q_OVERRIDE(text)
#define Q_ENUMS(x) Q_ENUMS(x)
#define Q_FLAGS(x) Q_FLAGS(x)
@ -234,7 +232,6 @@ struct Q_CORE_EXPORT QMetaObject
QMetaEnum enumerator(int index) const;
QMetaProperty property(int index) const;
QMetaClassInfo classInfo(int index) const;
QMetaProperty userProperty() const;
static bool checkConnectArgs(const char *signal, const char *method);
static QByteArray normalizedSignature(const char *method);
@ -336,11 +333,7 @@ struct Q_CORE_EXPORT QMetaObject
ReadProperty,
WriteProperty,
ResetProperty,
QueryPropertyDesignable,
QueryPropertyScriptable,
QueryPropertyStored,
QueryPropertyEditable,
QueryPropertyUser,
CreateInstance
};

View file

@ -312,7 +312,7 @@ void QDBusMetaObjectGenerator::parseProperties()
mp.typeName = type.name;
// build the flags:
mp.flags = StdCppSet | Scriptable | Stored | Designable;
mp.flags = StdCppSet | Scriptable;
if (p.access != QDBusIntrospection::Property::Write)
mp.flags |= Readable;
if (p.access != QDBusIntrospection::Property::Read)

View file

@ -49,11 +49,10 @@ class Q_GUI_EXPORT QFileDialog : public QDialog
Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode)
Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode)
Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly DESIGNABLE false)
Q_PROPERTY(bool confirmOverwrite READ confirmOverwrite WRITE setConfirmOverwrite DESIGNABLE false)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
Q_PROPERTY(bool confirmOverwrite READ confirmOverwrite WRITE setConfirmOverwrite)
Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix)
Q_PROPERTY(bool nameFilterDetailsVisible READ isNameFilterDetailsVisible
WRITE setNameFilterDetailsVisible DESIGNABLE false)
Q_PROPERTY(bool nameFilterDetailsVisible READ isNameFilterDetailsVisible WRITE setNameFilterDetailsVisible)
Q_PROPERTY(Options options READ options WRITE setOptions)
public:

View file

@ -482,14 +482,14 @@ inline QRectF QGraphicsItem::mapRectFromScene(qreal ax, qreal ay, qreal w, qreal
class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged DESIGNABLE false)
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged)
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
Q_PROPERTY(QPointF pos READ pos WRITE setPos FINAL)
Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL)
Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL)
Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged FINAL)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged)
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
Q_PROPERTY(qreal z READ zValue WRITE setZValue NOTIFY zChanged)
Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint)

View file

@ -501,27 +501,9 @@ void QItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) con
#else
Q_D(const QItemDelegate);
QVariant v = index.data(Qt::EditRole);
QByteArray n = editor->metaObject()->userProperty().name();
// ### Qt 5: remove
// A work-around for missing "USER true" in qdatetimeedit.h for
// QTimeEdit's time property and QDateEdit's date property.
// It only triggers if the default user property "dateTime" is
// reported for QTimeEdit and QDateEdit.
if (n == "dateTime") {
if (editor->inherits("QTimeEdit"))
n = "time";
else if (editor->inherits("QDateEdit"))
n = "date";
}
// ### Qt 5: give QComboBox a USER property
if (n.isEmpty() && editor->inherits("QComboBox"))
n = d->editorFactory()->valuePropertyName(static_cast<QVariant::Type>(v.userType()));
QByteArray n = d->editorFactory()->valuePropertyName(v.type());
if (!n.isEmpty()) {
if (!v.isValid())
v = QVariant(editor->property(n).userType(), (const void *)0);
editor->setProperty(n, v);
editor->setProperty(n, editor->property(n));
}
#endif
}
@ -549,10 +531,7 @@ void QItemDelegate::setModelData(QWidget *editor,
Q_D(const QItemDelegate);
Q_ASSERT(model);
Q_ASSERT(editor);
QByteArray n = editor->metaObject()->userProperty().name();
if (n.isEmpty())
n = d->editorFactory()->valuePropertyName(
static_cast<QVariant::Type>(model->data(index, Qt::EditRole).userType()));
QByteArray n = d->editorFactory()->valuePropertyName(model->data(index, Qt::EditRole).type());
if (!n.isEmpty())
model->setData(index, editor->property(n), Qt::EditRole);
#endif

View file

@ -43,7 +43,7 @@ QT_BEGIN_NAMESPACE
class QBooleanComboBox : public QComboBox
{
Q_OBJECT
Q_PROPERTY(bool value READ value WRITE setValue USER true)
Q_PROPERTY(bool value READ value WRITE setValue)
public:
QBooleanComboBox(QWidget *parent);
@ -311,20 +311,15 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
An editor should provide a user property for the data it edits.
QItemDelagates can then access the property using Qt's
\l{Meta-Object System}{meta-object system} to set and retrieve the
editing data. A property is set as the user property with the USER
keyword:
editing data.
\snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 0
The editor must return the name of the property from valuePropertyName();
delegates will then use the name to access the property.
If the editor does not provide a user property, it must return the
name of the property from valuePropertyName(); delegates will then
use the name to access the property. If a user property exists,
item delegates will not call valuePropertyName().
QStandardItemEditorCreator is a convenience template class that can be used
QItemEditorCreator is a convenience template class that can be used
to register widgets without the need to subclass QItemEditorCreatorBase.
\sa QStandardItemEditorCreator, QItemEditorFactory,
\sa QItemEditorCreator, QItemEditorFactory,
{Model/View Programming}, {Color Editor Factory Example}
*/
@ -362,14 +357,14 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
override this behavior by reimplementing QAbstractItemDelegate::setModelData()
and QAbstractItemDelegate::setEditorData().
\sa QMetaObject::userProperty(), QItemEditorFactory::registerEditor()
\sa QMetaObject::property(), QItemEditorFactory::registerEditor()
*/
/*!
\class QItemEditorCreator
\brief The QItemEditorCreator class makes it possible to create
item editor creator bases without subclassing
QItemEditorCreatorBase.
item editor creator bases without subclassing
QItemEditorCreatorBase.
\since 4.2
\ingroup model-view
@ -383,13 +378,9 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
The constructor takes the name of the property that contains the
editing data. QItemDelegate can then access the property by name
when it sets and retrieves editing data. Only use this class if
your editor does not define a user property (using the USER
keyword in the Q_PROPERTY macro). If the widget has a user
property, you should use QStandardItemEditorCreator instead.
when it sets and retrieves editing data.
\sa QItemEditorCreatorBase, QStandardItemEditorCreator,
QItemEditorFactory, {Color Editor Factory Example}
\sa QItemEditorCreatorBase, QItemEditorFactory, {Color Editor Factory Example}
*/
/*!
@ -414,55 +405,6 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory)
\reimp
*/
/*!
\class QStandardItemEditorCreator
\brief The QStandardItemEditorCreator class provides the
possibility to register widgets without having to subclass
QItemEditorCreatorBase.
\since 4.2
\ingroup model-view
This convenience template class makes it possible to register widgets without
having to subclass QItemEditorCreatorBase.
Example:
\snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 2
Setting the \c editorFactory created above in an item delegate via
QItemDelegate::setItemEditorFactory() makes sure that all values of type
QVariant::DateTime will be edited in \c{MyFancyDateTimeEdit}.
The editor must provide a user property that will contain the
editing data. The property is used by \l{QItemDelegate}s to set
and retrieve the data (using Qt's \l{Meta-Object
System}{meta-object system}). You set the user property with
the USER keyword:
\snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 3
\sa QItemEditorCreatorBase, QItemEditorCreator,
QItemEditorFactory, QItemDelegate, {Color Editor Factory Example}
*/
/*!
\fn QStandardItemEditorCreator::QStandardItemEditorCreator()
Constructs an editor creator object.
*/
/*!
\fn QWidget *QStandardItemEditorCreator::createWidget(QWidget *parent) const
\reimp
*/
/*!
\fn QByteArray QStandardItemEditorCreator::valuePropertyName() const
\reimp
*/
#ifndef QT_NO_LINEEDIT
QExpandingLineEdit::QExpandingLineEdit(QWidget *parent)

View file

@ -56,20 +56,6 @@ private:
QByteArray propertyName;
};
template <class T>
class QStandardItemEditorCreator: public QItemEditorCreatorBase
{
public:
inline QStandardItemEditorCreator()
: propertyName(T::staticMetaObject.userProperty().name())
{}
inline QWidget *createWidget(QWidget *parent) const { return new T(parent); }
inline QByteArray valuePropertyName() const { return propertyName; }
private:
QByteArray propertyName;
};
template <class T>
Q_INLINE_TEMPLATE QItemEditorCreator<T>::QItemEditorCreator(const QByteArray &avaluePropertyName)

View file

@ -169,7 +169,7 @@ class Q_GUI_EXPORT QListWidget : public QListView
{
Q_OBJECT
Q_PROPERTY(int count READ count)
Q_PROPERTY(int currentRow READ currentRow WRITE setCurrentRow NOTIFY currentRowChanged USER true)
Q_PROPERTY(int currentRow READ currentRow WRITE setCurrentRow NOTIFY currentRowChanged)
Q_PROPERTY(bool sortingEnabled READ isSortingEnabled WRITE setSortingEnabled)
friend class QListWidgetItem;

View file

@ -449,27 +449,9 @@ void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &inde
#else
Q_D(const QStyledItemDelegate);
QVariant v = index.data(Qt::EditRole);
QByteArray n = editor->metaObject()->userProperty().name();
// ### Qt 5: remove
// A work-around for missing "USER true" in qdatetimeedit.h for
// QTimeEdit's time property and QDateEdit's date property.
// It only triggers if the default user property "dateTime" is
// reported for QTimeEdit and QDateEdit.
if (n == "dateTime") {
if (editor->inherits("QTimeEdit"))
n = "time";
else if (editor->inherits("QDateEdit"))
n = "date";
}
// ### Qt 5: give QComboBox a USER property
if (n.isEmpty() && editor->inherits("QComboBox"))
n = d->editorFactory()->valuePropertyName(static_cast<QVariant::Type>(v.userType()));
QByteArray n = d->editorFactory()->valuePropertyName(v.type());
if (!n.isEmpty()) {
if (!v.isValid())
v = QVariant(editor->property(n).userType(), (const void *)0);
editor->setProperty(n, v);
editor->setProperty(n, editor->property(n));
}
#endif
}
@ -496,10 +478,7 @@ void QStyledItemDelegate::setModelData(QWidget *editor,
Q_D(const QStyledItemDelegate);
Q_ASSERT(model);
Q_ASSERT(editor);
QByteArray n = editor->metaObject()->userProperty().name();
if (n.isEmpty())
n = d->editorFactory()->valuePropertyName(
static_cast<QVariant::Type>(model->data(index, Qt::EditRole).userType()));
QByteArray n = d->editorFactory()->valuePropertyName(model->data(index, Qt::EditRole).type());
if (!n.isEmpty())
model->setData(index, editor->property(n), Qt::EditRole);
#endif

View file

@ -46,7 +46,7 @@ class Q_GUI_EXPORT QAction : public QObject
Q_ENUMS(MenuRole)
Q_ENUMS(Priority)
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY changed)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY changed)
Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY changed)
Q_PROPERTY(QString text READ text WRITE setText NOTIFY changed)

View file

@ -98,9 +98,9 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(QRect normalGeometry READ normalGeometry)
Q_PROPERTY(int x READ x)
Q_PROPERTY(int y READ y)
Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false)
Q_PROPERTY(QPoint pos READ pos WRITE move)
Q_PROPERTY(QSize frameSize READ frameSize)
Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false)
Q_PROPERTY(QSize size READ size WRITE resize)
Q_PROPERTY(int width READ width)
Q_PROPERTY(int height READ height)
Q_PROPERTY(QRect rect READ rect)
@ -109,10 +109,10 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false)
Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false)
Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false)
Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false)
Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth)
Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight)
Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth)
Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight)
Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)
Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)
Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
@ -125,19 +125,19 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)
Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)
Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible)
Q_PROPERTY(bool minimized READ isMinimized)
Q_PROPERTY(bool maximized READ isMaximized)
Q_PROPERTY(bool fullScreen READ isFullScreen)
Q_PROPERTY(QSize sizeHint READ sizeHint)
Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)
Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle DESIGNABLE isWindow)
Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon DESIGNABLE isWindow)
Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText DESIGNABLE isWindow)
Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity DESIGNABLE isWindow)
Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified DESIGNABLE isWindow)
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon)
Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText)
Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity)
Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified)
#ifndef QT_NO_TOOLTIP
Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
#endif

View file

@ -59,7 +59,7 @@ class Q_GUI_EXPORT QTextControl : public QObject
Q_OBJECT
Q_DECLARE_PRIVATE(QTextControl)
#ifndef QT_NO_TEXTHTMLPARSER
Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true)
Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged)
#endif
Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)

View file

@ -67,7 +67,7 @@ class Q_GUI_EXPORT QTextDocument : public QObject
{
Q_OBJECT
Q_PROPERTY(bool undoRedoEnabled READ isUndoRedoEnabled WRITE setUndoRedoEnabled)
Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false)
Q_PROPERTY(bool modified READ isModified WRITE setModified)
Q_PROPERTY(QSizeF pageSize READ pageSize WRITE setPageSize)
Q_PROPERTY(QFont defaultFont READ defaultFont WRITE setDefaultFont)
Q_PROPERTY(QSizeF size READ size)

View file

@ -44,12 +44,12 @@ class Q_GUI_EXPORT QAbstractButton : public QWidget
Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut)
#endif
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat)
Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive)
Q_PROPERTY(int autoRepeatDelay READ autoRepeatDelay WRITE setAutoRepeatDelay)
Q_PROPERTY(int autoRepeatInterval READ autoRepeatInterval WRITE setAutoRepeatInterval)
Q_PROPERTY(bool down READ isDown WRITE setDown DESIGNABLE false)
Q_PROPERTY(bool down READ isDown WRITE setDown)
public:
explicit QAbstractButton(QWidget* parent = nullptr);

View file

@ -38,13 +38,13 @@ class Q_GUI_EXPORT QAbstractSlider : public QWidget
Q_PROPERTY(int maximum READ maximum WRITE setMaximum)
Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(int pageStep READ pageStep WRITE setPageStep)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
Q_PROPERTY(int sliderPosition READ sliderPosition WRITE setSliderPosition NOTIFY sliderMoved)
Q_PROPERTY(bool tracking READ hasTracking WRITE setTracking)
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation)
Q_PROPERTY(bool invertedAppearance READ invertedAppearance WRITE setInvertedAppearance)
Q_PROPERTY(bool invertedControls READ invertedControls WRITE setInvertedControls)
Q_PROPERTY(bool sliderDown READ isSliderDown WRITE setSliderDown DESIGNABLE false)
Q_PROPERTY(bool sliderDown READ isSliderDown WRITE setSliderDown)
public:
explicit QAbstractSlider(QWidget *parent=0);

View file

@ -45,7 +45,7 @@ class Q_GUI_EXPORT QComboBox : public QWidget
Q_ENUMS(SizeAdjustPolicy)
Q_PROPERTY(bool editable READ isEditable WRITE setEditable)
Q_PROPERTY(int count READ count)
Q_PROPERTY(QString currentText READ currentText USER true)
Q_PROPERTY(QString currentText READ currentText)
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems)
Q_PROPERTY(int maxCount READ maxCount WRITE setMaxCount)
@ -55,8 +55,8 @@ class Q_GUI_EXPORT QComboBox : public QWidget
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
#ifndef QT_NO_COMPLETER
Q_PROPERTY(bool autoCompletion READ autoCompletion WRITE setAutoCompletion DESIGNABLE false)
Q_PROPERTY(Qt::CaseSensitivity autoCompletionCaseSensitivity READ autoCompletionCaseSensitivity WRITE setAutoCompletionCaseSensitivity DESIGNABLE false)
Q_PROPERTY(bool autoCompletion READ autoCompletion WRITE setAutoCompletion)
Q_PROPERTY(Qt::CaseSensitivity autoCompletionCaseSensitivity READ autoCompletionCaseSensitivity WRITE setAutoCompletionCaseSensitivity)
#endif // QT_NO_COMPLETER
Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled)

View file

@ -35,7 +35,7 @@ class Q_GUI_EXPORT QCommandLinkButton: public QPushButton
Q_OBJECT
Q_PROPERTY(QString description READ description WRITE setDescription)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat DESIGNABLE false)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
public:
explicit QCommandLinkButton(QWidget *parent=0);

View file

@ -33,7 +33,7 @@ class QDateTimeEditPrivate;
class Q_GUI_EXPORT QDateTimeEdit : public QWidget
{
Q_OBJECT
Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged USER true)
Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged)
Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged)
Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged)
Q_PROPERTY(QDateTime maximumDateTime READ maximumDateTime)

View file

@ -44,7 +44,7 @@ class Q_GUI_EXPORT QDockWidget : public QWidget
Q_PROPERTY(DockWidgetFeatures features READ features WRITE setFeatures NOTIFY featuresChanged)
Q_PROPERTY(Qt::DockWidgetAreas allowedAreas READ allowedAreas
WRITE setAllowedAreas NOTIFY allowedAreasChanged)
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle DESIGNABLE true)
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
public:
explicit QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = 0);

View file

@ -40,7 +40,7 @@ class Q_GUI_EXPORT QFrame : public QWidget
Q_PROPERTY(int lineWidth READ lineWidth WRITE setLineWidth)
Q_PROPERTY(int midLineWidth READ midLineWidth WRITE setMidLineWidth)
Q_PROPERTY(int frameWidth READ frameWidth)
Q_PROPERTY(QRect frameRect READ frameRect WRITE setFrameRect DESIGNABLE false)
Q_PROPERTY(QRect frameRect READ frameRect WRITE setFrameRect)
public:
explicit QFrame(QWidget* parent = nullptr, Qt::WindowFlags f = 0);

View file

@ -40,7 +40,7 @@ class Q_GUI_EXPORT QGroupBox : public QWidget
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY toggled)
public:
explicit QGroupBox(QWidget* parent = nullptr);
explicit QGroupBox(const QString &title, QWidget* parent = nullptr);

View file

@ -46,14 +46,14 @@ class Q_GUI_EXPORT QLineEdit : public QWidget
Q_ENUMS(EchoMode)
Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask)
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged USER true)
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
Q_PROPERTY(int maxLength READ maxLength WRITE setMaxLength)
Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode)
Q_PROPERTY(QString displayText READ displayText)
Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition)
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
Q_PROPERTY(bool modified READ isModified WRITE setModified DESIGNABLE false)
Q_PROPERTY(bool modified READ isModified WRITE setModified)
Q_PROPERTY(bool hasSelectedText READ hasSelectedText)
Q_PROPERTY(QString selectedText READ selectedText)
Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled)

View file

@ -52,7 +52,7 @@ class Q_GUI_EXPORT QPlainTextEdit : public QAbstractScrollArea
Q_PROPERTY(LineWrapMode lineWrapMode READ lineWrapMode WRITE setLineWrapMode)
Q_PROPERTY(QTextOption::WrapMode wordWrapMode READ wordWrapMode WRITE setWordWrapMode)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged USER true)
Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText NOTIFY textChanged)
Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth)

View file

@ -41,7 +41,7 @@ class Q_GUI_EXPORT QSpinBox : public QAbstractSpinBox
Q_PROPERTY(int minimum READ minimum WRITE setMinimum)
Q_PROPERTY(int maximum READ maximum WRITE setMaximum)
Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
explicit QSpinBox(QWidget *parent = nullptr);
@ -100,7 +100,7 @@ class Q_GUI_EXPORT QDoubleSpinBox : public QAbstractSpinBox
Q_PROPERTY(double minimum READ minimum WRITE setMinimum)
Q_PROPERTY(double maximum READ maximum WRITE setMaximum)
Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged USER true)
Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged)
public:
explicit QDoubleSpinBox(QWidget *parent = nullptr);

View file

@ -39,8 +39,8 @@ class Q_GUI_EXPORT QTextBrowser : public QTextEdit
Q_PROPERTY(QUrl source READ source WRITE setSource)
Q_OVERRIDE(bool modified SCRIPTABLE false)
Q_OVERRIDE(bool readOnly DESIGNABLE false SCRIPTABLE false)
Q_OVERRIDE(bool undoRedoEnabled DESIGNABLE false SCRIPTABLE false)
Q_OVERRIDE(bool readOnly SCRIPTABLE false)
Q_OVERRIDE(bool undoRedoEnabled SCRIPTABLE false)
Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
Q_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks)
Q_PROPERTY(bool openLinks READ openLinks WRITE setOpenLinks)

View file

@ -50,9 +50,9 @@ class Q_GUI_EXPORT QTextEdit : public QAbstractScrollArea
Q_PROPERTY(int lineWrapColumnOrWidth READ lineWrapColumnOrWidth WRITE setLineWrapColumnOrWidth)
Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)
#ifndef QT_NO_TEXTHTMLPARSER
Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged USER true)
Q_PROPERTY(QString html READ toHtml WRITE setHtml NOTIFY textChanged)
#endif
Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText DESIGNABLE false)
Q_PROPERTY(QString plainText READ toPlainText WRITE setPlainText)
Q_PROPERTY(bool overwriteMode READ overwriteMode WRITE setOverwriteMode)
Q_PROPERTY(int tabStopWidth READ tabStopWidth WRITE setTabStopWidth)
Q_PROPERTY(bool acceptRichText READ acceptRichText WRITE setAcceptRichText)

View file

@ -41,18 +41,11 @@ class Q_GUI_EXPORT QToolBar : public QWidget
{
Q_OBJECT
Q_PROPERTY(bool movable READ isMovable WRITE setMovable
DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) != 0)
NOTIFY movableChanged)
Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas
DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) != 0)
NOTIFY allowedAreasChanged)
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation
DESIGNABLE (qobject_cast<QMainWindow *>(parentWidget()) == 0)
NOTIFY orientationChanged)
Q_PROPERTY(bool movable READ isMovable WRITE setMovable NOTIFY movableChanged)
Q_PROPERTY(Qt::ToolBarAreas allowedAreas READ allowedAreas WRITE setAllowedAreas NOTIFY allowedAreasChanged)
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged)
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle
NOTIFY toolButtonStyleChanged)
Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle NOTIFY toolButtonStyleChanged)
Q_PROPERTY(bool floating READ isFloating)
Q_PROPERTY(bool floatable READ isFloatable WRITE setFloatable)

View file

@ -153,14 +153,10 @@ void Generator::generateCode()
int methodCount = cdef->signalList.count() + cdef->slotList.count() + cdef->methodList.count();
fprintf(out, " %4d, %4d, // methods\n", methodCount, methodCount ? index : 0);
index += methodCount * 5;
if (cdef->revisionedMethods)
index += methodCount;
fprintf(out, " %4d, %4d, // properties\n", cdef->propertyList.count(), cdef->propertyList.count() ? index : 0);
index += cdef->propertyList.count() * 3;
if(cdef->notifyableProperties)
index += cdef->propertyList.count();
if (cdef->revisionedProperties)
index += cdef->propertyList.count();
fprintf(out, " %4d, %4d, // enums/sets\n", cdef->enumList.count(), cdef->enumList.count() ? index : 0);
int enumsIndex = index;
@ -193,15 +189,6 @@ void Generator::generateCode()
//
generateFunctions(cdef->methodList, "method", MethodMethod);
//
// Build method version arrays
//
if (cdef->revisionedMethods) {
generateFunctionRevisions(cdef->signalList, "signal");
generateFunctionRevisions(cdef->slotList, "slot");
generateFunctionRevisions(cdef->methodList, "method");
}
//
// Build property array
//
@ -400,8 +387,6 @@ void Generator::generateFunctions(QList<FunctionDef>& list, const char *functype
flags |= MethodCloned;
if (f.isScriptable)
flags |= MethodScriptable;
if (f.revision > 0)
flags |= MethodRevisioned;
fprintf(out, " %4d, %4d, %4d, %4d, 0x%02x,\n",
strreg(sig.constData()),
strreg(arguments.constData()),
@ -410,16 +395,6 @@ void Generator::generateFunctions(QList<FunctionDef>& list, const char *functype
}
}
void Generator::generateFunctionRevisions(QList<FunctionDef>& list, const char *functype)
{
if (list.count())
fprintf(out, "\n // %ss: revision\n", functype);
for (int i = 0; i < list.count(); ++i) {
const FunctionDef &f = list.at(i);
fprintf(out, " %4d,\n", f.revision);
}
}
void Generator::generateProperties()
{
//
@ -449,42 +424,14 @@ void Generator::generateProperties()
// if (p.override)
// flags |= Override;
if (p.designable.isEmpty())
flags |= ResolveDesignable;
else if (p.designable != "false")
flags |= Designable;
if (p.scriptable.isEmpty())
flags |= ResolveScriptable;
else if (p.scriptable != "false")
flags |= Scriptable;
if (p.stored.isEmpty())
flags |= ResolveStored;
else if (p.stored != "false")
flags |= Stored;
if (p.editable.isEmpty())
flags |= ResolveEditable;
else if (p.editable != "false")
flags |= Editable;
if (p.user.isEmpty())
flags |= ResolveUser;
else if (p.user != "false")
flags |= User;
if (p.notifyId != -1)
flags |= Notify;
if (p.revision > 0)
flags |= Revisioned;
if (p.constant)
flags |= Constant;
if (p.final)
flags |= Final;
fprintf(out, " %4d, %4d, ",
strreg(p.name.constData()),
strreg(p.type.constData()));
@ -505,13 +452,6 @@ void Generator::generateProperties()
p.notifyId);
}
}
if (cdef->revisionedProperties) {
fprintf(out, "\n // properties: revision\n");
for (int i = 0; i < cdef->propertyList.count(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i);
fprintf(out, " %4d,\n", p.revision);
}
}
}
void Generator::generateEnums(int index)
@ -583,21 +523,13 @@ void Generator::generateMetacall()
bool needGet = false;
bool needSet = false;
bool needReset = false;
bool needDesignable = false;
bool needScriptable = false;
bool needStored = false;
bool needEditable = false;
bool needUser = false;
for (int i = 0; i < cdef->propertyList.size(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i);
needGet |= !p.read.isEmpty();
needSet |= !p.write.isEmpty();
needReset |= !p.reset.isEmpty();
needDesignable |= p.designable.endsWith(')');
needScriptable |= p.scriptable.endsWith(')');
needStored |= p.stored.endsWith(')');
needEditable |= p.editable.endsWith(')');
needUser |= p.user.endsWith(')');
}
fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
@ -686,23 +618,6 @@ void Generator::generateMetacall()
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else ");
fprintf(out, "if (_c == QMetaObject::QueryPropertyDesignable) {\n");
if (needDesignable) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.designable.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.designable.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyScriptable) {\n");
if (needScriptable) {
fprintf(out, " switch (_id) {\n");
@ -719,56 +634,6 @@ void Generator::generateMetacall()
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyStored) {\n");
if (needStored) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.stored.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.stored.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyEditable) {\n");
if (needEditable) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.editable.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.editable.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, " else if (_c == QMetaObject::QueryPropertyUser) {\n");
if (needUser) {
fprintf(out, " switch (_id) {\n");
for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
const PropertyDef &p = cdef->propertyList.at(propindex);
if (!p.user.endsWith(')'))
continue;
fprintf(out, " case %d: *static_cast<bool*>(_a[0]) = %s; break;\n",
propindex, p.user.constData());
}
fprintf(out, " }\n");
}
fprintf(out,
" _id -= %d;\n"
" }", cdef->propertyList.count());
fprintf(out, "\n#endif // QT_NO_PROPERTIES");
}
if (methodList.size() || cdef->signalList.size() || cdef->propertyList.size())

View file

@ -37,7 +37,6 @@ public:
private:
void generateClassInfos();
void generateFunctions(QList<FunctionDef> &list, const char *functype, int type);
void generateFunctionRevisions(QList<FunctionDef>& list, const char *functype);
void generateEnums(int index);
void generateProperties();
void generateMetacall();

View file

@ -23,12 +23,12 @@
// DO NOT EDIT.
static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,520,517,0,0,0,0,0,
{0,0,0,0,0,0,0,0,0,512,509,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
520,252,518,521,0,38,239,519,25,26,236,234,30,235,27,237,
512,252,510,513,0,38,239,511,25,26,236,234,30,235,27,237,
22,22,22,22,22,22,22,22,22,22,34,41,23,39,24,43,
0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
8,21,8,8,8,8,8,8,8,8,8,31,522,32,238,8,
8,21,8,8,8,8,8,8,8,8,8,31,514,32,238,8,
0,1,2,3,4,5,6,7,8,9,8,8,10,11,12,13,
14,8,15,16,17,18,19,20,8,8,8,36,245,37,248,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -162,7 +162,7 @@ static const short keyword_trans[][128] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,42,0,0,0,28,0,
525,525,525,525,525,525,525,525,525,525,0,0,0,0,0,0,
517,517,517,517,517,517,517,517,517,517,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -321,7 +321,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,524,0,0,0,0,523,
0,0,0,0,0,0,0,0,0,0,516,0,0,0,0,515,
0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -364,7 +364,7 @@ static const short keyword_trans[][128] = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,439,388,378,383,364,0,448,0,0,0,0,0,358,
370,0,509,436,0,0,0,0,0,0,0,0,0,0,0,0,
370,0,0,436,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@ -926,14 +926,6 @@ static const struct
{CHARACTER, 0, 84, 507, CHARACTER},
{CHARACTER, 0, 89, 508, CHARACTER},
{Q_PRIVATE_PROPERTY_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 510, CHARACTER},
{CHARACTER, 0, 86, 511, CHARACTER},
{CHARACTER, 0, 73, 512, CHARACTER},
{CHARACTER, 0, 83, 513, CHARACTER},
{CHARACTER, 0, 73, 514, CHARACTER},
{CHARACTER, 0, 79, 515, CHARACTER},
{CHARACTER, 0, 78, 516, CHARACTER},
{Q_REVISION_TOKEN, 0, 0, 0, CHARACTER},
{NEWLINE, 0, 0, 0, NOTOKEN},
{QUOTE, 0, 0, 0, NOTOKEN},
{SINGLEQUOTE, 0, 0, 0, NOTOKEN},

View file

@ -74,7 +74,7 @@ bool Moc::parseClassHead(ClassDef *def)
QByteArray name = lexem();
// support "class IDENT name" and "class IDENT(IDENT) name"
// also support "class IDENT name (final|sealed|Q_DECL_FINAL)"
// also support "class IDENT name (final|sealed)"
if (test(LPAREN)) {
until(RPAREN);
if (!test(IDENTIFIER))
@ -82,7 +82,7 @@ bool Moc::parseClassHead(ClassDef *def)
name = lexem();
} else if (test(IDENTIFIER)) {
const QByteArray lex = lexem();
if (lex != "final" && lex != "sealed" && lex != "Q_DECL_FINAL")
if (lex != "final" && lex != "sealed")
name = lex;
}
@ -98,7 +98,7 @@ bool Moc::parseClassHead(ClassDef *def)
if (test(IDENTIFIER)) {
const QByteArray lex = lexem();
if (lex != "final" && lex != "sealed" && lex != "Q_DECL_FINAL")
if (lex != "final" && lex != "sealed")
return false;
}
@ -316,23 +316,6 @@ bool Moc::testFunctionAttribute(Token tok, FunctionDef *def)
return false;
}
bool Moc::testFunctionRevision(FunctionDef *def)
{
if (test(Q_REVISION_TOKEN)) {
next(LPAREN);
QByteArray revision = lexemUntil(RPAREN);
revision.remove(0, 1);
revision.chop(1);
bool ok = false;
def->revision = revision.toInt(&ok);
if (!ok || def->revision < 0)
error("Invalid revision");
return true;
}
return false;
}
// returns false if the function should be ignored
bool Moc::parseFunction(FunctionDef *def, bool inMacro)
{
@ -341,7 +324,7 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro)
//skip modifiers and attributes
while (test(INLINE) || (test(STATIC) && (def->isStatic = true) == true) ||
(test(VIRTUAL) && (def->isVirtual = true) == true) //mark as virtual
|| testFunctionAttribute(def) || testFunctionRevision(def)) {}
|| testFunctionAttribute(def)) {}
bool templateFunction = (lookup() == TEMPLATE);
def->type = parseType();
if (def->type.name.isEmpty()) {
@ -433,7 +416,7 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def)
//skip modifiers and attributes
while (test(EXPLICIT) || test(INLINE) || (test(STATIC) && (def->isStatic = true) == true) ||
(test(VIRTUAL) && (def->isVirtual = true) == true) //mark as virtual
|| testFunctionAttribute(def) || testFunctionRevision(def)) {}
|| testFunctionAttribute(def)) {}
bool tilde = test(TILDE);
def->type = parseType();
if (def->type.name.isEmpty())
@ -698,8 +681,6 @@ void Moc::parse()
funcDef.arguments.removeLast();
def.slotList += funcDef;
}
if (funcDef.revision > 0)
++def.revisionedMethods;
} else if (funcDef.isSignal) {
def.signalList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
@ -707,8 +688,6 @@ void Moc::parse()
funcDef.arguments.removeLast();
def.signalList += funcDef;
}
if (funcDef.revision > 0)
++def.revisionedMethods;
} else if (funcDef.isInvokable) {
def.methodList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
@ -716,8 +695,6 @@ void Moc::parse()
funcDef.arguments.removeLast();
def.methodList += funcDef;
}
if (funcDef.revision > 0)
++def.revisionedMethods;
}
}
} else {
@ -800,18 +777,6 @@ void Moc::generate(FILE *out)
void Moc::parseSlots(ClassDef *def, FunctionDef::Access access)
{
int defaultRevision = -1;
if (test(Q_REVISION_TOKEN)) {
next(LPAREN);
QByteArray revision = lexemUntil(RPAREN);
revision.remove(0, 1);
revision.chop(1);
bool ok = false;
defaultRevision = revision.toInt(&ok);
if (!ok || defaultRevision < 0)
error("Invalid revision");
}
next(COLON);
while (inClass(def) && hasNext()) {
switch (next()) {
@ -837,12 +802,6 @@ void Moc::parseSlots(ClassDef *def, FunctionDef::Access access)
funcDef.access = access;
if (!parseFunction(&funcDef))
continue;
if (funcDef.revision > 0) {
++def->revisionedMethods;
} else if (defaultRevision != -1) {
funcDef.revision = defaultRevision;
++def->revisionedMethods;
}
def->slotList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
funcDef.wasCloned = true;
@ -854,18 +813,6 @@ void Moc::parseSlots(ClassDef *def, FunctionDef::Access access)
void Moc::parseSignals(ClassDef *def)
{
int defaultRevision = -1;
if (test(Q_REVISION_TOKEN)) {
next(LPAREN);
QByteArray revision = lexemUntil(RPAREN);
revision.remove(0, 1);
revision.chop(1);
bool ok = false;
defaultRevision = revision.toInt(&ok);
if (!ok || defaultRevision < 0)
error("Invalid revision");
}
next(COLON);
while (inClass(def) && hasNext()) {
switch (next()) {
@ -893,12 +840,6 @@ void Moc::parseSignals(ClassDef *def)
warning("Signals cannot be declared virtual");
if (funcDef.inlineCode)
error("Not a signal declaration");
if (funcDef.revision > 0) {
++def->revisionedMethods;
} else if (defaultRevision != -1) {
funcDef.revision = defaultRevision;
++def->revisionedMethods;
}
def->signalList += funcDef;
while (funcDef.arguments.size() > 0 && funcDef.arguments.last().isDefault) {
funcDef.wasCloned = true;
@ -913,8 +854,7 @@ void Moc::createPropertyDef(PropertyDef &propDef)
QByteArray type = parseType().name;
if (type.isEmpty())
error();
propDef.designable = propDef.scriptable = propDef.stored = "true";
propDef.user = "false";
propDef.scriptable = "true";
/*
The Q_PROPERTY construct cannot contain any commas, since
commas separate macro arguments. We therefore expect users
@ -941,66 +881,33 @@ void Moc::createPropertyDef(PropertyDef &propDef)
propDef.name = lexem();
while (test(IDENTIFIER)) {
QByteArray l = lexem();
if (l[0] == 'C' && l == "CONSTANT") {
propDef.constant = true;
continue;
} else if(l[0] == 'F' && l == "FINAL") {
propDef.final = true;
continue;
}
QByteArray v, v2;
if (test(LPAREN)) {
v = lexemUntil(RPAREN);
} else if (test(INTEGER_LITERAL)) {
v = lexem();
if (l != "REVISION")
error(1);
} else {
next(IDENTIFIER);
v = lexem();
if (test(LPAREN))
v2 = lexemUntil(RPAREN);
else if (v != "true" && v != "false")
v2 = "()";
}
next(IDENTIFIER);
v = lexem();
if (v != "true" && v != "false")
v2 = "()";
switch (l[0]) {
case 'R':
if (l == "READ")
propDef.read = v;
else if (l == "RESET")
propDef.reset = v + v2;
else if (l == "REVISION") {
bool ok = false;
propDef.revision = v.toInt(&ok);
if (!ok || propDef.revision < 0)
error(1);
} else
else
error(2);
break;
case 'S':
if (l == "SCRIPTABLE")
propDef.scriptable = v + v2;
else if (l == "STORED")
propDef.stored = v + v2;
else
error(2);
break;
case 'W': if (l != "WRITE") error(2);
propDef.write = v;
break;
case 'D': if (l != "DESIGNABLE") error(2);
propDef.designable = v + v2;
break;
case 'E': if (l != "EDITABLE") error(2);
propDef.editable = v + v2;
break;
case 'N': if (l != "NOTIFY") error(2);
propDef.notify = v;
break;
case 'U': if (l != "USER") error(2);
propDef.user = v + v2;
break;
default:
error(2);
}
@ -1012,22 +919,6 @@ void Moc::createPropertyDef(PropertyDef &propDef)
msg += " has no READ accessor function. The property will be invalid.";
warning(msg.constData());
}
if (propDef.constant && !propDef.write.isNull()) {
QByteArray msg;
msg += "Property declaration ";
msg += propDef.name;
msg += " is both WRITEable and CONSTANT. CONSTANT will be ignored.";
propDef.constant = false;
warning(msg.constData());
}
if (propDef.constant && !propDef.notify.isNull()) {
QByteArray msg;
msg += "Property declaration ";
msg += propDef.name;
msg += " is both NOTIFYable and CONSTANT. CONSTANT will be ignored.";
propDef.constant = false;
warning(msg.constData());
}
}
void Moc::parseProperty(ClassDef *def)
@ -1040,8 +931,6 @@ void Moc::parseProperty(ClassDef *def)
if(!propDef.notify.isEmpty())
def->notifyableProperties++;
if (propDef.revision > 0)
++def->revisionedProperties;
def->propertyList += propDef;
}
@ -1068,8 +957,6 @@ void Moc::parsePrivateProperty(ClassDef *def)
if(!propDef.notify.isEmpty())
def->notifyableProperties++;
if (propDef.revision > 0)
++def->revisionedProperties;
def->propertyList += propDef;
}
@ -1219,9 +1106,6 @@ void Moc::parseSlotInPrivate(ClassDef *def, FunctionDef::Access access)
funcDef.arguments.removeLast();
def->slotList += funcDef;
}
if (funcDef.revision > 0)
++def->revisionedMethods;
}
QByteArray Moc::lexemUntil(Token target)

View file

@ -62,10 +62,14 @@ struct ArgumentDef
struct FunctionDef
{
FunctionDef(): returnTypeIsVolatile(false), access(Private), isConst(false), isVirtual(false), isStatic(false),
inlineCode(false), wasCloned(false), isInvokable(false),
isScriptable(false), isSlot(false), isSignal(false),
isConstructor(false), isDestructor(false), isAbstract(false), revision(0) {}
FunctionDef() :
returnTypeIsVolatile(false), access(Private), isConst(false), isVirtual(false), isStatic(false),
inlineCode(false), wasCloned(false), isInvokable(false),
isScriptable(false), isSlot(false), isSignal(false),
isConstructor(false), isDestructor(false), isAbstract(false)
{
}
Type type;
QByteArray normalizedType;
QByteArray tag;
@ -90,17 +94,13 @@ struct FunctionDef
bool isConstructor;
bool isDestructor;
bool isAbstract;
int revision;
};
struct PropertyDef
{
PropertyDef():notifyId(-1), constant(false), final(false), gspec(ValueSpec), revision(0){}
QByteArray name, type, read, write, reset, designable, scriptable, editable, stored, user, notify, inPrivateClass;
PropertyDef():notifyId(-1), gspec(ValueSpec), revision(0){}
QByteArray name, type, read, write, reset, scriptable, notify, inPrivateClass;
int notifyId;
bool constant;
bool final;
enum Specification { ValueSpec, ReferenceSpec, PointerSpec };
Specification gspec;
bool stdCppSet() const {
@ -122,7 +122,7 @@ struct ClassInfoDef
struct ClassDef {
ClassDef():
hasQObject(false), hasQGadget(false), notifyableProperties(0)
, revisionedMethods(0), revisionedProperties(0), begin(0), end(0){}
, begin(0), end(0){}
QByteArray classname;
QByteArray qualified;
QList<QPair<QByteArray, FunctionDef::Access> > superclassList;
@ -147,8 +147,6 @@ struct ClassDef {
QMap<QByteArray, bool> enumDeclarations;
QList<EnumDef> enumList;
QMap<QByteArray, QByteArray> flagAliases;
int revisionedMethods;
int revisionedProperties;
int begin;
int end;
@ -220,7 +218,6 @@ public:
// in FunctionDef accordingly
bool testFunctionAttribute(FunctionDef *def);
bool testFunctionAttribute(Token tok, FunctionDef *def);
bool testFunctionRevision(FunctionDef *def);
void checkSuperClasses(ClassDef *def);
void checkProperties(ClassDef* cdef);

View file

@ -230,7 +230,6 @@ static const Keyword keywords[] = {
{ "Q_SLOT", "Q_SLOT_TOKEN" },
{ "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" },
{ "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" },
{ "Q_REVISION", "Q_REVISION_TOKEN" },
{ "\n", "NEWLINE" },
{ "\"", "QUOTE" },
{ "\'", "SINGLEQUOTE" },

View file

@ -397,15 +397,11 @@ void tst_QDBusMetaObject::types()
QVERIFY(propIdx != -1);
QMetaProperty constructed = result->property(propIdx);
QCOMPARE(constructed.isDesignable(), expected.isDesignable());
QCOMPARE(constructed.isEditable(), expected.isEditable());
QCOMPARE(constructed.isEnumType(), expected.isEnumType());
QCOMPARE(constructed.isFlagType(), expected.isFlagType());
QCOMPARE(constructed.isReadable(), expected.isReadable());
QCOMPARE(constructed.isResettable(), expected.isResettable());
QCOMPARE(constructed.isScriptable(), expected.isScriptable());
QCOMPARE(constructed.isStored(), expected.isStored());
QCOMPARE(constructed.isUser(), expected.isUser());
QCOMPARE(constructed.isWritable(), expected.isWritable());
QCOMPARE(constructed.typeName(), expected.typeName());
}

View file

@ -90,8 +90,6 @@ class tst_QMetaObject : public QObject
Q_PROPERTY(int value6 READ value6 NOTIFY value6Changed)
Q_PROPERTY(MyStruct value7 READ value7 WRITE setVal7 NOTIFY value7Changed)
Q_PROPERTY(int value8 READ value8)
Q_PROPERTY(int value9 READ value9 CONSTANT)
Q_PROPERTY(int value10 READ value10 FINAL)
public:
enum EnumType { EnumType1 };
@ -121,10 +119,6 @@ public:
int value8() const { return 1; }
int value9() const { return 1; }
int value10() const { return 1; }
QList<QVariant> value4;
QVariantList value5;
@ -149,8 +143,6 @@ private slots:
void customPropertyType();
void checkScope();
void propertyNotify();
void propertyConstant();
void propertyFinal();
void stdSet();
void classInfo();
@ -974,32 +966,6 @@ void tst_QMetaObject::propertyNotify()
QCOMPARE(signal.signature(), (const char *)0);
}
void tst_QMetaObject::propertyConstant()
{
const QMetaObject *mo = metaObject();
QMetaProperty prop = mo->property(mo->indexOfProperty("value8"));
QVERIFY(prop.isValid());
QVERIFY(!prop.isConstant());
prop = mo->property(mo->indexOfProperty("value9"));
QVERIFY(prop.isValid());
QVERIFY(prop.isConstant());
}
void tst_QMetaObject::propertyFinal()
{
const QMetaObject *mo = metaObject();
QMetaProperty prop = mo->property(mo->indexOfProperty("value10"));
QVERIFY(prop.isValid());
QVERIFY(prop.isFinal());
prop = mo->property(mo->indexOfProperty("value9"));
QVERIFY(prop.isValid());
QVERIFY(!prop.isFinal());
}
class ClassInfoTestObjectA : public QObject
{
Q_OBJECT