]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Places Panel: Fix implementation issues when hiding items
authorPeter Penz <peter.penz19@gmail.com>
Wed, 2 May 2012 19:23:38 +0000 (21:23 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Wed, 2 May 2012 19:24:16 +0000 (21:24 +0200)
src/kitemviews/kitemlistview.cpp
src/panels/places/placesitemmodel.cpp
src/panels/places/placesitemmodel.h

index 2177c629653f17ee33f4af07568b24091341b065..a3fc2bafce69187cc1fc88dc179d46a2e7d50840 100644 (file)
@@ -1049,6 +1049,12 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges)
             }
         }
 
             }
         }
 
+        // In case if the first item of a group has been removed, the group header
+        // must be applied to the next visible item.
+        if (m_grouped && index < m_model->count()) {
+            updateGroupHeaderForWidget(m_visibleItems.value(index));
+        }
+
         if (!hasMultipleRanges) {
             // The decrease-layout-size optimization in KItemListView::slotItemsInserted()
             // assumes an updated geometry. If items are removed during an active transaction,
         if (!hasMultipleRanges) {
             // The decrease-layout-size optimization in KItemListView::slotItemsInserted()
             // assumes an updated geometry. If items are removed during an active transaction,
index 060c77f81f3e73a0dfefd1a4ac8986ca8c296db5..d6569ef2d3f4a6dac960f7c4cf11f1c1c2f9e267 100644 (file)
@@ -89,12 +89,15 @@ void PlacesItemModel::setItemHidden(int index, bool hide)
         KStandardItem* shownItem = this->item(index);
         shownItem->setDataValue("isHidden", hide);
         if (!m_hiddenItemsShown && hide) {
         KStandardItem* shownItem = this->item(index);
         shownItem->setDataValue("isHidden", hide);
         if (!m_hiddenItemsShown && hide) {
+            const int newIndex = hiddenIndex(index);
             KStandardItem* hiddenItem = new KStandardItem(*shownItem);
             removeItem(index);
             KStandardItem* hiddenItem = new KStandardItem(*shownItem);
             removeItem(index);
-            index = hiddenIndex(index);
-            Q_ASSERT(!m_hiddenItems[index]);
-            m_hiddenItems[index] = hiddenItem;
+            m_hiddenItems.insert(newIndex, hiddenItem);
         }
         }
+#ifdef PLACESITEMMODEL_DEBUG
+        kDebug() << "Changed hide-state from" << index << "to" << hide;
+        showModelState();
+#endif
     }
 }
 
     }
 }
 
@@ -172,7 +175,11 @@ QAction* PlacesItemModel::tearDownAction(int index) const
 
 void PlacesItemModel::onItemInserted(int index)
 {
 
 void PlacesItemModel::onItemInserted(int index)
 {
-    m_hiddenItems.insert(hiddenIndex(index), 0);
+    if (index == count() - 1) {
+        m_hiddenItems.append(0);
+    } else {
+        m_hiddenItems.insert(hiddenIndex(index), 0);
+    }
 }
 
 void PlacesItemModel::onItemRemoved(int index)
 }
 
 void PlacesItemModel::onItemRemoved(int index)
@@ -180,6 +187,10 @@ void PlacesItemModel::onItemRemoved(int index)
     const int removeIndex = hiddenIndex(index);
     Q_ASSERT(!m_hiddenItems[removeIndex]);
     m_hiddenItems.removeAt(removeIndex);
     const int removeIndex = hiddenIndex(index);
     Q_ASSERT(!m_hiddenItems[removeIndex]);
     m_hiddenItems.removeAt(removeIndex);
+#ifdef PLACESITEMMODEL_DEBUG
+    kDebug() << "Removed item" << index;
+    showModelState();
+#endif
 }
 
 void PlacesItemModel::loadBookmarks()
 }
 
 void PlacesItemModel::loadBookmarks()
@@ -251,6 +262,11 @@ void PlacesItemModel::loadBookmarks()
             }
         }
     }
             }
         }
     }
