File indexing completed on 2024-05-12 15:54:52

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)
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 containImagesChanged();
0060     void selectedImagesChanged();
0061 
0062 private:
0063     QByteArray m_sortRoleName;
0064     QItemSelectionModel *m_selectionModel;
0065 
0066     QTimer *m_previewTimer;
0067     QHash<QUrl, QPersistentModelIndex> m_filesToPreview;
0068     QSize m_screenshotSize;
0069     QHash<QUrl, QPersistentModelIndex> m_previewJobs;
0070     KImageCache *m_imageCache;
0071     bool m_containImages;
0072 };