/* * * $Id: k3bwritingmodewidget.cpp 621084 2007-01-08 09:17:21Z trueg $ * Copyright (C) 2003 Sebastian Trueg * * This file is part of the K3b project. * Copyright (C) 1998-2007 Sebastian Trueg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * See the file "COPYING" for the exact licensing terms. */ #include "k3bwritingmodewidget.h" #include "k3bmediacache.h" #include "k3bapplication.h" #include #include #include #include #include static const TQString s_autoHelp = i18n("Let K3b select the best-suited mode. This is the recommended selection."); static const TQString s_daoHelp = i18n("Disk At Once or more properly Session At Once. " "The laser is never turned off while writing the CD or DVD. " "This is the preferred mode to write audio CDs since it allows " "pregaps other than 2 seconds. Not all writers support DAO.
" "DVD-R(W)s written in DAO provide the best DVD-Video compatibility."); static const TQString s_taoHelp = i18n("Track At Once should be supported by every CD writer. " "The laser will be turned off after every track.
" "Most CD writers need this mode for writing multisession CDs."); // TODO: add something like: "No CD-TEXT writing in TAO mode." static const TQString s_rawHelp = i18n("RAW writing mode. The error correction data is created by the " "software instead of the writer device.
" "Try this if your CD writer fails to write in DAO and TAO."); static const TQString s_seqHelp = i18n("Incremental sequential is the default writing mode for DVD-R(W). " "It allows multisession DVD-R(W)s. It only applies to DVD-R(W)."); static const TQString s_ovwHelp = i18n("Restricted Overwrite allows to use a DVD-RW just like a DVD-RAM " "or a DVD+RW. The media may just be overwritten. It is not possible " "to write multisession DVD-RWs in this mode but K3b uses growisofs " "to grow an ISO9660 filesystem within the first session, thus allowing " "new files to be added to an already burned disk."); class K3bWritingModeWidget::Private { public: // modes set via setSupportedModes int supportedModes; // filtered modes int selectedModes; K3bDevice::Device* device; }; K3bWritingModeWidget::K3bWritingModeWidget( int modes, TQWidget* parent, const char* name ) : K3bIntMapComboBox( parent, name ) { init(); setSupportedModes( modes ); } K3bWritingModeWidget::K3bWritingModeWidget( TQWidget* parent, const char* name ) : K3bIntMapComboBox( parent, name ) { init(); setSupportedModes( K3b::DAO | K3b::TAO | K3b::RAW ); // default: support all CD-R(W) modes } K3bWritingModeWidget::~K3bWritingModeWidget() { delete d; } void K3bWritingModeWidget::init() { d = new Private(); d->device = 0; connect( this, TQT_SIGNAL(valueChanged(int)), this, TQT_SIGNAL(writingModeChanged(int)) ); TQToolTip::add( this, i18n("Select the writing mode to use") ); initWhatsThisHelp(); } void K3bWritingModeWidget::initWhatsThisHelp() { addGlobalWhatsThisText( "

" + i18n("Writing mode") + "

", i18n("Be aware that the writing mode is ignored when writing DVD+R(W) since " "there is only one way to write them.") + "

