virtual bool process(const KoXmlElement & body, KoOdfReadStore & odfStore) { KoOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store()); KoShapeLoadingContext context(loadingContext, m_container->resourceManager()); QList<KoShape*> shapes; m_container->loadOdf(body, context, shapes); m_layout->addShapes(shapes); return true; }
virtual bool process(const KoXmlElement & body, KoOdfReadStore & odfStore) { KoOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store()); KoShapeLoadingContext context(loadingContext, m_view->canvasBase()->shapeController()->resourceManager()); KoXmlElement child; QList<KoShape*> shapes; forEachElement(child, body) { KoShape * shape = KoShapeRegistry::instance()->createShapeFromOdf(child, context); if (shape) { shapes.append(shape); } }
bool KoShapePaste::process(const KoXmlElement & body, KoOdfReadStore & odfStore) { d->pastedShapes.clear(); KoOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store()); KoShapeLoadingContext context(loadingContext, d->canvas->shapeController()->resourceManager()); QList<KoShape*> shapes(d->layer ? d->layer->shapes(): d->canvas->shapeManager()->topLevelShapes()); int zIndex = 0; if (!shapes.isEmpty()) { zIndex = shapes.first()->zIndex(); foreach (KoShape * shape, shapes) { zIndex = qMax(zIndex, shape->zIndex()); }
KoShape* StencilShapeFactory:: createFromOdf(KoStore* store, KoDocumentResourceManager* documentRes) const { KoOdfReadStore odfStore(store); QString errorMessage; if (! odfStore.loadAndParse(errorMessage)) { kError() << "loading and parsing failed:" << errorMessage << endl; return 0; } KoXmlElement content = odfStore.contentDoc().documentElement(); KoXmlElement realBody(KoXml::namedItemNS(content, KoXmlNS::office, "body")); if (realBody.isNull()) { kError() << "No body tag found!" << endl; return 0; } KoXmlElement body = KoXml::namedItemNS(realBody, KoXmlNS::office, "drawing"); if (body.isNull()) { kError() << "No office:drawing tag found!" << endl; return 0; } KoXmlElement page = KoXml::namedItemNS(body, KoXmlNS::draw, "page"); if (page.isNull()) { kError() << "No page found!" << endl; return 0; } KoXmlElement shapeElement = KoXml::namedItemNS(page, KoXmlNS::draw, "g"); if (shapeElement.isNull()) { shapeElement = KoXml::namedItemNS(page, KoXmlNS::draw, "custom-shape"); if (shapeElement.isNull()) { kError() << "draw:g or draw:custom-shape element not found!" << endl; return 0; } } KoOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store()); KoShapeLoadingContext context(loadingContext, documentRes); KoShapeRegistry* registry = KoShapeRegistry::instance(); foreach (const QString & id, registry->keys()) { KoShapeFactoryBase* shapeFactory = registry->value(id); shapeFactory->newDocumentResourceManager(documentRes); } return KoShapeRegistry::instance()->createShapeFromOdf(shapeElement, context); }
bool KoPAPastePage::process( const KoXmlElement & body, KoOdfReadStore & odfStore ) { KoOdfLoadingContext loadingContext( odfStore.styles(), odfStore.store(), m_doc->defaultStylesResourcePath() ); KoPALoadingContext paContext(loadingContext, m_doc->resourceManager()); QList<KoPAPageBase *> newMasterPages( m_doc->loadOdfMasterPages( odfStore.styles().masterPages(), paContext ) ); QList<KoPAPageBase *> newPages( m_doc->loadOdfPages( body, paContext ) ); // Check where to start inserting pages KoPAPageBase * insertAfterPage = 0; KoPAPageBase * insertAfterMasterPage = 0; if ( dynamic_cast<KoPAMasterPage *>( m_activePage ) || ( m_activePage == 0 && newPages.empty() ) ) { insertAfterMasterPage = m_activePage; insertAfterPage = m_doc->pages( false ).last(); } else { insertAfterPage = m_activePage; insertAfterMasterPage = m_doc->pages( true ).last(); } if ( !newPages.empty() ) { KoGenStyles mainStyles; QBuffer buffer; buffer.open( QIODevice::WriteOnly ); KoXmlWriter xmlWriter( &buffer ); KoEmbeddedDocumentSaver embeddedSaver; KoPASavingContext savingContext(xmlWriter, mainStyles, embeddedSaver, 1); savingContext.addOption( KoShapeSavingContext::UniqueMasterPages ); QList<KoPAPageBase*> emptyList; QList<KoPAPageBase*> existingMasterPages = m_doc->pages( true ); savingContext.setClearDrawIds( true ); m_doc->saveOdfPages( savingContext, emptyList, existingMasterPages ); QMap<QString, KoPAMasterPage*> masterPageNames; foreach ( KoPAPageBase * page, existingMasterPages ) { KoPAMasterPage * masterPage = dynamic_cast<KoPAMasterPage*>( page ); Q_ASSERT( masterPage ); if ( masterPage ) { QString masterPageName( savingContext.masterPageName( masterPage ) ); if ( !masterPageNames.contains( masterPageName ) ) { masterPageNames.insert( masterPageName, masterPage ); } } }
bool KoShapePaste::process(const KoXmlElement & body, KoOdfReadStore & odfStore) { KoOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store()); KoShapeLoadingContext context(loadingContext, d->canvas->shapeController()->dataCenterMap()); context.setZIndex(d->zIndex); QUndoCommand * cmd = new QUndoCommand(i18n("Paste Shapes")); // TODO if this is a text create a text shape and load the text inside the new shape. KoXmlElement element; forEachElement(element, body) { kDebug(30006) << "loading shape" << element.localName(); KoShape * shape = KoShapeRegistry::instance()->createShapeFromOdf(element, context); if (shape) { if (! shape->parent()) { shape->setParent(d->parent); } d->canvas->shapeController()->addShapeDirect(shape, cmd); } }
bool KoPADocument::loadOdf(KOdfStoreReader &odfStore) { QPointer<KoUpdater> updater; if (progressUpdater()) { updater = progressUpdater()->startSubtask(1, "KoPADocument::loadOdf"); updater->setProgress(0); } KOdfLoadingContext loadingContext(odfStore.styles(), odfStore.store(), componentData()); KoPALoadingContext paContext(loadingContext, resourceManager()); KXmlElement content = odfStore.contentDoc().documentElement(); KXmlElement realBody (KoXml::namedItemNS(content, KOdfXmlNS::office, "body")); if (realBody.isNull()) { kError(30010) << "No body tag found!" << endl; return false; } KXmlElement body = KoXml::namedItemNS(realBody, KOdfXmlNS::office, odfTagName(false)); if (body.isNull()) { kError(30010) << "No office:" << odfTagName(false) << " tag found!" << endl; return false; } // Load text styles before the corresponding text shapes try to use them! KTextSharedLoadingData * sharedData = new KTextSharedLoadingData(); paContext.addSharedData(KODFTEXT_SHARED_LOADING_ID, sharedData); KStyleManager *styleManager = resourceManager()->resource(KOdfText::StyleManager).value<KStyleManager*>(); sharedData->loadOdfStyles(paContext, styleManager); d->masterPages = loadOdfMasterPages(odfStore.styles().masterPages(), paContext); if (!loadOdfProlog(body, paContext)) { return false; } d->pages = loadOdfPages(body, paContext); // create pages if there are none if (d->masterPages.empty()) { d->masterPages.append(newMasterPage()); } if (d->pages.empty()) { d->pages.append(newPage(static_cast<KoPAMasterPage*>(d->masterPages.first()))); } if (!loadOdfEpilogue(body, paContext)) { return false; } loadOdfDocumentStyles(paContext); if (d->pages.size() > 1) { setActionEnabled(KoPAView::ActionDeletePage, false); } updatePageCount(); if (updater) updater->setProgress(100); return true; }