]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Let the places-item determine the group itself
authorPeter Penz <peter.penz19@gmail.com>
Mon, 14 May 2012 20:08:32 +0000 (22:08 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Mon, 14 May 2012 20:09:09 +0000 (22:09 +0200)
Related improvements: When loading the bookmarks assure in any
case that items having the same group are inserted as one single
group.

src/panels/places/placesitem.cpp
src/panels/places/placesitem.h
src/panels/places/placesitemmodel.cpp
src/panels/places/placesitemmodel.h

index 1fbc12a7d8461669ee41ab9c0baf8cc6c11e0f2f..436d69668c4dc009e703005cb902a11f661ba792 100644 (file)
@@ -124,10 +124,18 @@ void PlacesItem::setBookmark(const KBookmark& bookmark)
         setText(bookmark.description());
         setUrl(bookmark.url());
         setDataValue("address", bookmark.address());
-        setGroup(i18nc("@item", "Places"));
     } else {
         initializeDevice(udi);
     }
+
+    switch (groupType()) {
+    case PlacesType:           setGroup(i18nc("@item", "Places")); break;
+    case RecentlyAccessedType: setGroup(i18nc("@item", "Recently Accessed")); break;
+    case SearchForType:        setGroup(i18nc("@item", "Search For")); break;
+    case DevicesType:          setGroup(i18nc("@item", "Devices")); break;
+    default:                   Q_ASSERT(false); break;
+    }
+
     setHidden(bookmark.metaDataItem("IsHidden") == QLatin1String("true"));
 }
 
@@ -136,6 +144,24 @@ KBookmark PlacesItem::bookmark() const
     return m_bookmark;
 }
 
