void K3bWriterSelectionWidget::slotManualSpeed() { // // 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 speedFactor = ( k3bappcore->mediaCache()->diskInfo( writerDevice() ).isDvdMedia() ? 1385 : 175 ); bool ok = true; int newSpeed = KInputDialog::getInteger( i18n("Set writing speed manually"), i18n("<p>K3b is not able to perfectly determine the maximum " "writing speed of an optical writer. Writing speed is always " "reported subject to the inserted medium." "<p>Please enter the writing speed here and K3b will remember it " "for future sessions (Example: 16x)."), writerDevice()->maxWriteSpeed()/speedFactor, 1, 10000, 1, 10, &ok, this ) * speedFactor; if( ok ) { writerDevice()->setMaxWriteSpeed( QMAX( newSpeed, writerDevice()->maxWriteSpeed() ) ); slotRefreshWriterSpeeds(); setSpeed( newSpeed ); } else { if( d->lastSetSpeed == -1 ) m_comboSpeed->setCurrentItem( 0 ); // Auto else setSpeed( d->lastSetSpeed ); } }
void K3b::WriterSelectionWidget::slotNewBurnMedium( K3b::Device::Device* dev ) { // // Try to select a medium that is better suited than the current one // if( dev && dev != writerDevice() ) { K3b::Medium medium = k3bappcore->mediaCache()->medium( dev ); // // Always prefer newly inserted media over the override device // if( writerDevice() == m_comboMedium->overrideDevice() ) { setWriterDevice( dev ); } // // Prefer an empty medium over one that has to be erased // else if( wantedMediumState() & K3b::Device::STATE_EMPTY && !k3bappcore->mediaCache()->diskInfo( writerDevice() ).empty() && medium.diskInfo().empty() ) { setWriterDevice( dev ); } } }
void K3b::WriterSelectionWidget::slotRefreshWritingApps() { K3b::WritingApps i = 0; int lastSelected = m_comboWritingApp->selectedValue(); // select the ones that make sense if( Device::isDvdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) i = K3b::WritingAppGrowisofs|K3b::WritingAppDvdRwFormat|K3b::WritingAppCdrecord; else if ( K3b::Device::isBdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) i = K3b::WritingAppGrowisofs|K3b::WritingAppCdrecord; else i = K3b::WritingAppCdrdao|K3b::WritingAppCdrecord; // now strip it down to the ones we support i &= d->supportedWritingApps; m_comboWritingApp->clear(); m_comboWritingApp->insertItem( K3b::WritingAppAuto, i18n("Auto") ); if( i & K3b::WritingAppCdrdao ) m_comboWritingApp->insertItem( K3b::WritingAppCdrdao, "cdrdao" ); if( i & K3b::WritingAppCdrecord ) m_comboWritingApp->insertItem( K3b::WritingAppCdrecord, "cdrecord" ); if( i & K3b::WritingAppGrowisofs ) m_comboWritingApp->insertItem( K3b::WritingAppGrowisofs, "growisofs" ); if( i & K3b::WritingAppDvdRwFormat ) m_comboWritingApp->insertItem( K3b::WritingAppDvdRwFormat, "dvd+rw-format" ); m_comboWritingApp->setSelectedValue( lastSelected ); m_comboWritingApp->setEnabled( writerDevice() != 0 ); }
void K3bWriterSelectionWidget::slotRefreshWritingApps() { int i = 0; // select the ones that make sense if( k3bappcore->mediaCache()->diskInfo( writerDevice() ).isDvdMedia() ) i = K3b::GROWISOFS|K3b::DVD_RW_FORMAT|K3b::DVDRECORD; else i = K3b::CDRDAO|K3b::CDRECORD; // now strip it down to the ones we support i &= d->supportedWritingApps; m_comboWritingApp->clear(); m_comboWritingApp->insertItem( i18n("Auto") ); if( i & K3b::CDRDAO ) m_comboWritingApp->insertItem( "cdrdao" ); if( i & K3b::CDRECORD ) m_comboWritingApp->insertItem( "cdrecord" ); if( i & K3b::DVDRECORD ) m_comboWritingApp->insertItem( "dvdrecord" ); if( i & K3b::GROWISOFS ) m_comboWritingApp->insertItem( "growisofs" ); if( i & K3b::DVD_RW_FORMAT ) m_comboWritingApp->insertItem( "dvd+rw-format" ); m_comboWritingApp->setEnabled( writerDevice() != 0 ); }
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::slotManualSpeed() { // // In case we think we have all the available speeds (i.e. if the device reported a non-empty list) // we just treat it as a manual selection. Otherwise we admit that we cannot do better // bool haveSpeeds = ( writerDevice() && !k3bappcore->mediaCache()->writingSpeeds( writerDevice() ).isEmpty() ); QString s; if ( haveSpeeds ) { s = i18n( "Please enter the speed that K3b should use for burning (Example: 16x)." ); } else { s = i18n("<p>K3b is not able to perfectly determine the maximum " "writing speed of an optical writer. Writing speed is always " "reported subject to the inserted medium." "<p>Please enter the writing speed here and K3b will remember it " "for future sessions (Example: 16x)."); } // // We need to know the type of medium. Since the override device // is only used for copy anyway we simply reply on the inserted medium's type. // int speedFactor = K3b::Device::SPEED_FACTOR_CD; if( Device::isDvdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) { speedFactor = K3b::Device::SPEED_FACTOR_DVD; } else if( Device::isBdMedia( k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType() ) ) { speedFactor = K3b::Device::SPEED_FACTOR_BD; } bool ok = true; int newSpeed = KInputDialog::getInteger( i18n("Set writing speed manually"), s, writerDevice()->maxWriteSpeed()/speedFactor, 1, 10000, 1, 10, &ok, this ) * speedFactor; if( ok ) { writerDevice()->setMaxWriteSpeed( qMax( newSpeed, writerDevice()->maxWriteSpeed() ) ); if ( haveSpeeds ) { insertSpeedItem( newSpeed ); } else { slotRefreshWriterSpeeds(); } setSpeed( newSpeed ); } else { if( d->lastSetSpeed == -1 ) m_comboSpeed->setSelectedValue( s_autoSpeedValue ); // Auto else setSpeed( d->lastSetSpeed ); } }
void K3b::WriterSelectionWidget::slotWriterChanged() { slotRefreshWriterSpeeds(); slotRefreshWritingApps(); // save last selected writer if( K3b::Device::Device* dev = writerDevice() ) { KConfigGroup g( KGlobal::config(), "General Options" ); g.writeEntry( "current_writer", dev->blockDeviceName() ); } }
void K3b::WriterSelectionWidget::slotSpeedChanged( int s ) { // the last item is the manual speed selection item if( d->haveManualSpeed && s == s_moreSpeedValue ) { slotManualSpeed(); } else { d->lastSetSpeed = s; if( K3b::Device::Device* dev = writerDevice() ) dev->setCurrentWriteSpeed( writerSpeed() ); } }
void K3bWriterSelectionWidget::slotSpeedChanged( int s ) { // the last item is the manual speed selection item if( d->haveManualSpeed && s == m_comboSpeed->count() - 1 ) { slotManualSpeed(); } else { d->lastSetSpeed = d->indexSpeedMap[s]; if( K3bDevice::Device* dev = writerDevice() ) dev->setCurrentWriteSpeed( writerSpeed() ); } }
void K3bWriterSelectionWidget::insertSpeedItem( int speed ) { if( !d->speedIndexMap.contains( speed ) ) { d->indexSpeedMap[m_comboSpeed->count()] = speed; d->speedIndexMap[speed] = m_comboSpeed->count(); if( k3bappcore->mediaCache()->diskInfo( writerDevice() ).isDvdMedia() ) m_comboSpeed->insertItem( ( speed%1385 > 0 ? QString::number( (float)speed/1385.0, 'f', 1 ) // example: DVD+R(W): 2.4x : QString::number( speed/1385 ) ) + "x" ); else m_comboSpeed->insertItem( QString("%1x").arg(speed/175) ); } }
void K3b::WriterSelectionWidget::insertSpeedItem( int speed ) { Device::MediaType mediaType = k3bappcore->mediaCache()->diskInfo( writerDevice() ).mediaType(); int insertIndex = -1; if ( m_comboSpeed->hasValue( s_moreSpeedValue ) ) { insertIndex = m_comboSpeed->count()-1; } // // polish the speed // if( K3b::Device::isDvdMedia( mediaType ) ) { // // AFAIK there is only one strange DVD burning speed like 2.4 // int xs = int( double( Device::SPEED_FACTOR_DVD ) * 2.4 ); if ( abs( speed - xs ) < Device::SPEED_FACTOR_DVD/2 ) speed = xs; else speed = ( ( speed+692 )/Device::SPEED_FACTOR_DVD )*Device::SPEED_FACTOR_DVD; } else if ( K3b::Device::isBdMedia( mediaType ) ) { speed = ( ( speed+2250 )/Device::SPEED_FACTOR_BD )*Device::SPEED_FACTOR_BD; } else { speed = ( ( speed + ( K3b::Device::SPEED_FACTOR_CD/2 ) )/K3b::Device::SPEED_FACTOR_CD )*K3b::Device::SPEED_FACTOR_CD; } if( !m_comboSpeed->hasValue( speed ) ) { if( K3b::Device::isDvdMedia( mediaType ) ) { m_comboSpeed->insertItem( speed, ( speed%Device::SPEED_FACTOR_DVD > 0 ? QString::number( float(speed)/float(Device::SPEED_FACTOR_DVD), 'f', 1 ) // example: DVD+R(W): 2.4x : QString::number( speed/K3b::Device::SPEED_FACTOR_DVD ) ) + 'x', QString(), insertIndex ); } else if ( K3b::Device::isBdMedia( mediaType ) ) { m_comboSpeed->insertItem( speed, QString("%1x").arg(speed/K3b::Device::SPEED_FACTOR_BD), QString(), insertIndex ); } else { m_comboSpeed->insertItem( speed, QString("%1x").arg(speed/K3b::Device::SPEED_FACTOR_CD), QString(), insertIndex ); } } }
void K3b::WriterSelectionWidget::saveConfig( KConfigGroup c ) { c.writeEntry( "writing_speed", writerSpeed() ); c.writeEntry( "writer_device", writerDevice() ? writerDevice()->blockDeviceName() : QString() ); c.writeEntry( "writing_app", m_comboWritingApp->currentText() ); }
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 ); }
void K3bWriterSelectionWidget::saveConfig( KConfigBase* c ) { c->writeEntry( "writing_speed", writerSpeed() ); c->writeEntry( "writer_device", writerDevice() ? writerDevice()->devicename() : QString::null ); c->writeEntry( "writing_app", m_comboWritingApp->currentText() ); }