Read/write of Color and Image paint working.

This commit is contained in:
Tats
2016-01-21 20:50:44 -05:00
parent 2208468f4e
commit b9f2c80a19
9 changed files with 731 additions and 490 deletions
+86
View File
@@ -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";
}