+PlacesItem::GroupType PlacesItem::groupType() const
+{
+    if (udi().isEmpty()) {
+        const QString protocol = url().protocol();
+        if (protocol == QLatin1String("timeline")) {
+            return RecentlyAccessedType;
+        }
+
+        if (protocol == QLatin1String("search")) {
+            return SearchForType;
+        }
+
+        return PlacesType;
+    }
+
+    return DevicesType;
+}
+
 KBookmark PlacesItem::createBookmark(KBookmarkManager* manager,
                                      const QString& text,
                                      const KUrl& url,
@@ -208,7 +234,6 @@ void PlacesItem::initializeDevice(const QString& udi)
     setIcon(m_device.icon());
     setIconOverlays(m_device.emblems());
     setUdi(udi);
-    setGroup(i18nc("@item", "Devices"));
 
     if (m_access) {
         setUrl(m_access->filePath());
index fc6a5f0786a353ac544a932d80275175970d66cd..81fbe5c609739eaf740a17aaa77fa08a7595e492 100644 (file)
@@ -38,6 +38,14 @@ class PlacesItem : public KStandardItem
 {
 
 public:
+    enum GroupType
+    {
+        PlacesType,
+        SearchForType,
+        RecentlyAccessedType,
+        DevicesType
+    };
+
     explicit PlacesItem(const KBookmark& bookmark, PlacesItem* parent = 0);
     explicit PlacesItem(const PlacesItem& item);
     virtual ~PlacesItem();
@@ -59,6 +67,8 @@ public:
     void setBookmark(const KBookmark& bookmark);
     KBookmark bookmark() const;
 
+    GroupType groupType() const;
+
     static KBookmark createBookmark(KBookmarkManager* manager,
                                     const QString& text,
                                     const KUrl& url,
index 681d9d17ef7572c465e44f02e66865481a46310f..ac7422ca484b0125e40a655f26f8f5ca7c5cc502 100644 (file)
@@ -89,9 +89,7 @@ PlacesItem* PlacesItemModel::createPlacesItem(const QString& text,
                                               const QString& iconName)
 {
     const KBookmark bookmark = PlacesItem::createBookmark(m_bookmarkManager, text, url, iconName);
-    PlacesItem* item = new PlacesItem(bookmark);
-    item->setGroup(groupName(url));
-    return item;
+    return new PlacesItem(bookmark);
 }
 
 PlacesItem* PlacesItemModel::placesItem(int index) const
@@ -143,11 +141,9 @@ void PlacesItemModel::setHiddenItemsShown(bool show)
         // m_hiddenItems.
         Q_ASSERT(m_hiddenItems.count() == count());
         for (int i = count() - 1; i >= 0; --i) {
-            PlacesItem* visibleItem = placesItem(i);
+            const PlacesItem* visibleItem = placesItem(i);
             if (visibleItem->isHidden()) {
-                PlacesItem* hiddenItem = new PlacesItem(*visibleItem);
-                removeItem(i);
-                m_hiddenItems.insert(i, hiddenItem);
+                removeHiddenItem(i);
             }
         }
     }
@@ -181,21 +177,6 @@ int PlacesItemModel::closestItem(const KUrl& url) const
     return foundIndex;
 }
 
-QString PlacesItemModel::groupName(const KUrl &url) const
-{
-    const QString protocol = url.protocol();
-
-    if (protocol.contains(QLatin1String("search"))) {
-        return searchForGroupName();
-    }
-
-    if (protocol == QLatin1String("timeline")) {
-        return recentlyAccessedGroupName();
-    }
-
-    return placesGroupName();
-}
-
 QAction* PlacesItemModel::ejectAction(int index) const
 {
     const PlacesItem* item = placesItem(index);
@@ -420,14 +401,7 @@ void PlacesItemModel::slotStorageTeardownDone(Solid::ErrorType error, const QVar
 
 void PlacesItemModel::removeHiddenItem()
 {
-    const PlacesItem* shownItem = placesItem(m_hiddenItemToRemove);
-    const int newIndex = hiddenIndex(m_hiddenItemToRemove);
-    if (shownItem && newIndex >= 0) {
-        PlacesItem* hiddenItem = new PlacesItem(*shownItem);
-        removeItem(m_hiddenItemToRemove);
-        m_hiddenItems.insert(newIndex, hiddenItem);
-        m_saveBookmarksTimer->start();
-    }
+    removeHiddenItem(m_hiddenItemToRemove);
     m_hiddenItemToRemove = -1;
 }
 
@@ -449,10 +423,13 @@ void PlacesItemModel::loadBookmarks()
         missingSystemBookmarks.insert(data.url);
     }
 
-    // The bookmarks might have a mixed order of "places" and "devices". In
-    // Dolphin's places panel the devices should always be appended as last
-    // group, so they are collected as separate lists.
+    // The bookmarks might have a mixed order of places, devices and search-groups due
+    // to the compatibility with the KFilePlacesPanel. In Dolphin's places panel the
+    // items should always be collected in one group so the items are collected first
+    // in separate lists before inserting them.
     QList<PlacesItem*> placesItems;
+    QList<PlacesItem*> recentlyAccessedItems;
+    QList<PlacesItem*> searchForItems;
     QList<PlacesItem*> devicesItems;
 
     while (!bookmark.isNull()) {
@@ -470,8 +447,6 @@ void PlacesItemModel::loadBookmarks()
             if (deviceAvailable) {
                 devicesItems.append(item);
             } else {
-                placesItems.append(item);
-
                 if (missingSystemBookmarks.contains(url)) {
                     missingSystemBookmarks.remove(url);
 
@@ -480,7 +455,14 @@ void PlacesItemModel::loadBookmarks()
                     const int index = m_systemBookmarksIndexes.value(url);
                     item->setText(m_systemBookmarks[index].text);
                     item->setSystemItem(true);
-                    item->setGroup(m_systemBookmarks[index].group);
+                }
+
+                switch (item->groupType()) {
+                case PlacesItem::PlacesType:           placesItems.append(item); break;
+                case PlacesItem::RecentlyAccessedType: recentlyAccessedItems.append(item); break;
+                case PlacesItem::SearchForType:        searchForItems.append(item); break;
+                case PlacesItem::DevicesType:
+                default:                               Q_ASSERT(false); break;
                 }
             }
         }
@@ -488,8 +470,6 @@ void PlacesItemModel::loadBookmarks()
         bookmark = root.next(bookmark);
     }
 
-    addItems(placesItems);
-
     if (!missingSystemBookmarks.isEmpty()) {
         // The current bookmarks don't contain all system-bookmarks. Add the missing
         // bookmarks.
@@ -509,12 +489,22 @@ void PlacesItemModel::loadBookmarks()
 
                 PlacesItem* item = new PlacesItem(bookmark);
                 item->setSystemItem(true);
-                item->setGroup(data.group);
-                appendItem(item);
+
+                switch (item->groupType()) {
+                case PlacesItem::PlacesType:           placesItems.append(item); break;
+                case PlacesItem::RecentlyAccessedType: recentlyAccessedItems.append(item); break;
+                case PlacesItem::SearchForType:        searchForItems.append(item); break;
+                case PlacesItem::DevicesType:
+                default:                               Q_ASSERT(false); break;
+                }
             }
         }
     }
 
