ValueNodePtr Archive::getItemId(Item* item) const { if(shared){ int i = 0; Item* mainItem = item; while(mainItem->isSubItem()){ ++i; mainItem = mainItem->parentItem(); } ItemToIdMap::const_iterator p = shared->itemToIdMap.find(mainItem); if(p != shared->itemToIdMap.end()){ const int id = p->second; if(i == 0){ return new ScalarNode(id); } else { ListingPtr idPath = new Listing(i + 1); idPath->setFlowStyle(true); while(item->isSubItem()){ idPath->write(i--, item->name(), DOUBLE_QUOTED); item = item->parentItem(); } idPath->write(0, id); return idPath; } } } return 0; }
void ItemTreeViewImpl::storeExpandedItems(Archive& archive) { ListingPtr expanded = new Listing(); expanded->setFlowStyle(true); storeExpandedItemsSub(invisibleRootItem(), archive, expanded); if(!expanded->empty()){ archive.insert("expanded", expanded); } }
void ItemTreeViewImpl::storeItemIds(Archive& archive, const char* key, const ItemList<>& items) { ListingPtr idseq = new Listing(); idseq->setFlowStyle(true); for(size_t i=0; i < items.size(); ++i){ ValueNodePtr id = archive.getItemId(items[i]); if(id){ idseq->append(id); } } if(!idseq->empty()){ archive.insert(key, idseq); } }