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"