ArchivePtr ItemTreeArchiver::storeIter(ArchivePtr& parentArchive, Item* item) { string pluginName; string className; if(!ItemManager::getClassIdentifier(item, pluginName, className)) { messageView->putln(format(_("\"%1%\" cannot be stored. Its type is not registered.")) % item->name()); return 0; } ArchivePtr archive = new Archive(); archive->inheritSharedInfoFrom(parentArchive); messageView->putln(format(_("Storing %1% \"%2%\"")) % className % item->name()); messageView->flush(); ArchivePtr dataArchive = new Archive(); dataArchive->inheritSharedInfoFrom(parentArchive); if(!item->store(*dataArchive)) { messageView->putln(format(_("\"%1%\" cannot be stored.")) % item->name()); return 0; } archive->registerItemId(item, itemIdCounter); archive->write("id", itemIdCounter); itemIdCounter++; archive->write("name", item->name(), YAML_DOUBLE_QUOTED); archive->write("plugin", pluginName); archive->write("class", className); if(!dataArchive->empty()) { archive->insert("data", dataArchive); } YamlSequencePtr children = new YamlSequence(); for(Item* childItem = item->childItem(); childItem; childItem = childItem->nextItem()) { if(childItem->isSubItem()) { continue; } ArchivePtr childArchive = storeIter(archive, childItem); if(childArchive) { children->append(childArchive); } } if(!children->empty()) { archive->insert("children", children); } return archive; }
void ViewArea::storeAllViewAreaLayouts(ArchivePtr archive) { ListingPtr layouts = new Listing(); for(size_t i=0; i < viewAreas.size(); ++i){ ArchivePtr layout = new Archive(); layout->inheritSharedInfoFrom(*archive); viewAreas[i]->storeLayout(layout); layouts->append(layout); } if(!layouts->empty()){ archive->insert("viewAreas", layouts); } }
bool ViewManager::storeViewStates(ArchivePtr archive, const std::string& key) { // assign view ids first int id = 0; ModuleNameToClassNameToViewInfoMap::iterator p; for(p = moduleNameToClassNameToViewInfoMap.begin(); p != moduleNameToClassNameToViewInfoMap.end(); ++p){ ClassNameToViewInfoMap& viewInfoMap = *p->second; for(ClassNameToViewInfoMap::iterator q = viewInfoMap.begin(); q != viewInfoMap.end(); ++q){ ViewInfoPtr& viewInfo = q->second; InstanceInfoList& instances = viewInfo->instances; for(InstanceInfoList::iterator p = instances.begin(); p != instances.end(); ++p){ archive->registerViewId((*p)->view, id++); } } } ListingPtr viewList = new Listing(); for(p = moduleNameToClassNameToViewInfoMap.begin(); p != moduleNameToClassNameToViewInfoMap.end(); ++p){ const std::string& moduleName = p->first; ClassNameToViewInfoMap& viewInfoMap = *p->second; for(ClassNameToViewInfoMap::iterator q = viewInfoMap.begin(); q != viewInfoMap.end(); ++q){ ViewInfoPtr& viewInfo = q->second; InstanceInfoList& instances = viewInfo->instances; for(InstanceInfoList::iterator p = instances.begin(); p != instances.end(); ++p){ View* view = (*p)->view; ArchivePtr viewArchive = storeView(*archive, moduleName, *viewInfo, view); if(viewArchive){ viewList->append(viewArchive); } } } } if(!viewList->empty()){ archive->insert(key, viewList); return true; } return false; }