From: Peter Penz Date: Wed, 9 May 2012 07:03:21 +0000 (+0200) Subject: Create items for devices that have not been added as bookmarks yet X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/321f747ddf9cf71ed3c8fa4de287d131cd22c2d8 Create items for devices that have not been added as bookmarks yet --- diff --git a/src/panels/places/placesitem.cpp b/src/panels/places/placesitem.cpp index 11a7462c4..33af8a820 100644 --- a/src/panels/places/placesitem.cpp +++ b/src/panels/places/placesitem.cpp @@ -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(); - m_volume = m_device.as(); - m_disc = m_device.as(); - - 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()->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(); + m_volume = m_device.as(); + m_disc = m_device.as(); + + 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()->device(); + setUrl(QString("audiocd:/?device=%1").arg(device)); + } +} diff --git a/src/panels/places/placesitem.h b/src/panels/places/placesitem.h index 20289c95a..5c6988424 100644 --- a/src/panels/places/placesitem.h +++ b/src/panels/places/placesitem.h @@ -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 m_access; diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp index b4fc49c2c..48f54b276 100644 --- a/src/panels/places/placesitemmodel.cpp +++ b/src/panels/places/placesitemmodel.cpp @@ -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()) { + 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";