void QmlProjectRunConfiguration::updateEnabled() { bool qmlFileFound = false; if (mainScriptSource() == FileInEditor) { Utils::MimeDatabase mimeDataBase; IDocument *document = EditorManager::currentDocument(); Utils::MimeType mainScriptMimeType = mimeDataBase.mimeTypeForFile(mainScript()); if (document) { m_currentFileFilename = document->filePath().toString(); if (mainScriptMimeType.matchesName(QLatin1String(ProjectExplorer::Constants::QML_MIMETYPE))) qmlFileFound = true; } if (!document || mainScriptMimeType.matchesName(QLatin1String(QmlJSTools::Constants::QMLPROJECT_MIMETYPE))) { // find a qml file with lowercase filename. This is slow, but only done // in initialization/other border cases. foreach (const QString &filename, target()->project()->files(Project::AllFiles)) { const QFileInfo fi(filename); if (!filename.isEmpty() && fi.baseName()[0].isLower() && mimeDataBase.mimeTypeForFile(fi).matchesName(QLatin1String(ProjectExplorer::Constants::QML_MIMETYPE))) { m_currentFileFilename = filename; qmlFileFound = true; break; } } }
// Switch between form ('ui') and source file ('cpp'): // Find corresponding 'other' file, simply assuming it is in the same directory. static QString otherFile() { // Determine mime type of current file. const QString current = currentFile(); if (current.isEmpty()) return QString(); Utils::MimeDatabase mdb; const Utils::MimeType currentMimeType = mdb.mimeTypeForFile(current); if (!currentMimeType.isValid()) return QString(); // Determine potential suffixes of candidate files // 'ui' -> 'cpp', 'cpp/h' -> 'ui'. QStringList candidateSuffixes; if (currentMimeType.matchesName(QLatin1String(FORM_MIMETYPE))) { candidateSuffixes += mdb.mimeTypeForName( QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE)).suffixes(); } else if (currentMimeType.matchesName(QLatin1String(CppTools::Constants::CPP_SOURCE_MIMETYPE)) || currentMimeType.matchesName(QLatin1String(CppTools::Constants::CPP_HEADER_MIMETYPE))) { candidateSuffixes += mdb.mimeTypeForName(QLatin1String(FORM_MIMETYPE)).suffixes(); } else { return QString(); } // Try to find existing file with desired suffix const QFileInfo currentFI(current); const QString currentBaseName = currentFI.path() + QLatin1Char('/') + currentFI.baseName() + QLatin1Char('.'); foreach (const QString &candidateSuffix, candidateSuffixes) { const QFileInfo fi(currentBaseName + candidateSuffix); if (fi.isFile()) return fi.absoluteFilePath(); } return QString(); }