diff --git a/src/libs/ivcore/resources/iv_system_attributes.xml b/src/libs/ivcore/resources/iv_system_attributes.xml index ed1cd66f4b95b7f188e120ad5a7194ff52269d85..8c22c2a3d553f4ebeed9de28cd571402d1bb27e3 100644 --- a/src/libs/ivcore/resources/iv_system_attributes.xml +++ b/src/libs/ivcore/resources/iv_system_attributes.xml @@ -1,4 +1,9 @@ -<Attrs version="1.0"> +<Attrs version="1.1"> + <Attr label="id" name="id" visible="false" editable="false"> + <Type> + <String validator="\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\}"/> + </Type> + </Attr> <Attr label="Name" name="name"> <Type> <String validator="[a-zA-Z][a-zA-Z0-9_]*"/> diff --git a/src/libs/shared/veobject.cpp b/src/libs/shared/veobject.cpp index cd9a80ddc9953962e0c4155bf99529ed88779550..8410ceeccd3e51c5cba10d5183aeec03b57b72b5 100644 --- a/src/libs/shared/veobject.cpp +++ b/src/libs/shared/veobject.cpp @@ -21,17 +21,18 @@ #include <QVector> +static const QString ID = QLatin1String("id"); + namespace shared { struct VEObjectPrivate { VEObjectPrivate(const shared::Id &id) - : m_id(id == shared::InvalidId ? shared::createId() : id) - , m_attrs() + : m_attrs() , m_model(nullptr) { + m_attrs.insert(ID, EntityAttribute(ID, id == shared::InvalidId ? shared::createId() : id, EntityAttribute::Type::Attribute)); } - const shared::Id m_id; EntityAttributes m_attrs; VEModel *m_model; }; @@ -50,7 +51,7 @@ VEObject::~VEObject() {} shared::Id VEObject::id() const { - return d->m_id; + return entityAttribute(ID).value<QUuid>(); } EntityAttributes VEObject::entityAttributes() const @@ -99,7 +100,7 @@ QVariant VEObject::entityAttributeValue(const QString &name, const QVariant &def void VEObject::removeEntityAttribute(const QString &attributeName) { - if (!attributeName.isEmpty() && d->m_attrs.remove(attributeName)) + if (!attributeName.isEmpty() && attributeName != ID && d->m_attrs.remove(attributeName)) Q_EMIT attributeChanged(attributeName); } @@ -160,7 +161,9 @@ void VEObject::setAttributeImpl(const QString &name, const QVariant &value, Enti void VEObject::clearAttributes() { + const EntityAttribute attr = d->m_attrs.take(ID); d->m_attrs.clear(); + d->m_attrs.insert(ID, attr); } QVector<qint32> VEObject::coordinatesFromString(const QString &strCoordinates)