Serialize/deserialize for copy/paste.

This commit is contained in:
Jim Evins
2017-03-14 23:29:46 -04:00
parent fd79d7c6bd
commit c8f7011cd0
6 changed files with 46 additions and 43 deletions
+25 -15
View File
@@ -152,7 +152,25 @@ namespace glabels
return list;
}
return parseObjects( root, DataCache() );
/* Pass 1, extract data nodes to pre-load cache. */
DataCache data;
for ( QDomNode child = root.firstChild(); !child.isNull(); child = child.nextSibling() )
{
if ( child.toElement().tagName() == "Data" )
{
parseDataNode( child.toElement(), data );
}
}
/* Pass 2, now extract objects. */
for ( QDomNode child = root.firstChild(); !child.isNull(); child = child.nextSibling() )
{
if ( child.toElement().tagName() == "Objects" )
{
list = parseObjectsNode( child.toElement(), data );
}
}
return list;
}
@@ -244,7 +262,11 @@ namespace glabels
}
else if ( tagName == "Objects" )
{
parseObjectsNode( child.toElement(), data, label );
QList<LabelModelObject*> list = parseObjectsNode( child.toElement(), data );
foreach ( LabelModelObject* object, list )
{
label->addObject( object );
}
}
else if ( tagName == "Merge" )
{
@@ -266,7 +288,7 @@ namespace glabels
QList<LabelModelObject*>
XmlLabelParser::parseObjects( const QDomElement &node, const DataCache& data )
XmlLabelParser::parseObjectsNode( const QDomElement &node, const DataCache& data )
{
QList<LabelModelObject*> list;
@@ -310,18 +332,6 @@ namespace glabels
}
void
XmlLabelParser::parseObjectsNode( const QDomElement &node, const DataCache& data, LabelModel* label )
{
QList<LabelModelObject*> list = parseObjects( node, data );
foreach ( LabelModelObject* object, list )
{
label->addObject( object );
}
}
LabelModelBoxObject*
XmlLabelParser::parseObjectBoxNode( const QDomElement &node )
{