]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Use PlacesItemModel instead of KFilePlacesModel
authorPeter Penz <peter.penz19@gmail.com>
Sat, 2 Jun 2012 13:02:34 +0000 (15:02 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 2 Jun 2012 13:03:22 +0000 (15:03 +0200)
This allows inserting items to the corresponding group.

src/dolphincontextmenu.cpp
src/dolphinmainwindow.cpp
src/panels/information/informationpanelcontent.cpp
src/panels/information/informationpanelcontent.h
src/panels/places/placesitem.cpp
src/panels/places/placesitemmodel.cpp
src/panels/places/placesitemmodel.h
src/panels/places/placespanel.cpp

index ab91a9ba60db94d432fc4c7fbd3b9905b920644f..539c280353a193f104a67980b5e158a6b5496b2b 100644 (file)
@@ -31,7 +31,6 @@
 #include <kabstractfileitemactionplugin.h>
 #include <KFileItemActions>
 #include <KFileItemListProperties>
-#include <KFilePlacesModel>
 #include <KGlobal>
 #include <KIconLoader>
 #include <KIO/NetAccess>
@@ -50,6 +49,9 @@
 #include <KStandardDirs>
 #include <KToolBar>
 
+#include <panels/places/placesitem.h>
+#include <panels/places/placesitemmodel.h>
+
 #include <QApplication>
 #include <QClipboard>
 #include <QDir>
@@ -292,8 +294,10 @@ void DolphinContextMenu::openItemContextMenu()
         if (activatedAction == addToPlacesAction) {
             const KUrl selectedUrl(m_fileInfo.url());
             if (selectedUrl.isValid()) {
-                KFilePlacesModel model;
-                model.addPlace(placesName(selectedUrl), selectedUrl);
+                PlacesItemModel model;
+                PlacesItem* item = model.createPlacesItem(placesName(selectedUrl),
+                                                          selectedUrl);
+                model.appendItemToGroup(item);
             }
         } else if (activatedAction == openParentInNewWindowAction) {
             m_command = OpenParentFolderInNewWindow;
@@ -353,8 +357,9 @@ void DolphinContextMenu::openViewportContextMenu()
     if (addToPlacesAction && (action == addToPlacesAction)) {
         const KUrl url = m_mainWindow->activeViewContainer()->url();
         if (url.isValid()) {
-            KFilePlacesModel model;
-            model.addPlace(placesName(url), url);
+            PlacesItemModel model;
+            PlacesItem* item = model.createPlacesItem(placesName(url), url);
+            model.appendItemToGroup(item);
         }
     }
 }
@@ -405,15 +410,16 @@ QString DolphinContextMenu::placesName(const KUrl& url) const
 
 bool DolphinContextMenu::placeExists(const KUrl& url) const
 {
-    KFilePlacesModel model;
+    PlacesItemModel model;
 
-    const int count = model.rowCount();
+    const int count = model.count();
     for (int i = 0; i < count; ++i) {
-        const QModelIndex index = model.index(i, 0);
-        if (url.equals(model.url(index), KUrl::CompareWithoutTrailingSlash)) {
+        const KUrl placeUrl = model.placesItem(i)->url();
+        if (placeUrl.equals(url, KUrl::CompareWithoutTrailingSlash)) {
             return true;
         }
     }
+
     return false;
 }
 
index df1954d07716174239c67ed9a28e3fafa48e834f..1ce51935f7b638cfeabec8b2565b58d5367f90c4 100644 (file)
@@ -51,7 +51,6 @@
 #include <kdeversion.h>
 #include <kdualaction.h>
 #include <KFileDialog>
-#include <KFilePlacesModel>
 #include <KGlobal>
 #include <KLineEdit>
 #include <KToolBar>
index c535d3d6ad7b0bd0ed2f7481d2f7e4094ea24d3a..c03a5a4e2497cc29591c016a91dfa7c923aaebe1 100644 (file)
@@ -22,7 +22,6 @@
 #include <KDialog>
 #include <KFileItem>
 #include <kfilemetadatawidget.h>
-#include <KFilePlacesModel>
 #include <KGlobalSettings>
 #include <KIO/JobUiDelegate>
 #include <KIO/PreviewJob>
@@ -33,6 +32,9 @@
 #include <kseparator.h>
 #include <KStringHandler>
 
+#include <panels/places/placesitem.h>
+#include <panels/places/placesitemmodel.h>
+
 #include <Phonon/BackendCapabilities>
 #include <Phonon/MediaObject>
 #include <Phonon/SeekSlider>
@@ -64,7 +66,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) :
     m_nameLabel(0),
     m_metaDataWidget(0),
     m_metaDataArea(0),
-    m_placesModel(0)
+    m_placesItemModel(0)
 {
     parent->installEventFilter(this);
 
@@ -137,7 +139,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) :
     layout->addWidget(new KSeparator());
     layout->addWidget(m_metaDataArea);
 
-    m_placesModel = new KFilePlacesModel(this);
+    m_placesItemModel = new PlacesItemModel(this);
 }
 
 InformationPanelContent::~InformationPanelContent()
