]>
cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kstandarditemmodel.cpp
2 * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "kstandarditemmodel.h"
9 #include "kstandarditem.h"
11 KStandardItemModel::KStandardItemModel(QObject
* parent
) :
12 KItemModelBase(parent
),
18 KStandardItemModel::~KStandardItemModel()
22 m_indexesForItems
.clear();
25 void KStandardItemModel::insertItem(int index
, KStandardItem
* item
)
27 if (index
< 0 || index
> count() || !item
) {
32 if (!m_indexesForItems
.contains(item
)) {
34 m_items
.insert(index
, item
);
35 m_indexesForItems
.insert(item
, index
);
37 // Inserting an item requires to update the indexes
38 // afterwards from m_indexesForItems.
39 for (int i
= index
+ 1; i
< m_items
.count(); ++i
) {
40 m_indexesForItems
.insert(m_items
[i
], i
);
43 // TODO: no hierarchical items are handled yet
45 onItemInserted(index
);
46 emit
itemsInserted(KItemRangeList() << KItemRange(index
, 1));
50 void KStandardItemModel::changeItem(int index
, KStandardItem
* item
)
52 if (index
< 0 || index
>= count() || !item
) {
59 QSet
<QByteArray
> changedRoles
;
61 KStandardItem
* oldItem
= m_items
[index
];
62 const QHash
<QByteArray
, QVariant
> oldData
= oldItem
->data();
63 const QHash
<QByteArray
, QVariant
> newData
= item
->data();
65 // Determine which roles have been changed
66 QHashIterator
<QByteArray
, QVariant
> it(oldData
);
67 while (it
.hasNext()) {
69 const QByteArray role
= it
.key();
70 const QVariant oldValue
= it
.value();
71 if (newData
.contains(role
) && newData
.value(role
) != oldValue
) {
72 changedRoles
.insert(role
);
76 m_indexesForItems
.remove(oldItem
);
80 m_items
[index
] = item
;
81 m_indexesForItems
.insert(item
, index
);
83 onItemChanged(index
, changedRoles
);
84 emit
itemsChanged(KItemRangeList() << KItemRange(index
, 1), changedRoles
);
87 void KStandardItemModel::removeItem(int index
)
89 if (index
>= 0 && index
< count()) {
90 KStandardItem
* item
= m_items
[index
];
91 m_indexesForItems
.remove(item
);
92 m_items
.removeAt(index
);
94 // Removing an item requires to update the indexes
95 // afterwards from m_indexesForItems.
96 for (int i
= index
; i
< m_items
.count(); ++i
) {
97 m_indexesForItems
.insert(m_items
[i
], i
);
100 onItemRemoved(index
, item
);
105 emit
itemsRemoved(KItemRangeList() << KItemRange(index
, 1));
107 // TODO: no hierarchical items are handled yet
111 void KStandardItemModel::clear()
113 int size
= m_items
.size();
115 m_indexesForItems
.clear();
117 emit
itemsRemoved(KItemRangeList() << KItemRange(0, size
));
120 KStandardItem
* KStandardItemModel::item(int index
) const
122 if (index
< 0 || index
>= m_items
.count()) {
125 return m_items
[index
];
128 int KStandardItemModel::index(const KStandardItem
* item
) const
130 return m_indexesForItems
.value(item
, -1);
133 void KStandardItemModel::appendItem(KStandardItem
*item
)
135 insertItem(m_items
.count(), item
);
138 int KStandardItemModel::count() const
140 return m_items
.count();
143 QHash
<QByteArray
, QVariant
> KStandardItemModel::data(int index
) const
145 if (index
>= 0 && index
< count()) {
146 const KStandardItem
* item
= m_items
[index
];
151 return QHash
<QByteArray
, QVariant
>();
154 bool KStandardItemModel::setData(int index
, const QHash
<QByteArray
, QVariant
>& values
)
157 if (index
< 0 || index
>= count()) {
164 QMimeData
* KStandardItemModel::createMimeData(const KItemSet
& indexes
) const
170 int KStandardItemModel::indexForKeyboardSearch(const QString
& text
, int startFromIndex
) const
173 Q_UNUSED(startFromIndex
)
177 bool KStandardItemModel::supportsDropping(int index
) const
183 QString
KStandardItemModel::roleDescription(const QByteArray
& role
) const
189 QList
<QPair
<int, QVariant
> > KStandardItemModel::groups() const
191 QList
<QPair
<int, QVariant
> > groups
;
193 const QByteArray role
= sortRole().isEmpty() ? "group" : sortRole();
194 bool isFirstGroupValue
= true;
196 const int maxIndex
= count() - 1;
197 for (int i
= 0; i
<= maxIndex
; ++i
) {
198 const QString newGroupValue
= m_items
.at(i
)->dataValue(role
).toString();
199 if (newGroupValue
!= groupValue
|| isFirstGroupValue
) {
200 groupValue
= newGroupValue
;
201 groups
.append(QPair
<int, QVariant
>(i
, newGroupValue
));
202 isFirstGroupValue
= false;
209 void KStandardItemModel::onItemInserted(int index
)
214 void KStandardItemModel::onItemChanged(int index
, const QSet
<QByteArray
>& changedRoles
)
217 Q_UNUSED(changedRoles
)
220 void KStandardItemModel::onItemRemoved(int index
, KStandardItem
* removedItem
)
223 Q_UNUSED(removedItem
)