File indexing completed on 2024-05-26 05:40:37

0001 // SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
0002 // SPDX-FileCopyrightText: 2019-2020 Jonah BrĂ¼chert <jbb@kaidan.im>
0003 //
0004 // SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 #pragma once
0007 
0008 #include <QAbstractListModel>
0009 #include <QUrl>
0010 #include <QVariant>
0011 
0012 #include <KDirModel>
0013 #include <KDirSortFilterProxyModel>
0014 class KDirLister;
0015 
0016 class DirModel : public KDirSortFilterProxyModel
0017 {
0018     Q_OBJECT
0019     Q_PROPERTY(const QUrl &folder READ folder WRITE setFolder NOTIFY folderChanged)
0020     Q_PROPERTY(bool showDotFiles READ showDotFiles WRITE setShowDotFiles NOTIFY showDotFilesChanged)
0021     Q_PROPERTY(bool isLoading READ isLoading NOTIFY isLoadingChanged)
0022     Q_PROPERTY(QString nameFilter READ nameFilter WRITE setNameFilter NOTIFY nameFilterChanged)
0023     Q_PROPERTY(QStringList mimeFilters READ mimeFilters WRITE setMimeFilters RESET resetMimeFilters NOTIFY mimeFiltersChanged)
0024 
0025     Q_PROPERTY(QString lastError READ lastError NOTIFY lastErrorChanged)
0026 
0027 public:
0028     enum Roles {
0029         Name = Qt::UserRole + 1,
0030         Url,
0031         IconName,
0032         IsDir,
0033         IsLink,
0034         FileSize,
0035         MimeType,
0036         IsHidden,
0037         IsReadable,
0038         IsWritable,
0039         ModificationTime,
0040     };
0041 
0042     Q_ENUM(Roles)
0043 
0044     explicit DirModel(QObject *parent = nullptr);
0045 
0046     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0047     QHash<int, QByteArray> roleNames() const override;
0048 
0049     QUrl folder() const;
0050     void setFolder(const QUrl &folder);
0051 
0052     bool showDotFiles() const;
0053     void setShowDotFiles(bool showDotFiles);
0054 
0055     bool isLoading() const;
0056 
0057     QString nameFilter() const;
0058     void setNameFilter(const QString &nameFilter);
0059 
0060     QStringList mimeFilters() const;
0061     void setMimeFilters(const QStringList &mimeFilters);
0062     void resetMimeFilters();
0063 
0064     QString lastError() const;
0065 
0066 Q_SIGNALS:
0067     void folderChanged();
0068     void showDotFilesChanged();
0069     void isLoadingChanged();
0070     void nameFilterChanged();
0071     void mimeFiltersChanged();
0072 
0073     void lastErrorChanged();
0074 
0075 private:
0076     KDirModel m_dirModel;
0077     KDirLister *m_lister;
0078 
0079     QString m_lastError;
0080 };