QmlProjectManager: FilePathify further

Change-Id: I8d83cc93778f8786c30e0aaef459c51005139b19
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2023-01-06 09:47:53 +01:00
parent 92b23cb827
commit ec43a6c005
6 changed files with 61 additions and 65 deletions

View File

@@ -173,18 +173,17 @@ public:
runControl->target()->buildSystem());
QTC_ASSERT(qmlBuildSystem, return);
const QString mainScript = aspect->mainScript;
const QString currentFile = aspect->currentFile;
const FilePath mainScript = aspect->mainScript;
const FilePath currentFile = aspect->currentFile;
const QString mainScriptFromProject = qmlBuildSystem->targetFile(
FilePath::fromString(mainScript)).path();
const QString mainScriptFromProject = qmlBuildSystem->targetFile(mainScript).path();
QStringList qmlProjectRunConfigurationArguments = cmd.splitArguments();
if (!currentFile.isEmpty() && qmlProjectRunConfigurationArguments.last().contains(mainScriptFromProject)) {
qmlProjectRunConfigurationArguments.removeLast();
cmd = CommandLine(cmd.executable(), qmlProjectRunConfigurationArguments);
cmd.addArg(currentFile);
cmd.addArg(currentFile.path());
}
}

View File

@@ -32,9 +32,9 @@ namespace QmlProjectManager {
const char M_CURRENT_FILE[] = "CurrentFile";
const char CURRENT_FILE[] = QT_TRANSLATE_NOOP("::QmlProjectManager", "<Current File>");
static bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
static bool caseInsensitiveLessThan(const FilePath &s1, const FilePath &s2)
{
return s1.toLower() < s2.toLower();
return s1.toString().toCaseFolded() < s2.toString().toCaseFolded();
}
QmlMainFileAspect::QmlMainFileAspect(Target *target)
@@ -89,12 +89,12 @@ void QmlMainFileAspect::fromMap(const QVariantMap &map)
void QmlMainFileAspect::updateFileComboBox()
{
QDir projectDir(m_target->project()->projectDirectory().toString());
const FilePath projectDir = m_target->project()->projectDirectory();
if (mainScriptSource() == FileInProjectFile) {
const QString mainScriptInFilePath = projectDir.relativeFilePath(mainScript());
const FilePath mainScriptInFilePath = projectDir.relativeChildPath(mainScript());
m_fileListModel.clear();
m_fileListModel.appendRow(new QStandardItem(mainScriptInFilePath));
m_fileListModel.appendRow(new QStandardItem(mainScriptInFilePath.toString()));
if (m_fileListCombo)
m_fileListCombo->setEnabled(false);
return;
@@ -106,27 +106,25 @@ void QmlMainFileAspect::updateFileComboBox()
m_fileListModel.appendRow(new QStandardItem(CURRENT_FILE));
QModelIndex currentIndex;
QStringList sortedFiles = Utils::transform(m_target->project()->files(Project::SourceFiles),
&Utils::FilePath::toString);
FilePaths sortedFiles = m_target->project()->files(Project::SourceFiles);
// make paths relative to project directory
QStringList relativeFiles;
for (const QString &fn : std::as_const(sortedFiles))
relativeFiles += projectDir.relativeFilePath(fn);
FilePaths relativeFiles;
for (const FilePath &fn : std::as_const(sortedFiles))
relativeFiles += projectDir.relativeChildPath(fn);
sortedFiles = relativeFiles;
std::stable_sort(sortedFiles.begin(), sortedFiles.end(), caseInsensitiveLessThan);
QString mainScriptPath;
FilePath mainScriptPath;
if (mainScriptSource() != FileInEditor)
mainScriptPath = projectDir.relativeFilePath(mainScript());
mainScriptPath = projectDir.relativeChildPath(mainScript());
for (const QString &fn : std::as_const(sortedFiles)) {
QFileInfo fileInfo(fn);
if (fileInfo.suffix() != "qml")
for (const FilePath &fn : std::as_const(sortedFiles)) {
if (fn.suffixView() != u"qml")
continue;
auto item = new QStandardItem(fn);
auto item = new QStandardItem(fn.toString());
m_fileListModel.appendRow(item);
if (mainScriptPath == fn)
@@ -170,7 +168,7 @@ void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &
m_mainScriptFilename.clear();
} else { // FileInSettings
m_scriptFile = settingsPath;
m_mainScriptFilename = m_target->project()->projectDirectory().toString() + '/' + m_scriptFile;
m_mainScriptFilename = m_target->project()->projectDirectory() / m_scriptFile;
}
emit changed();
@@ -180,14 +178,11 @@ void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &
/**
Returns absolute path to main script file.
*/
QString QmlMainFileAspect::mainScript() const
FilePath QmlMainFileAspect::mainScript() const
{
if (!qmlBuildSystem()->mainFile().isEmpty()) {
const QString pathInProject = qmlBuildSystem()->mainFile();
if (QFileInfo(pathInProject).isAbsolute())
return pathInProject;
else
return QDir(qmlBuildSystem()->canonicalProjectDir().toString()).absoluteFilePath(pathInProject);
const FilePath pathInProject = qmlBuildSystem()->mainFile();
return qmlBuildSystem()->canonicalProjectDir().resolvePath(pathInProject);
}
if (!m_mainScriptFilename.isEmpty())
@@ -196,7 +191,7 @@ QString QmlMainFileAspect::mainScript() const
return m_currentFileFilename;
}
QString QmlMainFileAspect::currentFile() const
FilePath QmlMainFileAspect::currentFile() const
{
return m_currentFileFilename;
}
@@ -207,7 +202,7 @@ void QmlMainFileAspect::changeCurrentFile(Core::IEditor *editor)
editor = EditorManager::currentEditor();
if (editor)
m_currentFileFilename = editor->document()->filePath().toString();
m_currentFileFilename = editor->document()->filePath();
emit changed();
}
@@ -219,7 +214,7 @@ bool QmlMainFileAspect::isQmlFilePresent()
IDocument *document = EditorManager::currentDocument();
const MimeType mainScriptMimeType = mimeTypeForFile(mainScript());
if (document) {
m_currentFileFilename = document->filePath().toString();
m_currentFileFilename = document->filePath();
if (mainScriptMimeType.matchesName(ProjectExplorer::Constants::QML_MIMETYPE)
|| mainScriptMimeType.matchesName(ProjectExplorer::Constants::QMLUI_MIMETYPE)) {
qmlFileFound = true;
@@ -229,13 +224,13 @@ bool QmlMainFileAspect::isQmlFilePresent()
|| mainScriptMimeType.matchesName(QmlJSTools::Constants::QMLPROJECT_MIMETYPE)) {
// find a qml file with lowercase filename. This is slow, but only done
// in initialization/other border cases.
const auto files = m_target->project()->files(Project::SourceFiles);
const FilePaths files = m_target->project()->files(Project::SourceFiles);
for (const FilePath &filename : files) {
if (!filename.isEmpty() && filename.baseName().at(0).isLower()) {
const MimeType type = mimeTypeForFile(filename);
if (type.matchesName(ProjectExplorer::Constants::QML_MIMETYPE)
|| type.matchesName(ProjectExplorer::Constants::QMLUI_MIMETYPE)) {
m_currentFileFilename = filename.toString();
m_currentFileFilename = filename;
qmlFileFound = true;
break;
}
@@ -252,4 +247,5 @@ QmlBuildSystem *QmlMainFileAspect::qmlBuildSystem() const
{
return static_cast<QmlBuildSystem *>(m_target->buildSystem());
}
} // namespace QmlProjectManager
} // QmlProjectManager

View File

@@ -38,8 +38,8 @@ public:
struct Data : BaseAspect::Data
{
QString mainScript;
QString currentFile;
Utils::FilePath mainScript;
Utils::FilePath currentFile;
};
void addToLayout(Utils::Layouting::LayoutBuilder &builder) final;
@@ -52,8 +52,8 @@ public:
void setScriptSource(MainScriptSource source, const QString &settingsPath = QString());
QString mainScript() const;
QString currentFile() const;
Utils::FilePath mainScript() const;
Utils::FilePath currentFile() const;
void changeCurrentFile(Core::IEditor *editor = nullptr);
bool isQmlFilePresent();
QmlBuildSystem *qmlBuildSystem() const;
@@ -64,9 +64,9 @@ public:
QStandardItemModel m_fileListModel;
QString m_scriptFile;
// absolute path to current file (if being used)
QString m_currentFileFilename;
Utils::FilePath m_currentFileFilename;
// absolute path to selected main script (if being used)
QString m_mainScriptFilename;
Utils::FilePath m_mainScriptFilename;
};
} // namespace QmlProjectManager
} // QmlProjectManager

View File

@@ -250,7 +250,9 @@ void QmlBuildSystem::parseProject(RefreshOptions options)
}
}
bool QmlBuildSystem::setFileSettingInProjectFile(const QString &setting, const Utils::FilePath &mainFilePath, const QString &oldFile)
bool QmlBuildSystem::setFileSettingInProjectFile(const QString &setting,
const FilePath &mainFilePath,
const FilePath &oldFile)
{
// make sure to change it also in the qmlproject file
const Utils::FilePath qmlProjectFilePath = project()->projectFilePath();
@@ -283,7 +285,7 @@ bool QmlBuildSystem::setFileSettingInProjectFile(const QString &setting, const U
auto index = fileContent.lastIndexOf("}");
fileContent.insert(index, addedText);
} else {
QString originalFileName = oldFile;
QString originalFileName = oldFile.path();
originalFileName.replace(".", "\\.");
const QRegularExpression expression(QString("%1\\s*\"(%2)\"").arg(settingQmlCode).arg(originalFileName));
@@ -328,43 +330,42 @@ void QmlBuildSystem::refresh(RefreshOptions options)
emit projectChanged();
}
QString QmlBuildSystem::mainFile() const
FilePath QmlBuildSystem::mainFile() const
{
if (m_projectItem)
return m_projectItem->mainFile();
return QString();
return FilePath::fromString(m_projectItem->mainFile());
return {};
}
QString QmlBuildSystem::mainUiFile() const
FilePath QmlBuildSystem::mainUiFile() const
{
if (m_projectItem)
return m_projectItem->mainUiFile();
return QString();
return FilePath::fromString(m_projectItem->mainUiFile());
return {};
}
Utils::FilePath QmlBuildSystem::mainFilePath() const
FilePath QmlBuildSystem::mainFilePath() const
{
return projectDirectory().pathAppended(mainFile());
return projectDirectory().resolvePath(mainFile());
}
Utils::FilePath QmlBuildSystem::mainUiFilePath() const
FilePath QmlBuildSystem::mainUiFilePath() const
{
return projectDirectory().pathAppended(mainUiFile());
return projectDirectory().resolvePath(mainUiFile());
}
bool QmlBuildSystem::setMainFileInProjectFile(const Utils::FilePath &newMainFilePath)
bool QmlBuildSystem::setMainFileInProjectFile(const FilePath &newMainFilePath)
{
return setFileSettingInProjectFile("mainFile", newMainFilePath, mainFile());
}
bool QmlBuildSystem::setMainUiFileInProjectFile(const Utils::FilePath &newMainUiFilePath)
bool QmlBuildSystem::setMainUiFileInProjectFile(const FilePath &newMainUiFilePath)
{
return setMainUiFileInMainFile(newMainUiFilePath)
&& setFileSettingInProjectFile("mainUiFile", newMainUiFilePath, mainUiFile());
}
bool QmlBuildSystem::setMainUiFileInMainFile(const Utils::FilePath &newMainUiFilePath)
bool QmlBuildSystem::setMainUiFileInMainFile(const FilePath &newMainUiFilePath)
{
Core::FileChangeBlocker fileChangeBlocker(mainFilePath());
const QList<Core::IEditor *> editors = Core::DocumentModel::editorsForFilePath(mainFilePath());
@@ -793,9 +794,9 @@ bool QmlBuildSystem::deleteFiles(Node *context, const FilePaths &filePaths)
bool QmlBuildSystem::renameFile(Node * context, const FilePath &oldFilePath, const FilePath &newFilePath)
{
if (dynamic_cast<QmlProjectNode *>(context)) {
if (oldFilePath.endsWith(mainFile()))
if (oldFilePath.endsWith(mainFile().path()))
return setMainFileInProjectFile(newFilePath);
if (oldFilePath.endsWith(mainUiFile()))
if (oldFilePath.endsWith(mainUiFile().path()))
return setMainUiFileInProjectFile(newFilePath);
return true;

View File

@@ -53,8 +53,8 @@ public:
void refresh(RefreshOptions options);
Utils::FilePath canonicalProjectDir() const;
QString mainFile() const;
QString mainUiFile() const;
Utils::FilePath mainFile() const;
Utils::FilePath mainUiFile() const;
Utils::FilePath mainFilePath() const;
Utils::FilePath mainUiFilePath() const;
@@ -106,7 +106,7 @@ signals:
private:
bool setFileSettingInProjectFile(const QString &setting,
const Utils::FilePath &mainFilePath,
const QString &oldFile);
const Utils::FilePath &oldFile);
std::unique_ptr<QmlProjectItem> m_projectItem;
Utils::FilePath m_canonicalProjectDir;

View File

@@ -54,7 +54,7 @@ private:
QString disabledReason() const final;
bool isEnabled() const final;
QString mainScript() const;
FilePath mainScript() const;
FilePath qmlRuntimeFilePath() const;
void createQtVersionAspect();
@@ -108,7 +108,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
cmd.addArg("widget");
}
const FilePath main = bs->targetFile(FilePath::fromString(mainScript()));
const FilePath main = bs->targetFile(mainScript());
if (!main.isEmpty())
cmd.addArg(main.nativePath());
@@ -292,7 +292,7 @@ bool QmlProjectRunConfiguration::isEnabled() const
&& activeBuildSystem()->hasParsingData();
}
QString QmlProjectRunConfiguration::mainScript() const
FilePath QmlProjectRunConfiguration::mainScript() const
{
return m_qmlMainFileAspect->mainScript();
}