/* * * $Id: k3baudioconvertingoptionwidget.cpp 619556 2007-01-03 17:38:12Z trueg $ * Copyright (C) 2004 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 "k3baudioconvertingoptionwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class K3bAudioConvertingOptionWidget::Private { public: TQIntDict encoderMap; TQMap extensionMap; TQTimer freeSpaceUpdateTimer; KIO::filesize_t neededSize; int getDefaultFormat() { // we prefere formats in this order: // 1. ogg // 2. mp3 // 3. flac // 4. wave int ogg = -1; int mp3 = -1; int flac = -1; for( TQMap::const_iterator it = extensionMap.constBegin(); it != extensionMap.constEnd(); ++it ) { if( it.data() == "ogg" ) ogg = it.key(); else if( it.data() == "mp3" ) mp3 = it.key(); else if( it.data() == "flac" ) flac = it.key(); } if( ogg > -1 ) return ogg; else if( mp3 > -1 ) return mp3; else if( flac > -1 ) return flac; else return 0; } }; K3bAudioConvertingOptionWidget::K3bAudioConvertingOptionWidget( TQWidget* tqparent, const char* name ) : base_K3bAudioRippingOptionWidget( tqparent, name ) { d = new Private(); connect( m_editBaseDir, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(slotUpdateFreeTempSpace()) ); connect( m_comboFileType, TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotEncoderChanged()) ); connect( &d->freeSpaceUpdateTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotUpdateFreeTempSpace()) ); connect( m_checkCreatePlaylist, TQT_SIGNAL(toggled(bool)), this, TQT_SIGNAL(changed()) ); connect( m_checkSingleFile, TQT_SIGNAL(toggled(bool)), this, TQT_SIGNAL(changed()) ); connect( m_checkWriteCueFile, TQT_SIGNAL(toggled(bool)), this, TQT_SIGNAL(changed()) ); connect( m_comboFileType, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(changed()) ); connect( m_editBaseDir, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SIGNAL(changed()) ); connect( m_buttonConfigurePlugin, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotConfigurePlugin()) ); m_editBaseDir->setMode( KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly ); m_buttonConfigurePlugin->setIconSet( SmallIconSet( "gear" ) ); // FIXME: see if sox and the sox encoder are installed and if so do not put the internal wave // writer in the list of encoders. d->encoderMap.clear(); d->extensionMap.clear(); m_comboFileType->clear(); m_comboFileType->insertItem( i18n("Wave") ); d->extensionMap[0] = "wav"; // check the available encoding plugins TQPtrList fl = k3bcore->pluginManager()->plugins( "AudioEncoder" ); for( TQPtrListIterator it( fl ); it.current(); ++it ) { K3bAudioEncoder* f = (K3bAudioEncoder*)it.current(); TQStringList exL = f->extensions(); for( TQStringList::const_iterator exIt = exL.begin(); exIt != exL.end(); ++exIt ) { d->extensionMap.insert( m_comboFileType->count(), *exIt ); d->encoderMap.insert( m_comboFileType->count(), f ); m_comboFileType->insertItem( f->fileTypeComment(*exIt) ); } } // refresh every 2 seconds d->freeSpaceUpdateTimer.start(2000); slotUpdateFreeTempSpace(); } K3bAudioConvertingOptionWidget::~K3bAudioConvertingOptionWidget() { delete d; } TQString K3bAudioConvertingOptionWidget::baseDir() const { return m_editBaseDir->url(); } void K3bAudioConvertingOptionWidget::setBaseDir( const TQString& path ) { m_editBaseDir->setURL( path ); } void K3bAudioConvertingOptionWidget::setNeededSize( KIO::filesize_t size ) { d->neededSize = size; if( size > 0 ) m_labelNeededSpace->setText( KIO::convertSize( size ) ); else m_labelNeededSpace->setText( i18n("unknown") ); slotUpdateFreeTempSpace(); } void K3bAudioConvertingOptionWidget::slotConfigurePlugin() { // 0 for wave K3bAudioEncoder* encoder = d->encoderMap[m_comboFileType->currentItem()]; if( encoder ) k3bcore->pluginManager()->execPluginDialog( encoder, this ); } void K3bAudioConvertingOptionWidget::slotUpdateFreeTempSpace() { TQString path = m_editBaseDir->url(); if( !TQFile::exists( path ) ) path.truncate( path.findRev('/') ); unsigned long size, avail; if( K3b::kbFreeOnFs( path, size, avail ) ) { m_labelFreeSpace->setText( KIO::convertSizeFromKB(avail) ); if( avail < d->neededSize/1024 ) m_labelNeededSpace->setPaletteForegroundColor( TQt::red ); else m_labelNeededSpace->setPaletteForegroundColor( paletteForegroundColor() ); } else { m_labelFreeSpace->setText("-"); m_labelNeededSpace->setPaletteForegroundColor( paletteForegroundColor() ); } } void K3bAudioConvertingOptionWidget::slotEncoderChanged() { // 0 for wave m_buttonConfigurePlugin->setEnabled( d->encoderMap[m_comboFileType->currentItem()] != 0 ); } K3bAudioEncoder* K3bAudioConvertingOptionWidget::encoder() const { return d->encoderMap[m_comboFileType->currentItem()]; // 0 for wave } TQString K3bAudioConvertingOptionWidget::extension() const { return d->extensionMap[m_comboFileType->currentItem()]; } void K3bAudioConvertingOptionWidget::loadDefaults() { m_editBaseDir->setURL( TQDir::homeDirPath() ); m_checkSingleFile->setChecked( false ); m_checkWriteCueFile->setChecked( false ); m_comboFileType->setCurrentItem( d->getDefaultFormat() ); m_checkCreatePlaylist->setChecked(false); m_checkPlaylistRelative->setChecked(false); slotEncoderChanged(); } void K3bAudioConvertingOptionWidget::loadConfig( KConfigBase* c ) { m_editBaseDir->setURL( c->readPathEntry( "last ripping directory", TQDir::homeDirPath() ) ); m_checkSingleFile->setChecked( c->readBoolEntry( "single_file", false ) ); m_checkWriteCueFile->setChecked( c->readBoolEntry( "write_cue_file", false ) ); m_checkCreatePlaylist->setChecked( c->readBoolEntry( "create_playlist", false ) ); m_checkPlaylistRelative->setChecked( c->readBoolEntry( "relative_path_in_playlist", false ) ); TQString filetype = c->readEntry( "filetype", d->extensionMap[d->getDefaultFormat()] ); if( filetype == "wav" ) m_comboFileType->setCurrentItem(0); else { for( TQMap::iterator it = d->extensionMap.begin(); it != d->extensionMap.end(); ++it ) { if( it.data() == filetype ) { m_comboFileType->setCurrentItem( it.key() ); break; } } } slotEncoderChanged(); } void K3bAudioConvertingOptionWidget::saveConfig( KConfigBase* c ) { c->writePathEntry( "last ripping directory", m_editBaseDir->url() ); c->writeEntry( "single_file", m_checkSingleFile->isChecked() ); c->writeEntry( "write_cue_file", m_checkWriteCueFile->isChecked() ); c->writeEntry( "create_playlist", m_checkCreatePlaylist->isChecked() ); c->writeEntry( "relative_path_in_playlist", m_checkPlaylistRelative->isChecked() ); if( d->extensionMap.contains(m_comboFileType->currentItem()) ) c->writeEntry( "filetype", d->extensionMap[m_comboFileType->currentItem()] ); else c->writeEntry( "filetype", "wav" ); } #include "k3baudioconvertingoptionwidget.moc"