+    addItems(placesItems);
+    addItems(recentlyAccessedItems);
+    addItems(searchForItems);
+
     // Create items for devices that have not stored as bookmark yet
     foreach (const QString& udi, devices) {
         const KBookmark bookmark = PlacesItem::createDeviceBookmark(m_bookmarkManager, udi);
@@ -545,62 +535,47 @@ void PlacesItemModel::createSystemBookmarks()
     Q_ASSERT(m_systemBookmarks.isEmpty());
     Q_ASSERT(m_systemBookmarksIndexes.isEmpty());
 
-    const QString placesGroup = placesGroupName();
-    const QString recentlyAccessedGroup = recentlyAccessedGroupName();
-    const QString searchForGroup = searchForGroupName();
     const QString timeLineIcon = "package_utility_time"; // TODO: Ask the Oxygen team to create
                                                          // a custom icon for the timeline-protocol
 
     m_systemBookmarks.append(SystemBookmarkData(KUrl(KUser().homeDir()),
                                                 "user-home",
-                                                i18nc("@item", "Home"),
-                                                placesGroup));
+                                                i18nc("@item", "Home")));
     m_systemBookmarks.append(SystemBookmarkData(KUrl("remote:/"),
                                                 "network-workgroup",
-                                                i18nc("@item", "Network"),
-                                                placesGroup));
+                                                i18nc("@item", "Network")));
     m_systemBookmarks.append(SystemBookmarkData(KUrl("/"),
                                                 "folder-red",
-                                                i18nc("@item", "Root"),
-                                                placesGroup));
+                                                i18nc("@item", "Root")));
     m_systemBookmarks.append(SystemBookmarkData(KUrl("trash:/"),
                                                 "user-trash",
-                                                i18nc("@item", "Trash"),
-                                                placesGroup));
+                                                i18nc("@item", "Trash")));
 
     if (m_nepomukRunning) {
         m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/today"),
                                                     timeLineIcon,
-                                                    i18nc("@item Recently Accessed", "Today"),
-                                                    recentlyAccessedGroup));
+                                                    i18nc("@item Recently Accessed", "Today")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/yesterday"),
                                                     timeLineIcon,
-                                                    i18nc("@item Recently Accessed", "Yesterday"),
-                                                    recentlyAccessedGroup));
+                                                    i18nc("@item Recently Accessed", "Yesterday")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/thismonth"),
                                                     timeLineIcon,
-                                                    i18nc("@item Recently Accessed", "This Month"),
-                                                    recentlyAccessedGroup));
+                                                    i18nc("@item Recently Accessed", "This Month")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("timeline:/lastmonth"),
                                                     timeLineIcon,
-                                                    i18nc("@item Recently Accessed", "Last Month"),
-                                                    recentlyAccessedGroup));
+                                                    i18nc("@item Recently Accessed", "Last Month")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/documents"),
                                                     "folder-txt",
