forked from qt-creator/qt-creator
Vcs: fix missing icons in SubmitFileModel
In SubmitFileModel, filetype icons are missing for not "overlaid" icons in Core::FileIconProvider. This is fixed by ensuring valid file paths are passed to QFileInfo. VcsBase::SubmitFileModel has now a "repositoryRoot" property so it can constructs absolute file paths. VcsBaseSubmitEditor::setFileModel() now relies on SubmitFileModel::repositoryRoot() instead of passing this info as annex parameter. Change-Id: Ie045c3a7b247a5b5d48d10aaaf67cb3fdcf9fa7e Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -61,8 +61,9 @@ void CommitEditor::setFields(const QString &repositoryRoot,
|
|||||||
bazaarWidget->setFields(branch, userName, email);
|
bazaarWidget->setFields(branch, userName, email);
|
||||||
|
|
||||||
m_fileModel = new VcsBase::SubmitFileModel(this);
|
m_fileModel = new VcsBase::SubmitFileModel(this);
|
||||||
|
m_fileModel->setRepositoryRoot(repositoryRoot);
|
||||||
foreach (const VcsBase::VcsBaseClient::StatusItem &item, repoStatus)
|
foreach (const VcsBase::VcsBaseClient::StatusItem &item, repoStatus)
|
||||||
if (item.flags != QLatin1String("Unknown"))
|
if (item.flags != QLatin1String("Unknown"))
|
||||||
m_fileModel->addFile(item.file, item.flags);
|
m_fileModel->addFile(item.file, item.flags);
|
||||||
setFileModel(m_fileModel, repositoryRoot);
|
setFileModel(m_fileModel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,11 +58,12 @@ void ClearCaseSubmitEditor::setStatusList(const QStringList &statusOutput)
|
|||||||
{
|
{
|
||||||
typedef QStringList::const_iterator ConstIterator;
|
typedef QStringList::const_iterator ConstIterator;
|
||||||
auto model = new VcsBase::SubmitFileModel(this);
|
auto model = new VcsBase::SubmitFileModel(this);
|
||||||
|
model->setRepositoryRoot(checkScriptWorkingDirectory());
|
||||||
|
|
||||||
const ConstIterator cend = statusOutput.constEnd();
|
const ConstIterator cend = statusOutput.constEnd();
|
||||||
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
|
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
|
||||||
model->addFile(*it, QLatin1String("C"));
|
model->addFile(*it, QLatin1String("C"));
|
||||||
setFileModel(model, checkScriptWorkingDirectory());
|
setFileModel(model);
|
||||||
if (statusOutput.count() > 1)
|
if (statusOutput.count() > 1)
|
||||||
submitEditorWidget()->addKeep();
|
submitEditorWidget()->addKeep();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,6 +174,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d)
|
|||||||
setEmptyFileListEnabled(m_commitType == AmendCommit); // Allow for just correcting the message
|
setEmptyFileListEnabled(m_commitType == AmendCommit); // Allow for just correcting the message
|
||||||
|
|
||||||
m_model = new GitSubmitFileModel(this);
|
m_model = new GitSubmitFileModel(this);
|
||||||
|
m_model->setRepositoryRoot(d.panelInfo.repository);
|
||||||
if (!d.files.isEmpty()) {
|
if (!d.files.isEmpty()) {
|
||||||
for (QList<CommitData::StateFilePair>::const_iterator it = d.files.constBegin();
|
for (QList<CommitData::StateFilePair>::const_iterator it = d.files.constBegin();
|
||||||
it != d.files.constEnd(); ++it) {
|
it != d.files.constEnd(); ++it) {
|
||||||
@@ -192,7 +193,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d)
|
|||||||
QVariant(static_cast<int>(state)));
|
QVariant(static_cast<int>(state)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setFileModel(m_model, d.panelInfo.repository);
|
setFileModel(m_model);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
|
void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra
|
|||||||
mercurialWidget->setFields(repositoryRoot.absoluteFilePath(), branch, userName, email);
|
mercurialWidget->setFields(repositoryRoot.absoluteFilePath(), branch, userName, email);
|
||||||
|
|
||||||
fileModel = new SubmitFileModel(this);
|
fileModel = new SubmitFileModel(this);
|
||||||
|
fileModel->setRepositoryRoot(repositoryRoot.absoluteFilePath());
|
||||||
|
|
||||||
QStringList shouldTrack;
|
QStringList shouldTrack;
|
||||||
|
|
||||||
@@ -74,8 +75,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra
|
|||||||
fileModel->addFile(item.file, item.flags, Unchecked);
|
fileModel->addFile(item.file, item.flags, Unchecked);
|
||||||
}
|
}
|
||||||
|
|
||||||
VcsBaseSubmitEditor::filterUntrackedFilesOfProject(repositoryRoot.absoluteFilePath(),
|
VcsBaseSubmitEditor::filterUntrackedFilesOfProject(fileModel->repositoryRoot(), &shouldTrack);
|
||||||
&shouldTrack);
|
|
||||||
|
|
||||||
foreach (const QString &track, shouldTrack) {
|
foreach (const QString &track, shouldTrack) {
|
||||||
foreach (const VcsBaseClient::StatusItem &item, repoStatus) {
|
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()
|
QString CommitEditor::committerInfo()
|
||||||
|
|||||||
@@ -47,13 +47,14 @@ void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOu
|
|||||||
{
|
{
|
||||||
typedef QList<StatusFilePair>::const_iterator ConstIterator;
|
typedef QList<StatusFilePair>::const_iterator ConstIterator;
|
||||||
auto model = new VcsBase::SubmitFileModel(this);
|
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();
|
const ConstIterator cend = statusOutput.constEnd();
|
||||||
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
|
for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
|
||||||
model->addFile(it->second, it->first);
|
model->addFile(it->second, it->first);
|
||||||
// Hack to allow completion in "description" field : completion needs a root repository, the
|
setFileModel(model);
|
||||||
// checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin)
|
|
||||||
setFileModel(model, this->checkScriptWorkingDirectory());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray SubversionSubmitEditor::fileContents() const
|
QByteArray SubversionSubmitEditor::fileContents() const
|
||||||
|
|||||||
@@ -45,8 +45,11 @@ namespace VcsBase {
|
|||||||
|
|
||||||
enum { fileColumn = 1 };
|
enum { fileColumn = 1 };
|
||||||
|
|
||||||
static QList<QStandardItem *> createFileRow(const QString &fileName, const QString &status,
|
static QList<QStandardItem *> createFileRow(const QString &repositoryRoot,
|
||||||
CheckMode checked, const QVariant &v)
|
const QString &fileName,
|
||||||
|
const QString &status,
|
||||||
|
CheckMode checked,
|
||||||
|
const QVariant &v)
|
||||||
{
|
{
|
||||||
auto statusItem = new QStandardItem(status);
|
auto statusItem = new QStandardItem(status);
|
||||||
Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
|
||||||
@@ -58,7 +61,11 @@ static QList<QStandardItem *> createFileRow(const QString &fileName, const QStri
|
|||||||
statusItem->setData(v);
|
statusItem->setData(v);
|
||||||
auto fileItem = new QStandardItem(fileName);
|
auto fileItem = new QStandardItem(fileName);
|
||||||
fileItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
|
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;
|
QList<QStandardItem *> row;
|
||||||
row << statusItem << fileItem;
|
row << statusItem << fileItem;
|
||||||
return row;
|
return row;
|
||||||
@@ -86,10 +93,20 @@ SubmitFileModel::SubmitFileModel(QObject *parent) :
|
|||||||
setHorizontalHeaderLabels(headerLabels);
|
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,
|
QList<QStandardItem *> SubmitFileModel::addFile(const QString &fileName, const QString &status, CheckMode checkMode,
|
||||||
const QVariant &v)
|
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);
|
appendRow(row);
|
||||||
return row;
|
return row;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ class VCSBASE_EXPORT SubmitFileModel : public QStandardItemModel
|
|||||||
public:
|
public:
|
||||||
explicit SubmitFileModel(QObject *parent = 0);
|
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.
|
// Convenience to create and add rows containing a file plus status text.
|
||||||
QList<QStandardItem *> addFile(const QString &fileName, const QString &status = QString(),
|
QList<QStandardItem *> addFile(const QString &fileName, const QString &status = QString(),
|
||||||
CheckMode checkMode = Checked, const QVariant &data = QVariant());
|
CheckMode checkMode = Checked, const QVariant &data = QVariant());
|
||||||
@@ -69,6 +72,9 @@ public:
|
|||||||
unsigned int filterFiles(const QStringList &filter);
|
unsigned int filterFiles(const QStringList &filter);
|
||||||
|
|
||||||
virtual void updateSelections(SubmitFileModel *source);
|
virtual void updateSelections(SubmitFileModel *source);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString m_repositoryRoot;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace VcsBase
|
} // namespace VcsBase
|
||||||
|
|||||||
@@ -432,7 +432,7 @@ QStringList VcsBaseSubmitEditor::checkedFiles() const
|
|||||||
return d->m_widget->checkedFiles();
|
return d->m_widget->checkedFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model, const QString &repositoryDirectory)
|
void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(model, return);
|
QTC_ASSERT(model, return);
|
||||||
if (SubmitFileModel *oldModel = d->m_widget->fileModel()) {
|
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
|
// Iterate over the files and get interesting symbols
|
||||||
for (int row = 0; row < model->rowCount(); ++row) {
|
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
|
// Add file name
|
||||||
uniqueSymbols.insert(fileInfo.fileName());
|
uniqueSymbols.insert(fileInfo.fileName());
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ public:
|
|||||||
|
|
||||||
QStringList checkedFiles() const;
|
QStringList checkedFiles() const;
|
||||||
|
|
||||||
void setFileModel(SubmitFileModel *m, const QString &repositoryDirectory = QString());
|
void setFileModel(SubmitFileModel *m);
|
||||||
SubmitFileModel *fileModel() const;
|
SubmitFileModel *fileModel() const;
|
||||||
virtual void updateFileModel() { }
|
virtual void updateFileModel() { }
|
||||||
QStringList rowsToFiles(const QList<int> &rows) const;
|
QStringList rowsToFiles(const QList<int> &rows) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user