fix Folderlistmodel "showDotAndDotDot" didn't show "."
authorTasuku Suzuki <stasuku@gmail.com>
Mon, 25 Feb 2013 14:45:22 +0000 (23:45 +0900)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 10 Jun 2013 07:24:12 +0000 (09:24 +0200)
Task-number: QTBUG-29858

Change-Id: Ia736776e2587601a80d0aef22bb5cfce74040d39
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
src/imports/folderlistmodel/fileinfothread.cpp
src/imports/folderlistmodel/fileinfothread_p.h
src/imports/folderlistmodel/qquickfolderlistmodel.cpp
tests/auto/qml/qquickfolderlistmodel/data/showDotAndDotDot.qml [new file with mode: 0644]
tests/auto/qml/qquickfolderlistmodel/tst_qquickfolderlistmodel.cpp

index 64a4b02..0f984be 100644 (file)
@@ -57,7 +57,7 @@ FileInfoThread::FileInfoThread(QObject *parent)
       sortUpdate(false),
       showDirs(true),
       showDirsFirst(false),
-      showDotDot(false),
+      showDotAndDotDot(false),
       showOnlyReadable(false)
 {
 #ifndef QT_NO_FILESYSTEMWATCHER
@@ -158,10 +158,10 @@ void FileInfoThread::setShowDirsFirst(bool show)
     condition.wakeAll();
 }
 
-void FileInfoThread::setShowDotDot(bool on)
+void FileInfoThread::setShowDotAndDotDot(bool on)
 {
     QMutexLocker locker(&mutex);
-    showDotDot = on;
+    showDotAndDotDot = on;
     folderUpdate = true;
     condition.wakeAll();
 }
@@ -212,10 +212,12 @@ void FileInfoThread::run()
 void FileInfoThread::getFileInfos(const QString &path)
 {
     QDir::Filters filter;
-    filter = QDir::Files | QDir::NoDot | QDir::CaseSensitive;
+    filter = QDir::Files | QDir::CaseSensitive;
     if (showDirs)
         filter = filter | QDir::AllDirs | QDir::Drives;
-    if ((path == rootPath) || !showDotDot)
+    if (!showDotAndDotDot)
+        filter = filter | QDir::NoDot | QDir::NoDotDot;
+    else if (path == rootPath)
         filter = filter | QDir::NoDotDot;
     if (showOnlyReadable)
         filter = filter | QDir::Readable;
index f9340ca..cf6572a 100644 (file)
@@ -72,7 +72,7 @@ public:
     void setNameFilters(const QStringList & nameFilters);
     void setShowDirs(bool showFolders);
     void setShowDirsFirst(bool show);
-    void setShowDotDot(bool on);
+    void setShowDotAndDotDot(bool on);
     void setShowOnlyReadable(bool on);
 
 public Q_SLOTS:
@@ -104,7 +104,7 @@ private:
     bool sortUpdate;
     bool showDirs;
     bool showDirsFirst;
-    bool showDotDot;
+    bool showDotAndDotDot;
     bool showOnlyReadable;
 };
 
index 7ba2981..85b59e9 100644 (file)
@@ -55,7 +55,7 @@ class QQuickFolderListModelPrivate
 public:
     QQuickFolderListModelPrivate(QQuickFolderListModel *q)
         : q_ptr(q),
-          sortField(QQuickFolderListModel::Name), sortReversed(false), showDirs(true), showDirsFirst(false), showDots(false), showOnlyReadable(false)
+          sortField(QQuickFolderListModel::Name), sortReversed(false), showDirs(true), showDirsFirst(false), showDotAndDotDot(false), showOnlyReadable(false)
     {
         nameFilters << QLatin1String("*");
     }
@@ -72,7 +72,7 @@ public:
     bool sortReversed;
     bool showDirs;
     bool showDirsFirst;
-    bool showDots;
+    bool showDotAndDotDot;
     bool showOnlyReadable;
 
     ~QQuickFolderListModelPrivate() {}
