void K3bIsoImageWritingDialog::slotStartClicked() { if( !d->isIsoImage ) { if( KMessageBox::warningContinueCancel( this, i18n("The image you selected is not a valid ISO9660 image. " "Are you sure you want to burn it anyway? " "(There may exist other valid image types that are not detected by K3b but " "will work fine.)"), i18n("Burn") ) == KMessageBox::Cancel ) return; } K3bIso9660 isoFs( imagePath() ); if( isoFs.open() ) { if( K3b::imageFilesize( KURL::fromPathOrURL( imagePath() ) ) < (KIO::filesize_t)(isoFs.primaryDescriptor().volumeSpaceSize*2048) ) { if( KMessageBox::questionYesNo( this, i18n("<p>This image has an invalid file size." "If it has been downloaded make sure the download is complete." "<p>Only continue if you know what you are doing."), i18n("Warning"), i18n("Continue"), i18n("Cancel") ) == KMessageBox::No ) return; } } m_md5Job->cancel(); // save the path KConfig* c = k3bcore->config(); c->setGroup( configGroup() ); if( c->readPathEntry( "last written image" ).isEmpty() ) c->writePathEntry( "last written image", imagePath() ); // create a progresswidget K3bBurnProgressDialog dlg( kapp->mainWidget(), "burnProgress", true ); // create the job K3bIso9660ImageWritingJob* job = new K3bIso9660ImageWritingJob( &dlg ); job->setBurnDevice( m_writerSelectionWidget->writerDevice() ); job->setSpeed( m_writerSelectionWidget->writerSpeed() ); job->setSimulate( m_checkDummy->isChecked() ); job->setWritingMode( m_writingModeWidget->writingMode() ); job->setVerifyData( m_checkVerify->isChecked() ); job->setCopies( m_checkDummy->isChecked() ? 1 : m_spinCopies->value() ); job->setImagePath( imagePath() ); // HACK (needed since if the medium is forced the stupid K3bIso9660ImageWritingJob defaults to cd writing) job->setWritingApp( K3b::GROWISOFS ); if( !exitLoopOnHide() ) hide(); dlg.startJob( job ); delete job; if( KConfigGroup( k3bcore->config(), "General Options" ).readBoolEntry( "keep action dialogs open", false ) && !exitLoopOnHide() ) show(); else close(); }
void K3b::ImageWritingDialog::slotStartClicked() { d->md5Job->cancel(); // save the path KConfigGroup grp( KGlobal::config(), configGroup() ); grp.writePathEntry( "last written image", d->imagePath() ); if( d->imageFile.isEmpty() ) d->imageFile = d->imagePath(); if( d->tocFile.isEmpty() ) d->tocFile = d->imagePath(); // create a progresswidget K3b::BurnProgressDialog dlg( parentWidget() ); // create the job K3b::BurnJob* job = 0; switch( d->currentImageType() ) { case IMAGE_CDRECORD_CLONE: { K3b::CloneJob* _job = new K3b::CloneJob( &dlg, this ); _job->setWriterDevice( d->writerSelectionWidget->writerDevice() ); _job->setImagePath( d->imageFile ); _job->setSimulate( d->checkDummy->isChecked() ); _job->setWriteSpeed( d->writerSelectionWidget->writerSpeed() ); _job->setCopies( d->checkDummy->isChecked() ? 1 : d->spinCopies->value() ); _job->setOnlyBurnExistingImage( true ); job = _job; } break; case IMAGE_AUDIO_CUE: { K3b::AudioCueFileWritingJob* job_ = new K3b::AudioCueFileWritingJob( &dlg, this ); job_->setBurnDevice( d->writerSelectionWidget->writerDevice() ); job_->setSpeed( d->writerSelectionWidget->writerSpeed() ); job_->setSimulate( d->checkDummy->isChecked() ); job_->setWritingMode( d->writingModeWidget->writingMode() ); job_->setCueFile( d->tocFile ); job_->setCopies( d->checkDummy->isChecked() ? 1 : d->spinCopies->value() ); job_->setOnTheFly( !d->checkCacheImage->isChecked() ); job_->setTempDir( d->tempDirSelectionWidget->tempPath() ); job = job_; } break; case IMAGE_CUE_BIN: // for now the K3b::BinImageWritingJob decides if it's a toc or a cue file case IMAGE_CDRDAO_TOC: { K3b::BinImageWritingJob* job_ = new K3b::BinImageWritingJob( &dlg, this ); job_->setWriter( d->writerSelectionWidget->writerDevice() ); job_->setSpeed( d->writerSelectionWidget->writerSpeed() ); job_->setTocFile( d->tocFile ); job_->setSimulate(d->checkDummy->isChecked()); job_->setMulti( false /*d->checkNoFix->isChecked()*/ ); job_->setCopies( d->checkDummy->isChecked() ? 1 : d->spinCopies->value() ); job = job_; } break; case IMAGE_ISO: { K3b::Iso9660 isoFs( d->imageFile ); if( isoFs.open() ) { if( K3b::filesize( KUrl(d->imageFile) ) < Private::volumeSpaceSize( isoFs ) ) { if( KMessageBox::questionYesNo( this, i18n("<p>The actual file size does not match the size declared in the file header. " "If it has been downloaded make sure the download is complete.</p>" "<p>Only continue if you know what you are doing.</p>"), i18n("Warning"), KStandardGuiItem::cont(), KStandardGuiItem::cancel() ) == KMessageBox::No ) return; } } K3b::Iso9660ImageWritingJob* job_ = new K3b::Iso9660ImageWritingJob( &dlg ); job_->setBurnDevice( d->writerSelectionWidget->writerDevice() ); job_->setSpeed( d->writerSelectionWidget->writerSpeed() ); job_->setSimulate( d->checkDummy->isChecked() ); job_->setWritingMode( d->writingModeWidget->writingMode() ); job_->setVerifyData( d->checkVerify->isChecked() ); job_->setNoFix( d->checkNoFix->isChecked() ); job_->setDataMode( d->dataModeWidget->dataMode() ); job_->setImagePath( d->imageFile ); job_->setCopies( d->checkDummy->isChecked() ? 1 : d->spinCopies->value() ); job = job_; } break; default: kDebug() << "(K3b::ImageWritingDialog) this should really not happen!"; break; } if( job ) { job->setWritingApp( d->writerSelectionWidget->writingApp() ); hide(); dlg.startJob(job); delete job; if( KConfigGroup( KGlobal::config(), "General Options" ).readEntry( "keep action dialogs open", false ) ) show(); else close(); } }