@@ -348,12 +350,12 @@ void InformationPanelContent::refreshMetaData()
 
 bool InformationPanelContent::applyPlace(const KUrl& url)
 {
-    const int count = m_placesModel->rowCount();
+    const int count = m_placesItemModel->count();
     for (int i = 0; i < count; ++i) {
-        QModelIndex index = m_placesModel->index(i, 0);
-        if (url.equals(m_placesModel->url(index), KUrl::CompareWithoutTrailingSlash)) {
-            setNameLabelText(m_placesModel->text(index));
-            m_preview->setPixmap(m_placesModel->icon(index).pixmap(128, 128));
+        const PlacesItem* item = m_placesItemModel->placesItem(i);
+        if (item->url().equals(url, KUrl::CompareWithoutTrailingSlash)) {
+            setNameLabelText(item->text());
+            m_preview->setPixmap(KIcon(item->icon()).pixmap(128, 128));
             return true;
         }
     }
index 234060749e681e9f7e89ee2b7eac4df4f4174f20..c0412e567b706b08178db51367d80cec60881e85 100644 (file)
@@ -27,9 +27,9 @@
 
 class KFileItemList;
 class KFileMetaDataWidget;
-class KFilePlacesModel;
 class PhononWidget;
 class PixmapViewer;
+class PlacesItemModel;
 class QPixmap;
 class QString;
 class QLabel;
@@ -136,7 +136,7 @@ private:
     KFileMetaDataWidget* m_metaDataWidget;
     QScrollArea* m_metaDataArea;
 
-    KFilePlacesModel* m_placesModel;
+    PlacesItemModel* m_placesItemModel;
 };
 
 #endif // INFORMATIONPANELCONTENT_H
index 7a5daff8ea2c12d4fc7fa8db69e383659d59b58f..191f8b2779fb869d51c07f0c57a44a7bd00f5491 100644 (file)
@@ -125,6 +125,7 @@ void PlacesItem::setBookmark(const KBookmark& bookmark)
     delete m_volume;
     delete m_disc;
 
+
     const QString udi = bookmark.metaDataItem("UDI");
     if (udi.isEmpty()) {
         setIcon(bookmark.icon());
@@ -134,7 +135,18 @@ void PlacesItem::setBookmark(const KBookmark& bookmark)
         initializeDevice(udi);
     }
 
-    switch (groupType()) {
+    const GroupType type = groupType();
+    if (icon().isEmpty()) {
+        switch (type) {
+        case RecentlyAccessedType: setIcon("package_utility_time"); break;
+        case SearchForType:        setIcon("nepomuk"); break;
+        case PlacesType:
+        default:                   setIcon("folder");
+        }
+
+    }
+
+    switch (type) {
     case PlacesType:           setGroup(i18nc("@item", "Places")); break;
     case RecentlyAccessedType: setGroup(i18nc("@item", "Recently Accessed")); break;
     case SearchForType:        setGroup(i18nc("@item", "Search For")); break;
@@ -158,7 +170,7 @@ PlacesItem::GroupType PlacesItem::groupType() const
             return RecentlyAccessedType;
         }
 
-        if (protocol == QLatin1String("search")) {
+        if (protocol.contains(QLatin1String("search"))) {
             return SearchForType;
         }
 
index c1a5426af7a0811f7628fbdc5d9a1234b40740b5..02e1944bd2600767ee5b4f3ce6b94b299827c916 100644 (file)
@@ -226,6 +226,32 @@ int PlacesItemModel::closestItem(const KUrl& url) const
     return foundIndex;
 }
 
+void PlacesItemModel::appendItemToGroup(PlacesItem* item)
+{
+    if (!item) {
+        return;
+    }
+
+    int i = 0;
+    while (i < count() && placesItem(i)->group() != item->group()) {
+        ++i;
+    }
+
+    bool inserted = false;
+    while (!inserted && i < count()) {
+        if (placesItem(i)->group() != item->group()) {
+            insertItem(i, item);
+            inserted = true;
+        }
+        ++i;
+    }
+
+    if (!inserted) {
+        appendItem(item);
+    }
+}
+
+
 QAction* PlacesItemModel::ejectAction(int index) const
 {
     const PlacesItem* item = placesItem(index);
@@ -370,11 +396,7 @@ void PlacesItemModel::dropMimeData(int index, const QMimeData* mimeData)
                 text = url.host();
             }
 
-            KBookmark bookmark = PlacesItem::createBookmark(m_bookmarkManager,
-                                                            text,
-                                                            url,
-                                                            "folder");
-            PlacesItem* newItem = new PlacesItem(bookmark);
+            PlacesItem* newItem = createPlacesItem(text, url);
             const int dropIndex = groupedDropIndex(index, newItem);
             insertItem(dropIndex, newItem);
         }
@@ -567,7 +589,7 @@ void PlacesItemModel::updateBookmarks()
                 if (item->isHidden() && !m_hiddenItemsShown) {
                     m_bookmarkedItems.append(item);
                 } else {
-                    appendItem(item);
+                    appendItemToGroup(item);
                 }
             }
         }
