diff --git a/src/plugins/coreplugin/basefilewizardfactory.cpp b/src/plugins/coreplugin/basefilewizardfactory.cpp index 754513af776..f4c2e2887f7 100644 --- a/src/plugins/coreplugin/basefilewizardfactory.cpp +++ b/src/plugins/coreplugin/basefilewizardfactory.cpp @@ -243,18 +243,18 @@ BaseFileWizardFactory::OverwriteResult BaseFileWizardFactory::promptOverwrite(Ge // Prompt to overwrite existing files. PromptOverwriteDialog overwriteDialog; // Scripts cannot handle overwrite - overwriteDialog.setFiles(Utils::transform(existingFiles, &FilePath::toString)); + overwriteDialog.setFiles(existingFiles); for (const GeneratedFile &file : std::as_const(*files)) if (file.attributes() & GeneratedFile::CustomGeneratorAttribute) - overwriteDialog.setFileEnabled(file.filePath().toString(), false); + overwriteDialog.setFileEnabled(file.filePath(), false); if (overwriteDialog.exec() != QDialog::Accepted) return OverwriteCanceled; - const QStringList existingFilesToKeep = overwriteDialog.uncheckedFiles(); + const FilePaths existingFilesToKeep = overwriteDialog.uncheckedFiles(); if (existingFilesToKeep.size() == files->size()) // All exist & all unchecked->Cancel. return OverwriteCanceled; // Set 'keep' attribute in files - for (const QString &keepFile : std::as_const(existingFilesToKeep)) { - const int i = indexOfFile(*files, FilePath::fromString(keepFile).cleanPath()); + for (const FilePath &keepFile : existingFilesToKeep) { + const int i = indexOfFile(*files, keepFile.cleanPath()); QTC_ASSERT(i != -1, return OverwriteCanceled); GeneratedFile &file = (*files)[i]; file.setAttributes(file.attributes() | GeneratedFile::KeepExistingFileAttribute); diff --git a/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp b/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp index b15363eae2f..cabc942004b 100644 --- a/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp +++ b/src/plugins/coreplugin/dialogs/promptoverwritedialog.cpp @@ -3,6 +3,7 @@ #include "promptoverwritedialog.h" +#include #include #include @@ -16,6 +17,15 @@ enum { FileNameRole = Qt::UserRole + 1 }; +using namespace Utils; + +namespace Core { + +static FilePath fileNameOfItem(const QStandardItem *item) +{ + return FilePath::fromString(item->data(FileNameRole).toString()); +} + /*! \class Core::PromptOverwriteDialog \inmodule QtCreator @@ -27,13 +37,6 @@ enum { FileNameRole = Qt::UserRole + 1 }; can select the files to overwrite. */ -static inline QString fileNameOfItem(const QStandardItem *item) -{ - return item->data(FileNameRole).toString(); -} - -namespace Core { - PromptOverwriteDialog::PromptOverwriteDialog(QWidget *parent) : QDialog(parent), m_label(new QLabel), @@ -56,15 +59,15 @@ PromptOverwriteDialog::PromptOverwriteDialog(QWidget *parent) : mainLayout->addWidget(bb); } -void PromptOverwriteDialog::setFiles(const QStringList &l) +void PromptOverwriteDialog::setFiles(const FilePaths &l) { // Format checkable list excluding common path - const QString nativeCommonPath = QDir::toNativeSeparators(Utils::commonPath(l)); - for (const QString &fileName : l) { - const QString nativeFileName = QDir::toNativeSeparators(fileName); + const QString nativeCommonPath = FileUtils::commonPath(l).toUserOutput(); + for (const FilePath &fileName : l) { + const QString nativeFileName = fileName.toUserOutput(); const int length = nativeFileName.size() - nativeCommonPath.size() - 1; QStandardItem *item = new QStandardItem(nativeFileName.right(length)); - item->setData(QVariant(fileName), FileNameRole); + item->setData(QVariant(fileName.toString()), FileNameRole); item->setFlags(Qt::ItemIsEnabled); item->setCheckable(true); item->setCheckState(Qt::Checked); @@ -76,7 +79,7 @@ void PromptOverwriteDialog::setFiles(const QStringList &l) m_label->setText(message); } -QStandardItem *PromptOverwriteDialog::itemForFile(const QString &f) const +QStandardItem *PromptOverwriteDialog::itemForFile(const FilePath &f) const { const int rowCount = m_model->rowCount(); for (int r = 0; r < rowCount; ++r) { @@ -87,9 +90,9 @@ QStandardItem *PromptOverwriteDialog::itemForFile(const QString &f) const return nullptr; } -QStringList PromptOverwriteDialog::files(Qt::CheckState cs) const +FilePaths PromptOverwriteDialog::files(Qt::CheckState cs) const { - QStringList result; + FilePaths result; const int rowCount = m_model->rowCount(); for (int r = 0; r < rowCount; ++r) { const QStandardItem *item = m_model->item(r, 0); @@ -99,7 +102,7 @@ QStringList PromptOverwriteDialog::files(Qt::CheckState cs) const return result; } -void PromptOverwriteDialog::setFileEnabled(const QString &f, bool e) +void PromptOverwriteDialog::setFileEnabled(const FilePath &f, bool e) { if (QStandardItem *item = itemForFile(f)) { Qt::ItemFlags flags = item->flags(); @@ -111,24 +114,24 @@ void PromptOverwriteDialog::setFileEnabled(const QString &f, bool e) } } -bool PromptOverwriteDialog::isFileEnabled(const QString &f) const +bool PromptOverwriteDialog::isFileEnabled(const FilePath &f) const { if (const QStandardItem *item = itemForFile(f)) return (item->flags() & Qt::ItemIsEnabled); return false; } -void PromptOverwriteDialog::setFileChecked(const QString &f, bool e) +void PromptOverwriteDialog::setFileChecked(const FilePath &f, bool e) { if (QStandardItem *item = itemForFile(f)) item->setCheckState(e ? Qt::Checked : Qt::Unchecked); } -bool PromptOverwriteDialog::isFileChecked(const QString &f) const +bool PromptOverwriteDialog::isFileChecked(const FilePath &f) const { if (const QStandardItem *item = itemForFile(f)) return item->checkState() == Qt::Checked; return false; } -} // namespace Core +} // Core diff --git a/src/plugins/coreplugin/dialogs/promptoverwritedialog.h b/src/plugins/coreplugin/dialogs/promptoverwritedialog.h index eff25e770bb..c7bde2851db 100644 --- a/src/plugins/coreplugin/dialogs/promptoverwritedialog.h +++ b/src/plugins/coreplugin/dialogs/promptoverwritedialog.h @@ -5,6 +5,8 @@ #include "../core_global.h" +#include + #include QT_BEGIN_NAMESPACE @@ -16,8 +18,6 @@ QT_END_NAMESPACE namespace Core { -// TODO: Port to Utils::FilePaths - // Documentation inside. class CORE_EXPORT PromptOverwriteDialog : public QDialog { @@ -25,24 +25,24 @@ class CORE_EXPORT PromptOverwriteDialog : public QDialog public: explicit PromptOverwriteDialog(QWidget *parent = nullptr); - void setFiles(const QStringList &); + void setFiles(const Utils::FilePaths &); - void setFileEnabled(const QString &f, bool e); - bool isFileEnabled(const QString &f) const; + void setFileEnabled(const Utils::FilePath &f, bool e); + bool isFileEnabled(const Utils::FilePath &f) const; - void setFileChecked(const QString &f, bool e); - bool isFileChecked(const QString &f) const; + void setFileChecked(const Utils::FilePath &f, bool e); + bool isFileChecked(const Utils::FilePath &f) const; - QStringList checkedFiles() const { return files(Qt::Checked); } - QStringList uncheckedFiles() const { return files(Qt::Unchecked); } + Utils::FilePaths checkedFiles() const { return files(Qt::Checked); } + Utils::FilePaths uncheckedFiles() const { return files(Qt::Unchecked); } private: - QStandardItem *itemForFile(const QString &f) const; - QStringList files(Qt::CheckState cs) const; + QStandardItem *itemForFile(const Utils::FilePath &f) const; + Utils::FilePaths files(Qt::CheckState cs) const; QLabel *m_label; QTreeView *m_view; QStandardItemModel *m_model; }; -} // namespace Core +} // Core diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp index 9e33dd0b5e7..50c5dbdac8f 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardgeneratorfactory.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -136,14 +137,14 @@ bool JsonWizardGenerator::allDone(const JsonWizard *wizard, GeneratedFile *file, JsonWizardGenerator::OverwriteResult JsonWizardGenerator::promptForOverwrite(JsonWizard::GeneratorFiles *files, QString *errorMessage) { - QStringList existingFiles; + FilePaths existingFiles; bool oddStuffFound = false; for (const JsonWizard::GeneratorFile &f : std::as_const(*files)) { if (f.file.filePath().exists() && !(f.file.attributes() & GeneratedFile::ForceOverwrite) && !(f.file.attributes() & GeneratedFile::KeepExistingFileAttribute)) - existingFiles.append(f.file.filePath().toString()); + existingFiles.append(f.file.filePath()); } if (existingFiles.isEmpty()) return OverwriteOk; @@ -151,23 +152,23 @@ JsonWizardGenerator::OverwriteResult JsonWizardGenerator::promptForOverwrite(Jso // Before prompting to overwrite existing files, loop over files and check // if there is anything blocking overwriting them (like them being links or folders). // Format a file list message as ( " [readonly], [folder]"). - const QString commonExistingPath = Utils::commonPath(existingFiles); + const QString commonExistingPath = FileUtils::commonPath(existingFiles).toUserOutput(); + const int commonPathSize = commonExistingPath.size(); QString fileNamesMsgPart; - for (const QString &fileName : std::as_const(existingFiles)) { - const QFileInfo fi(fileName); - if (fi.exists()) { + for (const FilePath &filePath : std::as_const(existingFiles)) { + if (filePath.exists()) { if (!fileNamesMsgPart.isEmpty()) fileNamesMsgPart += QLatin1String(", "); - const QString namePart = QDir::toNativeSeparators(fileName.mid(commonExistingPath.size() + 1)); - if (fi.isDir()) { + const QString namePart = filePath.toUserOutput().mid(commonPathSize); + if (filePath.isDir()) { oddStuffFound = true; fileNamesMsgPart += QCoreApplication::translate("ProjectExplorer::JsonWizardGenerator", "%1 [folder]") .arg(namePart); - } else if (fi.isSymLink()) { + } else if (filePath.isSymLink()) { oddStuffFound = true; fileNamesMsgPart += QCoreApplication::translate("ProjectExplorer::JsonWizardGenerator", "%1 [symbolic link]") .arg(namePart); - } else if (!fi.isWritable()) { + } else if (!filePath.isWritableDir() && !filePath.isWritableFile()) { oddStuffFound = true; fileNamesMsgPart += QCoreApplication::translate("ProjectExplorer::JsonWizardGenerator", "%1 [read only]") .arg(namePart); @@ -178,7 +179,7 @@ JsonWizardGenerator::OverwriteResult JsonWizardGenerator::promptForOverwrite(Jso if (oddStuffFound) { *errorMessage = QCoreApplication::translate("ProjectExplorer::JsonWizardGenerator", "The directory %1 contains files which cannot be overwritten:\n%2.") - .arg(QDir::toNativeSeparators(commonExistingPath)).arg(fileNamesMsgPart); + .arg(commonExistingPath).arg(fileNamesMsgPart); return OverwriteError; } @@ -189,17 +190,17 @@ JsonWizardGenerator::OverwriteResult JsonWizardGenerator::promptForOverwrite(Jso overwriteDialog.setFiles(existingFiles); for (const JsonWizard::GeneratorFile &file : std::as_const(*files)) if (!file.generator->canKeepExistingFiles()) - overwriteDialog.setFileEnabled(file.file.filePath().toString(), false); + overwriteDialog.setFileEnabled(file.file.filePath(), false); if (overwriteDialog.exec() != QDialog::Accepted) return OverwriteCanceled; - const QSet existingFilesToKeep = Utils::toSet(overwriteDialog.uncheckedFiles()); + const QSet existingFilesToKeep = Utils::toSet(overwriteDialog.uncheckedFiles()); if (existingFilesToKeep.size() == files->size()) // All exist & all unchecked->Cancel. return OverwriteCanceled; // Set 'keep' attribute in files for (JsonWizard::GeneratorFile &file : *files) { - if (!existingFilesToKeep.contains(file.file.filePath().toString())) + if (!existingFilesToKeep.contains(file.file.filePath())) continue; file.file.setAttributes(file.file.attributes() | GeneratedFile::KeepExistingFileAttribute);