diff --git a/src/plugins/bazaar/commiteditor.cpp b/src/plugins/bazaar/commiteditor.cpp index 332f7539493..c2372d06f1a 100644 --- a/src/plugins/bazaar/commiteditor.cpp +++ b/src/plugins/bazaar/commiteditor.cpp @@ -61,8 +61,9 @@ void CommitEditor::setFields(const QString &repositoryRoot, bazaarWidget->setFields(branch, userName, email); m_fileModel = new VcsBase::SubmitFileModel(this); + m_fileModel->setRepositoryRoot(repositoryRoot); foreach (const VcsBase::VcsBaseClient::StatusItem &item, repoStatus) if (item.flags != QLatin1String("Unknown")) m_fileModel->addFile(item.file, item.flags); - setFileModel(m_fileModel, repositoryRoot); + setFileModel(m_fileModel); } diff --git a/src/plugins/clearcase/clearcasesubmiteditor.cpp b/src/plugins/clearcase/clearcasesubmiteditor.cpp index 2f36dabcafb..f4936c4cb99 100644 --- a/src/plugins/clearcase/clearcasesubmiteditor.cpp +++ b/src/plugins/clearcase/clearcasesubmiteditor.cpp @@ -58,11 +58,12 @@ void ClearCaseSubmitEditor::setStatusList(const QStringList &statusOutput) { typedef QStringList::const_iterator ConstIterator; auto model = new VcsBase::SubmitFileModel(this); + model->setRepositoryRoot(checkScriptWorkingDirectory()); const ConstIterator cend = statusOutput.constEnd(); for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it) model->addFile(*it, QLatin1String("C")); - setFileModel(model, checkScriptWorkingDirectory()); + setFileModel(model); if (statusOutput.count() > 1) submitEditorWidget()->addKeep(); } diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 298e154c877..819b9b73c69 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -174,6 +174,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d) setEmptyFileListEnabled(m_commitType == AmendCommit); // Allow for just correcting the message m_model = new GitSubmitFileModel(this); + m_model->setRepositoryRoot(d.panelInfo.repository); if (!d.files.isEmpty()) { for (QList::const_iterator it = d.files.constBegin(); it != d.files.constEnd(); ++it) { @@ -192,7 +193,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d) QVariant(static_cast(state))); } } - setFileModel(m_model, d.panelInfo.repository); + setFileModel(m_model); } void GitSubmitEditor::slotDiffSelected(const QList &rows) diff --git a/src/plugins/mercurial/commiteditor.cpp b/src/plugins/mercurial/commiteditor.cpp index 724ce2d100f..4ab9e4f5b7b 100644 --- a/src/plugins/mercurial/commiteditor.cpp +++ b/src/plugins/mercurial/commiteditor.cpp @@ -64,6 +64,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra mercurialWidget->setFields(repositoryRoot.absoluteFilePath(), branch, userName, email); fileModel = new SubmitFileModel(this); + fileModel->setRepositoryRoot(repositoryRoot.absoluteFilePath()); QStringList shouldTrack; @@ -74,8 +75,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra fileModel->addFile(item.file, item.flags, Unchecked); } - VcsBaseSubmitEditor::filterUntrackedFilesOfProject(repositoryRoot.absoluteFilePath(), - &shouldTrack); + VcsBaseSubmitEditor::filterUntrackedFilesOfProject(fileModel->repositoryRoot(), &shouldTrack); foreach (const QString &track, shouldTrack) { foreach (const VcsBaseClient::StatusItem &item, repoStatus) { @@ -84,7 +84,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra } } - setFileModel(fileModel, repositoryRoot.absoluteFilePath()); + setFileModel(fileModel); } QString CommitEditor::committerInfo() diff --git a/src/plugins/subversion/subversionsubmiteditor.cpp b/src/plugins/subversion/subversionsubmiteditor.cpp index 9483d720bc6..21186879c86 100644 --- a/src/plugins/subversion/subversionsubmiteditor.cpp +++ b/src/plugins/subversion/subversionsubmiteditor.cpp @@ -47,13 +47,14 @@ void SubversionSubmitEditor::setStatusList(const QList &statusOu { typedef QList::const_iterator ConstIterator; auto model = new VcsBase::SubmitFileModel(this); + // Hack to allow completion in "description" field : completion needs a root repository, the + // checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin) + model->setRepositoryRoot(checkScriptWorkingDirectory()); const ConstIterator cend = statusOutput.constEnd(); for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it) model->addFile(it->second, it->first); - // Hack to allow completion in "description" field : completion needs a root repository, the - // checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin) - setFileModel(model, this->checkScriptWorkingDirectory()); + setFileModel(model); } QByteArray SubversionSubmitEditor::fileContents() const diff --git a/src/plugins/vcsbase/submitfilemodel.cpp b/src/plugins/vcsbase/submitfilemodel.cpp index 354bd39c660..8bfbba6036f 100644 --- a/src/plugins/vcsbase/submitfilemodel.cpp +++ b/src/plugins/vcsbase/submitfilemodel.cpp @@ -45,8 +45,11 @@ namespace VcsBase { enum { fileColumn = 1 }; -static QList createFileRow(const QString &fileName, const QString &status, - CheckMode checked, const QVariant &v) +static QList createFileRow(const QString &repositoryRoot, + const QString &fileName, + const QString &status, + CheckMode checked, + const QVariant &v) { auto statusItem = new QStandardItem(status); Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled; @@ -58,7 +61,11 @@ static QList createFileRow(const QString &fileName, const QStri statusItem->setData(v); auto fileItem = new QStandardItem(fileName); fileItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); - fileItem->setIcon(Core::FileIconProvider::icon(fileName)); + // For some reason, Windows (at least) requires a valid (existing) file path to the icon, so + // the repository root is needed here. + // Note: for "overlaid" icons in Core::FileIconProvider a valid file path is not required + const QFileInfo fi(repositoryRoot + QLatin1Char('/') + fileName); + fileItem->setIcon(Core::FileIconProvider::icon(fi)); QList row; row << statusItem << fileItem; return row; @@ -86,10 +93,20 @@ SubmitFileModel::SubmitFileModel(QObject *parent) : setHorizontalHeaderLabels(headerLabels); } +const QString &SubmitFileModel::repositoryRoot() const +{ + return m_repositoryRoot; +} + +void SubmitFileModel::setRepositoryRoot(const QString &repoRoot) +{ + m_repositoryRoot = repoRoot; +} + QList SubmitFileModel::addFile(const QString &fileName, const QString &status, CheckMode checkMode, const QVariant &v) { - const QList row = createFileRow(fileName, status, checkMode, v); + const QList row = createFileRow(m_repositoryRoot, fileName, status, checkMode, v); appendRow(row); return row; } diff --git a/src/plugins/vcsbase/submitfilemodel.h b/src/plugins/vcsbase/submitfilemodel.h index ccb17906ba8..db5bec44a27 100644 --- a/src/plugins/vcsbase/submitfilemodel.h +++ b/src/plugins/vcsbase/submitfilemodel.h @@ -50,6 +50,9 @@ class VCSBASE_EXPORT SubmitFileModel : public QStandardItemModel public: explicit SubmitFileModel(QObject *parent = 0); + const QString &repositoryRoot() const; + void setRepositoryRoot(const QString &repoRoot); + // Convenience to create and add rows containing a file plus status text. QList addFile(const QString &fileName, const QString &status = QString(), CheckMode checkMode = Checked, const QVariant &data = QVariant()); @@ -69,6 +72,9 @@ public: unsigned int filterFiles(const QStringList &filter); virtual void updateSelections(SubmitFileModel *source); + +private: + QString m_repositoryRoot; }; } // namespace VcsBase diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index b0610527c12..2b40ceb67ea 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -432,7 +432,7 @@ QStringList VcsBaseSubmitEditor::checkedFiles() const return d->m_widget->checkedFiles(); } -void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model, const QString &repositoryDirectory) +void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model) { QTC_ASSERT(model, return); if (SubmitFileModel *oldModel = d->m_widget->fileModel()) { @@ -446,7 +446,7 @@ void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model, const QString &re // Iterate over the files and get interesting symbols for (int row = 0; row < model->rowCount(); ++row) { - const QFileInfo fileInfo(repositoryDirectory, model->file(row)); + const QFileInfo fileInfo(model->repositoryRoot(), model->file(row)); // Add file name uniqueSymbols.insert(fileInfo.fileName()); diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index 4adefffd3b0..5bfbf38a52b 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -121,7 +121,7 @@ public: QStringList checkedFiles() const; - void setFileModel(SubmitFileModel *m, const QString &repositoryDirectory = QString()); + void setFileModel(SubmitFileModel *m); SubmitFileModel *fileModel() const; virtual void updateFileModel() { } QStringList rowsToFiles(const QList &rows) const;