示例#1
0
QDomNamedNodeMap QDomDocumentProto::attributes() const
{
    QDomDocument *item = qscriptvalue_cast<QDomDocument*>(thisObject());
    if (item)
        return item->attributes();
    return QDomNamedNodeMap();
}
bool MoDeL1Parser::parse(DesignerModelComponent* model, QDomDocument& doc)
{
	QList<parseTask> taskList;
	taskList.push_back(parseTask(QDomElement(), model->getEngine()->globalObject(), 0));
	size_t curTask = 0;
	while(curTask<(size_t)taskList.size())
	{
		switch(taskList[curTask].taskHint)
		{
		case 0:   //
			{
				//defaultAction
				//standardObject
				QDomDocument curElem = doc;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="MoDeL")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 1));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
			}
			break;
		case 1:   //#object$standardObject~/model
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="dbInterface")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 2));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = model->getEngine()->globalObject();
				writeValueToModel(newItemValue, curTargetItem, "/model");
			}
			break;
		case 2:   //#object$ignoreThis
			{
				//skipThis
				QScriptValue newItemValue = taskList[curTask].taskParent;
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="input")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 3));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
			}
			break;
		case 3:   //#object$ignoreThis
			{
				//skipThis
				QScriptValue newItemValue = taskList[curTask].taskParent;
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="listOfParameters")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 4));
					}
					else if(childElem.nodeName()=="listOfRules")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 10));
					}
					else if(childElem.nodeName()=="listOfCompartments")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 14));
					}
					else if(childElem.nodeName()=="listOfSpecies")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 21));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
			}
			break;
		case 4:   //#array$createArray~/model/parameters
			{
				//createArray
				QScriptValue newItemValue;
				newItemValue = model->getEngine()->newArray(0);
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="parameter")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 5));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = model->getEngine()->globalObject();
				writeValueToModel(newItemValue, curTargetItem, "/model/parameters");
			}
			break;
		case 5:   //#object$standardObject$appendToArray^
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="id")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 6));
					}
					else if(childElem.nodeName()=="value")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 7));
					}
					else if(childElem.nodeName()=="units")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 8));
					}
					else if(childElem.nodeName()=="constant")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 9));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "");
			}
			break;
		case 6:   //#value^/id
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/id");
			}
			break;
		case 7:   //#value^/value
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/value");
			}
			break;
		case 8:   //#value^/units
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/units");
			}
			break;
		case 9:   //#value^/constant
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/constant");
			}
			break;
		case 10:   //#array$createArray~/model/rules
			{
				//createArray
				QScriptValue newItemValue;
				newItemValue = model->getEngine()->newArray(0);
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="assignmentRule")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 11));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = model->getEngine()->globalObject();
				writeValueToModel(newItemValue, curTargetItem, "/model/rules");
			}
			break;
		case 11:   //#object$standardObject$appendToArray^
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="variable")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 12));
					}
					else if(childElem.nodeName()=="math")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 13));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "");
			}
			break;
		case 12:   //#value$setProperty^/variable
			{
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/variable");
			}
			break;
		case 13:   //#value$setProperty^/function
			{
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/function");
			}
			break;
		case 14:   //#array$createArray~/model/compartments
			{
				//createArray
				QScriptValue newItemValue;
				newItemValue = model->getEngine()->newArray(0);
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="compartment")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 15));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = model->getEngine()->globalObject();
				writeValueToModel(newItemValue, curTargetItem, "/model/compartments");
			}
			break;
		case 15:   //#object$standardObject$appendToArray^
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					if(curElem.attributes().item(attrIndex).nodeName()=="db")
					{
						taskList.push_back(parseTask(curElem, newItemValue, 16));
					}
					else
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="id")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 17));
					}
					else if(childElem.nodeName()=="size")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 18));
					}
					else if(childElem.nodeName()=="outside")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 19));
					}
					else if(childElem.nodeName()=="constant")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 20));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "");
			}
			break;
		case 16:   //#value$getProperty(db)^/*iGame1*/db
			{
				//getProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.attribute("db"));
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/*iGame1*/db");
			}
			break;
		case 17:   //#value^/id
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/id");
			}
			break;
		case 18:   //#value^/size
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/size");
			}
			break;
		case 19:   //#value^/outside
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/outside");
			}
			break;
		case 20:   //#value^/constant
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/constant");
			}
			break;
		case 21:   //#array$createArray~/model/species
			{
				//createArray
				QScriptValue newItemValue;
				newItemValue = model->getEngine()->newArray(0);
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="species")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 22));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = model->getEngine()->globalObject();
				writeValueToModel(newItemValue, curTargetItem, "/model/species");
			}
			break;
		case 22:   //#object$standardObject$appendToArray^
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					if(curElem.attributes().item(attrIndex).nodeName()=="db")
					{
						taskList.push_back(parseTask(curElem, newItemValue, 23));
					}
					else
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="id")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 24));
					}
					else if(childElem.nodeName()=="compartment")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 25));
					}
					else if(childElem.nodeName()=="initialConcentration")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 26));
					}
					else if(childElem.nodeName()=="constant")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 27));
					}
					else if(childElem.nodeName()=="boundaryCondition")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 28));
					}
					else if(childElem.nodeName()=="cnModel")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 29));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "");
			}
			break;
		case 23:   //#value$getProperty(db)^/*iGame1*/db
			{
				//getProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.attribute("db"));
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/*iGame1*/db");
			}
			break;
		case 24:   //#value^/id
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/id");
			}
			break;
		case 25:   //#value^/compartment
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/compartment");
			}
			break;
		case 26:   //#value^/initialConcentration
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/initialConcentration");
			}
			break;
		case 27:   //#value^/constant
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/constant");
			}
			break;
		case 28:   //#value^/boundaryCondition
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/boundaryCondition");
			}
			break;
		case 29:   //#object$standardObject^/*iGame1*
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="listOfChains")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 30));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/*iGame1*");
			}
			break;
		case 30:   //#array$createArray^/chains
			{
				//createArray
				QScriptValue newItemValue;
				newItemValue = model->getEngine()->newArray(0);
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="chain")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 31));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/chains");
			}
			break;
		case 31:   //#object$standardObject$appendToArray^
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="listOfParts")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 32));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "");
			}
			break;
		case 32:   //#array$createArray^/parts
			{
				//createArray
				QScriptValue newItemValue;
				newItemValue = model->getEngine()->newArray(0);
				QDomElement curElem = taskList[curTask].taskElem;
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="part")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 33));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/parts");
			}
			break;
		case 33:   //#object$standardObject$appendToArray^
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					if(childElem.nodeName()=="partReference")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 34));
					}
					else if(childElem.nodeName()=="partLabel")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 35));
					}
					else if(childElem.nodeName()=="partType")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 36));
					}
					else if(childElem.nodeName()=="partCategory")
					{
						taskList.push_back(parseTask(childElem, newItemValue, 37));
					}
					else
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "");
			}
			break;
		case 34:   //#value^/reference
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/reference");
			}
			break;
		case 35:   //#value^/label
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/label");
			}
			break;
		case 36:   //#value^/type
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/type");
			}
			break;
		case 37:   //#value^/category
			{
				//defaultAction
				//setProperty
				QScriptValue newItemValue;
				newItemValue = QScriptValue(taskList[curTask].taskElem.text());
				QScriptValue curTargetItem = taskList[curTask].taskParent;
				writeValueToModel(newItemValue, curTargetItem, "/category");
			}
			break;
		default:
			{
				//standardObject
				QDomElement curElem = taskList[curTask].taskElem;
				//create object.
				QScriptValue newItemValue = model->getEngine()->newObject();

				newItemValue.setProperty("*tag*", curElem.nodeName());
				//[append this Item To *subobjects*]
				appendValueToModel(newItemValue, taskList[curTask].taskParent, "/*subobjects*");

				//[write properties]
				for(int attrIndex = 0 ; attrIndex < curElem.attributes().count(); attrIndex++)
				{
					{
						newItemValue.setProperty(  curElem.attributes().item(attrIndex).nodeName(), curElem.attributes().item(attrIndex).nodeValue());
					}
				}
				//[write children objects]
				for(QDomElement childElem = curElem.firstChildElement();
					!childElem.isNull(); childElem = childElem.nextSiblingElement())
				{
					{
						taskList.push_back(parseTask(childElem, newItemValue, (size_t)-1));
					}
				}
			}
			break;
		};
		curTask++;
	}
	return true;
}