@@ -681,15 +681,15 @@ void  QQuickFolderListModel::setShowDirsFirst(bool on)
 bool QQuickFolderListModel::showDotAndDotDot() const
 {
     Q_D(const QQuickFolderListModel);
-    return d->showDots;
+    return d->showDotAndDotDot;
 }
 
 void  QQuickFolderListModel::setShowDotAndDotDot(bool on)
 {
     Q_D(QQuickFolderListModel);
 
-    if (on != d->showDots) {
-        d->fileInfoThread.setShowDotDot(on);
+    if (on != d->showDotAndDotDot) {
+        d->fileInfoThread.setShowDotAndDotDot(on);
     }
 }
 
diff --git a/tests/auto/qml/qquickfolderlistmodel/data/showDotAndDotDot.qml b/tests/auto/qml/qquickfolderlistmodel/data/showDotAndDotDot.qml
new file mode 100644 (file)
index 0000000..b65ace2
--- /dev/null
@@ -0,0 +1,5 @@
+import Qt.labs.folderlistmodel 1.0
+
+FolderListModel {
+    showDotAndDotDot: false
+}
index 9230608..b845fac 100644 (file)
@@ -77,6 +77,8 @@ private slots:
     // WinCE does not have drive concept, so lets execute this test only on desktop Windows.
     void changeDrive();
 #endif
+    void showDotAndDotDot();
+    void showDotAndDotDot_data();
 
 private:
     void checkNoErrors(const QQmlComponent& component);
@@ -113,7 +115,7 @@ void tst_qquickfolderlistmodel::basicProperties()
     QVERIFY(flm != 0);
 
     flm->setProperty("folder", dataDirectoryUrl());
-    QTRY_COMPARE(flm->property("count").toInt(),4); // wait for refresh
+    QTRY_COMPARE(flm->property("count").toInt(),5); // wait for refresh
     QCOMPARE(flm->property("folder").toUrl(), dataDirectoryUrl());
     QCOMPARE(flm->property("parentFolder").toUrl(), QUrl::fromLocalFile(QDir(directory()).canonicalPath()));
     QCOMPARE(flm->property("sortField").toInt(), int(Name));
@@ -169,7 +171,7 @@ void tst_qquickfolderlistmodel::refresh()
     QVERIFY(flm != 0);
 
     flm->setProperty("folder", dataDirectoryUrl());
-    QTRY_COMPARE(flm->property("count").toInt(),4); // wait for refresh
+    QTRY_COMPARE(flm->property("count").toInt(),5); // wait for refresh
 
     int count = flm->rowCount();
 
@@ -228,6 +230,49 @@ void tst_qquickfolderlistmodel::changeDrive()
 }
 #endif
 
+void tst_qquickfolderlistmodel::showDotAndDotDot()
+{
+    QFETCH(QUrl, folder);
+    QFETCH(QUrl, rootFolder);
+    QFETCH(bool, showDotAndDotDot);
+    QFETCH(bool, showDot);
+    QFETCH(bool, showDotDot);
+
+    QQmlComponent component(&engine, testFileUrl("showDotAndDotDot.qml"));
+    checkNoErrors(component);
+
+    QAbstractListModel *flm = qobject_cast<QAbstractListModel*>(component.create());
+    QVERIFY(flm != 0);
+
+    flm->setProperty("folder", folder);
+    flm->setProperty("rootFolder", rootFolder);
+    flm->setProperty("showDotAndDotDot", showDotAndDotDot);
+
+    int count = 5;
+    if (showDot) count++;
+    if (showDotDot) count++;
+    QTRY_COMPARE(flm->property("count").toInt(), count); // wait for refresh
+
+    if (showDot)
+        QCOMPARE(flm->data(flm->index(0),FileNameRole).toString(), QLatin1String("."));
+    if (showDotDot)
+        QCOMPARE(flm->data(flm->index(1),FileNameRole).toString(), QLatin1String(".."));
+}
+
+void tst_qquickfolderlistmodel::showDotAndDotDot_data()
+{
+    QTest::addColumn<QUrl>("folder");
+    QTest::addColumn<QUrl>("rootFolder");
+    QTest::addColumn<bool>("showDotAndDotDot");
+    QTest::addColumn<bool>("showDot");
+    QTest::addColumn<bool>("showDotDot");
+
+    QTest::newRow("false") << dataDirectoryUrl() << QUrl() << false << false << false;
+    QTest::newRow("true") << dataDirectoryUrl() << QUrl() << true << true << true;
+    QTest::newRow("true but root") << dataDirectoryUrl() << dataDirectoryUrl() << true << true << false;
+
+}
+
 QTEST_MAIN(tst_qquickfolderlistmodel)
 
 #include "tst_qquickfolderlistmodel.moc"