#include <QtCore/qmetaobject.h>
#include <QtCore/qbitarray.h>
#include <QtCore/qreadwritelock.h>
+#include <QtCore/private/qmetaobject_p.h>
+
#include <qmetatype.h>
#include <qobjectdefs.h>
#include <qdatetime.h>
#include <qstringlist.h>
#include <qvector.h>
#include <qlocale.h>
-#include <QtCore/qcryptographichash.h>
#include <QtDeclarative/qjsvalue.h>
#include <ctype.h>
QList<QDeclarativeType *> types;
typedef QHash<int, QDeclarativeType *> Ids;
Ids idToType;
- typedef QHash<QByteArray, QDeclarativeType *> Names;
+ typedef QHash<QString, QDeclarativeType *> Names;
Names nameToType;
typedef QHash<const QMetaObject *, QDeclarativeType *> MetaObjects;
MetaObjects metaObjectToType;
bool m_isInterface : 1;
const char *m_iid;
QString m_module;
- QByteArray m_name;
+ QString m_name;
QString m_elementName;
int m_version_maj;
int m_version_min;
QDeclarativeType::QDeclarativeType(int index, const QDeclarativePrivate::RegisterType &type)
: d(new QDeclarativeTypePrivate)
{
- QByteArray name = type.uri;
- if (type.uri) name += '/';
- name += type.elementName;
+ QString name = QString::fromUtf8(type.uri);
+ if (type.uri) name += QLatin1Char('/');
+ name += QString::fromUtf8(type.elementName);
d->m_module = QString::fromUtf8(type.uri);
d->m_name = name;
}
}
+static bool isPropertyRevisioned(const QMetaObject *mo, int index)
+{
+ int i = index;
+ i -= mo->propertyOffset();
+ if (i < 0 && mo->d.superdata)
+ return isPropertyRevisioned(mo->d.superdata, index);
+
+ const QMetaObjectPrivate *mop = reinterpret_cast<const QMetaObjectPrivate*>(mo->d.data);
+ if (i >= 0 && i < mop->propertyCount) {
+ int handle = mop->propertyData + 3*i;
+ int flags = mo->d.data[handle + 2];
+
+ return (flags & Revisioned);
+ }
+
+ return false;
+}
+
void QDeclarativeTypePrivate::init() const
{
if (m_isSetup) return;
mo = m_metaObjects.first().metaObject;
for (int ii = 0; !m_containsRevisionedAttributes && ii < mo->propertyCount(); ++ii) {
- if (mo->property(ii).revision() != 0)
+ if (isPropertyRevisioned(mo, ii))
m_containsRevisionedAttributes = true;
}
const QString &QDeclarativeType::elementName() const
{
if (d->m_elementName.isEmpty()) {
- QByteArray n = qmlTypeName();
- int idx = n.lastIndexOf('/');
- d->m_elementName = QString::fromUtf8(n.mid(idx + 1));
+ QString n = qmlTypeName();
+ int idx = n.lastIndexOf(QLatin1Char('/'));
+ d->m_elementName = n.mid(idx + 1);
}
return d->m_elementName;
}
-const QByteArray &QDeclarativeType::qmlTypeName() const
+const QString &QDeclarativeType::qmlTypeName() const
{
return d->m_name;
}
return -1;
}
-bool QDeclarativeMetaType::isAnyModule(const QByteArray &module)
-{
- QDeclarativeMetaTypeData *data = metaTypeData();
-
- QDeclarativeMetaTypeData::ModuleInfoHash::Iterator it = data->modules.begin();
- while (it != data->modules.end()) {
- if (it.key().first == module)
- return true;
- ++it;
- }
-
- return false;
-}
-
/*
Returns true if a module \a uri of any version is installed.
*/
Returns the type (if any) of URI-qualified named \a name in version specified
by \a version_major and \a version_minor.
*/
-QDeclarativeType *QDeclarativeMetaType::qmlType(const QByteArray &name, int version_major, int version_minor)
+QDeclarativeType *QDeclarativeMetaType::qmlType(const QString &name, int version_major, int version_minor)
{
Q_ASSERT(version_major >= 0 && version_minor >= 0);
QReadLocker lock(metaTypeDataLock());
QDeclarativeMetaTypeData::Names::ConstIterator it = data->nameToType.find(name);
while (it != data->nameToType.end()) {
// XXX version_major<0 just a kludge for QDeclarativePropertyPrivate::initProperty
- if (version_major<0 || (*it)->availableInVersion(version_major,version_minor))
+ if (it.key() == name && (version_major<0 || (*it)->availableInVersion(version_major,version_minor)))
return (*it);
++it;
}
/*!
Returns the list of registered QML type names.
*/
-QList<QByteArray> QDeclarativeMetaType::qmlTypeNames()
+QList<QString> QDeclarativeMetaType::qmlTypeNames()
{
QReadLocker lock(metaTypeDataLock());
QDeclarativeMetaTypeData *data = metaTypeData();
#include <QtGui/qbrush.h>
#include <QtGui/qcolor.h>
#include <QtGui/qpalette.h>
-#include <QtGui/qicon.h>
#include <QtGui/qimage.h>
#include <QtGui/qpolygon.h>
#include <QtGui/qregion.h>
#include <QtGui/qbitmap.h>
#include <QtGui/qcursor.h>
-#include <QtGui/qsizepolicy.h>
#include <QtGui/qkeysequence.h>
#include <QtGui/qpen.h>
case QMetaType::QBrush:
case QMetaType::QColor:
case QMetaType::QPalette:
- case QMetaType::QIcon:
case QMetaType::QImage:
case QMetaType::QPolygon:
case QMetaType::QRegion:
#ifndef QT_NO_CURSOR
case QMetaType::QCursor:
#endif
- case QMetaType::QSizePolicy:
case QMetaType::QKeySequence:
case QMetaType::QPen:
case QMetaType::QTextLength:
case QMetaType::QPalette:
*static_cast<NS(QPalette) *>(data) = *static_cast<const NS(QPalette)*>(copy);
return true;
- case QMetaType::QIcon:
- *static_cast<NS(QIcon) *>(data) = *static_cast<const NS(QIcon)*>(copy);
- return true;
case QMetaType::QImage:
*static_cast<NS(QImage) *>(data) = *static_cast<const NS(QImage)*>(copy);
return true;
*static_cast<NS(QCursor) *>(data) = *static_cast<const NS(QCursor)*>(copy);
return true;
#endif
- case QMetaType::QSizePolicy:
- *static_cast<NS(QSizePolicy) *>(data) = *static_cast<const NS(QSizePolicy)*>(copy);
- return true;
case QMetaType::QKeySequence:
*static_cast<NS(QKeySequence) *>(data) = *static_cast<const NS(QKeySequence)*>(copy);
return true;
case QMetaType::QPalette:
*static_cast<NS(QPalette) *>(data) = NS(QPalette)();
return true;
- case QMetaType::QIcon:
- *static_cast<NS(QIcon) *>(data) = NS(QIcon)();
- return true;
case QMetaType::QImage:
*static_cast<NS(QImage) *>(data) = NS(QImage)();
return true;
*static_cast<NS(QCursor) *>(data) = NS(QCursor)();
return true;
#endif
- case QMetaType::QSizePolicy:
- *static_cast<NS(QSizePolicy) *>(data) = NS(QSizePolicy)();
- return true;
case QMetaType::QKeySequence:
*static_cast<NS(QKeySequence) *>(data) = NS(QKeySequence)();
return true;