Create items for devices that have not been added as bookmarks yet

This commit is contained in:
Peter Penz 2012-05-09 09:03:21 +02:00
parent 02b251372e
commit 321f747ddf
3 changed files with 68 additions and 39 deletions

View 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));
}
}

View 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;

View 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";