]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Create items for devices that have not been added as bookmarks yet
authorPeter Penz <peter.penz19@gmail.com>
Wed, 9 May 2012 07:03:21 +0000 (09:03 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Wed, 9 May 2012 07:04:06 +0000 (09:04 +0200)
src/panels/places/placesitem.cpp
src/panels/places/placesitem.h
src/panels/places/placesitemmodel.cpp

index 11a7462c4b8b74afd7c7c0e788c9c8b5feed4c82..33af8a820f27381bf4ed0ea3c53b10870cc9887a 100644 (file)
@@ -32,41 +32,37 @@ PlacesItem::PlacesItem(PlacesItem* parent) :
 {
 }
 
-PlacesItem::PlacesItem(const KBookmark& bookmark, const QString& udi, PlacesItem* parent) :
+PlacesItem::PlacesItem(const KBookmark& bookmark, PlacesItem* parent) :
     KStandardItem(parent),
-    m_device(udi),
+    m_device(),
     m_access(),
     m_volume(),
     m_disc()
 {
     setHidden(bookmark.metaDataItem("IsHidden") == QLatin1String("true"));
 
+    const QString udi = bookmark.metaDataItem("UDI");
     if (udi.isEmpty()) {
         setIcon(bookmark.icon());
         setText(bookmark.text());
         setUrl(bookmark.url());
         setDataValue("address", bookmark.address());
         setGroup(i18nc("@item", "Places"));
-    } else if (m_device.isValid()) {
-        m_access = m_device.as<Solid::StorageAccess>();
-        m_volume = m_device.as<Solid::StorageVolume>();
-        m_disc = m_device.as<Solid::OpticalDisc>();
-
-        setText(m_device.description());
-        setIcon(m_device.icon());
-        setIconOverlays(m_device.emblems());
-        setDataValue("udi", udi);
-        setGroup(i18nc("@item", "Devices"));
-
-        if (m_access) {
-            setUrl(m_access->filePath());
-        } else if (m_disc && (m_disc->availableContent() & Solid::OpticalDisc::Audio) != 0) {
-            const QString device = m_device.as<Solid::Block>()->device();
-            setUrl(QString("audiocd:/?device=%1").arg(device));
-        }
+    } else {
+        initializeDevice(udi);
     }
 }
 
+PlacesItem::PlacesItem(const QString& udi, PlacesItem* parent) :
+    KStandardItem(parent),
+    m_device(),
+    m_access(),
+    m_volume(),
+    m_disc()
+{
+    initializeDevice(udi);
+}
+
 PlacesItem::PlacesItem(const PlacesItem& item) :
     KStandardItem(item),
     m_device(),
@@ -100,4 +96,33 @@ bool PlacesItem::isHidden() const
     return dataValue("isHidden").toBool();
 }
 
+Solid::Device PlacesItem::device() const
+{
+    return m_device;
+}
+
+void PlacesItem::initializeDevice(const QString& udi)
+{
+    m_device = Solid::Device(udi);
+    if (!m_device.isValid()) {
+        return;
+    }
+
+    m_access = m_device.as<Solid::StorageAccess>();
+    m_volume = m_device.as<Solid::StorageVolume>();
+    m_disc = m_device.as<Solid::OpticalDisc>();
+
+    setText(m_device.description());
+    setIcon(m_device.icon());
+    setIconOverlays(m_device.emblems());
+    setDataValue("udi", udi);
+    setGroup(i18nc("@item", "Devices"));
+
+    if (m_access) {
+        setUrl(m_access->filePath());
+    } else if (m_disc && (m_disc->availableContent() & Solid::OpticalDisc::Audio) != 0) {
+        const QString device = m_device.as<Solid::Block>()->device();
+        setUrl(QString("audiocd:/?device=%1").arg(device));
+    }
+}
 
index 20289c95a66f3702108dc1f9a3b459864c02b9f9..5c698842485078cecc72ebd1126860e14571c9d4 100644 (file)
@@ -38,9 +38,8 @@ class PlacesItem : public KStandardItem
 
 public:
     explicit PlacesItem(PlacesItem* parent = 0);
-    PlacesItem(const KBookmark& bookmark,
-               const QString& udi,
-               PlacesItem* parent = 0);
+    explicit PlacesItem(const KBookmark& bookmark, PlacesItem* parent = 0);
+    explicit PlacesItem(const QString& udi, PlacesItem* parent = 0);
     PlacesItem(const PlacesItem& item);
     virtual ~PlacesItem();
 
@@ -50,6 +49,11 @@ public:
     void setHidden(bool hidden);
     bool isHidden() const;
 
+    Solid::Device device() const;
+
+private:
+    void initializeDevice(const QString& udi);
+
 private:
     Solid::Device m_device;
     QPointer<Solid::StorageAccess> m_access;
index b4fc49c2cce92efb2243b68716675cf94a0149e8..48f54b2768c13098e948658f5f042ea9798b9085 100644 (file)
@@ -212,6 +212,16 @@ QString PlacesItemModel::groupName(const KUrl &url) const
 }
 
 QAction* PlacesItemModel::ejectAction(int index) const
+{
+    const PlacesItem* item = placesItem(index);
+    if (item && item->device().is<Solid::OpticalDisc>()) {
+        return new QAction(KIcon("media-eject"), i18nc("@item", "Eject '%1'", item->text()), 0);
+    }
+
+    return 0;
+}
+
+QAction* PlacesItemModel::tearDownAction(int index) const
 {
     // TODO: This is a dummy-implementation to have at least all
     // translation-strings as part of the code before the freeze
@@ -238,17 +248,6 @@ QAction* PlacesItemModel::ejectAction(int index) const
     return 0;
 }
 
-QAction* PlacesItemModel::tearDownAction(int index) const
-{
-    // TODO: This is a dummy-implementation to have at least all
-    // translation-strings as part of the code before the freeze
-    Q_UNUSED(index);
-    QString label;
-    QAction action(KIcon("media-eject"), i18nc("@item", "Eject '%1'", label), 0);
-    Q_UNUSED(action);
-    return 0;
-}
-
 void PlacesItemModel::onItemInserted(int index)
 {
     int modelIndex = 0;
@@ -319,7 +318,7 @@ void PlacesItemModel::loadBookmarks()
                                  && (m_nepomukRunning || url.protocol() != QLatin1String("timeline"));
 
         if ((udi.isEmpty() && allowedHere) || deviceAvailable) {
-            PlacesItem* item = new PlacesItem(bookmark, udi);
+            PlacesItem* item = new PlacesItem(bookmark);
             if (deviceAvailable) {
                 devicesItems.append(item);
             } else {
@@ -358,12 +357,13 @@ void PlacesItemModel::loadBookmarks()
         }
     }
 
-    addItems(devicesItems);
+    // Create items for devices that have not stored as bookmark yet
+    foreach (const QString& udi, devices) {
+        PlacesItem* item = new PlacesItem(udi);
+        devicesItems.append(item);
+    }
 
-    // TODO: add bookmarks for missing devices
-    // foreach (const QString &udi, devices) {
-    //        bookmark = KFilePlacesItem::createDeviceBookmark(bookmarkManager, udi);
-    // ...
+    addItems(devicesItems);
 
 #ifdef PLACESITEMMODEL_DEBUG
     kDebug() << "Loaded bookmarks";