forked from qt-creator/qt-creator
QmlDesigner: Fix regression
This regression was caused by an optimization. I added updatePath() to avoid similar issues in the future. Task-number: QDS-690 Change-Id: I0c1c67a3d35a6944da494651db34c746561a1e26 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
committed by
Tim Jenssen
parent
a345fbb5b1
commit
7eb29b6505
@@ -79,7 +79,7 @@ CustomFileSystemModel::CustomFileSystemModel(QObject *parent) : QAbstractListMod
|
||||
m_fileSystemModel->setIconProvider(new ItemLibraryFileIconProvider());
|
||||
|
||||
connect(m_fileSystemWatcher, &Utils::FileSystemWatcher::directoryChanged, [this] {
|
||||
setRootPath(m_fileSystemModel->rootPath());
|
||||
updatePath(m_fileSystemModel->rootPath());
|
||||
});
|
||||
}
|
||||
|
||||
@@ -120,38 +120,7 @@ QModelIndex CustomFileSystemModel::setRootPath(const QString &newPath)
|
||||
if (m_fileSystemModel->rootPath() == newPath)
|
||||
return QAbstractListModel::index(0, 0);
|
||||
|
||||
beginResetModel();
|
||||
m_fileSystemModel->setRootPath(newPath);
|
||||
|
||||
m_fileSystemWatcher->removeDirectories(m_fileSystemWatcher->directories());
|
||||
|
||||
m_fileSystemWatcher->addDirectory(newPath, Utils::FileSystemWatcher::WatchAllChanges);
|
||||
|
||||
QStringList nameFilterList;
|
||||
|
||||
const QString searchFilter = m_searchFilter;
|
||||
|
||||
if (searchFilter.contains(QLatin1Char('.'))) {
|
||||
nameFilterList.append(QString(QStringLiteral("*%1*")).arg(searchFilter));
|
||||
} else {
|
||||
foreach (const QByteArray &extension, QImageReader::supportedImageFormats()) {
|
||||
nameFilterList.append(QString(QStringLiteral("*%1*.%2")).arg(searchFilter, QString::fromUtf8(extension)));
|
||||
}
|
||||
}
|
||||
|
||||
m_files.clear();
|
||||
|
||||
QDirIterator fileIterator(newPath, nameFilterList, QDir::Files, QDirIterator::Subdirectories);
|
||||
|
||||
while (fileIterator.hasNext())
|
||||
m_files.append(filterMetaIcons(fileIterator.next()));
|
||||
|
||||
QDirIterator dirIterator(newPath, {}, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
|
||||
while (dirIterator.hasNext())
|
||||
m_fileSystemWatcher->addDirectory(dirIterator.next(), Utils::FileSystemWatcher::WatchAllChanges);
|
||||
|
||||
endResetModel();
|
||||
return QAbstractListModel::index(0, 0);
|
||||
return updatePath(newPath);
|
||||
}
|
||||
|
||||
QVariant CustomFileSystemModel::data(const QModelIndex &index, int role) const
|
||||
@@ -210,6 +179,42 @@ void CustomFileSystemModel::setSearchFilter(const QString &nameFilterList)
|
||||
setRootPath(m_fileSystemModel->rootPath());
|
||||
}
|
||||
|
||||
QModelIndex CustomFileSystemModel::updatePath(const QString &newPath)
|
||||
{
|
||||
beginResetModel();
|
||||
m_fileSystemModel->setRootPath(newPath);
|
||||
|
||||
m_fileSystemWatcher->removeDirectories(m_fileSystemWatcher->directories());
|
||||
|
||||
m_fileSystemWatcher->addDirectory(newPath, Utils::FileSystemWatcher::WatchAllChanges);
|
||||
|
||||
QStringList nameFilterList;
|
||||
|
||||
const QString searchFilter = m_searchFilter;
|
||||
|
||||
if (searchFilter.contains(QLatin1Char('.'))) {
|
||||
nameFilterList.append(QString(QStringLiteral("*%1*")).arg(searchFilter));
|
||||
} else {
|
||||
foreach (const QByteArray &extension, QImageReader::supportedImageFormats()) {
|
||||
nameFilterList.append(QString(QStringLiteral("*%1*.%2")).arg(searchFilter, QString::fromUtf8(extension)));
|
||||
}
|
||||
}
|
||||
|
||||
m_files.clear();
|
||||
|
||||
QDirIterator fileIterator(newPath, nameFilterList, QDir::Files, QDirIterator::Subdirectories);
|
||||
|
||||
while (fileIterator.hasNext())
|
||||
m_files.append(filterMetaIcons(fileIterator.next()));
|
||||
|
||||
QDirIterator dirIterator(newPath, {}, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
|
||||
while (dirIterator.hasNext())
|
||||
m_fileSystemWatcher->addDirectory(dirIterator.next(), Utils::FileSystemWatcher::WatchAllChanges);
|
||||
|
||||
endResetModel();
|
||||
return QAbstractListModel::index(0, 0);
|
||||
}
|
||||
|
||||
QModelIndex CustomFileSystemModel::fileSystemModelIndex(const QModelIndex &index) const
|
||||
{
|
||||
const int row = index.row();
|
||||
|
@@ -61,6 +61,7 @@ public:
|
||||
void setSearchFilter(const QString &nameFilterList);
|
||||
|
||||
private:
|
||||
QModelIndex updatePath(const QString &newPath);
|
||||
QModelIndex fileSystemModelIndex(const QModelIndex &index) const;
|
||||
|
||||
QFileSystemModel *m_fileSystemModel;
|
||||
|
Reference in New Issue
Block a user