/** * Writes the attributed object id, comments, and artifacts. */ void Translator::WriteAttributedObject(const AttributedObject& aobj, Context& ctxt, tinyxml2::XMLElement & elem, bool bIdAttributeRequired) { //Write the ID. if( aobj.Id().length() > 0 ) elem.SetAttribute( "id", aobj.Id().c_str()); else if( bIdAttributeRequired ) throw GnssMetadata::TranslationException( "Required id attribute not defined."); //Write the comments. CommentList::const_iterator citer = aobj.Comments().begin(); for(; citer != aobj.Comments().end(); citer++) { XMLElement* pec = elem.GetDocument()->NewElement( "comment"); const Comment& cmt = *citer; const char* szFormat = (cmt.Format() == Comment::text) ? "text":"html"; pec->SetAttribute("format",szFormat); pec->SetText( cmt.Value().c_str()); elem.InsertEndChild(pec); } //Write the Artifacts. AnyUriList::const_iterator aiter = aobj.Artifacts().begin(); for(; aiter != aobj.Artifacts().end(); aiter++) { XMLElement* pec = elem.GetDocument()->NewElement( "artifact"); pec->SetText( aiter->Value().c_str()); elem.InsertEndChild(pec); } }
inline void setAttribute(tinyxml2::XMLElement& elt, const char* name, const T& value) { elt.SetAttribute(name, value); }
inline void setAttribute(tinyxml2::XMLElement& elt, const char* name, const std::string& value) { elt.SetAttribute(name, value.c_str()); }
void UIAnimation::Save(tinyxml2::XMLElement& elem) { if (mGlobalAnim){ elem.SetAttribute("globalName", mName.c_str()); } else { elem.SetAttribute("id", mID); elem.SetAttribute("name", mName.c_str()); elem.SetAttribute("length", mLength); elem.SetAttribute("loop", mLoop); if (!mKeyTextColor.empty()){ auto textColorElem = elem.GetDocument()->NewElement("TextColor"); elem.InsertEndChild(textColorElem); for (auto& it : mKeyTextColor) { auto keyelem = textColorElem->GetDocument()->NewElement("key"); textColorElem->InsertEndChild(keyelem); keyelem->SetAttribute("time", it.first); keyelem->SetAttribute("color", StringMathConverter::ToString(it.second).c_str()); } } if (!mKeyBackColor.empty()){ auto backColorElem = elem.GetDocument()->NewElement("BackColor"); elem.InsertEndChild(backColorElem); for (auto& it : mKeyBackColor) { auto keyelem = backColorElem->GetDocument()->NewElement("key"); backColorElem->InsertEndChild(keyelem); keyelem->SetAttribute("time", it.first); keyelem->SetAttribute("color", StringMathConverter::ToString(it.second).c_str()); } } if (!mKeyMaterialColor.empty()){ auto materialColorElem = elem.GetDocument()->NewElement("MaterialColor"); elem.InsertEndChild(materialColorElem); for (auto& it : mKeyMaterialColor) { auto keyelem = materialColorElem->GetDocument()->NewElement("key"); materialColorElem->InsertEndChild(keyelem); keyelem->SetAttribute("time", it.first); keyelem->SetAttribute("color", StringMathConverter::ToString(it.second).c_str()); } } if (!mKeyPos.empty()){ auto posElem = elem.GetDocument()->NewElement("Pos"); elem.InsertEndChild(posElem); for (auto& it : mKeyPos) { auto keyelem = posElem->GetDocument()->NewElement("key"); posElem->InsertEndChild(keyelem); keyelem->SetAttribute("time", it.first); keyelem->SetAttribute("pos", StringMathConverter::ToString(it.second).c_str()); } } if (!mKeyScale.empty()){ auto scaleElem = elem.GetDocument()->NewElement("Scale"); elem.InsertEndChild(scaleElem); for (auto& it : mKeyScale) { auto keyelem = scaleElem->GetDocument()->NewElement("key"); scaleElem->InsertEndChild(keyelem); keyelem->SetAttribute("time", it.first); keyelem->SetAttribute("scale", StringMathConverter::ToString(it.second).c_str()); } } if (!mKeyAlpha.empty()){ auto alphaElem = elem.GetDocument()->NewElement("Alpha"); elem.InsertEndChild(alphaElem); for (auto& it : mKeyAlpha) { auto keyelem = alphaElem->GetDocument()->NewElement("key"); alphaElem->InsertEndChild(keyelem); keyelem->SetAttribute("time", it.first); keyelem->SetAttribute("alpha", StringConverter::ToString(it.second).c_str()); } } } }