Commit b5e52977 authored by Benjamin Meyer's avatar Benjamin Meyer
Browse files

AudioCD ioslave is now a plugin system!

- Coping what seemed right from k3b I have taken the plugins and put them each
into their own library. (This by itself was very little work as they were
already abstracted classes).  Really the only biggest change/addition was the
addition of the 40 LOC find_plugins() function in the base class which opens
the libraries and loads the encoders.  In the future much closer intigration
with k3b is the goal.

-Second I moved the configure widget for each encoder into the encoder plugin
from the kcm.  This allows for the kcm to use find_plugins() and then load
their configure dialogs.  One of the really cool side effect for example is
that if lame sees that there is no lame library to run it wont return a
encoder to configure (and thus confusing the user).

-Third (tied very close to #2) was I converted the encoders to use KConfigXT.
I created kcfg files, modified the ui files, modified the code and added the
ability for the kcm to handle it (several three line for loops).  Because of
this change quite a lot of code that KConfigXT handles was able to be
removed from the kcm widget. On a side note k3b should do this.

Planned:
1) Incorperate k3b's Encoder from command line plugin
2) Ditch 50% of KAudioCreator and just use this new system.
3) Help port other apps to use this (k3b?,juk?,kcd?)

svn path=/trunk/kdemultimedia/kioslave/audiocd/; revision=297461
parent ef48ae80
if include_kcm_audiocd
SUBDIRS = kcmaudiocd
AUDIO_CD_SUBDIRS = kcmaudiocd
endif
SUBDIRS = plugins $(AUDIO_CD_SUBDIRS)
INCLUDES = $(CDPARANOIA_INCS) $(LAME_INCS) $(VORBIS_INCS) -I$(top_srcdir)/libkcddb $(all_includes)
INCLUDES = $(CDPARANOIA_INCS) -I$(top_srcdir)/libkcddb -Iplugins $(all_includes)
kde_module_LTLIBRARIES = kio_audiocd.la
kio_audiocd_la_SOURCES = audiocd.cpp encoderlame.cpp encodervorbis.cpp encoderwav.cpp encodercda.cpp
kio_audiocd_la_SOURCES = audiocd.cpp
kio_audiocd_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(CDPARANOIA_RPATH) \
$(LAME_RPATH) $(VORBIS_RPATH) -module $(KDE_PLUGIN)
kio_audiocd_la_LIBADD = $(LIB_KIO) $(CDPARANOIA_LIBS) $(VORBISENC_LIBS) $(VORBIS_LIBS) $(top_builddir)/libkcddb/libkcddb.la
kio_audiocd_la_LIBADD = ./plugins/libaudiocdplugins.la $(LIB_KIO) $(CDPARANOIA_LIBS) $(top_builddir)/libkcddb/libkcddb.la
noinst_HEADERS = audiocd.h encoderlame.h encodervorbis.h encoderwav.h encodercda.h
noinst_HEADERS = audiocd.h
protocoldir = $(kde_servicesdir)
protocol_DATA = audiocd.protocol
......
......@@ -69,9 +69,7 @@ extern "C"
#include "audiocd.h"
#include "encoderlame.h"
#include "encoderwav.h"
#include "encodervorbis.h"
#include <audiocdencoder.h>
#include <sys/stat.h>
#include <unistd.h>
......@@ -281,26 +279,10 @@ AudioCDProtocol::AudioCDProtocol (const QCString & pool, const QCString & app)
d = new Private;
// Add encoders
AudioCDEncoder *lame = new EncoderLame(this);
if ( ! lame->init() ){
delete lame;
lame = NULL;
}
else
encoders.append(lame);
#ifdef HAVE_VORBIS
AudioCDEncoder *vorbis = new EncoderVorbis(this);
encoders.append(vorbis);
#endif
AudioCDEncoder *wav = new EncoderWav(this);
encoders.append(wav);
AudioCDEncoder *cda = new EncoderCda(this);
encoders.append(cda);
AudioCDEncoder::find_all_plugins(this, encoders);
encoderTypeCDA = encoderFromExtension(".cda");
encoderTypeWAV = encoderFromExtension(".wav");
encoders.setAutoDelete(true);
}
AudioCDProtocol::~AudioCDProtocol()
......@@ -1069,7 +1051,7 @@ void AudioCDProtocol::loadSettings() {
// Tell the encoders to load their settings
AudioCDEncoder *encoder;
for ( encoder = encoders.first(); encoder; encoder = encoders.next() )
encoder->loadSettings(config);
encoder->loadSettings();
delete config;
}
......
......@@ -3,9 +3,9 @@ kde_module_LTLIBRARIES = kcm_audiocd.la
kcm_audiocd_la_SOURCES = audiocdconfig.ui kcmaudiocd.cpp
kcm_audiocd_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module
kcm_audiocd_la_LIBADD = $(LIB_KDEUI)
kcm_audiocd_la_LIBADD = ../plugins/libaudiocdplugins.la $(LIB_KDEUI)
INCLUDES = $(all_includes)
INCLUDES = -I../plugins $(all_includes)
kcm_audiocd_la_METASOURCES = AUTO
......
This diff is collapsed.
......@@ -23,17 +23,13 @@
#include <qcombobox.h>
#include <qgroupbox.h>
#include <qslider.h>
#include <qtabwidget.h>
#include <kaboutdata.h>
#include <knuminput.h>
#include <audiocdencoder.h>
#include "kcmaudiocd.moc"
// MPEG Layer 3 Bitrates
static int bitrates[] = { 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 };
// these are the approx. bitrates for the current 5 Vorbis modes
static int vorbis_nominal_bitrates[] = { 128, 160, 192, 256, 350 };
static int vorbis_bitrates[] = { 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 350 };
#include <kconfigdialogmanager.h>
KAudiocdModule::KAudiocdModule(QWidget *parent, const char *name)
: AudiocdConfig(parent, name), configChanged(false)
......@@ -41,72 +37,34 @@ KAudiocdModule::KAudiocdModule(QWidget *parent, const char *name)
setButtons(Default|Apply);
/* This should be in audiocdConfig, but I can't figure out how to
* make Qt Designer display KDE specific widget properties. */
vorbis_quality->setPrecision(1);
vorbis_quality->setRange(0.0, 10.0, 0.2, true);
config = new KConfig("kcmaudiocdrc");
load();
QPtrList<AudioCDEncoder> encoders;
AudioCDEncoder::find_all_plugins(0, encoders);
AudioCDEncoder *encoder;
for ( encoder = encoders.first(); encoder; encoder = encoders.next() ){
KConfigSkeleton *config = NULL;
QWidget *widget = encoder->getConfigureWidget(&config);
if(widget && config){
tabWidget->addTab(widget, encoder->type()+" Encoder");
KConfigDialogManager *configManager = new KConfigDialogManager(widget, config, QString(encoder->type()+" EncoderConfigManager").latin1());
encoderSettings.append(configManager);
}
}
load();
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
connect(widget, SIGNAL(widgetModified()), this, SLOT(slotConfigChanged()));
}
//CDDA Options
connect(cd_autosearch_check,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(ec_enable_check,SIGNAL(clicked()),this,SLOT(slotEcEnable()));
connect(ec_skip_check,SIGNAL(clicked()),SLOT(slotConfigChanged()));
connect(cd_device_string,SIGNAL(textChanged(const QString &)),SLOT(slotConfigChanged()));
//MP3 Encoding Method
connect(enc_method,SIGNAL(activated(int)),SLOT(slotSelectMethod(int)));
connect(stereo,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(quality,SIGNAL(valueChanged(int)),SLOT(slotConfigChanged()));
connect(crc, SIGNAL(clicked()), SLOT(slotConfigChanged()));
//MP3 Options
connect(copyright,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(original,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(iso,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(id3_tag,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
//MP3 CBR Settings
connect(cbr_bitrate,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(vbr_mean_brate,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
//MP3 VBR Groupbox
connect(vbr_average_br,SIGNAL(clicked()),this,SLOT(slotUpdateVBRWidgets()));
connect(vbr_min_hard,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(vbr_min_br,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(vbr_min_br,SIGNAL(clicked()),this,SLOT(slotUpdateVBRWidgets()));
connect(vbr_min_brate,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(vbr_max_br,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(vbr_max_br,SIGNAL(clicked()),this,SLOT(slotUpdateVBRWidgets()));
connect(vbr_max_brate,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(vbr_xing_tag,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
//MP3 Filter
connect(enable_lowpass,SIGNAL(clicked()),this,SLOT(slotChangeFilter()));
connect(enable_highpass,SIGNAL(clicked()),this,SLOT(slotChangeFilter()));
connect(set_lpf_width,SIGNAL(clicked()),this,SLOT(slotChangeFilter()));
connect(set_hpf_width,SIGNAL(clicked()),this,SLOT(slotChangeFilter()));
connect(lowfilterwidth,SIGNAL(valueChanged(int)),SLOT(slotConfigChanged()));
connect(highfilterwidth,SIGNAL(valueChanged(int)),SLOT(slotConfigChanged()));
connect(lowfilterfreq,SIGNAL(valueChanged(int)),SLOT(slotConfigChanged()));
connect(highfilterfreq,SIGNAL(valueChanged(int)),SLOT(slotConfigChanged()));
// Vorbis
connect(set_vorbis_min_br,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(set_vorbis_max_br,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(set_vorbis_nominal_br,SIGNAL(clicked()),this,SLOT(slotConfigChanged()));
connect(vorbis_min_br,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(vorbis_max_br,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(vorbis_nominal_br,SIGNAL(activated(int)),SLOT(slotConfigChanged()));
connect(vorbis_enc_method,SIGNAL(activated(int)),this,SLOT(slotSelectVorbisMethod(int)));
connect(vorbis_quality,SIGNAL(valueChanged(double)),this,SLOT(slotConfigChanged()));
connect(vorbis_comments, SIGNAL( clicked ()),SLOT( slotConfigChanged()));
// File Name
connect(fileNameLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(slotConfigChanged()));
}
......@@ -122,97 +80,19 @@ void KAudiocdModule::defaults() {
ec_enable_check->setChecked(true);
ec_skip_check->setChecked(false);
enc_method->setCurrentItem(0);
slotSelectMethod(0);
stereo->setCurrentItem(0);
quality->setValue(2);
copyright->setChecked(false);
original->setChecked(true);
iso->setChecked(false);
id3_tag->setChecked(true);
crc->setChecked(false);
cbr_bitrate->setCurrentItem(9);
vbr_min_br->setChecked(false);
vbr_min_hard->setChecked(false);
vbr_max_br->setChecked(false);
vbr_average_br->setChecked(false);
vbr_min_brate->setCurrentItem(7);
vbr_max_brate->setCurrentItem(13);
vbr_mean_brate->setCurrentItem(10);
vbr_xing_tag->setChecked(true);
slotUpdateVBRWidgets();
enable_lowpass->setChecked(false);
enable_highpass->setChecked(false);
set_lpf_width->setChecked(false);
set_hpf_width->setChecked(false);
lowfilterfreq->setValue(18000);
lowfilterwidth->setValue(900);
highfilterfreq->setValue(0);
highfilterwidth->setValue(0);
slotChangeFilter();
set_vorbis_min_br->setChecked(false);
set_vorbis_max_br->setChecked(false);
set_vorbis_nominal_br->setChecked(true);
vorbis_min_br->setCurrentItem(0);
vorbis_max_br->setCurrentItem(13);
vorbis_nominal_br->setCurrentItem(1);
vorbis_quality->setValue(3.0);
vorbis_comments->setChecked(true);
vorbis_enc_method->setCurrentItem(0);
slotSelectVorbisMethod(0);
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
widget->updateWidgetsDefault();
}
fileNameLineEdit->setText("%n %t");
}
void KAudiocdModule::save() {
if (!configChanged ) return;
int encmethod = enc_method->currentItem();
int mode = stereo->currentItem();
int encquality = quality->value();
int cbrbrate = cbr_bitrate->currentItem();
cbrbrate = bitrates[cbrbrate];
int vbrminbrate = vbr_min_brate->currentItem();
vbrminbrate = bitrates[vbrminbrate];
int vbrmaxbrate = vbr_max_brate->currentItem();
vbrmaxbrate = bitrates[vbrmaxbrate];
int vbravrbrate = vbr_mean_brate->currentItem();
vbravrbrate = bitrates[vbravrbrate];
int lpf_freq = lowfilterfreq->value();
int lpf_width = lowfilterwidth->value();
int hpf_freq = highfilterfreq->value();
int hpf_width = highfilterwidth->value();
int vorbis_min_bitrate = vorbis_min_br->currentItem();
vorbis_min_bitrate = vorbis_bitrates[vorbis_min_bitrate];
int vorbis_max_bitrate = vorbis_max_br->currentItem();
vorbis_max_bitrate = vorbis_bitrates[vorbis_max_bitrate];
int vorbis_nominal_bitrate = vorbis_nominal_br->currentItem();
vorbis_nominal_bitrate = vorbis_nominal_bitrates[vorbis_nominal_bitrate];
{
{
KConfigGroupSaver saver(config, "CDDA");
config->writeEntry("autosearch",cd_autosearch_check->isChecked());
......@@ -221,59 +101,16 @@ void KAudiocdModule::save() {
config->writeEntry("never_skip",!(ec_skip_check->isChecked()));
}
{
KConfigGroupSaver saver(config, "MP3");
config->writeEntry("mode",mode);
config->writeEntry("quality",encquality);
config->writeEntry("encmethod",encmethod);
config->writeEntry("copyright",copyright->isChecked());
config->writeEntry("original",original->isChecked());
config->writeEntry("iso",iso->isChecked());
config->writeEntry("crc",crc->isChecked());
config->writeEntry("id3",id3_tag->isChecked());
config->writeEntry("cbrbitrate",cbrbrate);
config->writeEntry("set_vbr_min",vbr_min_br->isChecked());
config->writeEntry("set_vbr_max",vbr_max_br->isChecked());
config->writeEntry("set_vbr_avr",vbr_average_br->isChecked());
config->writeEntry("vbr_min_hard",vbr_min_hard->isChecked());
config->writeEntry("vbr_min_bitrate",vbrminbrate);
config->writeEntry("vbr_max_bitrate",vbrmaxbrate);
config->writeEntry("vbr_average_bitrate",vbravrbrate);
config->writeEntry("write_xing_tag",vbr_xing_tag->isChecked());
config->writeEntry("enable_lowpassfilter",enable_lowpass->isChecked());
config->writeEntry("enable_highpassfilter",enable_highpass->isChecked());
config->writeEntry("set_highpassfilter_width",set_hpf_width->isChecked());
config->writeEntry("set_lowpassfilter_width",set_lpf_width->isChecked());
config->writeEntry("lowpassfilter_freq",lpf_freq);
config->writeEntry("lowpassfilter_width",lpf_width);
config->writeEntry("highpassfilter_freq",hpf_freq);
config->writeEntry("highpassfilter_width",hpf_width);
}
{
KConfigGroupSaver saver(config, "Vorbis");
config->writeEntry("set_vorbis_min_bitrate",set_vorbis_min_br->isChecked());
config->writeEntry("set_vorbis_max_bitrate",set_vorbis_max_br->isChecked());
config->writeEntry("set_vorbis_nominal_bitrate",set_vorbis_nominal_br->isChecked());
config->writeEntry("vorbis_comments",vorbis_comments->isChecked());
config->writeEntry("vorbis_min_bitrate",vorbis_min_bitrate);
config->writeEntry("vorbis_max_bitrate",vorbis_max_bitrate);
config->writeEntry("vorbis_nominal_bitrate",vorbis_nominal_bitrate);
config->writeEntry("encmethod", vorbis_enc_method->currentItem());
config->writeEntry("quality", vorbis_quality->value());
}
{
KConfigGroupSaver saver(config, "FileName");
config->writeEntry("file_name_template", fileNameLineEdit->text());
}
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
widget->updateSettings();
}
config->sync();
configChanged = false;
......@@ -291,109 +128,15 @@ void KAudiocdModule::load() {
ec_skip_check->setChecked(!(config->readBoolEntry("never_skip",true)));
}
int brate;
{
KConfigGroupSaver saver(config, "MP3");
int encmethod = config->readNumEntry("encmethod",0);
enc_method->setCurrentItem(encmethod);
slotSelectMethod(encmethod);
stereo->setCurrentItem(config->readNumEntry("mode",0));
quality->setValue(config->readNumEntry("quality",2));
copyright->setChecked(config->readBoolEntry("copyright",false));
original->setChecked(config->readBoolEntry("original",true));
iso->setChecked(config->readBoolEntry("iso",false));
crc->setChecked(config->readBoolEntry("crc",false));
id3_tag->setChecked(config->readBoolEntry("id3",true));
brate = config->readNumEntry("cbrbitrate",160);
cbr_bitrate->setCurrentItem(getBitrateIndex(brate));
vbr_min_br->setChecked(config->readBoolEntry("set_vbr_min",false));
vbr_min_hard->setChecked(config->readBoolEntry("vbr_min_hard",false));
vbr_max_br->setChecked(config->readBoolEntry("set_vbr_max",false));
vbr_average_br->setChecked(config->readBoolEntry("set_vbr_avr",true));
brate = config->readNumEntry("vbr_min_bitrate",40);
vbr_min_brate->setCurrentItem(getBitrateIndex(brate));
brate = config->readNumEntry("vbr_max_bitrate",320);
vbr_max_brate->setCurrentItem(getBitrateIndex(brate));
brate = config->readNumEntry("vbr_average_bitrate",160);
vbr_mean_brate->setCurrentItem(getBitrateIndex(brate));
vbr_xing_tag->setChecked(config->readBoolEntry("write_xing_tag",true));
slotUpdateVBRWidgets();
enable_lowpass->setChecked(config->readBoolEntry("enable_lowpassfilter",false));
enable_highpass->setChecked(config->readBoolEntry("enable_highpassfilter",false));
set_lpf_width->setChecked(config->readBoolEntry("set_lowpassfilter_width",false));
set_hpf_width->setChecked(config->readBoolEntry("set_highpassfilter_width",false));
lowfilterfreq->setValue(config->readNumEntry("lowpassfilter_freq",18000));
lowfilterwidth->setValue(config->readNumEntry("lowpassfilter_width",900));
highfilterfreq->setValue(config->readNumEntry("highpassfilter_freq",0));
highfilterwidth->setValue(config->readNumEntry("highpassfilter_width",0));
slotChangeFilter();
}
{
KConfigGroupSaver saver(config, "Vorbis");
brate = config->readNumEntry("vorbis_min_bitrate",40);
vorbis_min_br->setCurrentItem(getVorbisBitrateIndex(brate));
brate = config->readNumEntry("vorbis_max_bitrate",350);
vorbis_max_br->setCurrentItem(getVorbisBitrateIndex(brate));
brate = config->readNumEntry("vorbis_nominal_bitrate",160);
vorbis_nominal_br->setCurrentItem(getVorbisNominalBitrateIndex(brate));
set_vorbis_min_br->setChecked(config->readBoolEntry("set_vorbis_min_bitrate",false));
set_vorbis_max_br->setChecked(config->readBoolEntry("set_vorbis_max_bitrate",false));
set_vorbis_nominal_br->setChecked(config->readBoolEntry("set_vorbis_nominal_bitrate",true));
int vorbis_encmethod = config->readNumEntry("encmethod", 0);
vorbis_enc_method->setCurrentItem(vorbis_encmethod);
slotSelectVorbisMethod(vorbis_encmethod);
vorbis_quality->setValue(config->readDoubleNumEntry("quality", 3.0));
vorbis_comments->setChecked(config->readBoolEntry("vorbis_comments",true));
}
{
KConfigGroupSaver saver(config, "FileName");
fileNameLineEdit->setText(config->readEntry("file_name_template", "%n %t"));
}
}
int KAudiocdModule::getBitrateIndex(int value) {
for (uint i=0;i < sizeof(bitrates);i++)
if (value == bitrates[i])
return i;
return -1;
}
int KAudiocdModule::getVorbisBitrateIndex(int value) {
for (uint i=0;i < sizeof(vorbis_bitrates);i++)
if (value == vorbis_bitrates[i])
return i;
return -1;
}
int KAudiocdModule::getVorbisNominalBitrateIndex(int value) {
for (uint i=0;i < sizeof(vorbis_nominal_bitrates);i++)
if (value == vorbis_nominal_bitrates[i])
return i;
return -1;
KConfigDialogManager *widget;
for ( widget = encoderSettings.first(); widget; widget = encoderSettings.next() ){
widget->updateWidgets();
}
}
void KAudiocdModule::slotConfigChanged() {
......@@ -420,125 +163,6 @@ void KAudiocdModule::slotEcEnable() {
}
//
// slot for the filter settings
//
void KAudiocdModule::slotChangeFilter() {
if (enable_lowpass->isChecked()) {
lowfilterfreq->setEnabled(true);
//lowfilterwidth->setEnabled(true);
set_lpf_width->setEnabled(true);
} else {
lowfilterfreq->setDisabled(true);
lowfilterwidth->setDisabled(true);
set_lpf_width->setChecked(false);
set_lpf_width->setDisabled(true);
}
if (enable_highpass->isChecked()) {
highfilterfreq->setEnabled(true);
// highfilterwidth->setEnabled(true);
set_hpf_width->setEnabled(true);
} else {
highfilterfreq->setDisabled(true);
highfilterwidth->setDisabled(true);
set_hpf_width->setChecked(false);
set_hpf_width->setDisabled(true);
}
if (set_lpf_width->isChecked()) {
lowfilterwidth->setEnabled(true);
} else {
lowfilterwidth->setDisabled(true);
}
if (set_hpf_width->isChecked()) {
highfilterwidth->setEnabled(true);
} else {
highfilterwidth->setDisabled(true);
}
slotConfigChanged();
}
//
// slot for switching between quality and bitrate based encoding
//
void KAudiocdModule::slotSelectVorbisMethod(int index) {
if (index == 1 ) {
// bitrate based encoding selected
vorbis_bitrate_settings->show();
vorbis_quality_settings->hide();
} else {
// quality based encoding selected
vorbis_bitrate_settings->hide();
vorbis_quality_settings->show();
}
slotConfigChanged();
return;
}
//
// slot for switching between CBR and VBR
//
void KAudiocdModule::slotSelectMethod(int index) {
if (index == 1 ) {
// variable bitrate selected
vbr_settings->show();
cbr_settings->hide();
} else {
// constant bitrate selected
vbr_settings->hide();
cbr_settings->show();
}
slotConfigChanged();
return;
}
//
// slot for changing the VBR Widgets logically
//
void KAudiocdModule::slotUpdateVBRWidgets() {
if(vbr_average_br->isEnabled() && vbr_average_br->isChecked()) {
vbr_min_br->setChecked(false);
vbr_min_br->setDisabled(true);
vbr_min_brate->setDisabled(true);
vbr_min_hard->setChecked(false);
vbr_max_br->setChecked(false);
vbr_max_br->setDisabled(true);
vbr_max_brate->setDisabled(true);
vbr_mean_brate->setEnabled(true);
} else {
vbr_min_br->setEnabled(true);
vbr_max_br->setEnabled(true);
bool usingMinMaxBitrate = vbr_min_br->isChecked() || vbr_max_br->isChecked();
vbr_average_br->setEnabled(!usingMinMaxBitrate);
vbr_mean_brate->setDisabled(true);
vbr_min_brate->setEnabled(vbr_min_br->isChecked());
vbr_max_brate->setEnabled(vbr_max_br->isChecked());
}
slotConfigChanged();
return;
}
QString KAudiocdModule::quickHelp() const