projectporter.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 406 行 · 第 1/2 页

CPP
406
字号
*/void ProjectPorter::portFiles(QString basePath, QStringList fileNames){    foreach(QString fileName, fileNames) {        QString fullFilePath;        QFileInfo fileInfo(fileName);        if (fileInfo.isAbsolute()) {            fullFilePath = QDir::cleanPath(fileName);        } else {            fullFilePath = QDir::cleanPath(basePath + QLatin1String("/") + fileName);        }        QFileInfo fullFilePathInfo(fullFilePath);        if (!fullFilePathInfo.exists()) {            printf("Could not find file: %s\n", QDir::toNativeSeparators(fullFilePath).toLocal8Bit().constData());            continue;        }        if (!processedFilesSet.contains(fullFilePath)){            Logger::instance()->globalState[QLatin1String("currentFileName")] = fullFilePath;            filePorter.port(fullFilePath);            processedFilesSet.insert(fullFilePath);        }    }}void ProjectPorter::portProFile(QString fileName, QMap<QString, QString> tagMap){    // Read pro file.    QFile proFile(fileName);    if (!proFile.open(QIODevice::ReadOnly))        return;    const QByteArray contents = proFile.readAll();    const QByteArray lineEnding = detectLineEndings(contents);    proFile.seek(0);    QTextStream proTextStream(&proFile);    QStringList lines;    while (!proTextStream.atEnd())        lines += proTextStream.readLine();    proFile.close();    // Find out what modules we should add to the QT variable.     QSet<QByteArray> qtModules;    // Add qt3support to the Qt tag    qtModules.insert(QByteArray("qt3support"));    // Read CONFIG and add other modules.    QStringList config = tagMap[QLatin1String("CONFIG")].split(QLatin1String(" "), QString::SkipEmptyParts);    if (config.contains(QLatin1String("opengl")))        qtModules.insert(QByteArray("opengl"));    if (config.contains(QLatin1String("xml")))        qtModules.insert(QByteArray("xml"));    if (config.contains(QLatin1String("sql")))        qtModules.insert(QByteArray("sql"));    if (config.contains(QLatin1String("network")))        qtModules.insert(QByteArray("network"));    // Get set of used modules from the file porter.    qtModules += filePorter.usedQtModules();    // Remove gui and core.    qtModules.remove(QByteArray("gui"));    qtModules.remove(QByteArray("core"));    // Qt3Support is already added.    qtModules.remove(QByteArray("3support"));    // Remove modules already present in the QT variable.    QStringList qt = tagMap[QLatin1String("QT")].split(QLatin1String(" "), QString::SkipEmptyParts);    foreach(QString name, qt) {        qtModules.remove(name.toLatin1());    }    Logger *logger = Logger::instance();    bool changesMade = false;    if (!qtModules.isEmpty()) {        changesMade = true;        QString insertText = QLatin1String("QT += ");        foreach(QByteArray module, qtModules) {            insertText += QString::fromLatin1(module) + QLatin1Char(' ');        }        lines += QString(QLatin1String("#The following line was inserted by qt3to4"));        lines += insertText;         QString logText = QLatin1String("In file ")                        + logger->globalState.value(QLatin1String("currentFileName"))                        + QLatin1String(": Added entry ")                        + insertText;        logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText));    }    // Add uic3 if we have forms, and change FORMS and INTERFACES to FORMS3    if (!tagMap[QLatin1String("FORMS")].isEmpty() || !tagMap[QLatin1String("INTERFACES")].isEmpty()) {        changesMade = true;        lines += QString(QLatin1String("#The following line was inserted by qt3to4"));        QString insertText = QLatin1String("CONFIG += uic3") + QString::fromLatin1(lineEnding.constData());        lines += insertText;        QString logText = QLatin1String("In file ")                        + logger->globalState.value(QLatin1String("currentFileName"))                        + QLatin1String(": Added entry ")                        + insertText;        logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText));        const QString formsToForms3(QLatin1String("#The following line was changed from FORMS to FORMS3 by qt3to4"));        const QString interfacesToForms3(QLatin1String("#The following line was changed from INTERFACES to FORMS3 by qt3to4"));        for (int i = 0; i < lines.count(); ++i) {            QString cLine = lines.at(i);            cLine = cLine.trimmed();            if (cLine.startsWith(QLatin1String("FORMS"))) {                lines[i].replace(QLatin1String("FORMS"), QLatin1String("FORMS3"));                lines.insert(i, formsToForms3);                ++i;                QString logText = QLatin1String("In file ")                    + logger->globalState.value(QLatin1String("currentFileName"))                    + QLatin1String(": Renamed FORMS to FORMS3");                logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText));            } else if (cLine.startsWith(QLatin1String("INTERFACES"))) {                lines[i].replace(QLatin1String("INTERFACES"), QLatin1String("FORMS3"));                lines.insert(i, interfacesToForms3);                ++i;                QString logText = QLatin1String("In file ")                    + logger->globalState.value(QLatin1String("currentFileName"))                    + QLatin1String(": Renamed INTERFACES to FORMS3");                logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText));            }        }    }    // Comment out any REQUIRES tag.    if (!tagMap[QLatin1String("REQUIRES")].isEmpty()) {        changesMade = true;        QString insertText(QLatin1String("#The following line was commented out by qt3to4"));        for (int i = 0; i < lines.count(); ++i) {            if (lines.at(i).startsWith(QLatin1String("REQUIRES"))) {                QString lineCopy = lines.at(i);                lineCopy.prepend(QLatin1Char('#'));                lines[i] = lineCopy;                lines.insert(i, insertText);                ++i; //skip ahead, we just insertet a line at i.                QString logText = QLatin1String("In file ")                            + logger->globalState.value(QLatin1String("currentFileName"))                            + QLatin1String(": Commented out REQUIRES section");                logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText));            }        }    }    // Check if any changes has been made.    if (!changesMade) {        Logger::instance()->addEntry(            new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"),  QLatin1String("No changes made to file ") + fileName));        Logger::instance()->commitSection();        return;    }    // Write lines to array.    QByteArray bob;    QTextStream outProFileStream(&bob);    foreach(QString line, lines)        outProFileStream << line << lineEnding;    outProFileStream.flush();    // Write array to file, commit log if write was successful.    FileWriter::WriteResult result = FileWriter::instance()->writeFileVerbously(fileName, bob);    if (result == FileWriter::WriteSucceeded) {        logger->commitSection();    } else if (result == FileWriter::WriteFailed) {        logger->revertSection();        logger->addEntry(            new PlainLogEntry(QLatin1String("Error"), QLatin1String("Porting"),  QLatin1String("Error writing to file ") + fileName));    } else if (result == FileWriter::WriteSkipped) {        logger->revertSection();        logger->addEntry(            new PlainLogEntry(QLatin1String("Error"), QLatin1String("Porting"),  QLatin1String("User skipped file ") + fileName));    } else {        // Internal error.        logger->revertSection();        const QString errorString = QLatin1String("Internal error in qt3to4 - FileWriter returned invalid result code while writing to ") + fileName;        logger->addEntry(new PlainLogEntry(QLatin1String("Error"), QLatin1String("Porting"), errorString));    }}/*    Enables attribute generation for fileName. The file is looked up using the    provied includeFiles object.*/void ProjectPorter::enableAttributes(const IncludeFiles &includeFiles, const QString &fileName){    QString resolvedFilePath = includeFiles.resolve(fileName);    if (!QFile::exists(resolvedFilePath))            resolvedFilePath = includeFiles.angleBracketLookup(fileName);    if (!QFile::exists(resolvedFilePath))        return;    TokenContainer tokenContainer = preprocessorCache.sourceTokens(resolvedFilePath);    TokenAttributes *attributes = tokenContainer.tokenAttributes();    attributes->addAttribute("CreateAttributes", "True");}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?