From ecb5cc2be5527e84ae29239ec8fa789c3ee8587e Mon Sep 17 00:00:00 2001 From: Andreas Loibl Date: Sun, 2 Oct 2011 22:16:11 +0200 Subject: use ListItems with formatted size info in frontend --- backend.cpp | 14 ++++++++++++++ backend.h | 1 + backend/modules/bootloader | 10 +++++----- backend/modules/partitions | 10 +++++----- wizard/bootloader.cpp | 10 +++++++--- wizard/partmansel.cpp | 8 ++++++-- wizard/rootpartition.cpp | 9 +++++++-- 7 files changed, 45 insertions(+), 17 deletions(-) diff --git a/backend.cpp b/backend.cpp index 7580d19..977aaac 100644 --- a/backend.cpp +++ b/backend.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "config.h" Backend* Backend::_instance; @@ -231,6 +232,19 @@ QString Backend::cleanUsername(const QString &username) return result.replace(QRegExp("[^a-zA-Z0-9-_.]"), ""); } +QString Backend::sizeToString(qlonglong size) +{ + float fSize = size; + int i = 0; + const char* units[] = {"B", "kB", "MB", "GB", "TB"}; + while (fSize > 1024) { + fSize /= 1024.0; + i++; + } + fSize = round((fSize)*100)/100; + return QString::number(fSize)+" "+ units[i]; +} + void Backend::slotProcessExited() { emit processExited(); diff --git a/backend.h b/backend.h index 997b580..c7d3313 100644 --- a/backend.h +++ b/backend.h @@ -19,6 +19,7 @@ public: void exitBackend(); QString encryptPassword(QString password); QString cleanUsername(const QString &username); + QString sizeToString(qlonglong size); bool isBusy(); bool flag(QString flag); void flag(QString flag, bool set); diff --git a/backend/modules/bootloader b/backend/modules/bootloader index 3621341..2180873 100644 --- a/backend/modules/bootloader +++ b/backend/modules/bootloader @@ -4,14 +4,14 @@ # # This function lists all disks and the root-partition if it is suitable to install a bootloader on it. # Output example: -# /dev/sda:MBR:250059350016 -# /dev/sdb:MBR:400088457216 -# /dev/sdb1:Rootpartition:60003385344 +# /dev/sda 250059350016 Master Boot Record +# /dev/sdb 400088457216 Master Boot Record +# /dev/sdb1 60003385344 Rootpartition (filesysem ext4) function list_bootloader_targets() { for disk in $(list_all_disks) do - echo "$disk - MBR $(blockdev --getsize64 $disk)" + echo "$disk $(blockdev --getsize64 $disk) Master Boot Record" done root_dev="$(hdmap_get device of mountpoint /)" root_fs="$(hdmap_get filesystem of mountpoint /)" @@ -19,7 +19,7 @@ function list_bootloader_targets() case $root_fs in reiserfs|ext2|ext3|ext4) list_linux_partitions | grep -q "^$root_dev$" && - echo "$root_dev - Rootpartition $(blockdev --getsize64 $root_dev)" + echo "$root_dev $(blockdev --getsize64 $root_dev) Rootpartition (filesystem $root_fs)" ;; esac } diff --git a/backend/modules/partitions b/backend/modules/partitions index 211fdba..a64306a 100644 --- a/backend/modules/partitions +++ b/backend/modules/partitions @@ -93,7 +93,7 @@ function partitions_size_details() while read part x do [ -e "$part" ] || continue - echo "$part $(blockdev --getsize64 "$part")" + echo "$part $(blockdev --getsize64 "$part") $x" done } @@ -229,15 +229,15 @@ function list_possible_root_partitions() # Synopsis: send_possible_root_partitions # -# This script sends a list of all possible root-partitions with size-details to the frontend. +# This script sends a list of all possible root-partitions with size- and usage-details to the frontend. # Output example: # possible_root_partitions -# /dev/sda4 10001908224 -# /dev/sdb1 64023257088 +# /dev/sda4 10001908224 filesystem ext3 +# /dev/sdb1 64023257088 function send_possible_root_partitions() { send data possible_root_partitions - list_possible_root_partitions | partitions_size_details + list_possible_root_partitions | partitions_usage_details | partitions_size_details } # Synopsis: send_possible_root_filesystems diff --git a/wizard/bootloader.cpp b/wizard/bootloader.cpp index a066d05..0b4ccf8 100644 --- a/wizard/bootloader.cpp +++ b/wizard/bootloader.cpp @@ -11,7 +11,7 @@ wpBootloader::wpBootloader(QWidget *parent) : QWizardPage(parent) connect(backend, SIGNAL(finishedCommand(QString)), this, SLOT(backendFinishedCommand(QString))); connect(bootloader, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete())); connect(bootloaderTarget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete())); - //bootloader->setItemDelegate(new ListDelegate(this)); + bootloaderTarget->setItemDelegate(new ListDelegate(this)); } void wpBootloader::initializePage() @@ -36,7 +36,11 @@ void wpBootloader::receivedDataLine(QString data, QString line) } if(data == "bootloader_targets") { - QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("drive-harddisk"), line); + QString dev = line.section(" ",0,0); + qlonglong size = line.section(" ",1,1).toLongLong(); + QString desc = QString("%1 (%L2)").arg(backend->sizeToString(size)).arg(size); + desc += "
" + line.section(" ",2); + QListWidgetItem *item = new ListItem(dev, desc, "drive-harddisk", dev); bootloaderTarget->addItem(item); } } @@ -69,6 +73,6 @@ bool wpBootloader::validatePage() { if(!isComplete()) return false; backend->cfg("bootloader", bootloader->currentItem()->text().section(" ",0,0).toLower()); - backend->cfg("bootloader_target", bootloaderTarget->currentItem()->text().section(" ",0,0).toLower()); + backend->cfg("bootloader_target", bootloaderTarget->currentItem()->data(ListItem::ItemData).toString()); return true; } diff --git a/wizard/partmansel.cpp b/wizard/partmansel.cpp index 3a3d78b..9c509e6 100644 --- a/wizard/partmansel.cpp +++ b/wizard/partmansel.cpp @@ -11,6 +11,7 @@ wpPartManSel::wpPartManSel(QWidget *parent) : QWizardPage(parent) connect(partMan, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete())); connect(partDisk, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete())); partMan->setItemDelegate(new ListDelegate(this)); + partDisk->setItemDelegate(new ListDelegate(this)); } void wpPartManSel::initializePage() @@ -67,7 +68,10 @@ void wpPartManSel::receivedDataLine(QString data, QString line) } if(data == "list_of_disks") { - QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("drive-harddisk"), line); + QString dev = line.section(" ",0,0); + qlonglong size = line.section(" ",1,1).toLongLong(); + QString desc = QString("%1 (%L2)").arg(backend->sizeToString(size)).arg(size); + QListWidgetItem *item = new ListItem(dev, desc, "drive-harddisk", dev); partDisk->addItem(item); } } @@ -88,6 +92,6 @@ bool wpPartManSel::validatePage() { if(!isComplete()) return false; backend->cfg("partman_program", partMan->currentItem()->data(ListItem::ItemData).toString()); - backend->cfg("partman_disk", partDisk->currentItem()->text().section(" ",0,0)); + backend->cfg("partman_disk", partDisk->currentItem()->data(ListItem::ItemData).toString()); return true; } diff --git a/wizard/rootpartition.cpp b/wizard/rootpartition.cpp index 2b2b023..7a979d6 100644 --- a/wizard/rootpartition.cpp +++ b/wizard/rootpartition.cpp @@ -13,6 +13,7 @@ wpRootPartition::wpRootPartition(QWidget *parent) : QWizardPage(parent) connect(backend, SIGNAL(finishedCommand(QString)), this, SLOT(backendFinishedCommand(QString))); connect(rootPartitionDev, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(updateComplete())); connect(chkAdvanced, SIGNAL(stateChanged(int)), this, SLOT(updateComplete())); + rootPartitionDev->setItemDelegate(new ListDelegate(this)); checkPassed = false; } @@ -36,7 +37,11 @@ void wpRootPartition::receivedDataLine(QString data, QString line) { if(data == "possible_root_partitions") { - QListWidgetItem *item = new QListWidgetItem(QIcon::fromTheme("drive-harddisk"), line); + QString dev = line.section(" ",0,0); + qlonglong size = line.section(" ",1,1).toLongLong(); + QString desc = QString("%1 (%L2)").arg(backend->sizeToString(size)).arg(size); + desc += "
" + line.section(" ",2); + QListWidgetItem *item = new ListItem(dev, desc, "drive-harddisk", dev); rootPartitionDev->addItem(item); } if(data == "possible_root_filesystems") @@ -83,7 +88,7 @@ bool wpRootPartition::validatePage() } if(rootPartitionDev->currentItem()) backend->exec(QString("hdmap_set %1:/:%2:auto") - .arg(rootPartitionDev->currentItem()->text().section(" ",0,0)) + .arg(rootPartitionDev->currentItem()->data(ListItem::ItemData).toString()) .arg(chkFormat->isChecked() ? rootPartitionFs->currentText() : "")); backend->exec("fill_hdmap"); -- cgit v1.0