index b850f356fb74030c9202cddbaf05bba9251fc21d..89a111730bdc491a89c5a1f92ff311e119a8b790 100644 (file)
@@ -69,7 +69,7 @@ public:
      */
     PlacesItem* createPlacesItem(const QString& text,
                                  const KUrl& url,
-                                 const QString& iconName);
+                                 const QString& iconName = QString());
 
     PlacesItem* placesItem(int index) const;
 
@@ -99,6 +99,15 @@ public:
      */
     int closestItem(const KUrl& url) const;
 
+    /**
+     * Appends the item \a item as last element of the group
+     * the item belongs to. If no item with the same group is
+     * present, the item gets appended as last element of the
+     * model. PlacesItemModel takes the ownership
+     * of the item.
+     */
+    void appendItemToGroup(PlacesItem* item);
+
     QAction* ejectAction(int index) const;
     QAction* teardownAction(int index) const;
 
index 613046025e3f07be80a42aefd51c767508b6ac5d..7016b039ddd6ab9727c81b8fe7b0b1b33211ee90 100644 (file)
@@ -309,25 +309,7 @@ void PlacesPanel::addEntry()
     dialog->setUrl(url);
     if (dialog->exec() == QDialog::Accepted) {
         PlacesItem* item = m_model->createPlacesItem(dialog->text(), dialog->url(), dialog->icon());
-
-        // Insert the item as last item of the corresponding group.
-        int i = 0;
-        while (i < m_model->count() && m_model->placesItem(i)->group() != item->group()) {
-            ++i;
-        }
-
-        bool inserted = false;
-        while (!inserted && i < m_model->count()) {
-            if (m_model->placesItem(i)->group() != item->group()) {
-                m_model->insertItem(i, item);
-                inserted = true;
-            }
-            ++i;
-        }
-
-        if (!inserted) {
-            m_model->appendItem(item);
-        }
+        m_model->appendItemToGroup(item);
     }
 
     delete dialog;