/** Shows information about a Partition in the InfoPane @param area the current area the widget's dock is in @param p the Partition to show information about */ void InfoPane::showPartition(Qt::DockWidgetArea area, const Partition& p) { clear(); parentWidget()->parentWidget()->setWindowTitle(i18nc("@title:window", "Partition Information")); int x = 0; int y = createHeader(p.deviceNode(), cols(area)); if (p.fileSystem().type() == FileSystem::Luks) { QString deviceNode = p.partitionPath(); createLabels(i18nc("@label partition", "File system:"), p.fileSystem().name(), cols(area), x, y); createLabels(i18nc("@label partition", "Capacity:"), Capacity::formatByteSize(p.capacity()), cols(area), x, y); createLabels(i18nc("@label partition", "Cipher name:"), FS::luks::getCipherName(deviceNode), cols(area), x, y); createLabels(i18nc("@label partition", "Cipher mode:"), FS::luks::getCipherMode(deviceNode), cols(area), x, y); createLabels(i18nc("@label partition", "Hash:"), FS::luks::getHashName(deviceNode), cols(area), x, y); createLabels(i18nc("@label partition", "Key size:"), FS::luks::getKeySize(deviceNode), cols(area), x, y); createLabels(i18nc("@label partition", "Payload offset:"), FS::luks::getPayloadOffset(deviceNode), cols(area), x, y); createLabels(i18nc("@label partition", "First sector:"), QLocale().toString(p.firstSector()), cols(area), x, y); createLabels(i18nc("@label partition", "Last sector:"), QLocale().toString(p.lastSector()), cols(area), x, y); createLabels(i18nc("@label partition", "Number of sectors:"), QLocale().toString(p.length()), cols(area), x, y); } else { createLabels(i18nc("@label partition", "File system:"), p.fileSystem().name(), cols(area), x, y); createLabels(i18nc("@label partition", "Capacity:"), Capacity::formatByteSize(p.capacity()), cols(area), x, y); createLabels(i18nc("@label partition", "Available:"), Capacity::formatByteSize(p.available()), cols(area), x, y); createLabels(i18nc("@label partition", "Used:"), Capacity::formatByteSize(p.used()), cols(area), x, y); createLabels(i18nc("@label partition", "First sector:"), QLocale().toString(p.firstSector()), cols(area), x, y); createLabels(i18nc("@label partition", "Last sector:"), QLocale().toString(p.lastSector()), cols(area), x, y); createLabels(i18nc("@label partition", "Number of sectors:"), QLocale().toString(p.length()), cols(area), x, y); } }
/** Creates a new Capacity instance. @param p the Partition @param t type of Capacity */ Capacity::Capacity(const Partition& p, Type t) : m_Size(-1) { switch(t) { case Used: m_Size = p.used(); break; case Available: m_Size = p.available(); break; case Total: m_Size = p.capacity(); break; default: break; } }
void ReplaceWidget::onPartitionSelected() { if ( Calamares::JobQueue::instance()->globalStorage()->value( "firmwareType" ) == "efi" ) m_isEfi = true; if ( m_ui->partitionTreeView->currentIndex() == QModelIndex() ) { updateStatus( CalamaresUtils::PartitionPartition, tr( "Select where to install %1.<br/>" "<font color=\"red\">Warning: </font>this will delete all files " "on the selected partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } bool ok = false; double requiredSpaceB = Calamares::JobQueue::instance() ->globalStorage() ->value( "requiredStorageGB" ) .toDouble( &ok ) * 1024 * 1024 * 1024; PartitionModel* model = qobject_cast< PartitionModel* >( m_ui->partitionTreeView->model() ); if ( model && ok ) { const QStringList osproberLines = Calamares::JobQueue::instance() ->globalStorage() ->value( "osproberLines" ).toStringList(); Partition* partition = model->partitionForIndex( m_ui->partitionTreeView->currentIndex() ); if ( !partition || partition->state() != Partition::StateNone ) { updateStatus( CalamaresUtils::Fail, tr( "The selected item does not appear to be a valid partition." ) ); setNextEnabled( false ); return; } if ( partition->roles().has( PartitionRole::Unallocated ) ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on empty space. Please select an " "existing partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } if ( partition->roles().has( PartitionRole::Extended ) ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on an extended partition. Please select an " "existing primary or logical partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } if ( partition->partitionPath().isEmpty() ) { updateStatus( CalamaresUtils::Fail, tr( "%1 cannot be installed on this partition." ) .arg( *Calamares::Branding::VersionedName ) ); setNextEnabled( false ); return; } QString prettyName = tr( "Data partition (%1)" ) .arg( partition->fileSystem().name() ); for ( const QString& line : osproberLines ) { QStringList lineColumns = line.split( ':' ); QString path = lineColumns.value( 0 ).simplified(); if ( path == partition->partitionPath() ) { QString osName; if ( !lineColumns.value( 1 ).simplified().isEmpty() ) osName = lineColumns.value( 1 ).simplified(); else if ( !lineColumns.value( 2 ).simplified().isEmpty() ) osName = lineColumns.value( 2 ).simplified(); if ( osName.isEmpty() ) { prettyName = tr( "Unknown system partition (%1)" ) .arg( partition->fileSystem().name() ); } else { prettyName = tr ( "%1 system partition (%2)" ) .arg( osName.replace( 0, 1, osName.at( 0 ).toUpper() ) ) .arg( partition->fileSystem().name() ); } break; } } if ( partition->capacity() < requiredSpaceB ) { updateStatus( CalamaresUtils::Fail, tr( "<strong>%4</strong><br/><br/>" "The partition %1 is too small for %2. Please select a partition " "with capacity at least %3 GiB." ) .arg( partition->partitionPath() ) .arg( *Calamares::Branding::VersionedName ) .arg( requiredSpaceB / ( 1024. * 1024. * 1024. ), 0, 'f', 1 ) .arg( prettyName ) ); setNextEnabled( false ); return; } m_ui->bootComboBox->hide(); m_ui->bootComboBox->clear(); m_ui->bootStatusLabel->hide(); m_ui->bootStatusLabel->clear(); if ( m_isEfi ) { QList< Partition* > efiSystemPartitions = m_core->efiSystemPartitions(); if ( efiSystemPartitions.count() == 0 ) { updateStatus( CalamaresUtils::Fail, tr( "<strong>%2</strong><br/><br/>" "An EFI system partition cannot be found anywhere " "on this system. Please go back and use manual " "partitioning to set up %1." ) .arg( *Calamares::Branding::ShortProductName ) .arg( prettyName ) ); setNextEnabled( false ); } else if ( efiSystemPartitions.count() == 1 ) { updateStatus( CalamaresUtils::PartitionPartition, tr( "<strong>%3</strong><br/><br/>" "%1 will be installed on %2.<br/>" "<font color=\"red\">Warning: </font>all data on partition " "%2 will be lost.") .arg( *Calamares::Branding::VersionedName ) .arg( partition->partitionPath() ) .arg( prettyName ) ); m_ui->bootStatusLabel->show(); m_ui->bootStatusLabel->setText( tr( "The EFI system partition at %1 will be used for starting %2." ) .arg( efiSystemPartitions.first()->partitionPath() ) .arg( *Calamares::Branding::ShortProductName ) ); setNextEnabled( true ); } else { updateStatus( CalamaresUtils::PartitionPartition, tr( "<strong>%3</strong><br/><br/>" "%1 will be installed on %2.<br/>" "<font color=\"red\">Warning: </font>all data on partition " "%2 will be lost.") .arg( *Calamares::Branding::VersionedName ) .arg( partition->partitionPath() ) .arg( prettyName ) ); m_ui->bootStatusLabel->show(); m_ui->bootStatusLabel->setText( tr( "EFI system partition:" ) ); m_ui->bootComboBox->show(); for ( int i = 0; i < efiSystemPartitions.count(); ++i ) { Partition* efiPartition = efiSystemPartitions.at( i ); m_ui->bootComboBox->addItem( efiPartition->partitionPath(), i ); if ( efiPartition->devicePath() == partition->devicePath() && efiPartition->number() == 1 ) m_ui->bootComboBox->setCurrentIndex( i ); } setNextEnabled( true ); } } else { updateStatus( CalamaresUtils::PartitionPartition, tr( "<strong>%3</strong><br/><br/>" "%1 will be installed on %2.<br/>" "<font color=\"red\">Warning: </font>all data on partition " "%2 will be lost.") .arg( *Calamares::Branding::VersionedName ) .arg( partition->partitionPath() ) .arg( prettyName ) ); setNextEnabled( true ); } } }