mirror of
https://github.com/mapmapteam/mapmap.git
synced 2026-06-16 12:33:19 +02:00
Read/write of Color and Image paint working.
This commit is contained in:
+86
@@ -41,3 +41,89 @@ Element::~Element() {
|
||||
_allocator->free(_id);
|
||||
}
|
||||
|
||||
|
||||
void Element::read(const QDomElement& obj)
|
||||
{
|
||||
QList<QString> attributeNames = _propertiesAttributes();
|
||||
|
||||
// Fill up properties.
|
||||
int count = metaObject()->propertyCount();
|
||||
for (int i=0; i<count; ++i) {
|
||||
// Get property/tag.
|
||||
QMetaProperty property = metaObject()->property(i);
|
||||
|
||||
// If property is writable, try to find it and rewrite it.
|
||||
if (property.isWritable())
|
||||
{
|
||||
// Name of property.
|
||||
const char* propertyName = property.name();
|
||||
|
||||
// Always ignore objectName default property.
|
||||
if (QString(propertyName) == QString("objectName"))
|
||||
continue;
|
||||
|
||||
// Check in attributes.
|
||||
else if (attributeNames.contains(propertyName))
|
||||
{
|
||||
if (obj.hasAttribute(propertyName))
|
||||
setProperty(propertyName, obj.attribute(propertyName));
|
||||
}
|
||||
|
||||
// Check in children.
|
||||
else
|
||||
{
|
||||
// Find element.
|
||||
QDomElement propertyElem = obj.firstChildElement(propertyName);
|
||||
if (!propertyElem.isNull())
|
||||
{
|
||||
// Set property.
|
||||
setProperty(propertyName, propertyElem.text());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Element::write(QDomElement& obj)
|
||||
{
|
||||
QList<QString> attributeNames = _propertiesAttributes();
|
||||
|
||||
// Write up classname.
|
||||
obj.setAttribute("className", metaObject()->className());
|
||||
|
||||
// Fill up properties.
|
||||
int count = metaObject()->propertyCount();
|
||||
for (int i=0; i<count; ++i) {
|
||||
// Get property/tag.
|
||||
QMetaProperty property = metaObject()->property(i);
|
||||
|
||||
// If property is writable, try to find it and rewrite it.
|
||||
if (property.isWritable() && property.isReadable())
|
||||
{
|
||||
// Name of property.
|
||||
const char* propertyName = property.name();
|
||||
qDebug() << "Read " << propertyName << " : " << property.read(this) << endl;
|
||||
QString propertyValue = property.read(this).toString();
|
||||
|
||||
// Add to attributes.
|
||||
if (attributeNames.contains(propertyName))
|
||||
{
|
||||
obj.setAttribute(propertyName, propertyValue);
|
||||
}
|
||||
|
||||
// Add to children.
|
||||
else
|
||||
{
|
||||
QDomElement propertyNode = obj.ownerDocument().createElement(propertyName);
|
||||
QDomText text = obj.ownerDocument().createTextNode(propertyValue);
|
||||
propertyNode.appendChild(text);
|
||||
obj.appendChild(propertyNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QList<QString> Element::_propertiesAttributes() const
|
||||
{
|
||||
return QList<QString>() << "name" << "locked";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user