File indexing completed on 2024-06-23 05:32:17
0001 /* 0002 SPDX-FileCopyrightText: 2019 David Redondo <kde@david-redondo.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <random> 0010 0011 #include <QBindable> 0012 #include <QList> 0013 #include <QSortFilterProxyModel> 0014 0015 #include "sortingmode.h" 0016 0017 class SlideFilterModel : public QSortFilterProxyModel 0018 { 0019 Q_OBJECT 0020 0021 public: 0022 explicit SlideFilterModel(const QBindable<bool> &usedInConfig, 0023 const QBindable<SortingMode::Mode> &sortingMode, 0024 const QBindable<bool> &slideshowFoldersFirst, 0025 QObject *parent); 0026 0027 QHash<int, QByteArray> roleNames() const override; 0028 0029 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; 0030 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; 0031 void setSourceModel(QAbstractItemModel *sourceModel) override; 0032 void invalidate(); 0033 void invalidateFilter(); 0034 0035 Q_INVOKABLE int indexOf(const QString &path); 0036 Q_INVOKABLE void openContainingFolder(int rowIndex); 0037 0038 private: 0039 void buildRandomOrder(); 0040 0041 QList<int> m_randomOrder; 0042 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SlideFilterModel, SortingMode::Mode, m_SortingMode, SortingMode::Random) 0043 QPropertyNotifier m_SortingModeNotifier; 0044 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SlideFilterModel, bool, m_SortingFoldersFirst, false) 0045 QPropertyNotifier m_slideshowFoldersFirstNotifier; 0046 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SlideFilterModel, bool, m_usedInConfig, true) 0047 QPropertyNotifier m_usedInConfigNotifier; 0048 std::random_device m_randomDevice; 0049 std::mt19937 m_random; 0050 };