summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Reininghaus <frank78ac@googlemail.com>2012-02-03 18:09:42 (GMT)
committerFrank Reininghaus <frank78ac@googlemail.com>2012-02-04 13:04:33 (GMT)
commit89082ca391807abdc26d8985efe6b4c27183a9b1 (patch)
treee4bb4955d49bd7c19f419ffec1d9ddfa63c68704
parentd9bc83e626dc2c789ad71c61f367495eaa2830d7 (diff)
Replace setExpanded(const QSet<KUrl>&) by expandParentItems(const KUrl&)
The use case of this function (Folders Panel) requires the expansion of the parent items of a single URL, so it's not needed to handle a full set of URLs in this function. Moreover, the issue that not only the parents, but also the URLs themselves were expanded is fixed by this commit.
-rw-r--r--dolphin/src/kitemviews/kfileitemmodel.cpp21
-rw-r--r--dolphin/src/kitemviews/kfileitemmodel.h4
-rw-r--r--dolphin/src/panels/folders/folderspanel.cpp2
-rw-r--r--dolphin/src/tests/kfileitemmodeltest.cpp52
4 files changed, 63 insertions, 16 deletions
diff --git a/dolphin/src/kitemviews/kfileitemmodel.cpp b/dolphin/src/kitemviews/kfileitemmodel.cpp
index db9b711..6cb7577 100644
--- a/dolphin/src/kitemviews/kfileitemmodel.cpp
+++ b/dolphin/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/dolphin/src/kitemviews/kfileitemmodel.h b/dolphin/src/kitemviews/kfileitemmodel.h
index ff816c8..a792b08 100644
--- a/dolphin/src/kitemviews/kfileitemmodel.h
+++ b/dolphin/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/dolphin/src/panels/folders/folderspanel.cpp b/dolphin/src/panels/folders/folderspanel.cpp
index 2511d7e..3b24f58 100644
--- a/dolphin/src/panels/folders/folderspanel.cpp
+++ b/dolphin/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/dolphin/src/tests/kfileitemmodeltest.cpp b/dolphin/src/tests/kfileitemmodeltest.cpp
index c3611ef..d0accd6 100644
--- a/dolphin/src/tests/kfileitemmodeltest.cpp
+++ b/dolphin/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