コード例 #1
0
ファイル: Archive.cpp プロジェクト: hattorishizuko/choreonoid
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;
}
コード例 #2
0
ファイル: ItemTreeView.cpp プロジェクト: haraisao/choreonoid
void ItemTreeViewImpl::storeExpandedItems(Archive& archive)
{
    ListingPtr expanded = new Listing();
    expanded->setFlowStyle(true);
    storeExpandedItemsSub(invisibleRootItem(), archive, expanded);
    if(!expanded->empty()){
        archive.insert("expanded", expanded);
    }
}
コード例 #3
0
ファイル: ItemTreeView.cpp プロジェクト: haraisao/choreonoid
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);
    }
}