diff --git a/src/plugins/bazaar/commiteditor.cpp b/src/plugins/bazaar/commiteditor.cpp index 332f7539493eb1807024f028338e3d699b1c1a16..c2372d06f1abd6ea0e97d305c255c92557bd6f30 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 2f36dabcafb06da9000158faaad406d3688d4755..f4936c4cb99a03cb056fddb39498ddc1887de97f 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 298e154c87703bf1bf9b07106bb14ce0b848dcde..819b9b73c698817faf036765b24b09ed4829aeb4 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<CommitData::StateFilePair>::const_iterator it = d.files.constBegin(); it != d.files.constEnd(); ++it) { @@ -192,7 +193,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d) QVariant(static_cast<int>(state))); } } - setFileModel(m_model, d.panelInfo.repository); + setFileModel(m_model); } void GitSubmitEditor::slotDiffSelected(const QList<int> &rows) diff --git a/src/plugins/mercurial/commiteditor.cpp b/src/plugins/mercurial/commiteditor.cpp index 724ce2d100f534e9bab443b943179d61d7f89d33..4ab9e4f5b7b8e0557aada883992459de4fed3580 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 9483d720bc6f0c52fc5362916f6f2ed1a4f87c89..21186879c86b76d349df026b21434a26ebb00389 100644 --- a/src/plugins/subversion/subversionsubmiteditor.cpp +++ b/src/plugins/subversion/subversionsubmiteditor.cpp @@ -47,13 +47,14 @@ void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOu { typedef QList<StatusFilePair>::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 354bd39c6601f529a336229a81eca9d70216a425..8bfbba6036f21176a27e0569336c6f0cc7f1fde9 100644 --- a/src/plugins/vcsbase/submitfilemodel.cpp +++ b/src/plugins/vcsbase/submitfilemodel.cpp @@ -45,8 +45,11 @@ namespace VcsBase { enum { fileColumn = 1 }; -static QList<QStandardItem *> createFileRow(const QString &fileName, const QString &status, - CheckMode checked, const QVariant &v) +static QList<QStandardItem *> 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<QStandardItem *> 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<QStandardItem *> 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<QStandardItem *> SubmitFileModel::addFile(const QString &fileName, const QString &status, CheckMode checkMode, const QVariant &v) { - const QList<QStandardItem *> row = createFileRow(fileName, status, checkMode, v); + const QList<QStandardItem *> 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 ccb17906ba81dd0e1b69e3632c9ca10249e762a7..db5bec44a27676848ee9216f1f4ff00de1327886 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<QStandardItem *> 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 b0610527c12c195691de7a4a2bda19ec3bbf84bf..2b40ceb67ea549625b9591a546b232caf3f51527 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 4adefffd3b0e91cc9c6f47132780f15921ebfc5d..5bfbf38a52b83027929ed883ea3c87d41748aa5c 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<int> &rows) const;