bool CAPresentationHandler::openDocument (const QString& uri) { QString error; QString mimetype = KMimeType::findByPath (uri)->name(); KoDocumentEntry documentEntry = KoDocumentEntry::queryByMimeType(mimetype); KoPart *part = documentEntry.createKoPart(&error); if (!part) { kDebug() << "Doc can't be openend" << error; return false; } d->document = qobject_cast<KPrDocument*> (part->document()); d->document->openUrl (KUrl (uri)); KoCanvasBase* paCanvas = dynamic_cast<KoCanvasBase*>(part->canvasItem(d->document)); KoPACanvasItem* paCanvasItem = dynamic_cast<KoPACanvasItem*> (paCanvas); if (!paCanvasItem) { kDebug() << "Failed to fetch a canvas item"; return false; } if (paCanvasItem) { d->paView = new CAPAView (documentController()->canvasController(), dynamic_cast<KoPACanvasBase*> (paCanvas), d->document); paCanvasItem->setView (d->paView); documentController()->canvasController()->setZoomHandler (static_cast<KoZoomHandler*> (paCanvasItem->viewConverter())); d->paView->connectToZoomController(); // update the canvas whenever we scroll, the canvas controller must emit this signal on scrolling/panning connect (documentController()->canvasController()->canvasControllerProxyObject(), SIGNAL(moveDocumentOffset(QPoint)), paCanvasItem, SLOT(slotSetDocumentOffset(QPoint))); // whenever the size of the document viewed in the canvas changes, inform the zoom controller connect (paCanvasItem, SIGNAL(documentSize(QSize)), this, SLOT(tellZoomControllerToSetDocumentSize(QSize))); paCanvasItem->update(); } setCanvas (paCanvas); KoToolManager::instance()->addController (documentController()->canvasController()); connect(documentController()->canvasController(), SIGNAL(needsCanvasResize(QSizeF)), SLOT(resizeCanvas(QSizeF))); connect (documentController()->canvasController(), SIGNAL(needCanvasUpdate()), SLOT(updateCanvas())); d->paDocumentModel = new CAPADocumentModel(this, d->document); emit totalNumberOfSlidesChanged(); QTimer::singleShot(0, this, SLOT(nextSlide())); return true; }
void KoVersionDialog::slotOpen() { if (!list->currentItem()) return; KoVersionInfo *version = 0; for (int i = 0; i < m_doc->versionList().size(); ++i) { if (m_doc->versionList().at(i).date.toString() == list->currentItem()->text(0)) { version = &m_doc->versionList()[i]; break; } } if (!version) return; QTemporaryFile tmp; tmp.setAutoRemove(false); tmp.open(); tmp.write(version->data); tmp.flush(); tmp.setPermissions(QFile::ReadUser); tmp.flush(); if (!m_doc->documentPart()->mainWindows().isEmpty()) { //open the version in a new window if possible KoDocumentEntry entry = KoDocumentEntry::queryByMimeType(m_doc->nativeOasisMimeType()); if (entry.isEmpty()) { entry = KoDocumentEntry::queryByMimeType(m_doc->nativeFormatMimeType()); } Q_ASSERT(!entry.isEmpty()); QString errorMsg; KoPart *part= entry.createKoPart(&errorMsg); if (!part) { if (!errorMsg.isEmpty()) KMessageBox::error(0, errorMsg); return; } KoMainWindow *mainWindow = part->createMainWindow(); mainWindow ->openDocument(QUrl::fromLocalFile(tmp.fileName())); mainWindow ->show(); } else { m_doc->openUrl(QUrl::fromUserInput(tmp.fileName())); } tmp.setAutoRemove(true); slotButtonClicked(Close); }
void KisPasteNewActionFactory::run(KisView2 *view) { Q_UNUSED(view); KisPaintDeviceSP clip = KisClipboard::instance()->clip(QPoint()); if (!clip) return; QRect rect = clip->exactBounds(); if (rect.isEmpty()) return; const QByteArray mimetype = KoServiceProvider::readNativeFormatMimeType(); KoDocumentEntry entry = KoDocumentEntry::queryByMimeType(mimetype); QString error; KisPart2* part = dynamic_cast<KisPart2*>(entry.createKoPart(&error)); if (!part) return; KisDoc2 *doc = new KisDoc2(part); if (!doc) return; part->setDocument(doc); KisImageSP image = new KisImage(doc->createUndoStore(), rect.width(), rect.height(), clip->colorSpace(), i18n("Pasted")); KisPaintLayerSP layer = new KisPaintLayer(image.data(), clip->objectName(), OPACITY_OPAQUE_U8, clip->colorSpace()); KisPainter p(layer->paintDevice()); p.setCompositeOp(COMPOSITE_COPY); p.bitBlt(0, 0, clip, rect.x(), rect.y(), rect.width(), rect.height()); p.end(); image->addNode(layer.data(), image->rootLayer()); doc->setCurrentImage(image); KoMainWindow *win = new KoMainWindow(part->componentData()); win->show(); win->setRootDocument(doc); }
bool KoFormulaShape::loadEmbeddedDocument( KoStore *store, const KoXmlElement &objectElement, const KoOdfLoadingContext &odfLoadingContext) { if ( !objectElement.hasAttributeNS( KoXmlNS::xlink, "href" ) ) { kError() << "Object element has no valid xlink:href attribute"; return false; } QString url = objectElement.attributeNS( KoXmlNS::xlink, "href" ); // It can happen that the url is empty e.g. when it is a // presentation:placeholder. if ( url.isEmpty() ) { return true; } QString tmpURL; if ( url[0] == '#' ) url = url.mid( 1 ); #define INTERNAL_PROTOCOL "intern" #define STORE_PROTOCOL "tar" if (KUrl::isRelativeUrl( url )) { if ( url.startsWith( "./" ) ) tmpURL = QString( INTERNAL_PROTOCOL ) + ":/" + url.mid( 2 ); else tmpURL = QString( INTERNAL_PROTOCOL ) + ":/" + url; } else tmpURL = url; QString path = tmpURL; if ( tmpURL.startsWith( INTERNAL_PROTOCOL ) ) { path = store->currentDirectory(); if ( !path.isEmpty() && !path.endsWith( '/' ) ) path += '/'; QString relPath = KUrl( tmpURL ).path(); path += relPath.mid( 1 ); // remove leading '/' } if ( !path.endsWith( '/' ) ) path += '/'; const QString mimeType = odfLoadingContext.mimeTypeForPath( path ); //kDebug(35001) << "path for manifest file=" << path << "mimeType=" << mimeType; if ( mimeType.isEmpty() ) { //kDebug(35001) << "Manifest doesn't have media-type for" << path; return false; } const bool isOdf = mimeType.startsWith( "application/vnd.oasis.opendocument" ); if ( !isOdf ) { tmpURL += "/maindoc.xml"; //kDebug(35001) << "tmpURL adjusted to" << tmpURL; } //kDebug(35001) << "tmpURL=" << tmpURL; QString errorMsg; KoDocumentEntry e = KoDocumentEntry::queryByMimeType( mimeType ); if ( e.isEmpty() ) { return false; } bool res = true; if ( tmpURL.startsWith( STORE_PROTOCOL ) || tmpURL.startsWith( INTERNAL_PROTOCOL ) || KUrl::isRelativeUrl( tmpURL ) ) { if ( isOdf ) { store->pushDirectory(); Q_ASSERT( tmpURL.startsWith( INTERNAL_PROTOCOL ) ); QString relPath = KUrl( tmpURL ).path().mid( 1 ); store->enterDirectory( relPath ); res = m_document->loadOasisFromStore( store ); store->popDirectory(); } else { if ( tmpURL.startsWith( INTERNAL_PROTOCOL ) ) tmpURL = KUrl( tmpURL ).path().mid( 1 ); res = m_document->loadFromStore( store, tmpURL ); } m_document->setStoreInternal( true ); } else { // Reference to an external document. Hmmm... m_document->setStoreInternal( false ); KUrl url( tmpURL ); if ( !url.isLocalFile() ) { //QApplication::restoreOverrideCursor(); // For security reasons we need to ask confirmation if the // url is remote. int result = KMessageBox::warningYesNoCancel( 0, i18n( "This document contains an external link to a remote document\n%1", tmpURL ), i18n( "Confirmation Required" ), KGuiItem( i18n( "Download" ) ), KGuiItem( i18n( "Skip" ) ) ); if ( result == KMessageBox::Cancel ) { //d->m_parent->setErrorMessage("USER_CANCELED"); return false; } if ( result == KMessageBox::Yes ) res = m_document->openUrl( url ); // and if == No, res will still be false so we'll use a kounavail below } else res = m_document->openUrl( url ); } if ( !res ) { QString errorMessage = m_document->errorMessage(); return false; } tmpURL.clear(); return res; }
bool convertPdf(const QUrl &uIn, const QString &inputFormat, const QUrl &uOut, const QString &outputFormat, const QString &orientation, const QString &papersize, const QString &margin) { Q_UNUSED(outputFormat); QString error; KoDocumentEntry documentEntry = KoDocumentEntry::queryByMimeType(inputFormat); KoPart *part = documentEntry.createKoPart(); if (!part) { return false; } KoDocument *doc = part->document(); doc->setCheckAutoSaveFile(false); doc->setAutoErrorHandlingEnabled(false); if (!doc->openUrl(uIn)) { qDebug() << "The document" << uIn.path() << "of format" << inputFormat << "failed to open with the error" << error; doc->deleteLater(); return false; } doc->setReadWrite(false); KoView *view = part->createView(doc); KoPrintJob *printJob = view->createPdfPrintJob(); // We should now have a print job - but check to make sure if (!printJob) { qDebug() << "The document" << uIn.path() << "of format" << inputFormat << "was unable to provide a print job for PDF export"; doc->deleteLater(); return false; } printJob->printer().setOutputFileName(uOut.path()); printJob->printer().setOutputFormat(QPrinter::PdfFormat); printJob->printer().setColorMode(QPrinter::Color); if (orientation == "Portrait") printJob->printer().setOrientation(QPrinter::Portrait); else if (orientation == "Landscape") printJob->printer().setOrientation(QPrinter::Landscape); if (papersize == "A0") printJob->printer().setPaperSize(QPrinter::A0); else if (papersize == "A1") printJob->printer().setPaperSize(QPrinter::A1); else if (papersize == "A2") printJob->printer().setPaperSize(QPrinter::A2); else if (papersize == "A3") printJob->printer().setPaperSize(QPrinter::A3); else if (papersize == "A4") printJob->printer().setPaperSize(QPrinter::A4); else if (papersize == "A5") printJob->printer().setPaperSize(QPrinter::A5); else if (papersize == "A6") printJob->printer().setPaperSize(QPrinter::A6); else if (papersize == "A7") printJob->printer().setPaperSize(QPrinter::A7); else if (papersize == "A8") printJob->printer().setPaperSize(QPrinter::A8); else if (papersize == "A9") printJob->printer().setPaperSize(QPrinter::A9); else if (papersize == "B0") printJob->printer().setPaperSize(QPrinter::B0); else if (papersize == "B1") printJob->printer().setPaperSize(QPrinter::B1); else if (papersize == "B2") printJob->printer().setPaperSize(QPrinter::B2); else if (papersize == "B3") printJob->printer().setPaperSize(QPrinter::B3); else if (papersize == "B4") printJob->printer().setPaperSize(QPrinter::B4); else if (papersize == "B5") printJob->printer().setPaperSize(QPrinter::B5); else if (papersize == "B6") printJob->printer().setPaperSize(QPrinter::B6); else if (papersize == "B7") printJob->printer().setPaperSize(QPrinter::B7); else if (papersize == "B8") printJob->printer().setPaperSize(QPrinter::B8); else if (papersize == "B9") printJob->printer().setPaperSize(QPrinter::B9); else if (papersize == "B10") printJob->printer().setPaperSize(QPrinter::B10); else if (papersize == "C5E") printJob->printer().setPaperSize(QPrinter::C5E); else if (papersize == "Comm10E") printJob->printer().setPaperSize(QPrinter::Comm10E); else if (papersize == "DLE") printJob->printer().setPaperSize(QPrinter::DLE); else if (papersize == "Executive") printJob->printer().setPaperSize(QPrinter::Executive); else if (papersize == "Folio") printJob->printer().setPaperSize(QPrinter::Folio); else if (papersize == "Ledger") printJob->printer().setPaperSize(QPrinter::Ledger); else if (papersize == "Legal") printJob->printer().setPaperSize(QPrinter::Legal); else if (papersize == "Letter") printJob->printer().setPaperSize(QPrinter::Letter); else if (papersize == "Tabloid") printJob->printer().setPaperSize(QPrinter::Tabloid); bool _marginOk; qreal _margin = margin.toDouble(&_marginOk); if (!_marginOk) _margin = 0.2; printJob->printer().setPageMargins(_margin, _margin, _margin, _margin, QPrinter::Point); printJob->startPrinting(); doc->deleteLater(); return true; }
bool KoApplication::start() { ResetStarting resetStarting; // reset m_starting to false when we're done Q_UNUSED(resetStarting); // Find the *.desktop file corresponding to the kapp instance name KoDocumentEntry entry = KoDocumentEntry(KoDocument::readNativeService()); if (entry.isEmpty()) { kError(30003) << KGlobal::mainComponent().componentName() << "part.desktop not found." << endl; kError(30003) << "Run 'kde4-config --path services' to see which directories were searched, assuming kde startup had the same environment as your current shell." << endl; kError(30003) << "Check your installation (did you install KOffice in a different prefix than KDE, without adding the prefix to /etc/kderc ?)" << endl; return false; } // Get the command line arguments which we have to parse KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); int argsCount = args->count(); KCmdLineArgs *koargs = KCmdLineArgs::parsedArgs("koffice"); QString dpiValues = koargs->getOption("dpi"); if (!dpiValues.isEmpty()) { int sep = dpiValues.indexOf(QRegExp("[x, ]")); int dpiX; int dpiY = 0; bool ok = true; if (sep != -1) { dpiY = dpiValues.mid(sep + 1).toInt(&ok); dpiValues.truncate(sep); } if (ok) { dpiX = dpiValues.toInt(&ok); if (ok) { if (!dpiY) dpiY = dpiX; KoGlobal::setDPI(dpiX, dpiY); } } } // No argument -> create an empty document if (!argsCount) { QString errorMsg; KoDocument* doc = entry.createDoc(&errorMsg); if (!doc) { if (!errorMsg.isEmpty()) KMessageBox::error(0, errorMsg); return false; } KoMainWindow *shell = new KoMainWindow(doc->componentData()); shell->show(); QObject::connect(doc, SIGNAL(sigProgress(int)), shell, SLOT(slotProgress(int))); // for initDoc to fill in the recent docs list // and for KoDocument::slotStarted doc->addShell(shell); if (doc->checkAutoSaveFile()) { shell->setRootDocument(doc); } else { doc->showStartUpWidget(shell); } // FIXME This needs to be moved someplace else QObject::disconnect(doc, SIGNAL(sigProgress(int)), shell, SLOT(slotProgress(int))); } else { const bool print = koargs->isSet("print"); const bool exportAsPdf = koargs->isSet("export-pdf"); QString pdfFileName = koargs->getOption("export-filename"); const bool doTemplate = koargs->isSet("template"); koargs->clear(); // Loop through arguments short int n = 0; // number of documents open short int nPrinted = 0; for (int i = 0; i < argsCount; i++) { // For now create an empty document QString errorMsg; KoDocument* doc = entry.createDoc(&errorMsg, 0); if (doc) { // show a shell asap KoMainWindow *shell = new KoMainWindow(doc->componentData()); shell->show(); // are we just trying to open a template? if (doTemplate) { QStringList paths; if (args->url(i).isLocalFile() && QFile::exists(args->url(i).toLocalFile())) { paths << QString(args->url(i).toLocalFile()); kDebug(30003) << "using full path..."; } else { QString desktopName(args->arg(i)); QString appName = KGlobal::mainComponent().componentName(); paths = KGlobal::dirs()->findAllResources("data", appName + "/templates/*/" + desktopName); if (paths.isEmpty()) { paths = KGlobal::dirs()->findAllResources("data", appName + "/templates/" + desktopName); } if (paths.isEmpty()) { KMessageBox::error(0L, i18n("No template found for: %1 ", desktopName)); delete shell; } else if (paths.count() > 1) { KMessageBox::error(0L, i18n("Too many templates found for: %1", desktopName)); delete shell; } } if (!paths.isEmpty()) { KUrl templateBase; templateBase.setPath(paths[0]); KDesktopFile templateInfo(paths[0]); QString templateName = templateInfo.readUrl(); KUrl templateURL; templateURL.setPath(templateBase.directory() + '/' + templateName); if (shell->openDocument(doc, templateURL)) { doc->resetURL(); doc->setEmpty(); doc->setTitleModified(); kDebug(30003) << "Template loaded..."; n++; } else { KMessageBox::error(0L, i18n("Template %1 failed to load.", templateURL.prettyUrl())); delete shell; } } // now try to load } else if (shell->openDocument(doc, args->url(i))) { if (print) { shell->slotFilePrint(); // delete shell; done by ~KoDocument nPrinted++; } else if (exportAsPdf) { KoPrintJob *job = shell->exportToPdf(pdfFileName); if (job) connect (job, SIGNAL(destroyed(QObject*)), shell, SLOT(slotFileQuit()), Qt::QueuedConnection); nPrinted++; } else { // Normal case, success n++; } } else { // .... if failed // delete doc; done by openDocument // delete shell; done by ~KoDocument } } } if (print || exportAsPdf) return nPrinted > 0; if (n == 0) // no doc, e.g. all URLs were malformed return false; } args->clear(); // not calling this before since the program will quit there. return true; }