You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/kioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp

268 lines
9.1 KiB

/*
Copyright (C) 2001 Carsten Duvenhorst <duvenhorst@m2.uni-hannover.de>
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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include <kconfig.h>
#include <klineedit.h>
#include <klocale.h>
#include <tqcheckbox.h>
#include <tqcombobox.h>
#include <tqgroupbox.h>
#include <tqslider.h>
#include <tqtabwidget.h>
#include <kaboutdata.h>
#include <knuminput.h>
#include <tqregexp.h>
#include <tqlabel.h>
#include <audiocdencoder.h>
#include "kcmaudiocd.moc"
#include <kconfigdialogmanager.h>
KAudiocdModule::KAudiocdModule(TQWidget *parent, const char *name)
: AudiocdConfig(parent, name), configChanged(false)
{
TQString foo = i18n("Report errors found on the cd.");
setButtons(Default|Apply);
config = new KConfig("kcmaudiocdrc");
TQPtrList<AudioCDEncoder> encoders;
AudioCDEncoder::findAllPlugins(0, encoders);
AudioCDEncoder *encoder;
for ( encoder = encoders.first(); encoder; encoder = encoders.next() ){
if (encoder->init()) {
KConfigSkeleton *config = NULL;
TQWidget *widget = encoder->getConfigureWidget(&config);
if(widget && config){
tabWidget->addTab(widget, i18n("%1 Encoder").tqarg(encoder->type()));
KConfigDialogManager *configManager = new KConfigDialogManager(widget, config, TQString(encoder->type()+" EncoderConfigManager").latin1());
encoderSettings.append(configManager);
}
}
}
load();
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
connect(widget, TQT_SIGNAL(widgetModified()), this, TQT_SLOT(slotModuleChanged()));
}
//CDDA Options
connect(cd_specify_device,TQT_SIGNAL(clicked()),this,TQT_SLOT(slotConfigChanged()));
connect(ec_enable_check,TQT_SIGNAL(clicked()),this,TQT_SLOT(slotEcEnable()));
connect(ec_skip_check,TQT_SIGNAL(clicked()),TQT_SLOT(slotConfigChanged()));
connect(cd_device_string,TQT_SIGNAL(textChanged(const TQString &)),TQT_SLOT(slotConfigChanged()));
connect(niceLevel,TQT_SIGNAL(valueChanged(int)),TQT_SLOT(slotConfigChanged()));
// File Name
connect(fileNameLineEdit, TQT_SIGNAL(textChanged(const TQString &)), this, TQT_SLOT(slotConfigChanged()));
connect(albumNameLineEdit, TQT_SIGNAL(textChanged(const TQString &)), this, TQT_SLOT(slotConfigChanged()));
connect( kcfg_replaceInput, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( updateExample() ) );
connect( kcfg_replaceOutput, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( updateExample() ) );
connect( example, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( updateExample() ) );
connect( kcfg_replaceInput, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotConfigChanged() ) );
connect( kcfg_replaceOutput, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotConfigChanged() ) );
connect( example, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( slotConfigChanged() ) );
KAboutData *about =
new KAboutData(I18N_NOOP("kcmaudiocd"), I18N_NOOP("KDE Audio CD IO Slave"),
0, 0, KAboutData::License_GPL,
I18N_NOOP("(c) 2000 - 2005 Audio CD developers"));
about->addAuthor("Benjamin C. Meyer", I18N_NOOP("Current Maintainer"), "ben@meyerhome.net");
about->addAuthor("Carsten Duvenhorst", 0, "duvenhorst@duvnet.de");
setAboutData(about);
}
KAudiocdModule::~KAudiocdModule()
{
delete config;
}
TQString removeQoutes(const TQString& text)
{
TQString deqoutedString=text;
TQRegExp qoutedStringRegExp("^\".*\"$");
if (qoutedStringRegExp.exactMatch(text))
{
deqoutedString=text.mid(1, text.length()-2);
}
return deqoutedString;
}
bool needsQoutes(const TQString& text)
{
TQRegExp spaceAtTheBeginning("^\\s+.*$");
TQRegExp spaceAtTheEnd("^.*\\s+$");
return (spaceAtTheBeginning.exactMatch(text) || spaceAtTheEnd.exactMatch(text));
}
void KAudiocdModule::updateExample()
{
TQString text = example->text();
TQString deqoutedReplaceInput=removeQoutes(kcfg_replaceInput->text());
TQString deqoutedReplaceOutput=removeQoutes(kcfg_replaceOutput->text());
text.replace( TQRegExp(deqoutedReplaceInput), deqoutedReplaceOutput );
exampleOutput->setText(text);
}
void KAudiocdModule::defaults() {
load( false );
}
void KAudiocdModule::save() {
if (!configChanged ) return;
{
KConfigGroupSaver saver(config, "CDDA");
// autosearch is the name of the config option, which has the
// reverse sense of the current text of the configuration option,
// which is specify the device. Therefore, invert the value on write.
//
config->writeEntry("autosearch", !(cd_specify_device->isChecked()) );
config->writeEntry("device",cd_device_string->text());
config->writeEntry("disable_paranoia",!(ec_enable_check->isChecked()));
config->writeEntry("never_skip",!(ec_skip_check->isChecked()));
config->writeEntry("niceLevel", niceLevel->value());
}
{
KConfigGroupSaver saver(config, "FileName");
config->writeEntry("file_name_template", fileNameLineEdit->text());
config->writeEntry("album_name_template", albumNameLineEdit->text());
config->writeEntry("regexp_example", example->text());
// save qouted if required
TQString replaceInput=kcfg_replaceInput->text();
TQString replaceOutput=kcfg_replaceOutput->text();
if (needsQoutes(replaceInput))
{
replaceInput=TQString("\"")+replaceInput+TQString("\"");
}
if (needsQoutes(replaceOutput))
{
replaceOutput=TQString("\"")+replaceOutput+TQString("\"");
}
config->writeEntry("regexp_search", replaceInput);
config->writeEntry("regexp_replace", replaceOutput);
}
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
widget->updateSettings();
}
config->sync();
configChanged = false;
}
void KAudiocdModule::load() {
load( false );
}
void KAudiocdModule::load(bool useDefaults) {
config->setReadDefaults( useDefaults );
{
KConfigGroupSaver saver(config, "CDDA");
// Specify <=> not autosearch, as explained above in ::save()
cd_specify_device->setChecked( !(config->readBoolEntry("autosearch",true)) );
cd_device_string->setText(config->readEntry("device","/dev/cdrom"));
ec_enable_check->setChecked(!(config->readBoolEntry("disable_paranoia",false)));
ec_skip_check->setChecked(!(config->readBoolEntry("never_skip",true)));
niceLevel->setValue(config->readNumEntry("niceLevel", 0));
}
{
KConfigGroupSaver saver(config, "FileName");
fileNameLineEdit->setText(config->readEntry("file_name_template", "%{albumartist} - %{number} - %{title}"));
albumNameLineEdit->setText(config->readEntry("album_name_template", "%{albumartist} - %{albumtitle}"));
kcfg_replaceInput->setText(config->readEntry("regexp_search"));
kcfg_replaceOutput->setText(config->readEntry("regexp_replace"));
example->setText(config->readEntry("example", i18n("Cool artist - example audio file.wav")));
}
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
widget->updateWidgets();
}
emit changed( useDefaults );
}
void KAudiocdModule::slotModuleChanged() {
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
if(widget->hasChanged()){
slotConfigChanged();
break;
}
}
}
void KAudiocdModule::slotConfigChanged() {
configChanged = true;
emit changed(true);
}
/*
# slot for the error correction settings
*/
void KAudiocdModule::slotEcEnable() {
if (!(ec_skip_check->isChecked())) {
ec_skip_check->setChecked(true);
} else {
if (ec_skip_check->isEnabled()) {
ec_skip_check->setChecked(false);
}
}
slotConfigChanged();
}
TQString KAudiocdModule::quickHelp() const
{
return i18n("<h1>Audio CDs</h1> The Audio CD IO-Slave enables you to easily"
" create wav, MP3 or Ogg Vorbis files from your audio CD-ROMs or DVDs."
" The slave is invoked by typing <i>\"audiocd:/\"</i> in Konqueror's location"
" bar. In this module, you can configure"
" encoding, and device settings. Note that MP3 and Ogg"
" Vorbis encoding are only available if KDE was built with a recent"
" version of the LAME or Ogg Vorbis libraries.");
}
extern "C"
{
KCModule *create_audiocd(TQWidget *parent, const char */*name*/)
{
return new KAudiocdModule(parent, "kcmaudiocd");
}
}