Improved device discovery via Solid.

Use the Solid-provided icon name for devices.

svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1074953
This commit is contained in:
Volker Lanz 2010-01-15 01:46:45 +00:00
parent 1051962f62
commit 8058585d49
5 changed files with 16 additions and 23 deletions

View File

@ -32,7 +32,7 @@
@param cylinders the number of cylinders in CHS notation @param cylinders the number of cylinders in CHS notation
@param sectorSize the size of a sector in bytes @param sectorSize the size of a sector in bytes
*/ */
Device::Device(const QString& name, const QString& devicenode, qint32 heads, qint32 numSectors, qint32 cylinders, qint64 sectorSize) : Device::Device(const QString& name, const QString& devicenode, qint32 heads, qint32 numSectors, qint32 cylinders, qint64 sectorSize, const QString& iconname) :
QObject(), QObject(),
m_Name(name), m_Name(name),
m_DeviceNode(devicenode), m_DeviceNode(devicenode),
@ -40,7 +40,8 @@ Device::Device(const QString& name, const QString& devicenode, qint32 heads, qin
m_Heads(heads), m_Heads(heads),
m_SectorsPerTrack(numSectors), m_SectorsPerTrack(numSectors),
m_Cylinders(cylinders), m_Cylinders(cylinders),
m_SectorSize(sectorSize) m_SectorSize(sectorSize),
m_IconName(iconname.isEmpty() ? "drive-hardisk" : iconname)
{ {
} }

View File

@ -47,7 +47,7 @@ class Device : public QObject
friend class LibParted; friend class LibParted;
public: public:
Device(const QString& name, const QString& devicenode, qint32 heads, qint32 numSectors, qint32 cylinders, qint64 sectorSize); Device(const QString& name, const QString& devicenode, qint32 heads, qint32 numSectors, qint32 cylinders, qint64 sectorSize, const QString& iconname = QString());
~Device(); ~Device();
public: public:
@ -62,6 +62,7 @@ class Device : public QObject
qint64 totalSectors() const { return static_cast<qint64>(heads()) * cylinders() * sectorsPerTrack(); } /**< @return the total number of sectors on the device */ qint64 totalSectors() const { return static_cast<qint64>(heads()) * cylinders() * sectorsPerTrack(); } /**< @return the total number of sectors on the device */
qint64 capacity() const { return totalSectors() * sectorSize(); } /**< @return the Device's capacity in bytes */ qint64 capacity() const { return totalSectors() * sectorSize(); } /**< @return the Device's capacity in bytes */
qint64 cylinderSize() const { return static_cast<qint64>(heads()) * sectorsPerTrack(); } /**< @return the size of a cylinder on this Device in sectors */ qint64 cylinderSize() const { return static_cast<qint64>(heads()) * sectorsPerTrack(); } /**< @return the size of a cylinder on this Device in sectors */
const QString& iconName() const { return m_IconName; } /**< @return suggested icon name for this Device */
protected: protected:
void setPartitionTable(PartitionTable* ptable) { m_PartitionTable = ptable; } void setPartitionTable(PartitionTable* ptable) { m_PartitionTable = ptable; }
@ -74,6 +75,7 @@ class Device : public QObject
qint32 m_SectorsPerTrack; qint32 m_SectorsPerTrack;
qint32 m_Cylinders; qint32 m_Cylinders;
qint32 m_SectorSize; qint32 m_SectorSize;
QString m_IconName;
}; };
#endif #endif

View File