" + i18n("The selection of writing modes depends on the inserted burning medium.") + "" ); } int K3bWritingModeWidget::writingMode() const { return selectedValue(); } void K3bWritingModeWidget::setWritingMode( int m ) { if( m & d->selectedModes ) { setSelectedValue( m ); } else { setCurrentItem( 0 ); // WRITING_MODE_AUTO } } void K3bWritingModeWidget::setSupportedModes( int m ) { d->supportedModes = m|K3b::WRITING_MODE_AUTO; // we always support the Auto mode updateModes(); } void K3bWritingModeWidget::setDevice( K3bDevice::Device* dev ) { d->device = dev; updateModes(); } void K3bWritingModeWidget::updateModes() { // save current mode int currentMode = writingMode(); clear(); if( d->device ) d->selectedModes = d->supportedModes & d->device->writingModes(); else d->selectedModes = d->supportedModes; insertItem( 0, i18n("Auto"), s_autoHelp ); if( d->selectedModes & K3b::DAO ) insertItem( K3b::DAO, i18n("DAO"), s_daoHelp ); if( d->selectedModes & K3b::TAO ) insertItem( K3b::TAO, i18n("TAO"), s_taoHelp ); if( d->selectedModes & K3b::RAW ) insertItem( K3b::RAW, i18n("RAW"), s_rawHelp ); if( d->selectedModes & K3b::WRITING_MODE_RES_OVWR ) insertItem( K3b::WRITING_MODE_RES_OVWR, i18n("Restricted Overwrite"), s_ovwHelp ); if( d->selectedModes & K3b::WRITING_MODE_INCR_SEQ ) insertItem( K3b::WRITING_MODE_INCR_SEQ, i18n("Incremental"), s_seqHelp ); setWritingMode( currentMode ); } void K3bWritingModeWidget::saveConfig( TDEConfigBase* c ) { switch( writingMode() ) { case K3b::DAO: c->writeEntry( "writing_mode", "dao" ); break; case K3b::TAO: c->writeEntry( "writing_mode", "tao" ); break; case K3b::RAW: c->writeEntry( "writing_mode", "raw" ); break; case K3b::WRITING_MODE_INCR_SEQ: c->writeEntry( "writing_mode", "incremental" ); break; case K3b::WRITING_MODE_RES_OVWR: c->writeEntry( "writing_mode", "overwrite" ); break; default: c->writeEntry( "writing_mode", "auto" ); break; } } void K3bWritingModeWidget::loadConfig( TDEConfigBase* c ) { TQString mode = c->readEntry( "writing_mode" ); if ( mode == "dao" ) setWritingMode( K3b::DAO ); else if( mode == "tao" ) setWritingMode( K3b::TAO ); else if( mode == "raw" ) setWritingMode( K3b::RAW ); else if( mode == "incremental" ) setWritingMode( K3b::WRITING_MODE_INCR_SEQ ); else if( mode == "overwrite" ) setWritingMode( K3b::WRITING_MODE_RES_OVWR ); else setWritingMode( K3b::WRITING_MODE_AUTO ); } void K3bWritingModeWidget::determineSupportedModesFromMedium( const K3bMedium& m ) { int modes = 0; if( m.diskInfo().mediaType() & (K3bDevice::MEDIA_CD_R|K3bDevice::MEDIA_CD_RW) ) { modes |= K3b::TAO; if( m.device()->supportsWritingMode( K3bDevice::WRITINGMODE_SAO ) ) modes |= K3b::DAO; if( m.device()->supportsWritingMode( K3bDevice::WRITINGMODE_RAW ) ) modes |= K3b::RAW; } if( m.diskInfo().mediaType() & K3bDevice::MEDIA_DVD_MINUS_ALL ) { modes |= K3b::DAO; if( m.device()->featureCurrent( K3bDevice::FEATURE_INCREMENTAL_STREAMING_WRITABLE ) != 0 ) modes |= K3b::WRITING_MODE_INCR_SEQ; } if( m.diskInfo().mediaType() & (K3bDevice::MEDIA_DVD_RW| K3bDevice::MEDIA_DVD_RW_SEQ| K3bDevice::MEDIA_DVD_RW_OVWR) ) modes |= K3b::WRITING_MODE_RES_OVWR; setSupportedModes( modes ); setDevice( m.device() ); } void K3bWritingModeWidget::determineSupportedModesFromMedium( K3bDevice::Device* dev ) { if( dev ) determineSupportedModesFromMedium( k3bappcore->mediaCache()->medium( dev ) ); else determineSupportedModesFromMedium( K3bMedium() ); // no medium } #include "k3bwritingmodewidget.moc"