File indexing completed on 2024-03-24 17:22:45

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Kai Uwe Broulik <kde@privat.broulik.de>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef DOLPHINPLACESMODELSINGLETON_H
0008 #define DOLPHINPLACESMODELSINGLETON_H
0009 
0010 #include <QScopedPointer>
0011 #include <QString>
0012 
0013 #include <KFilePlacesModel>
0014 
0015 /**
0016  * @brief Dolphin's special-cased KFilePlacesModel
0017  *
0018  * It returns the trash's icon based on whether
0019  * it is full or not.
0020  */
0021 class DolphinPlacesModel : public KFilePlacesModel
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     explicit DolphinPlacesModel(QObject *parent = nullptr);
0027     ~DolphinPlacesModel() override;
0028 
0029     bool panelsLocked() const;
0030     void setPanelsLocked(bool locked);
0031 
0032     QStringList mimeTypes() const override;
0033     bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
0034 
0035 protected:
0036     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0037 
0038 private Q_SLOTS:
0039     void slotTrashEmptinessChanged(bool isEmpty);
0040 
0041 private:
0042     bool isTrash(const QModelIndex &index) const;
0043 
0044     bool m_isEmpty = false;
0045     bool m_panelsLocked = true; // common-case, panels are locked
0046 };
0047 
0048 /**
0049  * @brief Provides a global KFilePlacesModel instance.
0050  */
0051 class DolphinPlacesModelSingleton
0052 {
0053 public:
0054     static DolphinPlacesModelSingleton &instance();
0055 
0056     DolphinPlacesModel *placesModel() const;
0057 
0058     DolphinPlacesModelSingleton(const DolphinPlacesModelSingleton &) = delete;
0059     DolphinPlacesModelSingleton &operator=(const DolphinPlacesModelSingleton &) = delete;
0060 
0061 private:
0062     DolphinPlacesModelSingleton();
0063 
0064     QScopedPointer<DolphinPlacesModel> m_placesModel;
0065 };
0066 
0067 #endif // DOLPHINPLACESMODELSINGLETON_H