void WorksheetSubStreamHandler::handleObj(ObjRecord* record) { if (!record) return; if (!d->sheet) return; const unsigned long id = record->m_object ? record->m_object->id() : -1; std::cout << "WorksheetSubStreamHandler::handleObj id=" << id << " type=" << (record->m_object ? record->m_object->type() : -1) << std::endl; d->lastOfficeArtObject = 0; bool handled = false; if (record->m_object && d->lastDrawingObject && record->m_object->applyDrawing(*(d->lastDrawingObject))) { handled = true; switch (record->m_object->type()) { case Object::Picture: { MsoDrawingBlibItem *drawing = d->globals->drawing(record->m_object->id()); if(!drawing) { std::cerr << "WorksheetSubStreamHandler: Skipping unknown object of type=" << record->m_object->type() << " with id=" << record->m_object->id() << std::endl; return; } PictureObject* pic = dynamic_cast<PictureObject*>(record->m_object); Q_ASSERT(pic); pic->setFileName(drawing->m_picture.name); Cell *cell = d->sheet->cell(record->m_object->m_colL, record->m_object->m_rwT); cell->addPicture(pic);//(record->m_object, drawing->m_picture); } break; case Object::Chart: { d->charts.push_back(id); } break; case Object::Note: { // a NoteRecord will follow which picks that up. d->noteMap[id] = ++d->noteCount; } break; default: handled = false; } } if (!handled && d->lastDrawingObject) { //Q_ASSERT(!d->globals->drawing(record->m_object->id())); foreach (const MSO::OfficeArtSpgrContainerFileBlock& fb, d->lastDrawingObject->groupShape->rgfb) { if (fb.anon.is<MSO::OfficeArtSpgrContainer>()) { delete d->lastGroupObject; d->lastGroupObject = new MSO::OfficeArtSpgrContainer(*fb.anon.get<MSO::OfficeArtSpgrContainer>()); } else { const MSO::OfficeArtSpContainer& o = *fb.anon.get<MSO::OfficeArtSpContainer>(); if (o.clientAnchor) { MSO::XlsOfficeArtClientAnchor* anchor = o.clientAnchor->anon.get<MSO::XlsOfficeArtClientAnchor>(); if (!anchor) { qDebug() << "invalid client anchor"; } else { Cell *cell = d->sheet->cell(anchor->colL, anchor->rwT); OfficeArtObject* obj = new OfficeArtObject(o); cell->addDrawObject(obj); d->lastOfficeArtObject = obj; } } else { OfficeArtObject* obj = new OfficeArtObject(o); d->sheet->addDrawObject(obj, d->lastGroupObject); d->lastOfficeArtObject = obj; if (d->lastGroupObject) { if (!o.shapeProp.fChild) { delete d->lastGroupObject; d->lastGroupObject = 0; } } } } } }