void PicSearch::createPreview() { QPixmap pm(200, 200); QFileInfo fi = QFileInfo(currentImage); int w = 200; int h = 200; bool mode = false; QString ext = fi.suffix().toLower(); if (ext.isEmpty()) ext = getImageType(currentImage); ScImage im; //No doc to send data anyway, so no doc to get into scimage. CMSettings cms(0, "", Intent_Perceptual); cms.allowColorManagement(false); if (im.loadPicture(currentImage, 1, cms, ScImage::Thumbnail, 72, &mode)) { int ix,iy; if ((im.imgInfo.exifDataValid) && (!im.imgInfo.exifInfo.thumbnail.isNull())) { ix = im.imgInfo.exifInfo.width; iy = im.imgInfo.exifInfo.height; } else { ix = im.width(); iy = im.height(); } int xres = im.imgInfo.xres; int yres = im.imgInfo.yres; QString tmp = ""; QString tmp2 = ""; QImage im2; if ((ix > w-5) || (iy > h-44)) { double sx = im.width() / static_cast<double>(w-5); double sy = im.height() / static_cast<double>(h-44); im2 = sy < sx ? im.scaled(qRound(im.width() / sx), qRound(im.height() / sx), Qt::IgnoreAspectRatio, Qt::SmoothTransformation) : im.scaled(qRound(im.width() / sy), qRound(im.height() / sy), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); } else im2 = im.qImage(); // no need to copy QPainter p; QBrush b(QColor(205,205,205), loadIcon("testfill.png")); p.begin(&pm); p.fillRect(0, 0, w, h-44, b); p.fillRect(0, h-44, w, 44, QColor(255, 255, 255)); p.drawImage((w - im2.width()) / 2, (h - 44 - im2.height()) / 2, im2); p.drawText(2, h-29, tr("Size:")+" "+tmp.setNum(ix)+" x "+tmp2.setNum(iy)); p.drawText(2, h-17, tr("Resolution:")+" "+tmp.setNum(xres)+" x "+tmp2.setNum(yres)+" "+ tr("DPI")); QString cSpace; if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (im.imgInfo.type != ImageType7)) cSpace = tr("Unknown"); else cSpace=colorSpaceText(im.imgInfo.colorspace); p.drawText(2, h-5, tr("Colorspace:")+" "+cSpace); p.end(); repaint(); } previewLabel->setPixmap(pm); }
QString PageItem_ImageFrame::infoDescription() { QString htmlText; htmlText.append( tr("Image") + "<br/>"); if (PictureIsAvailable) { QFileInfo fi = QFileInfo(Pfile); if (isInlineImage) htmlText.append( tr("Embedded Image") + "<br/>"); else htmlText.append( tr("File:") + " " + fi.fileName() + "<br/>"); htmlText.append( tr("Original PPI:") + " " + QString::number(qRound(pixm.imgInfo.xres))+" x "+QString::number(qRound(pixm.imgInfo.yres)) + "<br/>"); htmlText.append( tr("Actual PPI:") + " " + QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale())) + "<br/>"); htmlText.append( tr("Colorspace:") + " "); QString cSpace; QString ext = fi.suffix().toLower(); if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7)) htmlText.append( tr("Unknown")); else htmlText.append(colorSpaceText(pixm.imgInfo.colorspace)); htmlText.append("<br/>"); if (pixm.imgInfo.numberOfPages > 1) { if (pixm.imgInfo.actualPageNumber > 0) htmlText.append( tr("Page:") + " " + QString::number(pixm.imgInfo.actualPageNumber) + "/" + QString::number(pixm.imgInfo.numberOfPages)+ "<br/>"); else htmlText.append( tr("Pages:") + " " + QString::number(pixm.imgInfo.numberOfPages)+ "<br/>"); } } else { if (!Pfile.isEmpty()) { QFileInfo fi = QFileInfo(Pfile); if (isInlineImage) htmlText.append( tr("Embedded Image missing") + "<br/>"); else if (extensionIndicatesPDF(fi.suffix().toLower())) htmlText.append( tr("File:") + " " + fi.fileName() + " " + tr("missing or corrupt") + "<br/>"); else htmlText.append( tr("File:") + " " + fi.fileName() + " " + tr("missing") + "<br/>"); } else htmlText.append( tr("No Image Loaded") + "<br/>"); } htmlText.append(PageItem::infoDescription()); return htmlText; }
void PageItem_ImageFrame::DrawObj_Item(ScPainter *p, QRectF /*e*/) { if (m_Doc->RePos) return; if (m_Doc->layerOutline(LayerID)) return; p->setFillRule(true); if ((fillColor() != CommonStrings::None) || (GrType != 0)) { p->setupPolygon(&PoLine); p->fillPath(); } p->save(); if (Pfile.isEmpty()) { if ((Frame) && (m_Doc->guidesPrefs().framesShown)) { p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); p->drawLine(FPoint(0, 0), FPoint(Width, Height)); p->drawLine(FPoint(0, Height), FPoint(Width, 0)); } } else { //If we are missing our image, draw a red cross in the frame if ((!PicArt) || (!PictureIsAvailable)) { if ((Frame) && (m_Doc->guidesPrefs().framesShown)) { p->setBrush(Qt::white); QString htmlText = ""; QFileInfo fi = QFileInfo(Pfile); if (PictureIsAvailable) { p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); if (isInlineImage) htmlText.append( tr("Embedded Image") + "\n"); else htmlText.append( tr("File:") + " " + fi.fileName() + "\n"); htmlText.append( tr("Original PPI:") + " " + QString::number(qRound(pixm.imgInfo.xres))+" x "+QString::number(qRound(pixm.imgInfo.yres)) + "\n"); htmlText.append( tr("Actual PPI:") + " " + QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale())) + "\n"); htmlText.append( tr("Size:") + " " + QString::number(OrigW) + " x " + QString::number(OrigH) + "\n"); htmlText.append( tr("Colorspace:") + " "); QString cSpace; QString ext = fi.suffix().toLower(); if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7)) htmlText.append( tr("Unknown")); else htmlText.append(colorSpaceText(pixm.imgInfo.colorspace)); if (pixm.imgInfo.numberOfPages > 1) { htmlText.append("\n"); if (pixm.imgInfo.actualPageNumber > 0) htmlText.append( tr("Page:") + " " + QString::number(pixm.imgInfo.actualPageNumber) + "/" + QString::number(pixm.imgInfo.numberOfPages)); else htmlText.append( tr("Pages:") + " " + QString::number(pixm.imgInfo.numberOfPages)); } } else { p->setPen(Qt::red, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); htmlText = fi.fileName(); } p->drawLine(FPoint(0, 0), FPoint(Width, Height)); p->drawLine(FPoint(0, Height), FPoint(Width, 0)); p->setFont(QApplication::font()); p->drawText(QRectF(0.0, 0.0, Width, Height), htmlText); } } else { p->setupPolygon(&PoLine); p->setClipPath(); if (imageFlippedH()) { p->translate(Width, 0); p->scale(-1, 1); } if (imageFlippedV()) { p->translate(0, Height); p->scale(1, -1); } if (imageClip.size() != 0) { p->setupPolygon(&imageClip); p->setClipPath(); } p->translate(LocalX*LocalScX, LocalY*LocalScY); p->rotate(LocalRot); double mscalex = 1.0 / LocalScX; double mscaley = 1.0 / LocalScY; p->scale(LocalScX, LocalScY); if (pixm.imgInfo.lowResType != 0) { p->scale(pixm.imgInfo.lowResScale, pixm.imgInfo.lowResScale); mscalex *= 1.0 / pixm.imgInfo.lowResScale; mscaley *= 1.0 / pixm.imgInfo.lowResScale; } if ((GrMask == 1) || (GrMask == 2) || (GrMask == 4) || (GrMask == 5)) { if ((GrMask == 1) || (GrMask == 2)) p->setMaskMode(1); else p->setMaskMode(3); if ((!gradientMaskVal.isEmpty()) && (!m_Doc->docGradients.contains(gradientMaskVal))) gradientMaskVal = ""; if (!(gradientMaskVal.isEmpty()) && (m_Doc->docGradients.contains(gradientMaskVal))) mask_gradient = m_Doc->docGradients[gradientMaskVal]; p->mask_gradient = mask_gradient; if ((GrMask == 1) || (GrMask == 4)) p->setGradientMask(VGradient::linear, FPoint(GrMaskStartX * mscalex, GrMaskStartY * mscaley), FPoint(GrMaskEndX * mscalex, GrMaskEndY * mscaley), FPoint(GrMaskStartX * mscalex, GrMaskStartY * mscaley), GrMaskScale, GrMaskSkew); else p->setGradientMask(VGradient::radial, FPoint(GrMaskStartX * mscalex, GrMaskStartY * mscaley), FPoint(GrMaskEndX * mscalex, GrMaskEndY * mscaley), FPoint(GrMaskFocalX * mscalex, GrMaskFocalY * mscaley), GrMaskScale, GrMaskSkew); } else if ((GrMask == 3) || (GrMask == 6) || (GrMask == 7) || (GrMask == 8)) { if ((patternMaskVal.isEmpty()) || (!m_Doc->docPatterns.contains(patternMaskVal))) p->setMaskMode(0); else { p->setPatternMask(&m_Doc->docPatterns[patternMaskVal], patternMaskScaleX * mscalex, patternMaskScaleY * mscaley, patternMaskOffsetX, patternMaskOffsetY, patternMaskRotation, patternMaskSkewX, patternMaskSkewY, patternMaskMirrorX, patternMaskMirrorY); if (GrMask == 3) p->setMaskMode(2); else if (GrMask == 6) p->setMaskMode(4); else if (GrMask == 7) p->setMaskMode(5); else p->setMaskMode(6); } } else p->setMaskMode(0); p->drawImage(pixm.qImagePtr()); } } p->restore(); }
bool PageItem_ImageFrame::createInfoGroup(QFrame *infoGroup, QGridLayout *infoGroupLayout) { QLabel *infoCT, *fileT, *fileCT, *oPpiT, *oPpiCT, *aPpiT, *aPpiCT, *colT, *colCT; infoCT = new QLabel(infoGroup); fileCT = new QLabel(infoGroup); infoCT->setText( tr("Image")); infoGroupLayout->addWidget( infoCT, 0, 0, 1, 2, Qt::AlignHCenter ); if (PictureIsAvailable) { fileT = new QLabel(infoGroup); oPpiT = new QLabel(infoGroup); oPpiCT = new QLabel(infoGroup); aPpiT = new QLabel(infoGroup); aPpiCT = new QLabel(infoGroup); colT = new QLabel(infoGroup); colCT = new QLabel(infoGroup); QFileInfo fi = QFileInfo(Pfile); fileCT->setText( tr("File:")); infoGroupLayout->addWidget( fileCT, 1, 0, Qt::AlignRight ); if (isInlineImage) fileT->setText( tr("Embedded Image")); else fileT->setText(fi.fileName()); infoGroupLayout->addWidget( fileT, 1, 1 ); oPpiCT->setText( tr("Original PPI:")); infoGroupLayout->addWidget( oPpiCT, 2, 0, Qt::AlignRight ); oPpiT->setText(QString::number(qRound(pixm.imgInfo.xres))+" x "+QString::number(qRound(pixm.imgInfo.yres))); infoGroupLayout->addWidget( oPpiT, 2, 1 ); aPpiCT->setText( tr("Actual PPI:")); infoGroupLayout->addWidget( aPpiCT, 3, 0, Qt::AlignRight ); aPpiT->setText(QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale()))); infoGroupLayout->addWidget( aPpiT, 3, 1 ); colCT->setText( tr("Colorspace:")); infoGroupLayout->addWidget( colCT, 4, 0, Qt::AlignRight ); QString cSpace; QString ext = fi.suffix().toLower(); if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7)) cSpace = tr("Unknown"); else cSpace=colorSpaceText(pixm.imgInfo.colorspace); colT->setText(cSpace); infoGroupLayout->addWidget( colT, 4, 1 ); } else { if (!Pfile.isEmpty()) { QFileInfo fi = QFileInfo(Pfile); fileCT->setText( tr("File:")); infoGroupLayout->addWidget( fileCT, 1, 0, Qt::AlignRight ); fileT = new QLabel(infoGroup); if (isInlineImage) fileT->setText( tr("Embedded Image missing")); else if (extensionIndicatesPDF(fi.suffix().toLower())) fileT->setText(fi.fileName() + " " + tr("missing or corrupt")); else fileT->setText(fi.fileName() + " " + tr("missing")); infoGroupLayout->addWidget( fileT, 1, 1 ); } else { fileCT->setText( tr("No Image Loaded")); infoGroupLayout->addWidget( fileCT, 1, 0, 1, 2, Qt::AlignHCenter ); } } return true; }
void PageItem_ImageFrame::DrawObj_Item(ScPainter *p, QRectF /*e*/, double sc) { if(!m_Doc->RePos) { if (!m_Doc->layerOutline(LayerNr)) { p->setFillRule(true); if ((fillColor() != CommonStrings::None) || (GrType != 0)) { p->setupPolygon(&PoLine); p->fillPath(); } p->save(); if (imageClip.size() != 0) { p->setupPolygon(&imageClip); p->setClipPath(); } p->setupPolygon(&PoLine); p->setClipPath(); if (Pfile.isEmpty()) { if ((Frame) && (m_Doc->guidesSettings.framesShown)) { p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); p->drawLine(FPoint(0, 0), FPoint(Width, Height)); p->drawLine(FPoint(0, Height), FPoint(Width, 0)); } } else { //If we are missing our image, draw a red cross in the frame if ((!PicArt) || (!PictureIsAvailable)) { if ((Frame) && (m_Doc->guidesSettings.framesShown)) { p->setBrush(Qt::white); QString htmlText = ""; QFileInfo fi = QFileInfo(Pfile); if (PictureIsAvailable) { p->setPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); if (isInlineImage) htmlText.append( tr("Embedded Image") + "\n"); else htmlText.append( tr("File:") + " " + fi.fileName() + "\n"); htmlText.append( tr("Original PPI:") + " " + QString::number(qRound(pixm.imgInfo.xres))+" x "+QString::number(qRound(pixm.imgInfo.yres)) + "\n"); htmlText.append( tr("Actual PPI:") + " " + QString::number(qRound(72.0 / imageXScale()))+" x "+ QString::number(qRound(72.0 / imageYScale())) + "\n"); htmlText.append( tr("Size:") + " " + QString::number(OrigW) + " x " + QString::number(OrigH) + "\n"); htmlText.append( tr("Colorspace:") + " "); QString cSpace; QString ext = fi.suffix().toLower(); if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (pixm.imgInfo.type != ImageType7)) htmlText.append( tr("Unknown")); else htmlText.append(colorSpaceText(pixm.imgInfo.colorspace)); if (pixm.imgInfo.numberOfPages > 1) { htmlText.append("\n"); if (pixm.imgInfo.actualPageNumber > 0) htmlText.append( tr("Page:") + " " + QString::number(pixm.imgInfo.actualPageNumber) + "/" + QString::number(pixm.imgInfo.numberOfPages)); else htmlText.append( tr("Pages:") + " " + QString::number(pixm.imgInfo.numberOfPages)); } } else { p->setPen(Qt::red, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin); htmlText = fi.fileName(); } p->drawLine(FPoint(0, 0), FPoint(Width, Height)); p->drawLine(FPoint(0, Height), FPoint(Width, 0)); p->setFont(QApplication::font()); p->drawText(QRectF(0.0, 0.0, Width, Height), htmlText); } } else { if (imageFlippedH()) { p->translate(Width, 0); p->scale(-1, 1); } if (imageFlippedV()) { p->translate(0, Height); p->scale(1, -1); } p->translate(LocalX*LocalScX, LocalY*LocalScY); p->scale(LocalScX, LocalScY); if (pixm.imgInfo.lowResType != 0) p->scale(pixm.imgInfo.lowResScale, pixm.imgInfo.lowResScale); p->drawImage(pixm.qImagePtr()); } } p->restore(); } } }
bool EPSPlug::import(QString fName, const TransactionSettings &trSettings, int flags, bool showProgress) { #ifdef Q_OS_OSX #if QT_VERSION >= 0x050300 showProgress = false; #endif #endif bool success = false; interactive = (flags & LoadSavePlugin::lfInteractive); cancel = false; double x, y, b, h; bool ret = false; bool found = false; CustColors.clear(); QFileInfo fi = QFileInfo(fName); QString ext = fi.suffix().toLower(); if ( !ScCore->usingGUI() ) { interactive = false; showProgress = false; } if ( showProgress ) { ScribusMainWindow* mw=(m_Doc==0) ? ScCore->primaryMainWindow() : m_Doc->scMW(); progressDialog = new MultiProgressDialog( tr("Importing: %1").arg(fi.fileName()), CommonStrings::tr_Cancel, mw); QStringList barNames, barTexts; barNames << "GI"; barTexts << tr("Analyzing PostScript:"); QList<bool> barsNumeric; barsNumeric << false; progressDialog->addExtraProgressBars(barNames, barTexts, barsNumeric); progressDialog->setOverallTotalSteps(3); progressDialog->setOverallProgress(0); progressDialog->setProgress("GI", 0); progressDialog->show(); connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelRequested())); qApp->processEvents(); } else { progressDialog = NULL; } /* Set default Page to size defined in Preferences */ x = 0.0; y = 0.0; b = PrefsManager::instance()->appPrefs.docSetupPrefs.pageWidth; h = PrefsManager::instance()->appPrefs.docSetupPrefs.pageHeight; if (extensionIndicatesEPSorPS(ext)) { QString tmp, BBox, tmp2, FarNam; ScColor cc; QFile f(fName); if (f.open(QIODevice::ReadOnly)) { /* Try to find Bounding Box */ QDataStream ts(&f); while (!ts.atEnd()) { tmp = readLinefromDataStream(ts); if (tmp.startsWith("%%BoundingBox:")) { found = true; BBox = tmp.remove("%%BoundingBox:"); } if (!found) { if (tmp.startsWith("%%BoundingBox")) { found = true; BBox = tmp.remove("%%BoundingBox"); } } if (tmp.startsWith("%%EndComments")) break; } f.close(); if (found) { QStringList bb = BBox.split(" ", QString::SkipEmptyParts); if (bb.count() == 4) { x = ScCLocale::toDoubleC(bb[0]); y = ScCLocale::toDoubleC(bb[1]); b = ScCLocale::toDoubleC(bb[2]); h = ScCLocale::toDoubleC(bb[3]); } } } importColorsFromFile(fName, CustColors); } #ifdef HAVE_PODOFO else if (extensionIndicatesPDF(ext)) { try { PoDoFo::PdfError::EnableDebug( false ); #if (PODOFO_VERSION == 0 && PODOFO_MINOR > 6) PoDoFo::PdfError::EnableLogging( false ); #endif #if (PODOFO_VERSION == 0 && PODOFO_MINOR == 5 && PODOFO_REVISION == 99) || PODOFO_MINOR > 5 PoDoFo::PdfMemDocument doc( fName.toLocal8Bit().data() ); #else PoDoFo::PdfDocument doc( fName.toLocal8Bit().data() ); #endif PoDoFo::PdfPage *curPage = doc.GetPage(0); if (curPage != NULL) { PoDoFo::PdfRect rect = curPage->GetMediaBox(); b = rect.GetWidth() - rect.GetLeft(); h = rect.GetHeight() - rect.GetBottom(); } } catch(PoDoFo::PdfError& e) { qDebug("%s", "PoDoFo error while reading page size!"); e.PrintErrorMsg(); } } #endif baseX = 0; baseY = 0; if (!interactive || (flags & LoadSavePlugin::lfInsertPage)) { m_Doc->setPage(b-x, h-y, 0, 0, 0, 0, 0, 0, false, false); m_Doc->addPage(0); m_Doc->view()->addPage(0, true); baseX = 0; baseY = 0; } else { if (!m_Doc || (flags & LoadSavePlugin::lfCreateDoc)) { m_Doc=ScCore->primaryMainWindow()->doFileNew(b-x, h-y, 0, 0, 0, 0, 0, 0, false, false, 0, false, 0, 1, "Custom", true); ScCore->primaryMainWindow()->HaveNewDoc(); ret = true; baseX = 0; baseY = 0; } } if ((!ret) && (interactive)) { baseX = m_Doc->currentPage()->xOffset(); baseY = m_Doc->currentPage()->yOffset(); } if ((ret) || (!interactive)) { if (b-x > h-y) m_Doc->setPageOrientation(1); else m_Doc->setPageOrientation(0); m_Doc->setPageSize("Custom"); } ColorList::Iterator it; for (it = CustColors.begin(); it != CustColors.end(); ++it) { if (!m_Doc->PageColors.contains(it.key())) m_Doc->PageColors.insert(it.key(), it.value()); } boundingBoxRect.addRect(0, 0, b-x, h-y); Elements.clear(); m_Doc->setLoading(true); m_Doc->DoDrawing = false; if (!(flags & LoadSavePlugin::lfLoadAsPattern)) m_Doc->view()->updatesOn(false); m_Doc->scMW()->setScriptRunning(true); qApp->changeOverrideCursor(QCursor(Qt::WaitCursor)); QString CurDirP = QDir::currentPath(); QDir::setCurrent(fi.path()); if (convert(fName, x, y, b, h)) { // m_Doc->m_Selection->clear(); tmpSel->clear(); QDir::setCurrent(CurDirP); // if ((Elements.count() > 1) && (interactive)) if (Elements.count() > 1) m_Doc->groupObjectsList(Elements); m_Doc->DoDrawing = true; m_Doc->scMW()->setScriptRunning(false); m_Doc->setLoading(false); qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); if ((Elements.count() > 0) && (!ret) && (interactive)) { if (flags & LoadSavePlugin::lfScripted) { bool loadF = m_Doc->isLoading(); m_Doc->setLoading(false); m_Doc->changed(); m_Doc->setLoading(loadF); if (!(flags & LoadSavePlugin::lfLoadAsPattern)) { m_Doc->m_Selection->delaySignalsOn(); for (int dre=0; dre<Elements.count(); ++dre) { m_Doc->m_Selection->addItem(Elements.at(dre), true); } m_Doc->m_Selection->delaySignalsOff(); m_Doc->m_Selection->setGroupRect(); m_Doc->view()->updatesOn(true); } } else { m_Doc->DragP = true; m_Doc->DraggedElem = 0; m_Doc->DragElements.clear(); m_Doc->m_Selection->delaySignalsOn(); for (int dre=0; dre<Elements.count(); ++dre) { tmpSel->addItem(Elements.at(dre), true); } tmpSel->setGroupRect(); ScriXmlDoc *ss = new ScriXmlDoc(); ScElemMimeData* md = new ScElemMimeData(); md->setScribusElem(ss->WriteElem(m_Doc, tmpSel)); delete ss; /*#ifndef Q_WS_MAC*/ // see #2196 m_Doc->itemSelection_DeleteItem(tmpSel); /*#else qDebug() << "psimport: leaving items on page"; #endif*/ m_Doc->view()->updatesOn(true); m_Doc->m_Selection->delaySignalsOff(); // We must copy the TransationSettings object as it is owned // by handleObjectImport method afterwards TransactionSettings* transacSettings = new TransactionSettings(trSettings); m_Doc->view()->handleObjectImport(md, transacSettings); m_Doc->DragP = false; m_Doc->DraggedElem = 0; m_Doc->DragElements.clear(); } } else { m_Doc->changed(); m_Doc->reformPages(); if (!(flags & LoadSavePlugin::lfLoadAsPattern)) m_Doc->view()->updatesOn(true); } success = true; } else { QDir::setCurrent(CurDirP); m_Doc->DoDrawing = true; m_Doc->scMW()->setScriptRunning(false); m_Doc->view()->updatesOn(true); qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); } if (interactive) m_Doc->setLoading(false); //CB If we have a gui we must refresh it if we have used the progressbar if (!(flags & LoadSavePlugin::lfLoadAsPattern)) { if ((showProgress) && (!interactive)) m_Doc->view()->DrawNew(); } return success; }
bool EPSPlug::convert(QString fn, double x, double y, double b, double h) { QStringList args; QString cmd, cmd1, cmd2, cmd3, tmp, tmp2, tmp3, tmp4; // import.prolog do not cope with filenames containing blank spaces // so take care that output filename does not (win32 compatibility) QString tmpFile = getShortPathName(ScPaths::getTempFileDir())+ "/ps.out"; QString errFile = getShortPathName(ScPaths::getTempFileDir())+ "/ps.err"; QString pfad = ScPaths::instance().libDir(); QString pfad2 = QDir::toNativeSeparators(pfad + "import.prolog"); QFileInfo fi = QFileInfo(fn); QString ext = fi.suffix().toLower(); if (progressDialog) { progressDialog->setOverallProgress(1); qApp->processEvents(); } /* // Destill the eps with ghostscript to get a clean eps file QString cleanFile = getShortPathName(ScPaths::getTempFileDir())+ "/clean.eps"; args.append( "-q" ); args.append( "-dNOPAUSE" ); args.append( "-sDEVICE=epswrite" ); args.append( "-dBATCH" ); args.append( "-dSAFER" ); args.append( "-dDEVICEWIDTH=250000" ); args.append( "-dDEVICEHEIGHT=250000" ); args.append( QString("-sOutputFile=%1").arg(QDir::toNativeSeparators(cleanFile)) ); args.append( QDir::toNativeSeparators(fn) ); System(getShortPathName(PrefsManager::instance()->ghostscriptExecutable()), args, errFile, errFile, &cancel); args.clear(); */ args.append( "-q" ); args.append( "-dNOPAUSE" ); args.append( "-dNODISPLAY" ); args.append( "-dBATCH" ); args.append( "-dDELAYBIND" ); // Add any extra font paths being used by Scribus to gs's font search // path We have to use Scribus's prefs context, not a plugin context, to // get to the required information. PrefsContext *pc = PrefsManager::instance()->prefsFile->getContext("Fonts"); PrefsTable *extraFonts = pc->getTable("ExtraFontDirs"); const char sep = ScPaths::envPathSeparator; if (extraFonts->getRowCount() >= 1) cmd = QString("-sFONTPATH=%1").arg(extraFonts->get(0,0)); for (int i = 1; i < extraFonts->getRowCount(); ++i) cmd += QString("%1%2").arg(sep).arg(extraFonts->get(i,0)); if( !cmd.isEmpty() ) args.append( cmd ); // then finish building the command and call gs args.append( QString("-g%1x%2").arg(tmp2.setNum(qRound((b-x)*4))).arg(tmp3.setNum(qRound((h-y)*4))) ); args.append( "-r288"); args.append( "-dTextAlphaBits=4" ); args.append( "-dGraphicsAlphaBits=4" ); args.append( "-c" ); args.append( tmp.setNum(-x) ); args.append( tmp.setNum(-y) ); args.append( "translate" ); args.append( QString("-sTraceFile=%1").arg(QDir::toNativeSeparators(tmpFile)) ); QString exportPath = m_Doc->DocName + "-" + fi.baseName(); QFileInfo exportFi(exportPath); if ( !exportFi.isWritable() ) { PrefsContext* docContext = PrefsManager::instance()->prefsFile->getContext("docdirs", false); QString docDir = "."; QString prefsDocDir=PrefsManager::instance()->documentDir(); if (!prefsDocDir.isEmpty()) docDir = docContext->get("docsopen", prefsDocDir); else docDir = docContext->get("docsopen", "."); exportFi.setFile(docDir + "/" + exportFi.baseName()); } //qDebug() << QString("using export path %1").arg(exportFi.absFilePath()); args.append( QString("-sExportFiles=%1").arg(QDir::toNativeSeparators(exportFi.absoluteFilePath())) ); args.append( pfad2 ); args.append( QDir::toNativeSeparators(fn) ); args.append( "-c" ); args.append( "flush" ); args.append( "cfile" ); args.append( "closefile" ); args.append( "quit" ); QByteArray finalCmd = args.join(" ").toLocal8Bit(); int ret = System(getShortPathName(PrefsManager::instance()->ghostscriptExecutable()), args, errFile, errFile, &cancel); if (ret != 0 && !cancel) { qDebug("PostScript import failed when calling gs as: \n%s\n", finalCmd.data()); qDebug("%s", "Ghostscript diagnostics:\n"); QFile diag(errFile); if (diag.open(QIODevice::ReadOnly) && !diag.atEnd() ) { char buf[121]; while (diag.readLine(buf, 120) > 0) { qDebug("\t%s", buf); } diag.close(); } else { qDebug("%s", "-- no output --"); } if (progressDialog) progressDialog->close(); QString mess = tr("Importing File:\n%1\nfailed!").arg(fn); ScMessageBox::critical(0, tr("Fatal Error"), mess); return false; } if(progressDialog && !cancel) { progressDialog->setOverallProgress(2); progressDialog->setLabel("GI", tr("Generating Items")); qApp->processEvents(); } if (!cancel) { parseOutput(tmpFile, extensionIndicatesEPSorPS(ext)); } QFile::remove(tmpFile); // QFile::remove(cleanFile); if (progressDialog) progressDialog->close(); return true; }
void FDialogPreview::GenPreview(QString name) { QPixmap pm; QString Buffer = ""; updtPix(); if (name.isEmpty()) return; QFileInfo fi = QFileInfo(name); if (fi.isDir()) return; int w = pixmap()->width(); int h = pixmap()->height(); bool mode = false; QString ext = fi.suffix().toLower(); QString formatD(FormatsManager::instance()->extensionListForFormat(FormatsManager::IMAGESIMGFRAME, 1)); QStringList formats = formatD.split("|"); formats.append("pat"); QStringList allFormatsV = LoadSavePlugin::getExtensionsForPreview(FORMATID_ODGIMPORT); if (ext.isEmpty()) ext = getImageType(name); if (formats.contains(ext.toUtf8())) { ScImage im; //No doc to send data anyway, so no doc to get into scimage. CMSettings cms(0, "", Intent_Perceptual); cms.allowColorManagement(false); if (im.loadPicture(name, 1, cms, ScImage::Thumbnail, 72, &mode)) { int ix,iy; if ((im.imgInfo.exifDataValid) && (!im.imgInfo.exifInfo.thumbnail.isNull())) { ix = im.imgInfo.exifInfo.width; iy = im.imgInfo.exifInfo.height; } else { ix = im.width(); iy = im.height(); } int xres = im.imgInfo.xres; int yres = im.imgInfo.yres; QString tmp = ""; QString tmp2 = ""; QImage im2 = im.scaled(w - 5, h - 44, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPainter p; QBrush b(QColor(205,205,205), loadIcon("testfill.png")); // Qt4 FIXME imho should be better pm = *pixmap(); p.begin(&pm); p.fillRect(0, 0, w, h-44, b); p.fillRect(0, h-44, w, 44, QColor(255, 255, 255)); p.drawImage((w - im2.width()) / 2, (h - 44 - im2.height()) / 2, im2); p.drawText(2, h-29, tr("Size:")+" "+tmp.setNum(ix)+" x "+tmp2.setNum(iy)); p.drawText(2, h-17, tr("Resolution:")+" "+tmp.setNum(xres)+" x "+tmp2.setNum(yres)+" "+ tr("DPI")); QString cSpace; if ((extensionIndicatesPDF(ext) || extensionIndicatesEPSorPS(ext)) && (im.imgInfo.type != ImageType7)) cSpace = tr("Unknown"); else cSpace=colorSpaceText(im.imgInfo.colorspace); p.drawText(2, h-5, tr("Colorspace:")+" "+cSpace); p.end(); setPixmap(pm); repaint(); } } else if (allFormatsV.contains(ext.toUtf8())) { FileLoader *fileLoader = new FileLoader(name); int testResult = fileLoader->TestFile(); delete fileLoader; if ((testResult != -1) && (testResult >= FORMATID_ODGIMPORT)) { const FileFormat * fmt = LoadSavePlugin::getFormatById(testResult); if( fmt ) { QImage im = fmt->readThumbnail(name); if (!im.isNull()) { QString desc = tr("Size:")+" "; desc += value2String(im.text("XSize").toDouble(), PrefsManager::instance()->appPrefs.docSetupPrefs.docUnitIndex, true, true); desc += " x "; desc += value2String(im.text("YSize").toDouble(), PrefsManager::instance()->appPrefs.docSetupPrefs.docUnitIndex, true, true); im = im.scaled(w - 5, h - 21, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPainter p; QBrush b(QColor(205,205,205), loadIcon("testfill.png")); pm = *pixmap(); p.begin(&pm); p.fillRect(0, 0, w, h-21, b); p.fillRect(0, h-21, w, 21, QColor(255, 255, 255)); p.drawImage((w - im.width()) / 2, (h - 21 - im.height()) / 2, im); p.drawText(2, h-5, desc); p.end(); setPixmap(pm); repaint(); } } } } else if (ext.toUtf8() == "sml") { QPixmap pmi; QByteArray cf; if (loadRawText(name, cf)) { QString f = QString::fromUtf8(cf.data()); StencilReader *pre = new StencilReader(); pmi = pre->createPreview(f); QImage im = pmi.toImage(); im = im.scaled(w - 5, h - 21, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPainter p; QBrush b(QColor(205,205,205), loadIcon("testfill.png")); pm = *pixmap(); p.begin(&pm); p.fillRect(0, 0, w, h-21, b); p.fillRect(0, h-21, w, 21, QColor(255, 255, 255)); p.drawImage((w - im.width()) / 2, (h - 21 - im.height()) / 2, im); QString desc = tr("Size:")+QString(" %1 x %2").arg(im.width()).arg(im.height()); p.drawText(2, h-5, desc); p.end(); setPixmap(pm); repaint(); delete pre; } } else if (ext.toUtf8() == "shape") { QByteArray cf; if (loadRawText(name, cf)) { QString f = QString::fromUtf8(cf.data()); StencilReader *pre = new StencilReader(); QString f2 = pre->createShape(f); ScPreview *pre2 = new ScPreview(); QImage im = pre2->createPreview(f2); im = im.scaled(w - 5, h - 21, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPainter p; QBrush b(QColor(205,205,205), loadIcon("testfill.png")); pm = *pixmap(); p.begin(&pm); p.fillRect(0, 0, w, h-21, b); p.fillRect(0, h-21, w, 21, QColor(255, 255, 255)); p.drawImage((w - im.width()) / 2, (h - 21 - im.height()) / 2, im); QString desc = tr("Size:")+QString(" %1 x %2").arg(im.width()).arg(im.height()); p.drawText(2, h-5, desc); p.end(); setPixmap(pm); repaint(); delete pre; delete pre2; } } else if (ext.toUtf8() == "sce") { QByteArray cf; if (loadRawText(name, cf)) { QString f; if (cf.left(16) == "<SCRIBUSELEMUTF8") f = QString::fromUtf8(cf.data()); else f = cf.data(); ScPreview *pre = new ScPreview(); QImage im = pre->createPreview(f); im = im.scaled(w - 5, h - 21, Qt::KeepAspectRatio, Qt::SmoothTransformation); QPainter p; QBrush b(QColor(205,205,205), loadIcon("testfill.png")); pm = *pixmap(); p.begin(&pm); p.fillRect(0, 0, w, h-21, b); p.fillRect(0, h-21, w, 21, QColor(255, 255, 255)); p.drawImage((w - im.width()) / 2, (h - 21 - im.height()) / 2, im); QString desc = tr("Size:")+QString(" %1 x %2").arg(im.width()).arg(im.height()); p.drawText(2, h-5, desc); p.end(); setPixmap(pm); repaint(); delete pre; } } else { ScSlaInfoReader slaInfos; if (slaInfos.readInfos(name)) { QString Title = tr("Title:")+" "; QString ti2 = slaInfos.title(); if (ti2.isEmpty()) ti2= tr("No Title"); Title += ti2+"\n"; QString Author = tr("Author:")+" "; QString au2 = slaInfos.author(); if (au2.isEmpty()) au2 = tr("Unknown"); Author += au2+"\n"; QString Format = tr("File Format:")+" "; QString fm2 = slaInfos.format(); if (fm2.isEmpty()) fm2 = tr("Unknown"); Format += fm2; setText( tr("Scribus Document")+"\n\n"+Title+Author+Format); } else if ((ext == "txt") || (ext == "html") || (ext == "xml")) { if (loadText(name, &Buffer)) setText(Buffer.left(200)); } } }
bool PaletteLoader_PS::isFileSupported(const QString & fileName) const { QFileInfo fInfo(fileName); QString ext = fInfo.suffix().toLower(); return extensionIndicatesEPSorPS(ext); }