Warning, file /multimedia/k3b/plugins/encoder/lame/k3blameencoderconfigwidget.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002 
0003     SPDX-FileCopyrightText: 2003-2009 Sebastian Trueg <trueg@k3b.org>
0004     SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "k3blameencoderconfigwidget.h"
0010 #include "k3blameencoderdefaults.h"
0011 #include "k3blamemanualsettingsdialog.h"
0012 #include "k3blametyes.h"
0013 
0014 #include <KAboutData>
0015 #include <KConfig>
0016 #include <KConfigGroup>
0017 #include <KSharedConfig>
0018 
0019 #include <QDebug>
0020 #include <QFile>
0021 #include <QCheckBox>
0022 #include <QLayout>
0023 #include <QLabel>
0024 #include <QPushButton>
0025 #include <QRadioButton>
0026 #include <QSlider>
0027 
0028 namespace {
0029     
0030     int mode2Index( const QString& mode )
0031     {
0032         if( mode == "stereo" )
0033             return 0;
0034         else if( mode == "joint" )
0035             return 1;
0036         else // mono
0037             return 2;
0038     }
0039     
0040 } // namespace
0041 
0042 
0043 K3B_EXPORT_PLUGIN_CONFIG_WIDGET( kcm_k3blameencoder, K3bLameEncoderSettingsWidget )
0044 
0045 
0046 K3bLameEncoderSettingsWidget::K3bLameEncoderSettingsWidget( QObject* parent, const KPluginMetaData& metaData, const QVariantList& args )
0047     : K3b::PluginConfigWidget( parent, metaData, args )
0048 {
0049     setupUi( widget() );
0050 
0051     m_manualSettingsDialog = new K3bLameManualSettingsDialog( widget() );
0052     for( int i = 0; s_lame_bitrates[i]; ++i )
0053         m_manualSettingsDialog->m_comboMaximumBitrate->addItem( i18n("%1 kbps" , s_lame_bitrates[i]) );
0054 
0055     for( int i = 0; s_lame_bitrates[i]; ++i )
0056         m_manualSettingsDialog->m_comboMinimumBitrate->addItem( i18n("%1 kbps" , s_lame_bitrates[i]) );
0057 
0058     for( int i = 0; s_lame_bitrates[i]; ++i )
0059         m_manualSettingsDialog->m_comboConstantBitrate->addItem( i18n("%1 kbps" , s_lame_bitrates[i]) );
0060 
0061 
0062     // TODO: add whatsthis help for the quality level.
0063     //  QString qualityLevelWhatsThis = i18n("<p>");
0064 
0065     connect( m_buttonManualSettings, SIGNAL(clicked()),
0066              this, SLOT(slotShowManualSettings()) );
0067     connect( m_sliderQuality, SIGNAL(valueChanged(int)),
0068              this, SLOT(slotQualityLevelChanged(int)) );
0069 
0070     updateManualSettingsLabel();
0071     slotQualityLevelChanged( 5 );
0072 
0073     connect( m_radioQualityLevel, SIGNAL(toggled(bool)), this, SLOT(changed()) );
0074     connect( m_sliderQuality, SIGNAL(valueChanged(int)), this, SLOT(changed()) );
0075     connect( m_radioManual, SIGNAL(toggled(bool)), this, SLOT(changed()) );
0076     connect( m_spinEncoderQuality, SIGNAL(valueChanged(int)), this, SLOT(changed()) );
0077     connect( m_checkCopyright, SIGNAL(toggled(bool)), this, SLOT(changed()) );
0078     connect( m_checkOriginal, SIGNAL(toggled(bool)), this, SLOT(changed()) );
0079     connect( m_checkISO, SIGNAL(toggled(bool)), this, SLOT(changed()) );
0080     connect( m_checkError, SIGNAL(toggled(bool)), this, SLOT(changed()) );
0081 }
0082 
0083 
0084 K3bLameEncoderSettingsWidget::~K3bLameEncoderSettingsWidget()
0085 {
0086 }
0087 
0088 
0089 void K3bLameEncoderSettingsWidget::slotShowManualSettings()
0090 {
0091     // save current settings for proper cancellation
0092     bool constant = m_manualSettingsDialog->m_radioConstantBitrate->isChecked();
0093     int constBitrate = m_manualSettingsDialog->m_comboConstantBitrate->currentIndex();
0094     int max = m_manualSettingsDialog->m_comboMaximumBitrate->currentIndex();
0095     int min = m_manualSettingsDialog->m_comboMinimumBitrate->currentIndex();
0096     int av = m_manualSettingsDialog->m_spinAverageBitrate->value();
0097     int mode = m_manualSettingsDialog->m_comboMode->currentIndex();
0098 
0099     if( m_manualSettingsDialog->exec() == QDialog::Rejected ) {
0100         m_manualSettingsDialog->m_radioConstantBitrate->setChecked( constant );
0101         m_manualSettingsDialog->m_comboConstantBitrate->setCurrentIndex( constBitrate );
0102         m_manualSettingsDialog->m_comboMaximumBitrate->setCurrentIndex( max );
0103         m_manualSettingsDialog->m_comboMinimumBitrate->setCurrentIndex( min );
0104         m_manualSettingsDialog->m_spinAverageBitrate->setValue( av );
0105         m_manualSettingsDialog->m_comboMode->setCurrentIndex( mode );
0106     }
0107     else
0108         updateManualSettingsLabel();
0109 
0110     markAsChanged();
0111 }
0112 
0113 
0114 void K3bLameEncoderSettingsWidget::updateManualSettingsLabel()
0115 {
0116     if( m_manualSettingsDialog->m_radioConstantBitrate->isChecked() )
0117         m_labelManualSettings->setText( i18n("Constant Bitrate: %1 kbps (%2)",
0118                                              s_lame_bitrates[m_manualSettingsDialog->m_comboConstantBitrate->currentIndex()],
0119                                              s_lame_mode_strings[m_manualSettingsDialog->m_comboMode->currentIndex()].toString()) );
0120     else
0121         m_labelManualSettings->setText( i18n("Variable Bitrate (%1)",
0122                                         s_lame_mode_strings[m_manualSettingsDialog->m_comboMode->currentIndex()].toString()) );
0123 }
0124 
0125 
0126 void K3bLameEncoderSettingsWidget::slotQualityLevelChanged( int val )
0127 {
0128     m_labelQualityLevel->setText( s_lame_preset_strings[val].toString() );
0129 }
0130 
0131 
0132 void K3bLameEncoderSettingsWidget::load()
0133 {
0134     qDebug();
0135 
0136     KSharedConfig::Ptr c = KSharedConfig::openConfig();
0137     KConfigGroup grp(c, QStringLiteral("K3bLameEncoderPlugin") );
0138 
0139     QString mode = grp.readEntry( "Mode", DEFAULT_MODE );
0140     m_manualSettingsDialog->m_comboMode->setCurrentIndex( mode2Index( mode ) );
0141 
0142     bool manual = grp.readEntry( "Manual Bitrate Settings", DEFAULT_MANUAL_BITRATE );
0143     if( manual )
0144         m_radioManual->setChecked(true);
0145     else
0146         m_radioQualityLevel->setChecked(true);
0147 
0148     if(grp.readEntry( "VBR", DEFAULT_VBR ) )
0149         m_manualSettingsDialog->m_radioVariableBitrate->setChecked( true );
0150     else
0151         m_manualSettingsDialog->m_radioConstantBitrate->setChecked( true );
0152 
0153     m_manualSettingsDialog->m_comboConstantBitrate->setCurrentText( i18n("%1 kbps",grp.readEntry( "Constant Bitrate", DEFAULT_CONSTANT_BITRATE )) );
0154     m_manualSettingsDialog->m_comboMaximumBitrate->setCurrentText( i18n("%1 kbps",grp.readEntry( "Maximum Bitrate", DEFAULT_MAXIMUM_BITRATE )) );
0155     m_manualSettingsDialog->m_comboMinimumBitrate->setCurrentText( i18n("%1 kbps",grp.readEntry( "Minimum Bitrate", DEFAULT_MINIMUM_BITRATE )) );
0156     m_manualSettingsDialog->m_spinAverageBitrate->setValue( grp.readEntry( "Average Bitrate", DEFAULT_AVERAGE_BITRATE) );
0157 
0158     m_manualSettingsDialog->m_checkBitrateMaximum->setChecked( grp.readEntry( "Use Maximum Bitrate", DEFAULT_USE_MAXIMUM_BITRATE ) );
0159     m_manualSettingsDialog->m_checkBitrateMinimum->setChecked( grp.readEntry( "Use Minimum Bitrate", DEFAULT_USE_MINIMUM_BITRATE ) );
0160     m_manualSettingsDialog->m_checkBitrateAverage->setChecked( grp.readEntry( "Use Average Bitrate", DEFAULT_USE_AVERAGE_BITRATE ) );
0161 
0162     m_sliderQuality->setValue( grp.readEntry( "Quality Level", DEFAULT_QUALITY_LEVEL ) );
0163 
0164     m_checkCopyright->setChecked( grp.readEntry( "Copyright", DEFAULT_COPYRIGHT ) );
0165     m_checkOriginal->setChecked( grp.readEntry( "Original", DEFAULT_ORIGINAL ) );
0166     m_checkISO->setChecked( grp.readEntry( "ISO compliance", DEFAULT_ISO_COMPLIANCE ) );
0167     m_checkError->setChecked( grp.readEntry( "Error Protection", DEFAULT_ERROR_PROTECTION ) );
0168 
0169     // default to 2 which is the same as the -h lame option
0170     m_spinEncoderQuality->setValue( grp.readEntry( "Encoder Quality", DEFAULT_ENCODER_QUALITY ) );
0171 
0172     updateManualSettingsLabel();
0173 }
0174 
0175 
0176 void K3bLameEncoderSettingsWidget::save()
0177 {
0178     qDebug();
0179 
0180     KSharedConfig::Ptr c = KSharedConfig::openConfig();
0181     KConfigGroup grp(c, QStringLiteral("K3bLameEncoderPlugin") );
0182 
0183     QString mode;
0184     switch( m_manualSettingsDialog->m_comboMode->currentIndex() ) {
0185     case 0:
0186         mode = "stereo";
0187         break;
0188     case 1:
0189         mode = "joint";
0190         break;
0191     case 2:
0192         mode = "mono";
0193         break;
0194     }
0195     grp.writeEntry( "Mode", mode );
0196 
0197     grp.writeEntry( "Manual Bitrate Settings", m_radioManual->isChecked() );
0198 
0199     grp.writeEntry( "VBR", !m_manualSettingsDialog->m_radioConstantBitrate->isChecked() );
0200     grp.writeEntry( "Constant Bitrate", m_manualSettingsDialog->m_comboConstantBitrate->currentText().left(3).toInt() );
0201     grp.writeEntry( "Maximum Bitrate", m_manualSettingsDialog->m_comboMaximumBitrate->currentText().left(3).toInt() );
0202     grp.writeEntry( "Minimum Bitrate", m_manualSettingsDialog->m_comboMinimumBitrate->currentText().left(3).toInt() );
0203     grp.writeEntry( "Average Bitrate", m_manualSettingsDialog->m_spinAverageBitrate->value() );
0204 
0205     grp.writeEntry( "Use Maximum Bitrate", m_manualSettingsDialog->m_checkBitrateMaximum->isChecked() );
0206     grp.writeEntry( "Use Minimum Bitrate", m_manualSettingsDialog->m_checkBitrateMinimum->isChecked() );
0207     grp.writeEntry( "Use Average Bitrate", m_manualSettingsDialog->m_checkBitrateAverage->isChecked() );
0208 
0209     grp.writeEntry( "Quality Level", m_sliderQuality->value() );
0210 
0211     grp.writeEntry( "Copyright", m_checkCopyright->isChecked() );
0212     grp.writeEntry( "Original", m_checkOriginal->isChecked() );
0213     grp.writeEntry( "ISO compliance", m_checkISO->isChecked() );
0214     grp.writeEntry( "Error Protection", m_checkError->isChecked() );
0215 
0216     // default to 2 which is the same as the -h lame option
0217     grp.writeEntry( "Encoder Quality", m_spinEncoderQuality->value() );
0218 }
0219 
0220 
0221 void K3bLameEncoderSettingsWidget::defaults()
0222 {
0223     qDebug();
0224 
0225     m_manualSettingsDialog->m_comboMode->setCurrentIndex( mode2Index( DEFAULT_MODE ) );
0226 
0227     if( DEFAULT_MANUAL_BITRATE )
0228         m_radioManual->setChecked(true);
0229     else
0230         m_radioQualityLevel->setChecked(true);
0231 
0232     if( DEFAULT_VBR )
0233         m_manualSettingsDialog->m_radioVariableBitrate->setChecked( true );
0234     else
0235         m_manualSettingsDialog->m_radioConstantBitrate->setChecked( true );
0236 
0237     m_manualSettingsDialog->m_comboConstantBitrate->setCurrentText( i18n("%1 kbps", DEFAULT_CONSTANT_BITRATE ) );
0238     m_manualSettingsDialog->m_comboMaximumBitrate->setCurrentText( i18n("%1 kbps", DEFAULT_MAXIMUM_BITRATE ) );
0239     m_manualSettingsDialog->m_comboMinimumBitrate->setCurrentText( i18n("%1 kbps", DEFAULT_MINIMUM_BITRATE ) );
0240     m_manualSettingsDialog->m_spinAverageBitrate->setValue( DEFAULT_AVERAGE_BITRATE );
0241 
0242     m_manualSettingsDialog->m_checkBitrateMaximum->setChecked(  DEFAULT_USE_MAXIMUM_BITRATE );
0243     m_manualSettingsDialog->m_checkBitrateMinimum->setChecked( DEFAULT_USE_MINIMUM_BITRATE );
0244     m_manualSettingsDialog->m_checkBitrateAverage->setChecked( DEFAULT_USE_AVERAGE_BITRATE );
0245 
0246     m_sliderQuality->setValue( DEFAULT_QUALITY_LEVEL );
0247 
0248     m_checkCopyright->setChecked( DEFAULT_COPYRIGHT );
0249     m_checkOriginal->setChecked( DEFAULT_ORIGINAL );
0250     m_checkISO->setChecked( DEFAULT_ISO_COMPLIANCE );
0251     m_checkError->setChecked( DEFAULT_ERROR_PROTECTION );
0252 
0253     // default to 2 which is the same as the -h lame option
0254     m_spinEncoderQuality->setValue( DEFAULT_ENCODER_QUALITY );
0255 
0256     updateManualSettingsLabel();
0257     setNeedsSave( true );
0258 }
0259 
0260 #include "k3blameencoderconfigwidget.moc"
0261 
0262 #include "moc_k3blameencoderconfigwidget.cpp"