#ifndef QQUICKFOLDERLISTMODEL_H
#define QQUICKFOLDERLISTMODEL_H
#include <qqml.h>
#include <QStringList>
#include <QUrl>
#include <QAbstractListModel>
QT_BEGIN_HEADER
class QQmlContext;
class QModelIndex;
class QQuickFolderListModelPrivate;
class QQuickFolderListModel : public QAbstractListModel, public QQmlParserStatus
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
Q_PROPERTY(QUrl folder READ folder WRITE setFolder NOTIFY folderChanged)
Q_PROPERTY(QUrl rootFolder READ rootFolder WRITE setRootFolder)
Q_PROPERTY(QUrl parentFolder READ parentFolder NOTIFY folderChanged)
Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters)
Q_PROPERTY(SortField sortField READ sortField WRITE setSortField)
Q_PROPERTY(bool sortReversed READ sortReversed WRITE setSortReversed)
Q_PROPERTY(bool showDirs READ showDirs WRITE setShowDirs)
Q_PROPERTY(bool showDirsFirst READ showDirsFirst WRITE setShowDirsFirst)
Q_PROPERTY(bool showDotAndDotDot READ showDotAndDotDot WRITE setShowDotAndDotDot)
Q_PROPERTY(bool showOnlyReadable READ showOnlyReadable WRITE setShowOnlyReadable)
Q_PROPERTY(int count READ count NOTIFY rowCountChanged)
public:
QQuickFolderListModel(QObject *parent = 0);
~QQuickFolderListModel();
enum Roles {
FileNameRole = Qt::UserRole + 1,
FilePathRole = Qt::UserRole + 2,
FileBaseNameRole = Qt::UserRole + 3,
FileSuffixRole = Qt::UserRole + 4,
FileSizeRole = Qt::UserRole + 5,
FileLastModifiedRole = Qt::UserRole + 6,
FileLastReadRole = Qt::UserRole +7,
FileIsDirRole = Qt::UserRole + 8
};
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual QHash<int, QByteArray> roleNames() const;
int count() const { return rowCount(QModelIndex()); }
QUrl folder() const;
void setFolder(const QUrl &folder);
QUrl rootFolder() const;
void setRootFolder(const QUrl &path);
QUrl parentFolder() const;
QStringList nameFilters() const;
void setNameFilters(const QStringList &filters);
enum SortField { Unsorted, Name, Time, Size, Type };
SortField sortField() const;
void setSortField(SortField field);
Q_ENUMS(SortField)
bool sortReversed() const;
void setSortReversed(bool rev);
bool showDirs() const;
void setShowDirs(bool showDirs);
bool showDirsFirst() const;
void setShowDirsFirst(bool showDirsFirst);
bool showDotAndDotDot() const;
void setShowDotAndDotDot(bool on);
bool showOnlyReadable() const;
void setShowOnlyReadable(bool on);
Q_INVOKABLE bool isFolder(int index) const;
Q_INVOKABLE QVariant get(int idx, const QString &property) const;
virtual void classBegin();
virtual void componentComplete();
int roleFromString(const QString &roleName) const;
Q_SIGNALS:
void folderChanged();
void rowCountChanged() const;
private:
Q_DISABLE_COPY(QQuickFolderListModel)
Q_DECLARE_PRIVATE(QQuickFolderListModel)
QScopedPointer<QQuickFolderListModelPrivate> d_ptr;
Q_PRIVATE_SLOT(d_func(), void _q_directoryChanged(const QString &directory, const QList<FileProperty> &list))
Q_PRIVATE_SLOT(d_func(), void _q_directoryUpdated(const QString &directory, const QList<FileProperty> &list, int fromIndex, int toIndex))
Q_PRIVATE_SLOT(d_func(), void _q_sortFinished(const QList<FileProperty> &list))
};
QT_END_HEADER
#endif // QQUICKFOLDERLISTMODEL_H