@ -279,24 +279,19 @@ void LibParted::scanDevices(OperationStack& ostack)
// For that reason we scan devices on our own using Solid now. // For that reason we scan devices on our own using Solid now.
QList<Solid::Device> driveList = Solid::Device::listFromType(Solid::DeviceInterface::StorageDrive, QString()); QList<Solid::Device> driveList = Solid::Device::listFromType(Solid::DeviceInterface::StorageDrive, QString());
foreach(const Solid::Device& d, driveList) foreach(const Solid::Device& solidDevice, driveList)
{ {
const Solid::StorageDrive* drv = d.as<Solid::StorageDrive>(); const Solid::StorageDrive* solidDrive = solidDevice.as<Solid::StorageDrive>();
if (drv->driveType() == Solid::StorageDrive::HardDisk) if (solidDrive->driveType() != Solid::StorageDrive::HardDisk)
{ continue;
const Solid::Block* b = d.as<Solid::Block>();
ped_device_get(b->device().toLocal8Bit());
}
}
PedDevice* pedDevice = ped_device_get_next(NULL); const Solid::Block* solidBlock = solidDevice.as<Solid::Block>();
PedDevice* pedDevice = ped_device_get(solidBlock->device().toLocal8Bit());
while (pedDevice)
{
log(log::information) << i18nc("@info/plain", "Device found: %1", pedDevice->model); log(log::information) << i18nc("@info/plain", "Device found: %1", pedDevice->model);
Device* d = new Device(pedDevice->model, pedDevice->path, pedDevice->bios_geom.heads, pedDevice->bios_geom.sectors, pedDevice->bios_geom.cylinders, pedDevice->sector_size); Device* d = new Device(pedDevice->model, pedDevice->path, pedDevice->bios_geom.heads, pedDevice->bios_geom.sectors, pedDevice->bios_geom.cylinders, pedDevice->sector_size, solidDevice.icon());
PedDisk* pedDisk = ped_disk_new(pedDevice); PedDisk* pedDisk = ped_disk_new(pedDevice);
@ -309,12 +304,7 @@ void LibParted::scanDevices(OperationStack& ostack)
scanDevicePartitions(pedDevice, *d, pedDisk, mountInfo); scanDevicePartitions(pedDevice, *d, pedDisk, mountInfo);
} }
// add this device if either there is a valid partition table or it's not ostack.addDevice(d);
// read only (read only devices without partition table are CD/DVD readers, writers etc)
if (pedDisk || !pedDevice->read_only)
ostack.addDevice(d);
pedDevice = ped_device_get_next(pedDevice);
} }
ostack.sortDevices(); ostack.sortDevices();

View File

@ -51,7 +51,7 @@ void ListDevices::updateDevices()
{ {
const QString shortText = d->deviceNode() + " (" + Capacity(*d).toString() + ')'; const QString shortText = d->deviceNode() + " (" + Capacity(*d).toString() + ')';
const QString longText = d->deviceNode() + " (" + Capacity(*d).toString() + ", " + d->name() + ')'; const QString longText = d->deviceNode() + " (" + Capacity(*d).toString() + ", " + d->name() + ')';
QListWidgetItem* item = new QListWidgetItem(DesktopIcon("drive-harddisk"), shortText); QListWidgetItem* item = new QListWidgetItem(DesktopIcon(d->iconName()), shortText);
item->setToolTip(longText); item->setToolTip(longText);
item->setSizeHint(QSize(0, 32)); item->setSizeHint(QSize(0, 32));
listDevices().addItem(item); listDevices().addItem(item);

View File

@ -379,7 +379,7 @@ void PartitionManagerWidget::updatePartitions()
QTreeWidgetItem* deviceItem = new QTreeWidgetItem(); QTreeWidgetItem* deviceItem = new QTreeWidgetItem();
deviceItem->setText(0, selectedDevice()->name()); deviceItem->setText(0, selectedDevice()->name());
deviceItem->setIcon(0, DesktopIcon("drive-harddisk")); deviceItem->setIcon(0, DesktopIcon(selectedDevice()->iconName()));
deviceItem->setSizeHint(0, QSize(0, 32)); deviceItem->setSizeHint(0, QSize(0, 32));
treePartitions().addTopLevelItem(deviceItem); treePartitions().addTopLevelItem(deviceItem);