2 * SPDX-FileCopyrightText: 2018 Kai Uwe Broulik <kde@privat.broulik.de>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "dolphinplacesmodelsingleton.h"
8 #include "trash/dolphintrash.h"
9 #include "views/draganddrophelper.h"
16 DolphinPlacesModel::DolphinPlacesModel(QObject
*parent
)
17 : KFilePlacesModel(parent
)
19 connect(&Trash::instance(), &Trash::emptinessChanged
, this, &DolphinPlacesModel::slotTrashEmptinessChanged
);
22 DolphinPlacesModel::~DolphinPlacesModel() = default;
24 bool DolphinPlacesModel::panelsLocked() const
26 return m_panelsLocked
;
29 void DolphinPlacesModel::setPanelsLocked(bool locked
)
31 if (m_panelsLocked
== locked
) {
35 m_panelsLocked
= locked
;
38 int lastPlace
= rowCount() - 1;
40 for (int i
= 0; i
< rowCount(); ++i
) {
41 if (KFilePlacesModel::groupType(index(i
, 0)) != KFilePlacesModel::PlacesType
) {
47 Q_EMIT
dataChanged(index(0, 0), index(lastPlace
, 0), {KFilePlacesModel::GroupRole
});
51 QStringList
DolphinPlacesModel::mimeTypes() const
53 QStringList types
= KFilePlacesModel::mimeTypes();
54 types
<< DragAndDropHelper::arkDndServiceMimeType() << DragAndDropHelper::arkDndPathMimeType();
58 bool DolphinPlacesModel::dropMimeData(const QMimeData
*data
, Qt::DropAction action
, int row
, int column
, const QModelIndex
&parent
)
60 // We make the view accept the drag by returning them from mimeTypes()
61 // but the drop should be handled exclusively by PlacesPanel::slotUrlsDropped
62 if (DragAndDropHelper::isArkDndMimeType(data
)) {
66 return KFilePlacesModel::dropMimeData(data
, action
, row
, column
, parent
);
69 QVariant
DolphinPlacesModel::data(const QModelIndex
&index
, int role
) const
72 case Qt::DecorationRole
:
75 return QIcon::fromTheme(QStringLiteral("user-trash"));
77 return QIcon::fromTheme(QStringLiteral("user-trash-full"));
81 case KFilePlacesModel::GroupRole
: {
82 // When panels are unlocked, avoid a double "Places" heading,
83 // one from the panel title bar, one from the places view section.
84 if (!m_panelsLocked
) {
85 const auto groupType
= KFilePlacesModel::groupType(index
);
86 if (groupType
== KFilePlacesModel::PlacesType
) {
94 return KFilePlacesModel::data(index
, role
);
97 void DolphinPlacesModel::slotTrashEmptinessChanged(bool isEmpty
)
99 if (m_isEmpty
== isEmpty
) {
103 // NOTE Trash::isEmpty() reads the config file whereas emptinessChanged is
104 // hooked up to whether a dirlister in trash:/ has any files and they disagree...
107 for (int i
= 0; i
< rowCount(); ++i
) {
108 const QModelIndex index
= this->index(i
, 0);
109 if (isTrash(index
)) {
110 Q_EMIT
dataChanged(index
, index
, {Qt::DecorationRole
});
115 bool DolphinPlacesModel::isTrash(const QModelIndex
&index
) const
117 return url(index
) == QUrl(QStringLiteral("trash:/"));
120 DolphinPlacesModelSingleton::DolphinPlacesModelSingleton()
121 : m_placesModel(new DolphinPlacesModel())
125 DolphinPlacesModelSingleton
&DolphinPlacesModelSingleton::instance()
127 static DolphinPlacesModelSingleton s_self
;
131 DolphinPlacesModel
*DolphinPlacesModelSingleton::placesModel() const
133 return m_placesModel
.data();
136 #include "moc_dolphinplacesmodelsingleton.cpp"