File indexing completed on 2025-04-27 04:04:22
0001 /* 0002 * SPDX-FileCopyrightText: (C) 2014 Vishesh Handa <vhanda@kde.org> 0003 * SPDX-FileCopyrightText: (C) 2017 Atul Sharma <atulsharma406@gmail.com> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include <QItemSelectionModel> 0011 #include <QJsonArray> 0012 #include <QSize> 0013 #include <QSortFilterProxyModel> 0014 #include <QVariant> 0015 #include <kdirmodel.h> 0016 #include <kimagecache.h> 0017 #include <kshareddatacache.h> 0018 0019 class SortModel : public QSortFilterProxyModel 0020 { 0021 Q_OBJECT 0022 Q_PROPERTY(QByteArray sortRoleName READ sortRoleName WRITE setSortRoleName NOTIFY sortRoleNameChanged) 0023 Q_PROPERTY(bool containImages READ containImages WRITE setContainImages NOTIFY containImagesChanged) 0024 Q_PROPERTY(bool hasSelectedImages READ hasSelectedImages NOTIFY selectedImagesChanged) 0025 public: 0026 explicit SortModel(QObject *parent = nullptr); 0027 virtual ~SortModel(); 0028 0029 QByteArray sortRoleName() const; 0030 void setSortRoleName(const QByteArray &name); 0031 0032 QHash<int, QByteArray> roleNames() const override; 0033 QVariant data(const QModelIndex &index, int role) const override; 0034 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; 0035 0036 void setSourceModel(QAbstractItemModel *sourceModel) override; 0037 bool containImages(); 0038 bool hasSelectedImages(); 0039 0040 Q_INVOKABLE void setSelected(int indexValue); 0041 Q_INVOKABLE void toggleSelected(int indexValue); 0042 Q_INVOKABLE void clearSelections(); 0043 Q_INVOKABLE void selectAll(); 0044 Q_INVOKABLE void deleteSelection(); 0045 Q_INVOKABLE void restoreSelection(); 0046 Q_INVOKABLE int proxyIndex(const int &indexValue); 0047 Q_INVOKABLE int sourceIndex(const int &indexValue); 0048 Q_INVOKABLE QJsonArray selectedImages(); 0049 Q_INVOKABLE QJsonArray selectedImagesMimeTypes(); 0050 Q_INVOKABLE int indexForUrl(const QString &url); 0051 0052 protected Q_SLOTS: 0053 void setContainImages(bool); 0054 void showPreview(const KFileItem &item, const QPixmap &preview); 0055 void previewFailed(const KFileItem &item); 0056 void delayedPreview(); 0057 0058 signals: 0059 void sortRoleNameChanged(); 0060 void containImagesChanged(); 0061 void selectedImagesChanged(); 0062 0063 private: 0064 QByteArray m_sortRoleName; 0065 QItemSelectionModel *m_selectionModel; 0066 0067 QTimer *m_previewTimer; 0068 QHash<QUrl, QPersistentModelIndex> m_filesToPreview; 0069 QSize m_screenshotSize; 0070 QHash<QUrl, QPersistentModelIndex> m_previewJobs; 0071 KImageCache *m_imageCache; 0072 bool m_containImages; 0073 };