QmlDesigner: Support enumerations for aliases

Task-number: QTCREATORBUG-12229
Change-Id: I36632cdcf16a2d391b653be71f2df58cb8814a21
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
This commit is contained in:
Marco Bubke
2014-07-10 17:14:50 +02:00
parent 6e60c2a0eb
commit fd732ac0cb
2 changed files with 40 additions and 1 deletions

View File

@@ -94,6 +94,8 @@ static bool isPropertyBlackListed(const QmlDesigner::PropertyName &propertyName)
namespace QmlDesigner {
namespace Internal {
QHash<EnumerationName, int> ObjectNodeInstance::m_enumationValueHash;
ObjectNodeInstance::ObjectNodeInstance(QObject *object)
: m_object(object),
m_metaObject(0),
@@ -477,7 +479,7 @@ void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVar
QVariant fixedValue = fixResourcePaths(value);
if (value.canConvert<Enumeration>())
fixedValue = QVariant::fromValue(value.value<Enumeration>().nameToString());
fixedValue = enumationValue(value.value<Enumeration>());
QVariant oldValue = property.read();
if (oldValue.type() == QVariant::Url) {
@@ -1325,6 +1327,39 @@ void ObjectNodeInstance::doComponentCompleteRecursive(QObject *object, NodeInsta
}
}
static QHash<EnumerationName, int> enumationValuesFromMetaEnum(const QMetaEnum &metaEnum)
{
QHash<EnumerationName, int> enumationValues;
for (int index = 0; index < metaEnum.keyCount(); index++) {
EnumerationName enumerationName = EnumerationName(metaEnum.scope()) + "." + metaEnum.key(index);
enumationValues.insert(enumerationName, metaEnum.value(index));
}
return enumationValues;
}
static QHash<EnumerationName, int> collectEnumationValues(const Enumeration &enumeration)
{
QHash<EnumerationName, int> enumationValues;
EnumerationName enumerationScope = enumeration.scope();
const QMetaObject *metaObject = QMetaType::metaObjectForType(QMetaType::type(enumerationScope.data()));
if (metaObject) {
int enumeratorCount = metaObject->enumeratorOffset() + metaObject->enumeratorCount();
for (int index = metaObject->enumeratorOffset(); index < enumeratorCount; index++)
enumationValues.unite(enumationValuesFromMetaEnum(metaObject->enumerator(index)));
}
return enumationValues;
}
QVariant ObjectNodeInstance::enumationValue(const Enumeration &enumeration)
{
EnumerationName enumerationName = enumeration.toEnumerationName();
if (!m_enumationValueHash.contains(enumerationName))
m_enumationValueHash.unite(collectEnumationValues(enumeration));
return QVariant::fromValue(m_enumationValueHash.value(enumerationName));
}
ObjectNodeInstance::Pointer ObjectNodeInstance::parentInstance() const
{
QObject *parentHolder = parent();

View File

@@ -38,6 +38,8 @@
#include <QSharedPointer>
#include <QWeakPointer>
#include "enumeration.h"
QT_BEGIN_NAMESPACE
class QGraphicsItem;
class QQmlContext;
@@ -200,6 +202,7 @@ protected:
QVariant convertSpecialCharacter(const QVariant& value) const;
static QObject *parentObject(QObject *object);
static void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer);
static QVariant enumationValue(const Enumeration &enumeration);
private:
QHash<PropertyName, QVariant> m_resetValueHash;
@@ -217,6 +220,7 @@ private:
qint32 m_instanceId;
bool m_deleteHeldInstance;
bool m_isInLayoutable;
static QHash<EnumerationName, int> m_enumationValueHash;
};
} // namespace Internal