diff options
author | Tobias Hunger <tobias.hunger@theqtcompany.com> | 2015-11-03 13:03:39 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@theqtcompany.com> | 2015-11-13 10:55:44 +0000 |
commit | e4841600815018c419858c3502e80ed28b8d60d7 (patch) | |
tree | 70ca023940bfb865fe412a2198cb2f25091435f3 /src | |
parent | 26c872f3e6a5fa0d40a434d5c6cff024d3b9885e (diff) | |
download | qt-creator-e4841600815018c419858c3502e80ed28b8d60d7.tar.gz |
SelectableFilesModel: Use Utils::FileName
* Fix fallout caused by that
Change-Id: If1f068b060b414402918118a826a0f9405c976cd
Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
Diffstat (limited to 'src')
8 files changed, 97 insertions, 85 deletions
diff --git a/src/plugins/genericprojectmanager/filesselectionwizardpage.cpp b/src/plugins/genericprojectmanager/filesselectionwizardpage.cpp index da5b17e19d..5a6956269d 100644 --- a/src/plugins/genericprojectmanager/filesselectionwizardpage.cpp +++ b/src/plugins/genericprojectmanager/filesselectionwizardpage.cpp @@ -126,7 +126,7 @@ void FilesSelectionWizardPage::initializePage() this, &FilesSelectionWizardPage::parsingProgress); connect(m_model, &ProjectExplorer::SelectableFilesModel::parsingFinished, this, &FilesSelectionWizardPage::parsingFinished); - m_model->startParsing(m_genericProjectWizardDialog->path()); + m_model->startParsing(Utils::FileName::fromString(m_genericProjectWizardDialog->path())); m_hideFilesFilterLabel->setVisible(false); m_hideFilesfilterLineEdit->setVisible(false); @@ -145,9 +145,9 @@ void FilesSelectionWizardPage::cleanupPage() m_model->cancel(); } -void FilesSelectionWizardPage::parsingProgress(const QString &text) +void FilesSelectionWizardPage::parsingProgress(const Utils::FileName &text) { - m_label->setText(tr("Generating file list...\n\n%1").arg(text)); + m_label->setText(tr("Generating file list...\n\n%1").arg(text.toUserOutput())); } void FilesSelectionWizardPage::parsingFinished() @@ -175,14 +175,14 @@ bool FilesSelectionWizardPage::isComplete() const return m_finished; } -QStringList FilesSelectionWizardPage::selectedPaths() const +QList<Utils::FileName> FilesSelectionWizardPage::selectedPaths() const { - return m_model ? m_model->selectedPaths() : QStringList(); + return m_model ? m_model->selectedPaths() : QList<Utils::FileName>(); } -QStringList FilesSelectionWizardPage::selectedFiles() const +QList<Utils::FileName> FilesSelectionWizardPage::selectedFiles() const { - return m_model ? m_model->selectedFiles() : QStringList(); + return m_model ? m_model->selectedFiles() : QList<Utils::FileName>(); } void FilesSelectionWizardPage::applyFilter() diff --git a/src/plugins/genericprojectmanager/filesselectionwizardpage.h b/src/plugins/genericprojectmanager/filesselectionwizardpage.h index f3c8c2f30c..a5cbdcfda9 100644 --- a/src/plugins/genericprojectmanager/filesselectionwizardpage.h +++ b/src/plugins/genericprojectmanager/filesselectionwizardpage.h @@ -40,6 +40,7 @@ class QTreeView; class QLineEdit; QT_END_NAMESPACE +namespace Utils { class FileName; } namespace ProjectExplorer { class SelectableFilesModel; } namespace GenericProjectManager { @@ -56,12 +57,12 @@ public: bool isComplete() const; void initializePage(); void cleanupPage(); - QStringList selectedFiles() const; - QStringList selectedPaths() const; + QList<Utils::FileName> selectedFiles() const; + QList<Utils::FileName> selectedPaths() const; private slots: void applyFilter(); - void parsingProgress(const QString &text); + void parsingProgress(const Utils::FileName &text); void parsingFinished(); private: diff --git a/src/plugins/genericprojectmanager/genericprojectplugin.cpp b/src/plugins/genericprojectmanager/genericprojectplugin.cpp index f3c249877c..32ed375fe4 100644 --- a/src/plugins/genericprojectmanager/genericprojectplugin.cpp +++ b/src/plugins/genericprojectmanager/genericprojectplugin.cpp @@ -47,6 +47,8 @@ #include <projectexplorer/projecttree.h> #include <projectexplorer/selectablefilesmodel.h> +#include <utils/algorithm.h> +#include <utils/fileutils.h> #include <utils/mimetypes/mimedatabase.h> #include <QtPlugin> @@ -89,10 +91,11 @@ void GenericProjectPlugin::editFiles() auto genericProject = qobject_cast<GenericProject *>(ProjectTree::currentProject()); if (!genericProject) return; - SelectableFilesDialogEditFiles sfd(genericProject->projectFilePath().toFileInfo().path(), genericProject->files(), - ICore::mainWindow()); + SelectableFilesDialogEditFiles sfd(genericProject->projectFilePath(), + Utils::transform(genericProject->files(), [](const QString &f) { return Utils::FileName::fromString(f); }), + ICore::mainWindow()); if (sfd.exec() == QDialog::Accepted) - genericProject->setFiles(sfd.selectedFiles()); + genericProject->setFiles(Utils::transform(sfd.selectedFiles(), &Utils::FileName::toString)); } } // namespace Internal diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.cpp b/src/plugins/genericprojectmanager/genericprojectwizard.cpp index 647757ab7d..4326f37601 100644 --- a/src/plugins/genericprojectmanager/genericprojectwizard.cpp +++ b/src/plugins/genericprojectmanager/genericprojectwizard.cpp @@ -35,6 +35,8 @@ #include <projectexplorer/projectexplorerconstants.h> #include <projectexplorer/customwizard/customwizard.h> +#include <utils/algorithm.h> +#include <utils/fileutils.h> #include <utils/filewizardpage.h> #include <utils/mimetypes/mimedatabase.h> @@ -84,12 +86,12 @@ QString GenericProjectWizardDialog::path() const return m_firstPage->path(); } -QStringList GenericProjectWizardDialog::selectedPaths() const +QList<Utils::FileName> GenericProjectWizardDialog::selectedPaths() const { return m_secondPage->selectedPaths(); } -QStringList GenericProjectWizardDialog::selectedFiles() const +QList<Utils::FileName> GenericProjectWizardDialog::selectedFiles() const { return m_secondPage->selectedFiles(); } @@ -156,7 +158,7 @@ Core::GeneratedFiles GenericProjectWizard::generateFiles(const QWizard *w, const QString filesFileName = QFileInfo(dir, projectName + QLatin1String(".files")).absoluteFilePath(); const QString includesFileName = QFileInfo(dir, projectName + QLatin1String(".includes")).absoluteFilePath(); const QString configFileName = QFileInfo(dir, projectName + QLatin1String(".config")).absoluteFilePath(); - const QStringList paths = wizard->selectedPaths(); + const QStringList paths = Utils::transform(wizard->selectedPaths(), &Utils::FileName::toString); Utils::MimeDatabase mdb; Utils::MimeType headerTy = mdb.mimeTypeForName(QLatin1String("text/x-chdr")); @@ -180,7 +182,7 @@ Core::GeneratedFiles GenericProjectWizard::generateFiles(const QWizard *w, generatedCreatorFile.setContents(QLatin1String("[General]\n")); generatedCreatorFile.setAttributes(Core::GeneratedFile::OpenProjectAttribute); - QStringList sources = wizard->selectedFiles(); + QStringList sources = Utils::transform(wizard->selectedFiles(), &Utils::FileName::toString); for (int i = 0; i < sources.length(); ++i) sources[i] = dir.relativeFilePath(sources[i]); diff --git a/src/plugins/genericprojectmanager/genericprojectwizard.h b/src/plugins/genericprojectmanager/genericprojectwizard.h index 716cab87f5..f69c396244 100644 --- a/src/plugins/genericprojectmanager/genericprojectwizard.h +++ b/src/plugins/genericprojectmanager/genericprojectwizard.h @@ -35,7 +35,10 @@ #include <coreplugin/basefilewizardfactory.h> #include <utils/wizard.h> -namespace Utils { class FileWizardPage; } +namespace Utils { +class FileName; +class FileWizardPage; +} // namespace Utils namespace GenericProjectManager { namespace Internal { @@ -51,8 +54,8 @@ public: QString path() const; void setPath(const QString &path); - QStringList selectedFiles() const; - QStringList selectedPaths() const; + QList<Utils::FileName> selectedFiles() const; + QList<Utils::FileName> selectedPaths() const; QString projectName() const; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index c4db9a25e6..f3e6907f04 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -3147,11 +3147,12 @@ void ProjectExplorerPluginPrivate::addExistingDirectory() QTC_ASSERT(folderNode, return); - SelectableFilesDialogAddDirectory dialog(directoryFor(ProjectTree::currentNode()), QStringList(), ICore::mainWindow()); + SelectableFilesDialogAddDirectory dialog(Utils::FileName::fromString(directoryFor(ProjectTree::currentNode())), + QList<Utils::FileName>(), ICore::mainWindow()); dialog.setAddFileFilter(folderNode->addFileFilter()); if (dialog.exec() == QDialog::Accepted) - ProjectExplorerPlugin::addExistingFiles(folderNode, dialog.selectedFiles()); + ProjectExplorerPlugin::addExistingFiles(folderNode, Utils::transform(dialog.selectedFiles(), &Utils::FileName::toString)); } void ProjectExplorerPlugin::addExistingFiles(FolderNode *folderNode, const QStringList &filePaths) diff --git a/src/plugins/projectexplorer/selectablefilesmodel.cpp b/src/plugins/projectexplorer/selectablefilesmodel.cpp index ae8b916ba7..4bc41cd9cc 100644 --- a/src/plugins/projectexplorer/selectablefilesmodel.cpp +++ b/src/plugins/projectexplorer/selectablefilesmodel.cpp @@ -50,25 +50,22 @@ namespace ProjectExplorer { SelectableFilesModel::SelectableFilesModel(QObject *parent) : QAbstractItemModel(parent), m_root(0), m_allFiles(true) { - connect(&m_watcher, SIGNAL(finished()), this, SLOT(buildTreeFinished())); + connect(&m_watcher, &QFutureWatcherBase::finished, + this, &SelectableFilesModel::buildTreeFinished); m_root = new Tree; m_root->parent = 0; } -void SelectableFilesModel::setInitialMarkedFiles(const QStringList &files) +void SelectableFilesModel::setInitialMarkedFiles(const QList<Utils::FileName> &files) { m_files = files.toSet(); - m_outOfBaseDirFiles.clear(); - QString base = m_baseDir + QLatin1Char('/'); - foreach (const QString &file, m_files) - if (!file.startsWith(base)) - m_outOfBaseDirFiles.append(file); - + m_outOfBaseDirFiles + = Utils::filtered(m_files, [this](const Utils::FileName &fn) { return !fn.isChildOf(m_baseDir); }); m_allFiles = false; } -void SelectableFilesModel::startParsing(const QString &baseDir) +void SelectableFilesModel::startParsing(const Utils::FileName &baseDir) { m_watcher.cancel(); m_watcher.waitForFinished(); @@ -124,18 +121,21 @@ bool SelectableFilesModel::filter(Tree *t) return Utils::anyOf(m_hideFilesFilter, matchesTreeName); } -void SelectableFilesModel::buildTree(const QString &baseDir, Tree *tree, QFutureInterface<void> &fi, int symlinkDepth) +void SelectableFilesModel::buildTree(const Utils::FileName &baseDir, Tree *tree, + QFutureInterface<void> &fi, int symlinkDepth) { if (symlinkDepth == 0) return; - const QFileInfoList fileInfoList = QDir(baseDir).entryInfoList(QDir::Files | - QDir::Dirs | - QDir::NoDotAndDotDot); + + const QFileInfoList fileInfoList = QDir(baseDir.toString()).entryInfoList(QDir::Files | + QDir::Dirs | + QDir::NoDotAndDotDot); bool allChecked = true; bool allUnchecked = true; foreach (const QFileInfo &fileInfo, fileInfoList) { + Utils::FileName fn = Utils::FileName(fileInfo); if (m_futureCount % 100) { - emit parsingProgress(fileInfo.absoluteFilePath()); + emit parsingProgress(fn); if (fi.isCanceled()) return; } @@ -144,9 +144,9 @@ void SelectableFilesModel::buildTree(const QString &baseDir, Tree *tree, QFuture Tree *t = new Tree; t->parent = tree; t->name = fileInfo.fileName(); - t->fullPath = fileInfo.filePath(); + t->fullPath = fn; t->isDir = true; - buildTree(fileInfo.filePath(), t, fi, symlinkDepth - fileInfo.isSymLink()); + buildTree(fn, t, fi, symlinkDepth - fileInfo.isSymLink()); allChecked &= t->checked == Qt::Checked; allUnchecked &= t->checked == Qt::Unchecked; tree->childDirectories.append(t); @@ -154,8 +154,8 @@ void SelectableFilesModel::buildTree(const QString &baseDir, Tree *tree, QFuture Tree *t = new Tree; t->parent = tree; t->name = fileInfo.fileName(); - t->checked = m_allFiles || m_files.contains(fileInfo.absoluteFilePath()) ? Qt::Checked : Qt::Unchecked; - t->fullPath = fileInfo.filePath(); + t->checked = m_allFiles || m_files.contains(fn) ? Qt::Checked : Qt::Unchecked; + t->fullPath = fn; t->isDir = false; allChecked &= t->checked == Qt::Checked; allUnchecked &= t->checked == Qt::Unchecked; @@ -246,7 +246,7 @@ QVariant SelectableFilesModel::data(const QModelIndex &index, int role) const return t->checked; if (role == Qt::DecorationRole) { if (t->icon.isNull()) - t->icon = Core::FileIconProvider::icon(t->fullPath); + t->icon = Core::FileIconProvider::icon(t->fullPath.toFileInfo()); return t->icon; } return QVariant(); @@ -318,14 +318,14 @@ Qt::ItemFlags SelectableFilesModel::flags(const QModelIndex &index) const return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable; } -QStringList SelectableFilesModel::selectedPaths() const +QList<Utils::FileName> SelectableFilesModel::selectedPaths() const { - QStringList result; + QList<Utils::FileName> result; collectPaths(m_root, &result); return result; } -void SelectableFilesModel::collectPaths(Tree *root, QStringList *result) const +void SelectableFilesModel::collectPaths(Tree *root, QList<Utils::FileName> *result) const { if (root->checked == Qt::Unchecked) return; @@ -334,19 +334,19 @@ void SelectableFilesModel::collectPaths(Tree *root, QStringList *result) const collectPaths(t, result); } -QStringList SelectableFilesModel::selectedFiles() const +QList<Utils::FileName> SelectableFilesModel::selectedFiles() const { - QStringList result = m_outOfBaseDirFiles; + QList<Utils::FileName> result = m_outOfBaseDirFiles.toList(); collectFiles(m_root, &result); return result; } -QStringList SelectableFilesModel::preservedFiles() const +QList<Utils::FileName> SelectableFilesModel::preservedFiles() const { - return m_outOfBaseDirFiles; + return m_outOfBaseDirFiles.toList(); } -void SelectableFilesModel::collectFiles(Tree *root, QStringList *result) const +void SelectableFilesModel::collectFiles(Tree *root, QList<Utils::FileName> *result) const { if (root->checked == Qt::Unchecked) return; @@ -519,8 +519,8 @@ Qt::CheckState SelectableFilesModel::applyFilter(const QModelIndex &index) // SelectableFilesDialogs ////////// -SelectableFilesDialogEditFiles::SelectableFilesDialogEditFiles(const QString &path, - const QStringList &files, +SelectableFilesDialogEditFiles::SelectableFilesDialogEditFiles(const Utils::FileName &path, + const QList<Utils::FileName> &files, QWidget *parent) : QDialog(parent) { @@ -639,13 +639,10 @@ void SelectableFilesDialogEditFiles::parsingFinished() m_view->expand(QModelIndex()); smartExpand(m_selectableFilesModel->index(0,0, QModelIndex())); applyFilter(); - const QStringList &preservedFiles = m_selectableFilesModel->preservedFiles(); - if (preservedFiles.isEmpty()) { - m_preservedFiles->hide(); - } else { - m_preservedFiles->show(); - m_preservedFiles->setText(tr("Not showing %n files that are outside of the base directory.\nThese files are preserved.", 0, preservedFiles.count())); - } + + const QList<Utils::FileName> preservedFiles = m_selectableFilesModel->preservedFiles(); + m_preservedFiles->setText(tr("Not showing %n files that are outside of the base directory.\nThese files are preserved.", 0, preservedFiles.count())); + m_preservedFiles->setVisible(!preservedFiles.isEmpty()); } void SelectableFilesDialogEditFiles::smartExpand(const QModelIndex &index) @@ -658,7 +655,7 @@ void SelectableFilesDialogEditFiles::smartExpand(const QModelIndex &index) } } -QStringList SelectableFilesDialogEditFiles::selectedFiles() const +QList<Utils::FileName> SelectableFilesDialogEditFiles::selectedFiles() const { return m_selectableFilesModel->selectedFiles(); } @@ -679,8 +676,9 @@ void SelectableFilesDialogEditFiles::applyFilter() m_selectableFilesModel->applyFilter(showFilesFilter, hideFilesFilter); } -SelectableFilesDialogAddDirectory::SelectableFilesDialogAddDirectory(const QString &path, - const QStringList &files, QWidget *parent) : +SelectableFilesDialogAddDirectory::SelectableFilesDialogAddDirectory(const Utils::FileName &path, + const QList<Utils::FileName> &files, + QWidget *parent) : SelectableFilesDialogEditFiles(path, files, parent) { setWindowTitle(tr("Add Existing Directory")); @@ -690,12 +688,12 @@ SelectableFilesDialogAddDirectory::SelectableFilesDialogAddDirectory(const QStri createPathChooser(static_cast<QVBoxLayout*>(layout()), path); } -void SelectableFilesDialogAddDirectory::createPathChooser(QVBoxLayout *layout, const QString &path) +void SelectableFilesDialogAddDirectory::createPathChooser(QVBoxLayout *layout, const Utils::FileName &path) { QHBoxLayout *hbox = new QHBoxLayout; m_pathChooser = new Utils::PathChooser; - m_pathChooser->setPath(path); + m_pathChooser->setFileName(path); m_pathChooser->setHistoryCompleter(QLatin1String("PE.AddToProjectDir.History")); m_sourceDirectoryLabel = new QLabel(tr("Source directory:")); hbox->addWidget(m_sourceDirectoryLabel); @@ -728,7 +726,7 @@ void SelectableFilesDialogAddDirectory::startParsing() { setWidgetsEnabled(false); - m_selectableFilesModel->startParsing(m_pathChooser->path()); + m_selectableFilesModel->startParsing(m_pathChooser->fileName()); } void SelectableFilesDialogAddDirectory::setWidgetsEnabled(bool enabled) diff --git a/src/plugins/projectexplorer/selectablefilesmodel.h b/src/plugins/projectexplorer/selectablefilesmodel.h index f267399d56..dfa91835b5 100644 --- a/src/plugins/projectexplorer/selectablefilesmodel.h +++ b/src/plugins/projectexplorer/selectablefilesmodel.h @@ -40,6 +40,8 @@ #include <QLabel> #include "projectexplorer_export.h" +#include <utils/fileutils.h> + namespace Utils { class PathChooser; } QT_BEGIN_NAMESPACE @@ -57,7 +59,7 @@ struct Tree QList<Tree *> files; QList<Tree *> visibleFiles; QIcon icon; - QString fullPath; + Utils::FileName fullPath; Tree *parent; }; @@ -92,7 +94,7 @@ public: SelectableFilesModel(QObject *parent); ~SelectableFilesModel(); - void setInitialMarkedFiles(const QStringList &files); + void setInitialMarkedFiles(const QList<Utils::FileName> &files); int columnCount(const QModelIndex &parent) const; int rowCount(const QModelIndex &parent) const; @@ -103,11 +105,11 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; Qt::ItemFlags flags(const QModelIndex &index) const; - QStringList selectedFiles() const; - QStringList selectedPaths() const; - QStringList preservedFiles() const; + QList<Utils::FileName> selectedFiles() const; + QList<Utils::FileName> selectedPaths() const; + QList<Utils::FileName> preservedFiles() const; - void startParsing(const QString &baseDir); + void startParsing(const Utils::FileName &baseDir); void cancel(); void applyFilter(const QString &selectFilesfilter, const QString &hideFilesfilter); @@ -115,7 +117,7 @@ public: signals: void parsingFinished(); - void parsingProgress(const QString &filename); + void parsingProgress(const Utils::FileName &fileName); private slots: void buildTreeFinished(); @@ -125,22 +127,24 @@ private: Qt::CheckState applyFilter(const QModelIndex &index); bool filter(Tree *t); void run(QFutureInterface<void> &fi); - void collectFiles(Tree *root, QStringList *result) const; - void collectPaths(Tree *root, QStringList *result) const; - void buildTree(const QString &baseDir, Tree *tree, QFutureInterface<void> &fi, int symlinkDepth); + void collectFiles(Tree *root, QList<Utils::FileName> *result) const; + void collectPaths(Tree *root, QList<Utils::FileName> *result) const; + void buildTree(const Utils::FileName &baseDir, Tree *tree, QFutureInterface<void> &fi, int symlinkDepth); void deleteTree(Tree *tree); void propagateUp(const QModelIndex &index); void propagateDown(const QModelIndex &index); void selectAllFiles(Tree *root); - Tree *m_root; + + Tree *m_root = 0; + // Used in the future thread need to all not used after calling startParsing - QString m_baseDir; - QSet<QString> m_files; - QStringList m_outOfBaseDirFiles; + Utils::FileName m_baseDir; + QSet<Utils::FileName> m_files; + QSet<Utils::FileName> m_outOfBaseDirFiles; QFutureWatcher<void> m_watcher; - Tree *m_rootForFuture; - int m_futureCount; - bool m_allFiles; + Tree *m_rootForFuture = 0; + int m_futureCount = 0; + bool m_allFiles = true; QList<Glob> m_hideFilesFilter; QList<Glob> m_showFilesFilter; @@ -151,9 +155,9 @@ class PROJECTEXPLORER_EXPORT SelectableFilesDialogEditFiles : public QDialog Q_OBJECT public: - SelectableFilesDialogEditFiles(const QString &path, const QStringList &files, QWidget *parent); + SelectableFilesDialogEditFiles(const Utils::FileName &path, const QList<Utils::FileName> &files, QWidget *parent); ~SelectableFilesDialogEditFiles(); - QStringList selectedFiles() const; + QList<Utils::FileName> selectedFiles() const; void setAddFileFilter(const QString &filter); @@ -188,7 +192,7 @@ class SelectableFilesDialogAddDirectory : public SelectableFilesDialogEditFiles Q_OBJECT public: - SelectableFilesDialogAddDirectory(const QString &path, const QStringList &files, QWidget *parent); + SelectableFilesDialogAddDirectory(const Utils::FileName &path, const QList<Utils::FileName> &files, QWidget *parent); private slots: void validityOfDirectoryChanged(bool validState); @@ -201,7 +205,7 @@ private: QPushButton *m_startParsingButton; void setWidgetsEnabled(bool enabled); - void createPathChooser(QVBoxLayout *layout, const QString &path); + void createPathChooser(QVBoxLayout *layout, const Utils::FileName &path); }; } // namespace ProjectExplorer |