forked from qt-creator/qt-creator
Core: Convert promptoverwritedialog to FilePath
Change-Id: I4c1fc7b8c8956f671a3beef8834fe8039333482e Reviewed-by: Eike Ziller <eike.ziller@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -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);
|
||||
|
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "promptoverwritedialog.h"
|
||||
|
||||
#include <utils/fileutils.h>
|
||||
#include <utils/stringutils.h>
|
||||
|
||||
#include <QTreeView>
|
||||
@@ -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
|
||||
|
@@ -5,6 +5,8 @@
|
||||
|
||||
#include "../core_global.h"
|
||||
|
||||
#include <utils/filepath.h>
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
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
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include <texteditor/textindenter.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/fileutils.h>
|
||||
#include <utils/mimeutils.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/stringutils.h>
|
||||
@@ -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 ( "<file1> [readonly], <file2> [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<QString> existingFilesToKeep = Utils::toSet(overwriteDialog.uncheckedFiles());
|
||||
const QSet<FilePath> 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);
|
||||
|
Reference in New Issue
Block a user