]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Move KItemRange to its own header
authorFrank Reininghaus <frank78ac@googlemail.com>
Mon, 16 Sep 2013 22:11:32 +0000 (00:11 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Mon, 16 Sep 2013 22:11:42 +0000 (00:11 +0200)
Also factor out the code that transforms a sorted list of ints to a
KItemRangeList. This removes some duplicated code from KFileItemModel.

Note that overriding operator<<() in KItemRangeList was necessary
because it's not a typedef for QList<KItemRange>, but a class derived
from that now, and some code fails to compile if the return type of
that function is QList<KItemRange> and not KItemRangeList.

REVIEW: 112728

src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kitemmodelbase.cpp
src/kitemviews/kitemmodelbase.h
src/kitemviews/kitemrange.h [new file with mode: 0644]

index 51ff142e796a381ba16faae5533f32e522083157..c06f87e06ba8463b7a65c2c90c12d5ed2f3936f5 100644 (file)
@@ -916,30 +916,7 @@ void KFileItemModel::slotRefreshItems(const QList<QPair<KFileItem, KFileItem> >&
 
     // Extract the item-ranges out of the changed indexes
     qSort(indexes);
-
-    KItemRangeList itemRangeList;
-    int previousIndex = indexes.at(0);
-    int rangeIndex = previousIndex;
-    int rangeCount = 1;
-
-    const int maxIndex = indexes.count() - 1;
-    for (int i = 1; i <= maxIndex; ++i) {
-        const int currentIndex = indexes.at(i);
-        if (currentIndex == previousIndex + 1) {
-            ++rangeCount;
-        } else {
-            itemRangeList.append(KItemRange(rangeIndex, rangeCount));
-
-            rangeIndex = currentIndex;
-            rangeCount = 1;
-        }
-        previousIndex = currentIndex;
-    }
-
-    if (rangeCount > 0) {
-        itemRangeList.append(KItemRange(rangeIndex, rangeCount));
-    }
-
+    const KItemRangeList itemRangeList = KItemRangeList::fromSortedContainer(indexes);
     emitItemsChangedAndTriggerResorting(itemRangeList, changedRoles);
 }
 
@@ -1077,36 +1054,6 @@ void KFileItemModel::insertItems(QList<ItemData*>& newItems)
 #endif
 }
 
-static KItemRangeList sortedIndexesToKItemRangeList(const QList<int>& sortedNumbers)
-{
-    if (sortedNumbers.empty()) {
-        return KItemRangeList();
-    }
-
-    KItemRangeList result;
-
-    QList<int>::const_iterator it = sortedNumbers.begin();
-    int index = *it;
-    int count = 1;
-
-    ++it;
-
-    QList<int>::const_iterator end = sortedNumbers.end();
-    while (it != end) {
-        if (*it == index + count) {
-            ++count;
-        } else {
-            result << KItemRange(index, count);
-            index = *it;
-            count = 1;
-        }
-        ++it;
-    }
-
-    result << KItemRange(index, count);
-    return result;
-}
-
 void KFileItemModel::removeItems(const KFileItemList& items, RemoveItemsBehavior behavior)
 {
 #ifdef KFILEITEMMODEL_DEBUG
@@ -1145,7 +1092,7 @@ void KFileItemModel::removeItems(const KFileItemList& items, RemoveItemsBehavior
     std::sort(indexesToRemove.begin(), indexesToRemove.end());
 
     // Step 2: Remove the ItemData pointers from the list m_itemData.
-    const KItemRangeList itemRanges = sortedIndexesToKItemRangeList(indexesToRemove);
+    const KItemRangeList itemRanges = KItemRangeList::fromSortedContainer(indexesToRemove);
     int target = itemRanges.at(0).index;
     int source = itemRanges.at(0).index + itemRanges.at(0).count;
     int nextRange = 1;
index c13c9f88c815430a9802f349f40491b2a261dbfb..edce95ece937a3846d4a6dcb5e105d069989be43 100644 (file)
 
 #include "kitemmodelbase.h"
 
-KItemRange::KItemRange(int index, int count) :
-    index(index),
-    count(count)
-{
-}
-
-bool KItemRange::operator == (const KItemRange& other) const
-{
-    return index == other.index && count == other.count;
-}
-
 KItemModelBase::KItemModelBase(QObject* parent) :
     QObject(parent),
     m_groupedSorting(false),
index 7545192da411dbe79724775f7e1331efa02e55fa..c5b9a0ca5f9a2bc146221c83c486753fd0c65e91 100644 (file)
@@ -25,6 +25,8 @@
 
 #include <libdolphin_export.h>
 
+#include <kitemviews/kitemrange.h>
+
 #include <QHash>
 #include <QObject>
 #include <QSet>
 
 class QMimeData;
 
-struct KItemRange
-{
-    KItemRange(int index = 0, int count = 0);
-    int index;
-    int count;
-
-    bool operator == (const KItemRange& other) const;
-};
-typedef QList<KItemRange> KItemRangeList;
-
 /**
  * @brief Base class for model implementations used by KItemListView and KItemListController.
  *
diff --git a/src/kitemviews/kitemrange.h b/src/kitemviews/kitemrange.h
new file mode 100644 (file)
index 0000000..70927b9
--- /dev/null
@@ -0,0 +1,98 @@
+/***************************************************************************
+ *   Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com>             *
+ *   Copyright (C) 2013 by Frank Reininghaus <frank78ac@googlemail.com>    *
+ *                                                                         *
+ *   Based on the Itemviews NG project from Trolltech Labs:                *
+ *   http://qt.gitorious.org/qt-labs/itemviews-ng                          *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
+ ***************************************************************************/
+
+#ifndef KITEMRANGE_H
+#define KITEMRANGE_H
+
+#include <QList>
+
+struct KItemRange
+{
+    KItemRange(int index = 0, int count = 0);
+    int index;
+    int count;
+
+    bool operator == (const KItemRange& other) const;
+};
+
+inline KItemRange::KItemRange(int index, int count) :
+    index(index),
+    count(count)
+{
+}
+
+inline bool KItemRange::operator == (const KItemRange& other) const
+{
+    return index == other.index && count == other.count;
+}
+
+
+class KItemRangeList : public QList<KItemRange>
+{
+public:
+    KItemRangeList() : QList<KItemRange>() {}
+    KItemRangeList(const QList<KItemRange>& list) : QList<KItemRange>(list) {}
+
+    template<class Container>
+    static KItemRangeList fromSortedContainer(const Container& container);
+
+    KItemRangeList& operator<<(const KItemRange& range)
+    {
+        append(range);
+        return *this;
+    }
+};
+
+template<class Container>
+KItemRangeList KItemRangeList::fromSortedContainer(const Container& container)
+{
+    typename Container::const_iterator it = container.constBegin();
+    const typename Container::const_iterator end = container.constEnd();
+
+    if (it == end) {
+        return KItemRangeList();
+    }
+
+    KItemRangeList result;
+
+    int index = *it;
+    int count = 1;
+
+    ++it;
+
+    while (it != end) {
+        if (*it == index + count) {
+            ++count;
+        } else {
+            result << KItemRange(index, count);
+            index = *it;
+            count = 1;
+        }
+        ++it;
+    }
+
+    result << KItemRange(index, count);
+    return result;
+}
+
+#endif