summaryrefslogtreecommitdiffstats
path: root/tdeioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp')
-rw-r--r--tdeioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp267
1 files changed, 267 insertions, 0 deletions
diff --git a/tdeioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp b/tdeioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp
new file mode 100644
index 00000000..f3190d43
--- /dev/null
+++ b/tdeioslave/audiocd/kcmaudiocd/kcmaudiocd.cpp
@@ -0,0 +1,267 @@
+/*
+ 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 <tdeconfig.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 <tdeconfigdialogmanager.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 TDEConfig("kcmaudiocdrc");
+
+ TQPtrList<AudioCDEncoder> encoders;
+ AudioCDEncoder::findAllPlugins(0, encoders);
+ AudioCDEncoder *encoder;
+ for ( encoder = encoders.first(); encoder; encoder = encoders.next() ){
+ if (encoder->init()) {
+ TDEConfigSkeleton *config = NULL;
+ TQWidget *widget = encoder->getConfigureWidget(&config);
+ if(widget && config){
+ tabWidget->addTab(widget, i18n("%1 Encoder").arg(encoder->type()));
+ TDEConfigDialogManager *configManager = new TDEConfigDialogManager(widget, config, TQString(encoder->type()+" EncoderConfigManager").latin1());
+ encoderSettings.append(configManager);
+ }
+ }
+ }
+
+ load();
+
+ TDEConfigDialogManager *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() ) );
+
+ TDEAboutData *about =
+ new TDEAboutData(I18N_NOOP("kcmaudiocd"), I18N_NOOP("TDE Audio CD IO Slave"),
+ 0, 0, TDEAboutData::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;
+
+ {
+ TDEConfigGroupSaver 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());
+ }
+
+ {
+ TDEConfigGroupSaver 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);
+ }
+
+ TDEConfigDialogManager *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 );
+
+ {
+ TDEConfigGroupSaver 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));
+ }
+
+ {
+ TDEConfigGroupSaver 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")));
+ }
+
+ TDEConfigDialogManager *widget;
+ for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
+ widget->updateWidgets();
+ }
+
+ emit changed( useDefaults );
+}
+
+void KAudiocdModule::slotModuleChanged() {
+ TDEConfigDialogManager *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 TDE was built with a recent"
+ " version of the LAME or Ogg Vorbis libraries.");
+}
+
+extern "C"
+{
+ TDECModule *create_audiocd(TQWidget *parent, const char */*name*/)
+ {
+ return new KAudiocdModule(parent, "kcmaudiocd");
+ }
+
+}