diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-05-21 14:43:19 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2019-05-21 14:28:44 +0000 |
commit | 7eb29b650553548c75218fafb9990d1d034aba32 (patch) | |
tree | 68dc2fc6f8776eb28a9a01c293e7143ad779df56 | |
parent | a345fbb5b136fd91d6a58bffcdb314179613a819 (diff) |
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>
-rw-r--r-- | src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp | 71 | ||||
-rw-r--r-- | src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h | 1 |
2 files changed, 39 insertions, 33 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp index 62f7f315ce..51dc03d94f 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.cpp @@ -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(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h index 7ad76ace1c..69a0e4b131 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/customfilesystemmodel.h @@ -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; |