void K3bWriterSelectionWidget::slotRefreshWriterSpeeds() { if( writerDevice() ) { QValueList<int> speeds = k3bappcore->mediaCache()->writingSpeeds( writerDevice() ); int lastSpeed = writerSpeed(); clearSpeedCombo(); m_comboSpeed->insertItem( i18n("Auto") ); if( k3bappcore->mediaCache()->diskInfo( writerDevice() ).isDvdMedia() ) { m_comboSpeed->insertItem( i18n("Ignore") ); d->haveIgnoreSpeed = true; } else d->haveIgnoreSpeed = false; if( !d->forceAutoSpeed ) { if( speeds.isEmpty() || writerDevice() == m_comboMedium->overrideDevice() ) { // // In case of the override device we do not know which medium will actually be used // So this is the only case in which we need to use the device's max writing speed // // But we need to know if it will be a CD or DVD medium. Since the override device // is only used for CD/DVD copy anyway we simply reply on the inserted medium's type. // int i = 1; int speed = ( k3bappcore->mediaCache()->diskInfo( writerDevice() ).isDvdMedia() ? 1385 : 175 ); int max = writerDevice()->maxWriteSpeed(); while( i*speed <= max ) { insertSpeedItem( i*speed ); // a little hack to handle the stupid 2.4x DVD speed if( i == 2 && speed == 1385 ) insertSpeedItem( (int)(2.4*1385.0) ); i = ( i == 1 ? 2 : i+2 ); } // // Since we do not know the exact max writing speed if an override device is set (we can't becasue // the writer always returns the speed relative to the inserted medium) we allow the user to specify // the speed manually // m_comboSpeed->insertItem( i18n("More...") ); d->haveManualSpeed = true; } else { for( QValueList<int>::iterator it = speeds.begin(); it != speeds.end(); ++it ) insertSpeedItem( *it ); } } // try to reload last set speed if( d->lastSetSpeed == -1 ) setSpeed( lastSpeed ); else setSpeed( d->lastSetSpeed ); } m_comboSpeed->setEnabled( writerDevice() != 0 ); }
void K3b::WriterSelectionWidget::slotRefreshWriterSpeeds() { if( writerDevice() ) { QList<int> speeds = k3bappcore->mediaCache()->writingSpeeds( writerDevice() ); int lastSpeed = writerSpeed(); clearSpeedCombo(); m_comboSpeed->insertItem( s_autoSpeedValue, i18n("Auto") ); if( Device::isDvdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) { m_comboSpeed->insertItem( s_ignoreSpeedValue, i18n("Ignore") ); d->haveIgnoreSpeed = true; } else d->haveIgnoreSpeed = false; if( !d->forceAutoSpeed ) { if( speeds.isEmpty() || writerDevice() == m_comboMedium->overrideDevice() ) { // // In case of the override device we do not know which medium will actually be used // So this is the only case in which we need to use the device's max writing speed // // But we need to know if it will be a CD or DVD medium. Since the override device // is only used for CD/DVD copy anyway we simply reply on the inserted medium's type. // int x1Speed = K3b::Device::SPEED_FACTOR_CD; if( Device::isDvdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) { x1Speed = K3b::Device::SPEED_FACTOR_DVD; } else if( Device::isBdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) { x1Speed = K3b::Device::SPEED_FACTOR_BD; } const int max = writerDevice()->maxWriteSpeed(); for( int i = 1; i*x1Speed <= max; i = ( i == 1 ? 2 : i+2 ) ) { insertSpeedItem( i*x1Speed ); // a little hack to handle the stupid 2.4x DVD speed if( i == 2 && x1Speed == K3b::Device::SPEED_FACTOR_DVD ) insertSpeedItem( (int)(2.4*( double )K3b::Device::SPEED_FACTOR_DVD) ); } } else { for( QList<int>::iterator it = speeds.begin(); it != speeds.end(); ++it ) insertSpeedItem( *it ); } } // // Although most devices return all speeds properly there are still some dumb ones around // that don't. Users of those will need the possibility to set the speed manually even if // a medium is inserted. // if ( !d->forceAutoSpeed ) { m_comboSpeed->insertItem( s_moreSpeedValue, i18n("More...") ); d->haveManualSpeed = true; } else { d->haveManualSpeed = false; } // try to reload last set speed if( d->lastSetSpeed == -1 ) setSpeed( lastSpeed ); else setSpeed( d->lastSetSpeed ); } m_comboSpeed->setEnabled( writerDevice() != 0 ); }
K3b::WriterSelectionWidget::WriterSelectionWidget( QWidget *parent ) : QWidget( parent ) { d = new Private; d->forceAutoSpeed = false; d->supportedWritingApps = K3b::WritingAppCdrecord|K3b::WritingAppCdrdao|K3b::WritingAppGrowisofs; d->lastSetSpeed = -1; QGroupBox* groupWriter = new QGroupBox( this ); groupWriter->setTitle( i18n( "Burn Medium" ) ); QGridLayout* groupWriterLayout = new QGridLayout( groupWriter ); groupWriterLayout->setAlignment( Qt::AlignTop ); QLabel* labelSpeed = new QLabel( groupWriter ); labelSpeed->setText( i18n( "Speed:" ) ); m_comboSpeed = new K3b::IntMapComboBox( groupWriter ); m_comboMedium = new MediaSelectionComboBox( groupWriter ); m_writingAppLabel = new QLabel( i18n("Writing app:"), groupWriter ); m_comboWritingApp = new K3b::IntMapComboBox( groupWriter ); groupWriterLayout->addWidget( m_comboMedium, 0, 0 ); groupWriterLayout->addWidget( labelSpeed, 0, 1 ); groupWriterLayout->addWidget( m_comboSpeed, 0, 2 ); groupWriterLayout->addWidget( m_writingAppLabel, 0, 3 ); groupWriterLayout->addWidget( m_comboWritingApp, 0, 4 ); groupWriterLayout->setColumnStretch( 0, 1 ); QGridLayout* mainLayout = new QGridLayout( this ); mainLayout->setAlignment( Qt::AlignTop ); mainLayout->setContentsMargins( 0, 0, 0, 0 ); mainLayout->addWidget( groupWriter, 0, 0 ); // tab order setTabOrder( m_comboMedium, m_comboSpeed ); setTabOrder( m_comboSpeed, m_comboWritingApp ); connect( m_comboMedium, SIGNAL(selectionChanged(K3b::Device::Device*)), this, SIGNAL(writerChanged()) ); connect( m_comboMedium, SIGNAL(selectionChanged(K3b::Device::Device*)), this, SIGNAL(writerChanged(K3b::Device::Device*)) ); connect( m_comboMedium, SIGNAL(newMedia()), this, SIGNAL(newMedia()) ); connect( m_comboMedium, SIGNAL(newMedium(K3b::Device::Device*)), this, SIGNAL(newMedium(K3b::Device::Device*)) ); connect( m_comboMedium, SIGNAL(newMedium(K3b::Device::Device*)), this, SLOT(slotNewBurnMedium(K3b::Device::Device*)) ); connect( m_comboWritingApp, SIGNAL(valueChanged(int)), this, SLOT(slotWritingAppSelected(int)) ); connect( this, SIGNAL(writerChanged()), SLOT(slotWriterChanged()) ); connect( m_comboSpeed, SIGNAL(valueChanged(int)), this, SLOT(slotSpeedChanged(int)) ); m_comboMedium->setToolTip( i18n("The medium that will be used for burning") ); m_comboSpeed->setToolTip( i18n("The speed at which to burn the medium") ); m_comboWritingApp->setToolTip( i18n("The external application to actually burn the medium") ); m_comboMedium->setWhatsThis( i18n("<p>Select the medium that you want to use for burning." "<p>In most cases there will only be one medium available which " "does not leave much choice.") ); m_comboSpeed->setWhatsThis( i18n("<p>Select the speed with which you want to burn." "<p><b>Auto</b><br>" "This will choose the maximum writing speed possible with the used " "medium. " "This is the recommended selection for most media.</p>" "<p><b>Ignore</b> (DVD only)<br>" "This will leave the speed selection to the writer device. " "Use this if K3b is unable to set the writing speed." "<p>1x refers to 175 KB/s for CD, 1385 KB/s for DVD, and 4496 KB/s for Blu-ray.</p>" "<p><b>Caution:</b> Make sure your system is able to send the data " "fast enough to prevent buffer underruns.") ); m_comboWritingApp->setWhatsThis( i18n("<p>K3b uses the command line tools cdrecord, growisofs, and cdrdao " "to actually write a CD or DVD." "<p>Normally K3b chooses the best " "suited application for every task automatically but in some cases it " "may be possible that one of the applications does not work as intended " "with a certain writer. In this case one may select the " "application manually.") ); clearSpeedCombo(); slotConfigChanged( KGlobal::config() ); slotWriterChanged(); }