// makes sure that capitalization of directories is canonical. // This mimics the logic in QDeclarative_isFileCaseCorrect QTCREATOR_UTILS_EXPORT QString normalizePathName(const QString &name) { QString canonicalName = getShortPathName(name); if (canonicalName.isEmpty()) return name; canonicalName = getLongPathName(canonicalName); if (canonicalName.isEmpty()) return name; // Upper case drive letter if (canonicalName.size() > 2 && canonicalName.at(1) == QLatin1Char(':')) canonicalName[0] = canonicalName.at(0).toUpper(); return canonicalName; }
bool ImportPdfPlugin::import(QString fileName, int flags) { if (!checkFlags(flags)) return false; if( fileName.isEmpty() ) { flags |= lfInteractive; PrefsContext* prefs = PrefsManager::instance()->prefsFile->getPluginContext("importpdf"); QString wdir = prefs->get("wdir", "."); CustomFDialog diaf(ScCore->primaryMainWindow(), wdir, QObject::tr("Open"), tr("All Supported Formats")+" (*.pdf *.PDF);;All Files (*)"); if (diaf.exec()) { fileName = diaf.selectedFile(); prefs->set("wdir", fileName.left(fileName.lastIndexOf("/"))); } else return true; } m_Doc=ScCore->primaryMainWindow()->doc; UndoTransaction* activeTransaction = NULL; bool emptyDoc = (m_Doc == NULL); bool hasCurrentPage = (m_Doc && m_Doc->currentPage()); TransactionSettings trSettings; trSettings.targetName = hasCurrentPage ? m_Doc->currentPage()->getUName() : ""; trSettings.targetPixmap = Um::IImageFrame; trSettings.actionName = Um::ImportXfig; trSettings.description = fileName; trSettings.actionPixmap = Um::IXFIG; if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted)) UndoManager::instance()->setUndoEnabled(false); if (UndoManager::undoEnabled()) activeTransaction = new UndoTransaction(UndoManager::instance()->beginTransaction(trSettings)); bool isCleanedFile = false; QString cleanFile = ""; QFileInfo fi(fileName); QStringList exts = QStringList() << "eps" << "epsf" << "epsi" << "eps2" << "eps3" << "epi" << "ept" << "ps"; if (exts.contains(fi.suffix().toLower())) { if (ScCore->haveGS()) { // Destill the eps/ps with ghostscript to get a clean pdf file bool cancel = false; QString errFile = getShortPathName(ScPaths::getTempFileDir())+ "/ps.err"; cleanFile = getShortPathName(ScPaths::getTempFileDir())+ "/clean.pdf"; QStringList args; args.append( "-q" ); args.append( "-dNOPAUSE" ); args.append( "-sDEVICE=pdfwrite" ); args.append( "-dBATCH" ); args.append( "-dSAFER" ); if (extensionIndicatesEPS(fi.suffix().toLower())) args.append("-dEPSCrop"); args.append("-dCompatibilityLevel=1.4"); args.append( QString("-sOutputFile=%1").arg(QDir::toNativeSeparators(cleanFile)) ); args.append( QDir::toNativeSeparators(fileName) ); System(getShortPathName(PrefsManager::instance()->ghostscriptExecutable()), args, errFile, errFile, &cancel); args.clear(); isCleanedFile = true; } else { qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); QMessageBox::warning(ScCore->primaryMainWindow(), CommonStrings::trWarning, tr("The Import plugin cannot handle Postscript files"), 1, 0, 0); qApp->changeOverrideCursor(QCursor(Qt::WaitCursor)); return false; } } PdfPlug *dia = new PdfPlug(m_Doc, flags); Q_CHECK_PTR(dia); if (isCleanedFile) dia->import(cleanFile, trSettings, flags); else dia->import(fileName, trSettings, flags); if (activeTransaction) { activeTransaction->commit(); delete activeTransaction; activeTransaction = NULL; } if (emptyDoc || !(flags & lfInteractive) || !(flags & lfScripted)) UndoManager::instance()->setUndoEnabled(true); delete dia; if (isCleanedFile) QFile::remove(cleanFile); return true; }
// ------------------------------------------------------------------------ void SimMessage::startSimulator() { // Using the Doc pointer here is risky as the user may have closed // the schematic, but converting the SPICE netlists is (hopefully) // faster than the user (I have no other idea). QString SimTime; QStringList CommandLine; QString SimPath = QDir::convertSeparators (QucsHomeDir.absPath()); #ifdef __MINGW32__ QString QucsDigi = "qucsdigi.bat"; #else QString QucsDigi = "qucsdigi"; #endif SimOpt = NULL; if(DocWidget->inherits("QTextEdit")) { // Take VHDL file in memory as it could contain unsaved changes. Stream << ((TextDoc*)DocWidget)->text(); NetlistFile.close(); ProgText->insert(tr("done.\n")); // of "creating netlist... SimTime = ((TextDoc*)DocWidget)->SimTime; #ifdef __MINGW32__ CommandLine << getShortPathName(QucsSettings.BinDir + QucsDigi) << "netlist.txt" << DataSet << SimTime << getShortPathName(SimPath) << getShortPathName(QucsSettings.BinDir); #else CommandLine << QucsSettings.BinDir + QucsDigi << "netlist.txt" << DataSet << SimTime << SimPath << QucsSettings.BinDir; #endif } else { // output NodeSets, SPICE simulations etc. Stream << Collect.join("\n") << '\n'; SimTime = ((Schematic*)DocWidget)->createNetlist(Stream, SimPorts); NetlistFile.close(); if(SimTime.at(0) == '§') { ErrText->insert(SimTime.mid(1)); FinishSimulation(-1); return; } ProgText->insert(tr("done.\n")); // of "creating netlist... if(SimPorts < 0) { if((SimOpt = findOptimization((Schematic*)DocWidget))) { ((Optimize_Sim*)SimOpt)->createASCOnetlist(); CommandLine << QucsSettings.AscoDir + "asco" << "-qucs" << QucsHomeDir.filePath("asco_netlist.txt") << "-o" << "asco_out"; } else { CommandLine << QucsSettings.BinDir + "qucsator" << "-b" << "-g" << "-i" << QucsHomeDir.filePath("netlist.txt") << "-o" << DataSet; } } else { #ifdef __MINGW32__ CommandLine << getShortPathName(QucsSettings.BinDir + QucsDigi) << "netlist.txt" << DataSet << SimTime << getShortPathName(SimPath) << getShortPathName(QucsSettings.BinDir) << "-c"; #else CommandLine << QucsSettings.BinDir + QucsDigi << "netlist.txt" << DataSet << SimTime << SimPath << QucsSettings.BinDir << "-c"; #endif } } SimProcess.setArguments(CommandLine); disconnect(&SimProcess, 0, 0, 0); connect(&SimProcess, SIGNAL(readyReadStderr()), SLOT(slotDisplayErr())); connect(&SimProcess, SIGNAL(readyReadStdout()), SLOT(slotDisplayMsg())); connect(&SimProcess, SIGNAL(processExited()), SLOT(slotSimEnded())); #ifdef SPEEDUP_PROGRESSBAR waitForUpdate = false; #endif wasLF = false; ProgressText = ""; if(!SimProcess.start()) { ErrText->insert(tr("ERROR: Cannot start simulator!")); FinishSimulation(-1); return; } }
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; }