diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 21 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodel.h | 4 | ||||
| -rw-r--r-- | src/panels/folders/folderspanel.cpp | 2 | ||||
| -rw-r--r-- | src/tests/kfileitemmodeltest.cpp | 52 |
4 files changed, 63 insertions, 16 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index db9b71189..6cb7577f2 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -478,7 +478,7 @@ void KFileItemModel::restoreExpandedUrls(const QSet<KUrl>& urls) m_urlsToExpand = urls; } -void KFileItemModel::setExpanded(const QSet<KUrl>& urls) +void KFileItemModel::expandParentItems(const KUrl& url) { const KDirLister* dirLister = m_dirLister.data(); if (!dirLister) { @@ -487,20 +487,15 @@ void KFileItemModel::setExpanded(const QSet<KUrl>& urls) const int pos = dirLister->url().path().length(); - // Assure that each sub-path of the URLs that should be - // expanded is added to m_urlsToExpand too. KDirLister + // Assure that each sub-path of the URL that should be + // expanded is added to m_urlsToExpand. KDirLister // does not care whether the parent-URL has already been // expanded. - QSetIterator<KUrl> it1(urls); - while (it1.hasNext()) { - const KUrl& url = it1.next(); - - KUrl urlToExpand = dirLister->url(); - const QStringList subDirs = url.path().mid(pos).split(QDir::separator()); - for (int i = 0; i < subDirs.count(); ++i) { - urlToExpand.addPath(subDirs.at(i)); - m_urlsToExpand.insert(urlToExpand); - } + KUrl urlToExpand = dirLister->url(); + const QStringList subDirs = url.path().mid(pos).split(QDir::separator()); + for (int i = 0; i < subDirs.count() - 1; ++i) { + urlToExpand.addPath(subDirs.at(i)); + m_urlsToExpand.insert(urlToExpand); } // KDirLister::open() must called at least once to trigger an initial diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index ff816c85c..a792b089f 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -150,9 +150,9 @@ public: void restoreExpandedUrls(const QSet<KUrl>& urls); /** - * Expands all parent-items of each URL given by \a urls. + * Expands all parent-items of \a url. */ - void setExpanded(const QSet<KUrl>& urls); + void expandParentItems(const KUrl& url); void setNameFilter(const QString& nameFilter); QString nameFilter() const; diff --git a/src/panels/folders/folderspanel.cpp b/src/panels/folders/folderspanel.cpp index 2511d7e4b..3b24f5868 100644 --- a/src/panels/folders/folderspanel.cpp +++ b/src/panels/folders/folderspanel.cpp @@ -330,7 +330,7 @@ void FoldersPanel::loadTree(const KUrl& url) updateCurrentItem(index); } else { m_updateCurrentItem = true; - model->setExpanded(QSet<KUrl>() << url); + model->expandParentItems(url); // slotLoadingCompleted() will be invoked after the model has // expanded the url } diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp index c3611ef73..d0accd68a 100644 --- a/src/tests/kfileitemmodeltest.cpp +++ b/src/tests/kfileitemmodeltest.cpp @@ -68,6 +68,7 @@ private slots: void testModelConsistencyWhenInsertingItems(); void testItemRangeConsistencyWhenInsertingItems(); void testExpandItems(); + void testExpandParentItems(); void testSorting(); void testExpansionLevelsCompare_data(); @@ -478,6 +479,57 @@ void KFileItemModelTest::testExpandItems() QCOMPARE(m_model->expandedUrls(), allFolders); } +void KFileItemModelTest::testExpandParentItems() +{ + // Create a tree structure of folders: + // a 1/ + // a 1/b1/ + // a 1/b1/c1/ + // a2/ + // a2/b2/ + // a2/b2/c2/ + // a2/b2/c2/d2/ + QSet<QByteArray> modelRoles = m_model->roles(); + modelRoles << "isExpanded" << "isExpandable" << "expansionLevel"; + m_model->setRoles(modelRoles); + + QStringList files; + files << "a 1/b1/c1/file.txt" << "a2/b2/c2/d2/file.txt"; // missing folders are created automatically + m_testDir->createFiles(files); + + m_dirLister->openUrl(m_testDir->url()); + QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout)); + + // So far, the model contains only "a 1/" and "a2/". + QCOMPARE(m_model->count(), 2); + QVERIFY(m_model->expandedUrls().empty()); + + // Expand the parents of "a2/b2/c2". + m_model->expandParentItems(KUrl(m_testDir->name() + "a2/b2/c2")); + QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(loadingCompleted()), DefaultTimeout)); + + // The model should now contain "a 1/", "a2/", "a2/b2/", and "a2/b2/c2/". + // It's important that only the parents of "a1/b1/c1" are expanded. + QCOMPARE(m_model->count(), 4); + QVERIFY(!m_model->isExpanded(0)); + QVERIFY(m_model->isExpanded(1)); + QVERIFY(m_model->isExpanded(2)); + QVERIFY(!m_model->isExpanded(3)); + + // Expand the parents of "a 1/b1". + m_model->expandParentItems(KUrl(m_testDir->name() + "a 1/b1")); + QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(loadingCompleted()), DefaultTimeout)); + + // The model should now contain "a 1/", "a 1/b1/", "a2/", "a2/b2", and "a2/b2/c2/". + // It's important that only the parents of "a 1/b1/" and "a2/b2/c2/" are expanded. + QCOMPARE(m_model->count(), 5); + QVERIFY(m_model->isExpanded(0)); + QVERIFY(!m_model->isExpanded(1)); + QVERIFY(m_model->isExpanded(2)); + QVERIFY(m_model->isExpanded(3)); + QVERIFY(!m_model->isExpanded(4)); +} + void KFileItemModelTest::testSorting() { // Create some files with different sizes and modification times to check the different sorting options |