+
+#ifdef PLACESITEMMODEL_DEBUG
+    kDebug() << "Loaded bookmarks";
+    showModelState();
+#endif
 }
 
 void PlacesItemModel::createSystemBookmarks()
 }
 
 void PlacesItemModel::createSystemBookmarks()
@@ -326,14 +342,17 @@ int PlacesItemModel::hiddenIndex(int index) const
 {
     int hiddenIndex = 0;
     int visibleItemIndex = 0;
 {
     int hiddenIndex = 0;
     int visibleItemIndex = 0;
-    while (visibleItemIndex < index && hiddenIndex < m_hiddenItems.count()) {
+    while (hiddenIndex < m_hiddenItems.count()) {
         if (!m_hiddenItems[hiddenIndex]) {
         if (!m_hiddenItems[hiddenIndex]) {
+            if (visibleItemIndex == index) {
+                break;
+            }
             ++visibleItemIndex;
         }
         ++hiddenIndex;
     }
 
             ++visibleItemIndex;
         }
         ++hiddenIndex;
     }
 
-    return hiddenIndex;
+    return hiddenIndex >= m_hiddenItems.count() ? -1 : hiddenIndex;
 }
 
 QString PlacesItemModel::placesGroupName()
 }
 
 QString PlacesItemModel::placesGroupName()
@@ -445,4 +464,20 @@ KUrl PlacesItemModel::searchUrlForTerm(const Nepomuk::Query::Term& term)
 }
 #endif
 
 }
 #endif
 
+#ifdef PLACESITEMMODEL_DEBUG
+void PlacesItemModel::showModelState()
+{
+    kDebug() << "hidden-index   model-index   text";
+    int j = 0;
+    for (int i = 0; i < m_hiddenItems.count(); ++i) {
+        if (m_hiddenItems[i]) {
+            kDebug() <<  i << "(Hidden)    " << "             " << m_hiddenItems[i]->dataValue("text").toString();
+        } else {
+            kDebug() <<  i << "            " << j << "           " << item(j)->dataValue("text").toString();
+            ++j;
+        }
+    }
+}
+#endif
+
 #include "placesitemmodel.moc"
 #include "placesitemmodel.moc"
index 50f2be9d4eb3c4ef3973056a8932582be957e82d..cd4fd2f75d41102a8097500f249c89d258cc18b6 100644 (file)
@@ -42,6 +42,14 @@ class QAction;
     }
 #endif
 
     }
 #endif
 
+#define PLACESITEMMODEL_DEBUG
+
+/**
+ * @brief Model for maintaining the bookmarks of the places panel.
+ *
+ * It is compatible to the KFilePlacesModel from kdelibs but adds
+ * the ability to have groups for places.
+ */
 class PlacesItemModel: public KStandardItemModel
 {
     Q_OBJECT
 class PlacesItemModel: public KStandardItemModel
 {
     Q_OBJECT
@@ -89,8 +97,17 @@ protected:
 private:
     void loadBookmarks();
 
 private:
     void loadBookmarks();
 
+    /**
+     * Creates system bookmarks that are shown per default and can
+     * only be hidden but not removed. The result will be stored
+     * in m_systemBookmarks.
+     */
     void createSystemBookmarks();
 
     void createSystemBookmarks();
 
+    /**
+     * @param index Item index related to the model.
+     * @return      Corresponding item index related to m_hiddenItems.
+     */
     int hiddenIndex(int index) const;
 
     static QString placesGroupName();
     int hiddenIndex(int index) const;
 
     static QString placesGroupName();
@@ -127,6 +144,10 @@ private:
     static KUrl searchUrlForTerm(const Nepomuk::Query::Term& term);
 #endif
 
     static KUrl searchUrlForTerm(const Nepomuk::Query::Term& term);
 #endif
 
+#ifdef PLACESITEMMODEL_DEBUG
+    void showModelState();
+#endif
+
 private:
     bool m_nepomukRunning;
     bool m_hiddenItemsShown;
 private:
     bool m_nepomukRunning;
     bool m_hiddenItemsShown;