summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2009-06-30 04:39:52 (GMT)
committerMartin Jones <martin.jones@nokia.com>2009-06-30 04:39:52 (GMT)
commitdba327eec1a308e61c2bd21941ba982fb9283827 (patch)
tree27d5fcf61751f182ccc67a6fed899e2f1e390616
parent9803a0ca81d688fdd780b7fe78f7a2b592bb5e3d (diff)
downloadQt-dba327eec1a308e61c2bd21941ba982fb9283827.zip
Qt-dba327eec1a308e61c2bd21941ba982fb9283827.tar.gz
Qt-dba327eec1a308e61c2bd21941ba982fb9283827.tar.bz2
Add a simple folder model.
-rw-r--r--src/declarative/extra/extra.pri2
-rw-r--r--src/declarative/extra/qmlfolderlistmodel.cpp178
-rw-r--r--src/declarative/extra/qmlfolderlistmodel.h100
3 files changed, 280 insertions, 0 deletions
diff --git a/src/declarative/extra/extra.pri b/src/declarative/extra/extra.pri
index 2590fbc..7244f98 100644
--- a/src/declarative/extra/extra.pri
+++ b/src/declarative/extra/extra.pri
@@ -2,12 +2,14 @@ SOURCES += \
extra/qnumberformat.cpp \
extra/qmlnumberformatter.cpp \
extra/qfxintegermodel.cpp \
+ extra/qmlfolderlistmodel.cpp \
extra/qmltimer.cpp
HEADERS += \
extra/qnumberformat.h \
extra/qmlnumberformatter.h \
extra/qfxintegermodel.h \
+ extra/qmlfolderlistmodel.h \
extra/qmltimer.h
contains(QT_CONFIG, xmlpatterns) {
diff --git a/src/declarative/extra/qmlfolderlistmodel.cpp b/src/declarative/extra/qmlfolderlistmodel.cpp
new file mode 100644
index 0000000..43ffd5c
--- /dev/null
+++ b/src/declarative/extra/qmlfolderlistmodel.cpp
@@ -0,0 +1,178 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qobject_p.h"
+#include <QDirModel>
+#include <qdebug.h>
+#include "qmlfolderlistmodel.h"
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Declarative)
+
+class QmlFolderListModelPrivate : public QObjectPrivate
+{
+public:
+ QmlFolderListModelPrivate() {
+ folderIndex = model.index(0,0);
+ }
+
+ QDirModel model;
+ QString folder;
+ QStringList nameFilters;
+ QModelIndex folderIndex;
+};
+
+QmlFolderListModel::QmlFolderListModel(QObject *parent)
+ : QListModelInterface(*(new QmlFolderListModelPrivate), parent)
+{
+ Q_D(QmlFolderListModel);
+ d->model.setFilter(QDir::AllDirs | QDir::Files | QDir::Drives);
+ connect(&d->model, SIGNAL(rowsInserted(const QModelIndex&,int,int))
+ , this, SLOT(inserted(const QModelIndex&,int,int)));
+}
+
+QmlFolderListModel::~QmlFolderListModel()
+{
+}
+
+QHash<int,QVariant> QmlFolderListModel::data(int index, const QList<int> &roles) const
+{
+ Q_D(const QmlFolderListModel);
+ QHash<int,QVariant> folderData;
+ QModelIndex modelIndex = d->model.index(index, 0, d->folderIndex);
+ if (modelIndex.isValid()) {
+ folderData[QDirModel::FileNameRole] = d->model.data(modelIndex, QDirModel::FileNameRole);
+ folderData[QDirModel::FilePathRole] = d->model.data(modelIndex, QDirModel::FilePathRole);
+ }
+
+ return folderData;
+}
+
+int QmlFolderListModel::count() const
+{
+ Q_D(const QmlFolderListModel);
+ if (!d->folderIndex.isValid())
+ return 0;
+ return d->model.rowCount(d->folderIndex);
+}
+
+QList<int> QmlFolderListModel::roles() const
+{
+ QList<int> r;
+ r << QDirModel::FileNameRole;
+ r << QDirModel::FilePathRole;
+ return r;
+}
+
+QString QmlFolderListModel::toString(int role) const
+{
+ switch (role) {
+ case QDirModel::FileNameRole:
+ return QLatin1String("fileName");
+ case QDirModel::FilePathRole:
+ return QLatin1String("filePath");
+ }
+
+ return QString();
+}
+
+QString QmlFolderListModel::folder() const
+{
+ Q_D(const QmlFolderListModel);
+ return d->folder;
+}
+
+void QmlFolderListModel::setFolder(const QString &folder)
+{
+ Q_D(QmlFolderListModel);
+ QModelIndex index = d->model.index(folder);
+ if (index.isValid() && d->model.isDir(index)) {
+ d->folder = folder;
+ QMetaObject::invokeMethod(this, "refresh", Qt::QueuedConnection);
+ }
+}
+
+QStringList QmlFolderListModel::nameFilters() const
+{
+ Q_D(const QmlFolderListModel);
+ return d->nameFilters;
+}
+
+void QmlFolderListModel::setNameFilters(const QStringList &filters)
+{
+ Q_D(QmlFolderListModel);
+ d->nameFilters = filters;
+ QMetaObject::invokeMethod(this, "refresh", Qt::QueuedConnection);
+}
+
+void QmlFolderListModel::classComplete()
+{
+}
+
+bool QmlFolderListModel::isFolder(int index) const
+{
+ Q_D(const QmlFolderListModel);
+ return d->model.isDir(d->model.index(index, 0, d->folderIndex));
+}
+
+void QmlFolderListModel::refresh()
+{
+ Q_D(QmlFolderListModel);
+ int prevCount = count();
+ d->folderIndex = QModelIndex();
+ emit itemsRemoved(0, prevCount);
+ d->folderIndex = d->model.index(d->folder);
+ emit itemsInserted(0, count());
+}
+
+void QmlFolderListModel::inserted(const QModelIndex &index, int start, int end)
+{
+ Q_D(QmlFolderListModel);
+ qDebug() << "inserted" << start << end;
+ if (index == d->folderIndex)
+ emit itemsInserted(start, end - start + 1);
+}
+
+QML_DEFINE_TYPE(QmlFolderListModel,FolderListModel)
+
+QT_END_NAMESPACE
+
diff --git a/src/declarative/extra/qmlfolderlistmodel.h b/src/declarative/extra/qmlfolderlistmodel.h
new file mode 100644
index 0000000..c8b605a
--- /dev/null
+++ b/src/declarative/extra/qmlfolderlistmodel.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMLFOLDERLISTMODEL_H
+#define QMLFOLDERLISTMODEL_H
+
+#include <QtDeclarative/qml.h>
+#include <QtDeclarative/QListModelInterface>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Declarative)
+
+class QmlContext;
+class QModelIndex;
+
+class QmlFolderListModelPrivate;
+class Q_DECLARATIVE_EXPORT QmlFolderListModel : public QListModelInterface, public QmlParserStatus
+{
+ Q_OBJECT
+ Q_INTERFACES(QmlParserStatus)
+
+ Q_PROPERTY(QString folder READ folder WRITE setFolder)
+ Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters)
+
+public:
+ QmlFolderListModel(QObject *parent = 0);
+ ~QmlFolderListModel();
+
+ virtual QHash<int,QVariant> data(int index, const QList<int> &roles = (QList<int>())) const;
+ virtual int count() const;
+ virtual QList<int> roles() const;
+ virtual QString toString(int role) const;
+
+ QString folder() const;
+ void setFolder(const QString &folder);
+
+ QStringList nameFilters() const;
+ void setNameFilters(const QStringList &filters);
+
+ virtual void classComplete();
+
+ Q_INVOKABLE bool isFolder(int index) const;
+
+private Q_SLOTS:
+ void refresh();
+ void inserted(const QModelIndex &index, int start, int end);
+
+private:
+ Q_DECLARE_PRIVATE(QmlFolderListModel)
+ Q_DISABLE_COPY(QmlFolderListModel)
+};
+
+QML_DECLARE_TYPE(QmlFolderListModel)
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QMLFOLDERLISTMODEL_H