File indexing completed on 2024-05-26 04:54:20

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 "k3bexternalencoderconfigwidget.h"
0010 #include "k3bcore.h"
0011 #include "k3bplugin_i18n.h"
0012 
0013 #include <KConfig>
0014 #include <KMessageBox>
0015 
0016 #include <QDebug>
0017 #include <QList>
0018 #include <QCheckBox>
0019 #include <QTreeWidget>
0020 
0021 K3B_EXPORT_PLUGIN_CONFIG_WIDGET( kcm_k3bexternalencoder, K3bExternalEncoderSettingsWidget )
0022 
0023 
0024 K3bExternalEncoderEditDialog::K3bExternalEncoderEditDialog( QWidget* parent )
0025     : QDialog( parent )
0026 {
0027     setModal( true );
0028     setWindowTitle( i18n("Editing external audio encoder") );
0029     setupUi( this );
0030 }
0031 
0032 
0033 K3bExternalEncoderEditDialog::~K3bExternalEncoderEditDialog()
0034 {
0035 }
0036 
0037 
0038 K3bExternalEncoderCommand K3bExternalEncoderEditDialog::currentCommand() const
0039 {
0040     K3bExternalEncoderCommand cmd;
0041     cmd.name = m_editName->text();
0042     cmd.extension = m_editExtension->text();
0043     cmd.command = m_editCommand->text();
0044     cmd.swapByteOrder = m_checkSwapByteOrder->isChecked();
0045     cmd.writeWaveHeader = m_checkWriteWaveHeader->isChecked();
0046     return cmd;
0047 }
0048 
0049 
0050 void K3bExternalEncoderEditDialog::setCommand( const K3bExternalEncoderCommand& cmd )
0051 {
0052     m_editName->setText( cmd.name );
0053     m_editExtension->setText( cmd.extension );
0054     m_editCommand->setText( cmd.command );
0055     m_checkSwapByteOrder->setChecked( cmd.swapByteOrder );
0056     m_checkWriteWaveHeader->setChecked( cmd.writeWaveHeader );
0057 }
0058 
0059 
0060 void K3bExternalEncoderEditDialog::accept()
0061 {
0062     if( m_editName->text().isEmpty() ) {
0063         KMessageBox::error( this,
0064                             i18n("Please specify a name for the command."),
0065                             i18n("No name specified") );
0066     }
0067     else if( m_editExtension->text().isEmpty() ) {
0068         KMessageBox::error( this,
0069                             i18n("Please specify an extension for the command."),
0070                             i18n("No extension specified") );
0071     }
0072     else if( m_editCommand->text().isEmpty() ) {
0073         KMessageBox::error( this,
0074                             i18n("Please specify the command line."),
0075                             i18n("No command line specified") );
0076     }
0077     else if( !m_editCommand->text().contains( "%f" ) ) {
0078         KMessageBox::error( this,
0079                             // xgettext: no-c-format
0080                             i18n("Please add the output filename (%f) to the command line."),
0081                             i18n("No filename specified") );
0082     }
0083     // FIXME: check for name and extension uniqueness
0084     else {
0085         QDialog::accept();
0086     }
0087 }
0088 
0089 
0090 
0091 K3bExternalEncoderSettingsWidget::K3bExternalEncoderSettingsWidget(QObject *parent, const KPluginMetaData& metaData, const QVariantList& args )
0092     : K3b::PluginConfigWidget( parent, metaData, args )
0093 {
0094     setupUi( widget() );
0095 
0096     connect( m_viewEncoders, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
0097              this, SLOT(slotSelectionChanged(QTreeWidgetItem*)) );
0098     connect( m_viewEncoders, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
0099              this, SLOT(slotEditCommand()) );
0100     connect( m_buttonAdd, SIGNAL(clicked()),
0101              this, SLOT(slotNewCommand()) );
0102     connect( m_buttonEdit, SIGNAL(clicked()),
0103              this, SLOT(slotEditCommand()) );
0104     connect( m_buttonRemove, SIGNAL(clicked()),
0105              this, SLOT(slotRemoveCommand()) );
0106 
0107     m_editDlg = new K3bExternalEncoderEditDialog( widget() );
0108     slotSelectionChanged( 0 );
0109 }
0110 
0111 
0112 K3bExternalEncoderSettingsWidget::~K3bExternalEncoderSettingsWidget()
0113 {
0114 }
0115 
0116 
0117 void K3bExternalEncoderSettingsWidget::slotNewCommand()
0118 {
0119     // clear the dialog
0120     m_editDlg->setCommand( K3bExternalEncoderCommand() );
0121 
0122     if( m_editDlg->exec() == QDialog::Accepted ) {
0123         K3bExternalEncoderCommand cmd = m_editDlg->currentCommand();
0124         createItem( cmd );
0125         setNeedsSave( true );
0126     }
0127 }
0128 
0129 
0130 void K3bExternalEncoderSettingsWidget::slotSelectionChanged( QTreeWidgetItem* current )
0131 {
0132     m_buttonRemove->setEnabled( current != 0 );
0133     m_buttonEdit->setEnabled( current != 0 );
0134 }
0135 
0136 
0137 void K3bExternalEncoderSettingsWidget::slotEditCommand()
0138 {
0139     if( QTreeWidgetItem* item = m_viewEncoders->currentItem() ) {
0140         m_editDlg->setCommand( m_commands[item] );
0141         if( m_editDlg->exec() == QDialog::Accepted ) {
0142             m_commands[item] = m_editDlg->currentCommand();
0143             fillItem( item, m_editDlg->currentCommand() );
0144             setNeedsSave( true );
0145         }
0146     }
0147 }
0148 
0149 
0150 void K3bExternalEncoderSettingsWidget::slotRemoveCommand()
0151 {
0152     if( QTreeWidgetItem* item = m_viewEncoders->currentItem() ) {
0153         m_commands.remove( item );
0154         delete item;
0155         setNeedsSave( true );
0156     }
0157 }
0158 
0159 
0160 void K3bExternalEncoderSettingsWidget::load()
0161 {
0162     qDebug();
0163     fillEncoderView( K3bExternalEncoderCommand::readCommands() );
0164 }
0165 
0166 
0167 void K3bExternalEncoderSettingsWidget::save()
0168 {
0169     qDebug();
0170     K3bExternalEncoderCommand::saveCommands( m_commands.values() );
0171     setNeedsSave( false );
0172 }
0173 
0174 
0175 void K3bExternalEncoderSettingsWidget::defaults()
0176 {
0177     qDebug();
0178     fillEncoderView( K3bExternalEncoderCommand::defaultCommands() );
0179     setNeedsSave( true );
0180 }
0181 
0182 
0183 QTreeWidgetItem* K3bExternalEncoderSettingsWidget::createItem( const K3bExternalEncoderCommand& cmd )
0184 {
0185     QTreeWidgetItem* item = new QTreeWidgetItem( m_viewEncoders );
0186     fillItem( item, cmd );
0187     m_commands.insert( item, cmd );
0188     return item;
0189 }
0190 
0191 
0192 void K3bExternalEncoderSettingsWidget::fillItem( QTreeWidgetItem* item, const K3bExternalEncoderCommand& cmd )
0193 {
0194     item->setText( 0, cmd.name );
0195     item->setText( 1, cmd.extension );
0196     item->setText( 2, cmd.command );
0197 }
0198 
0199 
0200 void K3bExternalEncoderSettingsWidget::fillEncoderView( const QList<K3bExternalEncoderCommand>& commands )
0201 {
0202     m_commands.clear();
0203     m_viewEncoders->clear();
0204 
0205     QList<K3bExternalEncoderCommand> cmds( commands );
0206     for( QList<K3bExternalEncoderCommand>::iterator it = cmds.begin();
0207          it != cmds.end(); ++it ) {
0208         K3bExternalEncoderCommand& cmd = *it;
0209         createItem( cmd );
0210     }
0211 }
0212 
0213 #include "k3bexternalencoderconfigwidget.moc"
0214 
0215 #include "moc_k3bexternalencoderconfigwidget.cpp"