#define KFILEITEMMODEL_DEBUG
KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) :
- KItemModelBase(QByteArray(), "name", parent),
+ KItemModelBase("name", parent),
m_dirLister(dirLister),
m_naturalSorting(true),
m_sortFoldersFirst(true),
- m_groupRole(NoRole),
m_sortRole(NameRole),
m_caseSensitivity(Qt::CaseInsensitive),
m_sortedItems(),
return false;
}
-bool KFileItemModel::supportsGrouping() const
-{
- return true;
-}
-
-bool KFileItemModel::supportsSorting() const
-{
- return true;
-}
-
void KFileItemModel::setSortFoldersFirst(bool foldersFirst)
{
if (foldersFirst != m_sortFoldersFirst) {
int KFileItemModel::indexForKeyboardSearch(const QString& text, int startFromIndex) const
{
startFromIndex = qMax(0, startFromIndex);
- for (int i = startFromIndex; i < count(); i++) {
+ for (int i = startFromIndex; i < count(); ++i) {
if (data(i)["name"].toString().startsWith(text, Qt::CaseInsensitive)) {
- kDebug() << data(i)["name"].toString();
return i;
}
}
- for (int i = 0; i < startFromIndex; i++) {
+ for (int i = 0; i < startFromIndex; ++i) {
if (data(i)["name"].toString().startsWith(text, Qt::CaseInsensitive)) {
- kDebug() << data(i)["name"].toString();
return i;
}
}
return descr;
}
+QList<QPair<int, QVariant> > KFileItemModel::groups() const
+{
+ // TODO:
+ QPair<int, QVariant> group1(0, "Group 1");
+ QPair<int, QVariant> group2(5, "Group 2");
+ QPair<int, QVariant> group3(10, "Group 3");
+
+ QList<QPair<int, QVariant> > groups;
+ groups.append(group1);
+ groups.append(group2);
+ groups.append(group3);
+ return groups;
+}
+
KFileItem KFileItemModel::fileItem(int index) const
{
if (index >= 0 && index < count()) {
m_restoredExpandedUrls = urls;
}
-void KFileItemModel::onGroupRoleChanged(const QByteArray& current, const QByteArray& previous)
+void KFileItemModel::onGroupedSortingChanged(bool current)
{
- Q_UNUSED(previous);
- m_groupRole = roleIndex(current);
+ Q_UNUSED(current);
}
void KFileItemModel::onSortRoleChanged(const QByteArray& current, const QByteArray& previous)
return;
}
- KFileItemList sortedItems = m_sortedItems;
- m_sortedItems.clear();
+ const KFileItemList oldSortedItems = m_sortedItems;
+ const QHash<KUrl, int> oldItems = m_items;
+ const QList<QHash<QByteArray, QVariant> > oldData = m_data;
+
m_items.clear();
m_data.clear();
- emit itemsRemoved(KItemRangeList() << KItemRange(0, itemCount));
- sort(sortedItems.begin(), sortedItems.end());
+ sort(m_sortedItems.begin(), m_sortedItems.end());
int index = 0;
- foreach (const KFileItem& item, sortedItems) {
- m_sortedItems.append(item);
+ foreach (const KFileItem& item, m_sortedItems) {
m_items.insert(item.url(), index);
- m_data.append(retrieveData(item));
+
+ const int oldItemIndex = oldItems.value(item.url());
+ m_data.append(oldData.at(oldItemIndex));
++index;
}
- emit itemsInserted(KItemRangeList() << KItemRange(0, itemCount));
+ bool emitItemsMoved = false;
+ QList<int> movedToIndexes;
+ movedToIndexes.reserve(m_sortedItems.count());
+ for (int i = 0; i < itemCount; i++) {
+ const int newIndex = m_items.value(oldSortedItems.at(i).url());
+ movedToIndexes.append(newIndex);
+ if (!emitItemsMoved && newIndex != i) {
+ emitItemsMoved = true;
+ }
+ }
+
+ if (emitItemsMoved) {
+ emit itemsMoved(KItemRange(0, itemCount), movedToIndexes);
+ }
}
void KFileItemModel::removeExpandedItems()
{
-
KFileItemList expandedItems;
const int maxIndex = m_data.count() - 1;