diff options
Diffstat (limited to 'src/optionssimple.cpp')
-rwxr-xr-x | src/optionssimple.cpp | 574 |
1 files changed, 574 insertions, 0 deletions
diff --git a/src/optionssimple.cpp b/src/optionssimple.cpp new file mode 100755 index 0000000..47b431f --- /dev/null +++ b/src/optionssimple.cpp @@ -0,0 +1,574 @@ + +#include "optionssimple.h" +#include "config.h" +#include "convertpluginloader.h" +#include "optionsdetailed.h" + +#include <qlayout.h> +#include <qlabel.h> +#include <qstring.h> +#include <qtooltip.h> + +#include <klocale.h> +#include <kcombobox.h> +#include <kiconloader.h> +#include <kmessagebox.h> +#include <ktoolbarbutton.h> +//#include <kdebug.h> +#include <kpushbutton.h> + + +// FIXME when changing the output directory, check if the profile is a user defined and set it to 'User defined', if it is + +// TODO hide lossless/hybrid/etc. when not available +OptionsSimple::OptionsSimple( Config* _config, OptionsDetailed* _optionsDetailed, const QString &text, QWidget *parent, const char *name ) + : QWidget( parent, name ) +{ + config = _config; + optionsDetailed = _optionsDetailed; + + // create an icon loader object for loading icons + KIconLoader* iconLoader = new KIconLoader(); + + QGridLayout *grid = new QGridLayout( this, 3, 1, 6, 3 ); + + QHBoxLayout *topBox = new QHBoxLayout( ); + grid->addLayout( topBox, 0, 0 ); + + QLabel *lQuality = new QLabel( i18n("Quality")+":", this, "lQuality" ); + topBox->addWidget( lQuality, 0, Qt::AlignVCenter ); + cProfile = new KComboBox( this, "cProfile" ); + sProfile += i18n("Very low"); + sProfile += i18n("Low"); + sProfile += i18n("Medium"); + sProfile += i18n("High"); + sProfile += i18n("Very high"); + sProfile += i18n("Lossless"); + sProfile += i18n("Hybrid"); + sProfile += config->getAllProfiles(); + sProfile.remove( i18n("Last used") ); + sProfile.remove( "Last used" ); + sProfile += i18n("User defined"); + cProfile->insertStringList( sProfile ); + topBox->addWidget( cProfile, 0, Qt::AlignVCenter ); + connect( cProfile, SIGNAL(activated(int)), + this, SLOT(profileChanged()) + ); + connect( cProfile, SIGNAL(activated(int)), + this, SLOT(somethingChanged()) + ); + topBox->addSpacing( 3 ); + //pProfileRemove = new KToolBarButton( "editdelete", 1002, this, "pProfileRemove" ); + pProfileRemove = new KPushButton( iconLoader->loadIcon("editdelete",KIcon::Small), i18n("Remove"), this, "pProfileRemove" ); + pProfileRemove->hide(); + QToolTip::add( pProfileRemove, i18n("Remove the selected profile") ); + topBox->addWidget( pProfileRemove, 0, Qt::AlignVCenter ); + connect( pProfileRemove, SIGNAL(clicked()), + this, SLOT(profileRemove()) + ); + //pProfileInfo = new KToolBarButton( "messagebox_info", 1110, this, "pProfileInfo" ); + pProfileInfo = new KPushButton( iconLoader->loadIcon("messagebox_info",KIcon::Small), i18n("Info"), this, "pProfileInfo" ); + QToolTip::add( pProfileInfo, i18n("Information about the selected profile") ); + topBox->addWidget( pProfileInfo, 0, Qt::AlignVCenter ); + connect( pProfileInfo, SIGNAL(clicked()), + this, SLOT(profileInfo()) + ); + topBox->addSpacing( 18 ); + + QLabel *lFormat = new QLabel( i18n("Output format")+":", this, "lFormat" ); + topBox->addWidget( lFormat, 0, Qt::AlignVCenter ); + cFormat = new KComboBox( this, "cFormat" ); + topBox->addWidget( cFormat, 0, Qt::AlignVCenter ); + connect( cFormat, SIGNAL(activated(int)), + this, SLOT(formatChanged()) + ); + connect( cFormat, SIGNAL(activated(int)), + this, SLOT(somethingChanged()) + ); + topBox->addSpacing( 3 ); + //pFormatInfo = new KToolBarButton( "messagebox_info", 1111, this, "pFormatInfo" ); + pFormatInfo = new KPushButton( iconLoader->loadIcon("messagebox_info",KIcon::Small), i18n("Info"), this, "pFormatInfo" ); + QToolTip::add( pFormatInfo, i18n("Information about the selected file format") ); + topBox->addWidget( pFormatInfo, 0, Qt::AlignVCenter ); + connect( pFormatInfo, SIGNAL(clicked()), + this, SLOT(formatInfo()) + ); + topBox->addStretch( ); + + QHBoxLayout *middleBox = new QHBoxLayout( ); + grid->addLayout( middleBox, 1, 0 ); + + outputDirectory = new OutputDirectory( config, this, "outputDirectory" ); + middleBox->addWidget( outputDirectory, 0, Qt::AlignVCenter ); + connect( outputDirectory, SIGNAL(modeChanged(OutputDirectory::Mode)), + this, SLOT(outputDirectoryModeChanged(OutputDirectory::Mode)) + ); + connect( outputDirectory, SIGNAL(directoryChanged(const QString&)), + this, SLOT(outputDirectoryPathChanged(const QString&)) + ); + connect( outputDirectory, SIGNAL(modeChanged(OutputDirectory::Mode)), + this, SLOT(somethingChanged()) + ); + connect( outputDirectory, SIGNAL(directoryChanged(const QString&)), + this, SLOT(somethingChanged()) + ); + + QHBoxLayout *bottomBox = new QHBoxLayout( ); + grid->addLayout( bottomBox, 2, 0 ); + + QLabel *lInfo = new QLabel( text, this, "lInfo" ); + lInfo->setFixedHeight( cProfile->height() ); + bottomBox->addWidget( lInfo, 0, Qt::AlignVCenter | Qt::AlignLeft ); + + // delete the icon loader object + delete iconLoader; +} + + +OptionsSimple::~OptionsSimple() +{ +} + +int OptionsSimple::profileIndex( const QString &string ) +{ + QString profile = string; + if( profile == "Very low" ) profile = i18n("Very low"); + else if( profile == "Low" ) profile = i18n("Low"); + else if( profile == "Medium" ) profile = i18n("Medium"); + else if( profile == "High" ) profile = i18n("High"); + else if( profile == "Very high" ) profile = i18n("Very high"); + else if( profile == "Lossless" ) profile = i18n("Lossless"); + else if( profile == "Hybrid" ) profile = i18n("Hybrid"); + else if( profile == "User defined" ) profile = i18n("User defined"); + return sProfile.findIndex( profile ); +} + +int OptionsSimple::formatIndex( const QString &string ) +{ + return sFormat.findIndex( string ); +} + +void OptionsSimple::profileInfo() +{ + QString sProfileString = cProfile->currentText(); + + if( sProfileString == i18n("Very low") ) { + KMessageBox::information( this, + i18n("This produces sound files of a very low quality.\nThat can be useful, if you have a mobile device, where your memory cell is limited. It is not recommended to save your music in this quality without a copy with higher quality.\nIt can also be used to save audio files with voices."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("Low") ) { + KMessageBox::information( this, + i18n("This produces sound files of a low quality.\nThat can be useful if you habe a mobile device where your memory cell is limited. It is not recommended to save your music in this quality without a copy with higher quality."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("Medium") ) { + KMessageBox::information( this, + i18n("This produces sound files of a medium quality.\nIf your disc space is limited, you can use this to save your music."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("High") ) { + KMessageBox::information( this, + i18n("This produces sound files of a high quality.\nIf you have enough disc space available, you can use this to save your music."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("Very high") ) { + KMessageBox::information( this, + i18n("This produces sound files of a very high quality.\nYou should only use this, if you are a quality freak and have enough disc space available."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("Lossless") ) { + KMessageBox::information( this, + i18n("This produces files, that have exact the same quality as the input files.\nThis files are very big and definitely only for quality freaks."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("Hybrid") ) { + KMessageBox::information( this, + i18n("This produces two files. One lossy compressed playable file and one correction file.\nBoth files together result in a file that is equivalent to the input file."), + i18n("Profile")+": "+sProfileString ); + } + else if( sProfileString == i18n("User defined") ) { + KMessageBox::information( this, + i18n("You can define your own profile in the \"detailed\" tab."), + i18n("Profile")+": "+sProfileString ); + } +// else { // the info button is hidden when showing user defined profiles +// KMessageBox::error( this, +// i18n("This is a user defined profile."), +// i18n("Profile")+": "+sProfileString ); +// } +} + +void OptionsSimple::profileRemove() +{ + int ret = KMessageBox::questionYesNo( this, + i18n("Do you really want to remove the profile: %1").arg(cProfile->currentText()), + i18n("Remove profile?") ); + if( ret != KMessageBox::Yes ) return; + + config->removeProfile( cProfile->currentText() ); + + sProfile.clear(); + cProfile->clear(); + sProfile += i18n("Very low"); + sProfile += i18n("Low"); + sProfile += i18n("Medium"); + sProfile += i18n("High"); + sProfile += i18n("Very high"); + sProfile += i18n("Lossless"); + sProfile += i18n("Hybrid"); + sProfile += config->getAllProfiles(); + sProfile.remove( i18n("Last used") ); + sProfile.remove( "Last used" ); + sProfile += i18n("User defined"); + cProfile->insertStringList( sProfile ); + profileChanged(); +} + +void OptionsSimple::formatInfo() +{ + QString format = cFormat->currentText(); + + if( format == "wav" ) { + KMessageBox::information( this, + i18n("<p>Wave is a file format, that doesn't compress it's audio data.</p>\n<p>So the quality is very high, but the file size is enormous. It is widely spread and should work with every audio player.</p>\n<a href=\"http://en.wikipedia.org/wiki/Wav\">http://en.wikipedia.org/wiki/Wav</a>"), + i18n("File format")+": " + format, + QString::null, KMessageBox::Notify | KMessageBox::AllowLink ); + return; + } + else { + KMessageBox::information( this, + config->getFormatDescription(format), + i18n("File format")+": " + format, + QString::null, KMessageBox::Notify | KMessageBox::AllowLink ); + } +} + +void OptionsSimple::profileChanged() +{ + QString last; + + ConversionOptions options = config->getProfile( cProfile->currentText() ); + if( !options.encodingOptions.sFormat.isEmpty() ) { + pProfileRemove->show(); + pProfileInfo->hide(); + last = cFormat->currentText(); + cFormat->clear(); + sFormat = options.encodingOptions.sFormat; + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + outputDirectory->setMode( options.outputOptions.mode ); + outputDirectory->setDirectory( options.outputOptions.directory ); + optionsDetailed->setCurrentOptions( options ); + return; + } + + pProfileRemove->hide(); + pProfileInfo->show(); + + if( cProfile->currentText() == i18n("Very low") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allLossyEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + if( plugin == 0 ) { + // FIXME error handling + //kdDebug() << "NULL POINTER: `" << "OptionsSimple::profileChanged() / Very low" << "'" << endl; + return; + } + if( plugin->enc.lossy.quality.enabled ) { + optionsDetailed->setQualityMode( i18n("Quality") ); + optionsDetailed->setQuality( 20 ); + } + else if( plugin->enc.lossy.bitrate.abr.enabled || plugin->enc.lossy.bitrate.cbr.enabled) { + optionsDetailed->setQualityMode( i18n("Bitrate") ); + optionsDetailed->setQuality( 64 ); + } + optionsDetailed->setBitrateRangeEnabled( false ); + optionsDetailed->setSamplingrateEnabled( true ); + optionsDetailed->setSamplingrate( 22050 ); + optionsDetailed->setChannelsEnabled( true ); + optionsDetailed->setChannels( i18n("Mono") ); + optionsDetailed->setReplayGainEnabled( true ); + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + else if( cProfile->currentText() == i18n("Low") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allLossyEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + if( plugin == 0 ) { + // FIXME error handling + //kdDebug() << "NULL POINTER: `" << "OptionsSimple::profileChanged() / Low" << "'" << endl; + return; + } + if( plugin->enc.lossy.quality.enabled ) { + optionsDetailed->setQualityMode( i18n("Quality") ); + optionsDetailed->setQuality( 30 ); + } + else if( plugin->enc.lossy.bitrate.abr.enabled || plugin->enc.lossy.bitrate.cbr.enabled ) { + optionsDetailed->setQualityMode( i18n("Bitrate") ); + optionsDetailed->setQuality( 96 ); + } + optionsDetailed->setBitrateRangeEnabled( false ); + optionsDetailed->setSamplingrateEnabled( true ); + optionsDetailed->setSamplingrate( 22050 ); + optionsDetailed->setChannelsEnabled( false ); + optionsDetailed->setReplayGainEnabled( true ); + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + else if( cProfile->currentText() == i18n("Medium") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allLossyEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + if( plugin == 0 ) { + // FIXME error handling + //kdDebug() << "NULL POINTER: `" << "OptionsSimple::profileChanged() / Medium" << "'" << endl; + return; + } + if( plugin->enc.lossy.quality.enabled ) { + optionsDetailed->setQualityMode( i18n("Quality") ); + optionsDetailed->setQuality( 40 ); + } + else if( plugin->enc.lossy.bitrate.abr.enabled || plugin->enc.lossy.bitrate.cbr.enabled ) { + optionsDetailed->setQualityMode( i18n("Bitrate") ); + optionsDetailed->setQuality( 192 ); + } + optionsDetailed->setBitrateRangeEnabled( false ); + optionsDetailed->setSamplingrateEnabled( false ); + optionsDetailed->setChannelsEnabled( false ); + optionsDetailed->setReplayGainEnabled( true ); + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + else if( cProfile->currentText() == i18n("High") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allLossyEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + if( plugin == 0 ) { + // FIXME error handling + //kdDebug() << "NULL POINTER: `" << "OptionsSimple::profileChanged() / High" << "'" << endl; + return; + } + if( plugin->enc.lossy.quality.enabled ) { + optionsDetailed->setQualityMode( i18n("Quality") ); + optionsDetailed->setQuality( 50 ); + } + else if( plugin->enc.lossy.bitrate.abr.enabled || plugin->enc.lossy.bitrate.cbr.enabled ) { + optionsDetailed->setQualityMode( i18n("Bitrate") ); + optionsDetailed->setQuality( 240 ); + } + optionsDetailed->setBitrateRangeEnabled( false ); + optionsDetailed->setSamplingrateEnabled( false ); + optionsDetailed->setChannelsEnabled( false ); + optionsDetailed->setReplayGainEnabled( true ); + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + else if( cProfile->currentText() == i18n("Very high") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allLossyEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + if( plugin == 0 ) { + // FIXME error handling + //kdDebug() << "NULL POINTER: `" << "OptionsSimple::profileChanged() / Very high" << "'" << endl; + return; + } + if( plugin->enc.lossy.quality.enabled ) { + optionsDetailed->setQualityMode( i18n("Quality") ); + optionsDetailed->setQuality( 60 ); + } + else if( plugin->enc.lossy.bitrate.abr.enabled || plugin->enc.lossy.bitrate.cbr.enabled ) { + optionsDetailed->setQualityMode( i18n("Bitrate") ); + optionsDetailed->setQuality( 320 ); + } + optionsDetailed->setBitrateRangeEnabled( false ); + optionsDetailed->setSamplingrateEnabled( false ); + optionsDetailed->setChannelsEnabled( false ); + optionsDetailed->setReplayGainEnabled( true ); + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + else if( cProfile->currentText() == i18n("Lossless") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allLosslessEncodableFormats(); + sFormat += "wav"; + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + optionsDetailed->setReplayGainEnabled( true ); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + if( plugin != 0 ) { + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + } + else if( cProfile->currentText() == i18n("Hybrid")/* || cProfile->currentText() == "Hybrid"*/ ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allHybridEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + optionsDetailed->setReplayGainEnabled( true ); + ConvertPlugin* plugin = config->encoderForFormat( cFormat->currentText() ); + optionsDetailed->setQualityMode( i18n("Hybrid") ); + if( plugin != 0 ) { + optionsDetailed->setUserOptions( config->binaries[plugin->enc.bin] + " " + plugin->enc.in_out_files ); + } + } + else if( cProfile->currentText() == i18n("User defined") ) { + last = cFormat->currentText(); + cFormat->clear(); + sFormat = config->allEncodableFormats(); + sFormat += "wav"; + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(last) ); + formatChanged(); + } +} + +void OptionsSimple::formatChanged() +{ + optionsDetailed->setFormat( cFormat->currentText() ); +} + +void OptionsSimple::outputDirectoryModeChanged( OutputDirectory::Mode mode ) +{ + optionsDetailed->setOutputDirectoryMode( mode ); + if( cProfile->currentText() != i18n("User defined") && config->getAllProfiles().findIndex(cProfile->currentText()) != -1 ) { + ConversionOptions options = config->getProfile( cProfile->currentText() ); +// if( options.encodingOptions.sFormat.isEmpty() ) return; + if( outputDirectory->mode() != options.outputOptions.mode || outputDirectory->directory() != options.outputOptions.directory ) { + cProfile->setCurrentItem( profileIndex(i18n("User defined")) ); // NOTE not refill() ? + profileChanged(); + } +// refill(); + } +} + +void OptionsSimple::outputDirectoryPathChanged( const QString& path ) +{ + optionsDetailed->setOutputDirectoryPath( path ); + if( cProfile->currentText() != i18n("User defined") && config->getAllProfiles().findIndex(cProfile->currentText()) != -1 ) { + ConversionOptions options = config->getProfile( cProfile->currentText() ); +// if( options.encodingOptions.sFormat.isEmpty() ) return; + if( outputDirectory->mode() != options.outputOptions.mode || outputDirectory->directory() != options.outputOptions.directory ) { + cProfile->setCurrentItem( profileIndex(i18n("User defined")) ); // NOTE not refill() ? + profileChanged(); + } +// refill(); + } +} + +void OptionsSimple::setCurrentProfile( const QString& profile ) +{ + // TODO check profile (and don't change, if not available) + cProfile->setCurrentItem( profileIndex(profile) ); + profileChanged(); +} + +void OptionsSimple::setCurrentFormat( const QString& format ) +{ + cFormat->setCurrentItem( formatIndex(format) ); + formatChanged(); +} + +// TODO check for errors +void OptionsSimple::setCurrentOutputDirectory( const QString& directory ) +{ + outputDirectory->setMode( OutputDirectory::Specify ); + outputDirectory->setDirectory( directory ); + optionsDetailed->setOutputDirectoryMode( OutputDirectory::Specify ); + optionsDetailed->setOutputDirectoryPath( directory ); +} + +void OptionsSimple::somethingChanged() +{ + emit optionsChanged(); +} + +void OptionsSimple::refill() +{ + sProfile.clear(); + cProfile->clear(); + sProfile += i18n("Very low"); + sProfile += i18n("Low"); + sProfile += i18n("Medium"); + sProfile += i18n("High"); + sProfile += i18n("Very high"); + sProfile += i18n("Lossless"); + sProfile += i18n("Hybrid"); + sProfile += config->getAllProfiles(); + sProfile.remove( i18n("Last used") ); + sProfile.remove( "Last used" ); + sProfile += i18n("User defined"); + cProfile->insertStringList( sProfile ); + + cProfile->setCurrentItem( profileIndex(config->getProfileName(optionsDetailed->getCurrentOptions())) ); + + if( cProfile->currentText() == i18n("Very low") || cProfile->currentText() == i18n("Low") || + cProfile->currentText() == i18n("Medium") || cProfile->currentText() == i18n("High") || + cProfile->currentText() == i18n("Very high") ) { + cFormat->clear(); + sFormat = config->allLossyEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(optionsDetailed->getFormat()) ); + pProfileInfo->show(); + pProfileRemove->hide(); + } + else if( cProfile->currentText() == i18n("Lossless") ) { + cFormat->clear(); + sFormat = config->allLosslessEncodableFormats(); + sFormat += "wav"; + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(optionsDetailed->getFormat()) ); + pProfileInfo->show(); + pProfileRemove->hide(); + } + else if( cProfile->currentText() == i18n("Hybrid") ) { + cFormat->clear(); + sFormat = config->allHybridEncodableFormats(); + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(optionsDetailed->getFormat()) ); + pProfileInfo->show(); + pProfileRemove->hide(); + } + else if( cProfile->currentText() == i18n("User defined") ) { + cFormat->clear(); + sFormat = config->allEncodableFormats(); + sFormat += "wav"; + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(optionsDetailed->getFormat()) ); + pProfileInfo->show(); + pProfileRemove->hide(); + } + else { + ConversionOptions options = config->getProfile( cProfile->currentText() ); + cFormat->clear(); + sFormat = options.encodingOptions.sFormat; + cFormat->insertStringList( sFormat ); + cFormat->setCurrentItem( formatIndex(optionsDetailed->getFormat()) ); + pProfileInfo->hide(); + pProfileRemove->show(); + } + + outputDirectory->setMode( optionsDetailed->getOutputDirectoryMode() ); + outputDirectory->setDirectory( optionsDetailed->getOutputDirectoryPath() ); +} + |