-                                                    i18nc("@item Commonly Accessed", "Documents"),
-                                                    searchForGroup));
+                                                    i18nc("@item Commonly Accessed", "Documents")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/images"),
                                                     "folder-image",
-                                                    i18nc("@item Commonly Accessed", "Images"),
-                                                    searchForGroup));
+                                                    i18nc("@item Commonly Accessed", "Images")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/audio"),
                                                     "folder-sound",
-                                                    i18nc("@item Commonly Accessed", "Audio Files"),
-                                                    searchForGroup));
+                                                    i18nc("@item Commonly Accessed", "Audio Files")));
         m_systemBookmarks.append(SystemBookmarkData(KUrl("search:/videos"),
                                                     "folder-video",
-                                                    i18nc("@item Commonly Accessed", "Videos"),
-                                                    searchForGroup));
+                                                    i18nc("@item Commonly Accessed", "Videos")));
     }
 
     for (int i = 0; i < m_systemBookmarks.count(); ++i) {
@@ -647,19 +622,31 @@ int PlacesItemModel::hiddenIndex(int index) const
     return hiddenIndex >= m_hiddenItems.count() ? -1 : hiddenIndex;
 }
 
-QString PlacesItemModel::placesGroupName()
+void PlacesItemModel::removeHiddenItem(int index)
 {
-    return i18nc("@item", "Places");
-}
+    const PlacesItem* shownItem = placesItem(index);
+    const int newIndex = hiddenIndex(index);
+    if (shownItem && newIndex >= 0) {
+        PlacesItem* hiddenItem = new PlacesItem(*shownItem);
+        const KBookmark hiddenBookmark = hiddenItem->bookmark();
 
-QString PlacesItemModel::recentlyAccessedGroupName()
-{
-    return i18nc("@item", "Recently Accessed");
-}
+        const PlacesItem* previousItem = placesItem(index - 1);
+        KBookmark previousBookmark;
+        if (previousItem) {
+            previousBookmark = previousItem->bookmark();
+        }
 
-QString PlacesItemModel::searchForGroupName()
-{
-    return i18nc("@item", "Search For");
+        removeItem(index);
+
+        // removeItem() also removed the bookmark from m_bookmarkManager in
+        // PlacesItemModel::onItemRemoved(). However for hidden items the
+        // bookmark should still be remembered, so readd it again:
+        m_bookmarkManager->root().addBookmark(hiddenBookmark);
+        m_bookmarkManager->root().moveBookmark(hiddenBookmark, previousBookmark);
+
+        m_hiddenItems.insert(newIndex, hiddenItem);
+        m_saveBookmarksTimer->start();
+    }
 }
 
 #ifdef PLACESITEMMODEL_DEBUG
index 00bdb1c02f3e901c15d8dd3509b95e7e11025bfb..b7591f66a1f02aea67f7ce63fe47bf97abeb8d13 100644 (file)
@@ -72,12 +72,6 @@ public:
      */
     int closestItem(const KUrl& url) const;
 
-    /**
-     * @return Name of the group where the item with the URL
-     *         \a URL belongs to.
-     */
-    QString groupName(const KUrl& url) const;
-
     QAction* ejectAction(int index) const;
     QAction* teardownAction(int index) const;
 
@@ -124,9 +118,7 @@ private:
      */
     int hiddenIndex(int index) const;
 
-    static QString placesGroupName();
-    static QString recentlyAccessedGroupName();
-    static QString searchForGroupName();
+    void removeHiddenItem(int index);
 
 #ifdef PLACESITEMMODEL_DEBUG
     void showModelState();
@@ -143,14 +135,12 @@ private:
     struct SystemBookmarkData
     {
         SystemBookmarkData(const KUrl& url,
-                            const QString& icon,
-                            const QString& text,
-                            const QString& group) :
-            url(url), icon(icon), text(text), group(group) {}
+                           const QString& icon,
+                           const QString& text) :
+            url(url), icon(icon), text(text) {}
         KUrl url;
         QString icon;
         QString text;
-        QString group;
     };
 
     QList<SystemBookmarkData> m_systemBookmarks;