aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-02-10 15:46:28 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-02-10 15:46:28 +0000
commita9fe5096a37a5f67ca017ea25481066544d5f749 (patch)
treefef489008f7c9aa400ba9d2ae293899336f2d3e0
parent999b2065da19260e1f3e6644de9200101814e636 (diff)
downloadqmmp-a9fe5096a37a5f67ca017ea25481066544d5f749.tar.gz
qmmp-a9fe5096a37a5f67ca017ea25481066544d5f749.tar.bz2
qmmp-a9fe5096a37a5f67ca017ea25481066544d5f749.zip
improved plugin settings
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@238 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/plugins/Effect/srconverter/effectsrconverterfactory.cpp2
-rw-r--r--src/plugins/Output/jack/outputjackfactory.cpp2
-rw-r--r--src/plugins/Visual/analyzer/visualanalyzerfactory.cpp2
-rw-r--r--src/qmmp/decoder.cpp86
-rw-r--r--src/qmmp/decoder.h5
-rw-r--r--src/qmmp/output.cpp36
-rw-r--r--src/qmmp/output.h2
-rw-r--r--src/ui/configdialog.cpp169
-rw-r--r--src/ui/configdialog.h5
-rw-r--r--src/ui/pluginitem.cpp41
-rw-r--r--src/ui/pluginitem.h17
-rw-r--r--src/ui/visualmenu.cpp2
12 files changed, 235 insertions, 134 deletions
diff --git a/src/plugins/Effect/srconverter/effectsrconverterfactory.cpp b/src/plugins/Effect/srconverter/effectsrconverterfactory.cpp
index bd4f93c1b..fff1ab024 100644
--- a/src/plugins/Effect/srconverter/effectsrconverterfactory.cpp
+++ b/src/plugins/Effect/srconverter/effectsrconverterfactory.cpp
@@ -28,6 +28,8 @@ const EffectProperties EffectSRConverterFactory::properties() const
{
EffectProperties properties;
properties.name = tr("SRC Plugin");
+ properties.hasSettings = TRUE;
+ properties.hasAbout = TRUE;
return properties;
};
diff --git a/src/plugins/Output/jack/outputjackfactory.cpp b/src/plugins/Output/jack/outputjackfactory.cpp
index b41ba4487..51ce1b019 100644
--- a/src/plugins/Output/jack/outputjackfactory.cpp
+++ b/src/plugins/Output/jack/outputjackfactory.cpp
@@ -29,7 +29,7 @@ const OutputProperties OutputJACKFactory::properties() const
OutputProperties properties;
properties.name = tr("JACK Plugin");
properties.hasAbout = TRUE;
- properties.hasSettings = TRUE;
+ properties.hasSettings = FALSE;
return properties;
}
diff --git a/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp b/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp
index 0e110b2cd..4d487a211 100644
--- a/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp
+++ b/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp
@@ -28,6 +28,8 @@ const VisualProperties VisualAnalyzerFactory::properties() const
{
VisualProperties properties;
properties.name = tr("Analyzer Plugin");
+ properties.hasSettings = TRUE;
+ properties.hasAbout = TRUE;
return properties;
};
diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp
index f2dceba92..5bb2545ed 100644
--- a/src/qmmp/decoder.cpp
+++ b/src/qmmp/decoder.cpp
@@ -55,12 +55,11 @@ Decoder::~Decoder()
static QList<DecoderFactory*> *factories = 0;
static QStringList files;
-static QStringList blacklist;
static void checkFactories()
{
QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
- blacklist = settings.value("Decoder/disabled_plugins").toStringList ();
+
if (! factories)
{
files.clear();
@@ -87,21 +86,22 @@ static void checkFactories()
files << pluginsDir.absoluteFilePath(fileName);
}
}
- //remove physically deleted plugins from blacklist
+ //remove physically deleted plugins from disabled list
QStringList names;
foreach (QString filePath, files)
{
names.append(filePath.section('/',-1));
}
int i = 0;
- while (i < blacklist.size())
+ QStringList disabledList = settings.value("Decoder/disabled_plugins").toStringList ();
+ while (i < disabledList.size())
{
- if (!names.contains(blacklist.at(i)))
- blacklist.removeAt(i);
+ if (!names.contains(disabledList.at(i)))
+ disabledList.removeAt(i);
else
i++;
}
- settings.setValue("Decoder/disabled_plugins",blacklist);
+ settings.setValue("Decoder/disabled_plugins",disabledList);
}
}
@@ -130,10 +130,10 @@ bool Decoder::supports(const QString &source)
{
checkFactories();
- for (int i=0; i<factories->size(); ++i)
+ DecoderFactory *fact;
+ foreach(fact, *factories)
{
- if (factories->at(i)->supports(source) &&
- !blacklist.contains(files.at(i).section('/',-1)))
+ if (fact->supports(source) && isEnabled(fact))
{
return TRUE;
}
@@ -177,13 +177,12 @@ Decoder *Decoder::create(QObject *parent, const QString &source,
DecoderFactory *Decoder::findByPath(const QString& source)
{
checkFactories();
-
- for (int i=0; i<factories->size(); ++i)
+ DecoderFactory *fact;
+ foreach(fact, *factories)
{
- if (factories->at(i)->supports(source) &&
- !blacklist.contains(files.at(i).section('/',-1)))
+ if (fact->supports(source) && isEnabled(fact))
{
- return factories->at(i);
+ return fact;
}
}
qDebug("Decoder: unable to find factory by path");
@@ -193,15 +192,16 @@ DecoderFactory *Decoder::findByPath(const QString& source)
DecoderFactory *Decoder::findByMime(const QString& type)
{
checkFactories();
- for (int i=0; i<factories->size(); ++i)
+ DecoderFactory *fact;
+ foreach(fact, *factories)
{
- if (!blacklist.contains(files.at(i).section('/',-1)))
+ if (isEnabled(fact))
{
- QStringList types = factories->at(i)->properties().contentType.split(";");
+ QStringList types = fact->properties().contentType.split(";");
for (int j=0; j<types.size(); ++j)
{
if (type == types[j] && !types[j].isEmpty())
- return factories->at(i);
+ return fact;
}
}
}
@@ -212,19 +212,49 @@ DecoderFactory *Decoder::findByMime(const QString& type)
DecoderFactory *Decoder::findByContent(QIODevice *input)
{
checkFactories();
-
- for (int i=0; i<factories->size(); ++i)
+ DecoderFactory *fact;
+ foreach(fact, *factories)
{
- if (factories->at(i)->canDecode(input) &&
- !blacklist.contains(files.at(i).section('/',-1)))
+ if (fact->canDecode(input) && isEnabled(fact))
{
- return factories->at(i);
+ return fact;
}
}
qDebug("Decoder: unable to find factory by content");
return 0;
}
+void Decoder::setEnabled(DecoderFactory* factory, bool enable)
+{
+ checkFactories();
+ if (!factories->contains(factory))
+ return;
+
+ QString name = files.at(factories->indexOf(factory)).section('/',-1);
+ QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
+ QStringList disabledList = settings.value("Decoder/disabled_plugins").toStringList();
+
+ if (enable)
+ disabledList.removeAll(name);
+ else
+ {
+ if (!disabledList.contains(name))
+ disabledList << name;
+ }
+ settings.setValue("Decoder/disabled_plugins", disabledList);
+}
+
+bool Decoder::isEnabled(DecoderFactory* factory)
+{
+ checkFactories();
+ if(!factories->contains(factory))
+ return FALSE;
+ QString name = files.at(factories->indexOf(factory)).section('/',-1);
+ QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
+ QStringList disabledList = settings.value("Decoder/disabled_plugins").toStringList();
+ return !disabledList.contains(name);
+}
+
FileTag *Decoder::createTag(const QString& source)
{
DecoderFactory *fact = Decoder::findByPath(source);
@@ -242,11 +272,10 @@ QString Decoder::filter()
checkFactories();
DecoderFactory *fact;
- for (int i = 0; i<factories->size(); ++i)
+ foreach(fact, *factories)
{
- if (!blacklist.contains(files.at(i).section('/',-1)))
+ if (isEnabled(fact))
{
- fact = (*factories)[i];
allflt +=fact->properties().filter.toLower() +" ";
flt += fact->properties().description + " (" + fact->properties().filter + ")";
flt += ";;";
@@ -266,7 +295,7 @@ QStringList Decoder::nameFilters()
QStringList filters;
for (int i=0; i<factories->size(); ++i)
{
- if (!blacklist.contains(files.at(i).section('/',-1)))
+ if (isEnabled(factories->at(i)))
filters << factories->at(i)->properties().filter.split(" ", QString::SkipEmptyParts);
}
return filters;
@@ -407,3 +436,4 @@ void Decoder::volume(int *l, int *r)
*r = m_volR;
mtx.unlock();
}
+
diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h
index 31d96cc6d..0522679ad 100644
--- a/src/qmmp/decoder.h
+++ b/src/qmmp/decoder.h
@@ -147,13 +147,12 @@ public:
m_useEQ = on;
};
void setVolume(int, int);
-
+
void volume(int*, int*);
// static methods
static QStringList all();
static bool supports(const QString &);
- //static void registerFactory(DecoderFactory *);
static Decoder *create(QObject *, const QString &, QIODevice *, Output *);
static DecoderFactory *findByPath(const QString&);
static DecoderFactory *findByMime(const QString&);
@@ -163,6 +162,8 @@ public:
static QStringList nameFilters();
static QList<DecoderFactory*> *decoderFactories();
static QStringList decoderFiles();
+ static void setEnabled(DecoderFactory* factory, bool enable = TRUE);
+ static bool isEnabled(DecoderFactory* factory);
signals:
void stateChanged(const DecoderState&);
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp
index 50136608a..1de77b9d7 100644
--- a/src/qmmp/output.cpp
+++ b/src/qmmp/output.cpp
@@ -67,16 +67,15 @@ Output *Output::create (QObject *parent)
qDebug("Output: unable to find output plugins");
return output;
}
- QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
- QString pluginFileName =
- settings.value("Output/plugin_file","libalsa.so").toString();
- int j = 0;
- for (int i = 0; i < factories->size(); ++i)
+ OutputFactory *fact = 0;
+ foreach(fact, *factories)
{
- if (files.at(i).section('/',-1) == pluginFileName)
- j = i;
+ if(isEnabled(fact))
+ break;
+ else
+ fact = factories->at(0);
}
- OutputFactory *fact = factories->at (j);
+ QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
bool useVolume = !settings.value("Volume/software_volume", FALSE).toBool();
if (fact)
{
@@ -107,6 +106,27 @@ QStringList Output::outputFiles()
return files;
}
+void Output::setEnabled(OutputFactory* factory)
+{
+ checkFactories();
+ if (!factories->contains(factory))
+ return;
+
+ QString name = files.at(factories->indexOf(factory)).section('/',-1);
+ QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
+ settings.setValue ("Output/plugin_file", name);
+}
+
+bool Output::isEnabled(OutputFactory* factory)
+{
+ checkFactories();
+ if(!factories->contains(factory))
+ return FALSE;
+ QString name = files.at(factories->indexOf(factory)).section('/',-1);
+ QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
+ return name == settings.value("Output/plugin_file", "libalsa.so").toString();
+}
+
Output::Output (QObject* parent) : QThread (parent), r (stackSize())
{
qRegisterMetaType<OutputState>("OutputState");
diff --git a/src/qmmp/output.h b/src/qmmp/output.h
index 1a8ec3bd9..f5ea1cf50 100644
--- a/src/qmmp/output.h
+++ b/src/qmmp/output.h
@@ -179,6 +179,8 @@ public:
static Output *create(QObject *);
static QList<OutputFactory*> *outputFactories();
static QStringList outputFiles();
+ static void setEnabled(OutputFactory* factory);
+ static bool isEnabled(OutputFactory* factory);
public slots:
void checkVolume();
diff --git a/src/ui/configdialog.cpp b/src/ui/configdialog.cpp
index 808c1ac94..2614fe025 100644
--- a/src/ui/configdialog.cpp
+++ b/src/ui/configdialog.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2007-2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -49,15 +49,22 @@ ConfigDialog::ConfigDialog ( QWidget *parent )
ui.setupUi ( this );
setAttribute(Qt::WA_QuitOnClose, FALSE);
setAttribute(Qt::WA_DeleteOnClose, FALSE);
- connect ( ui. contentsWidget,
- SIGNAL ( currentItemChanged ( QListWidgetItem *, QListWidgetItem * ) ),
- this, SLOT ( changePage ( QListWidgetItem *, QListWidgetItem* ) ) );
- connect ( ui.mainFontButton, SIGNAL ( clicked() ), SLOT ( setMainFont() ) );
- connect ( ui.plFontButton, SIGNAL ( clicked() ), SLOT ( setPlFont() ) );
- connect ( ui.preferencesButton, SIGNAL ( clicked() ), SLOT (showPluginSettings()));
- connect ( ui.informationButton, SIGNAL ( clicked() ), SLOT (showPluginInfo()));
- connect ( this, SIGNAL(accepted()),SLOT(saveSettings()));
- ui.listWidget->setIconSize ( QSize ( 69,29 ) );
+ ui.preferencesButton->setEnabled(FALSE);
+ ui.informationButton->setEnabled(FALSE);
+ connect (ui. contentsWidget,
+ SIGNAL (currentItemChanged (QListWidgetItem *, QListWidgetItem * )),
+ this, SLOT (changePage (QListWidgetItem *, QListWidgetItem* )));
+ connect (ui.mainFontButton, SIGNAL (clicked()), SLOT (setMainFont()));
+ connect (ui.plFontButton, SIGNAL (clicked()), SLOT (setPlFont()));
+ connect (ui.preferencesButton, SIGNAL(clicked()), SLOT (showPluginSettings()));
+ connect (ui.informationButton, SIGNAL(clicked()), SLOT (showPluginInfo()));
+ connect (this, SIGNAL(accepted()),SLOT(saveSettings()));
+ connect (ui.inputPluginTable, SIGNAL(cellPressed(int, int)), SLOT(updateButtons()));
+ connect (ui.outputPluginTable, SIGNAL(cellPressed(int, int)), SLOT(updateButtons()));
+ connect (ui.generalPluginTable, SIGNAL(cellPressed(int, int)), SLOT(updateButtons()));
+ connect (ui.effectPluginTable, SIGNAL(cellPressed(int, int)), SLOT(updateButtons()));
+ connect (ui.pluginsTab, SIGNAL(currentChanged(int)), SLOT(updateButtons()));
+ ui.listWidget->setIconSize (QSize (69,29));
m_skin = Skin::getPointer();
ui.fileDialogComboBox->insertItems(0,FileDialog::registeredFactories());
readSettings();
@@ -74,7 +81,7 @@ ConfigDialog::~ConfigDialog()
while (!m_outputPluginItems.isEmpty())
delete m_outputPluginItems.takeFirst();
while (!m_inputPluginItems.isEmpty())
- delete m_outputPluginItems.takeFirst();
+ delete m_inputPluginItems.takeFirst();
while (!m_visualPluginItems.isEmpty())
delete m_visualPluginItems.takeFirst();
while (!m_effectPluginItems.isEmpty())
@@ -83,11 +90,11 @@ ConfigDialog::~ConfigDialog()
void ConfigDialog::readSettings()
{
- QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
+ QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
ui.formatLineEdit->setText(
- settings.value ( "PlayList/title_format", "%p - %t").toString());
+ settings.value ("PlayList/title_format", "%p - %t").toString());
ui.metadataCheckBox->setChecked(
- settings.value ( "PlayList/load_metadata", TRUE).toBool());
+ settings.value ("PlayList/load_metadata", TRUE).toBool());
QString f_dialogName =
settings.value("FileDialog",QtFileDialogFactory::QtFileDialogFactoryName).toString();
@@ -116,11 +123,11 @@ void ConfigDialog::readSettings()
ui.softVolumeCheckBox->setChecked(settings.value("Volume/software_volume", FALSE).toBool());
}
-void ConfigDialog::changePage ( QListWidgetItem *current, QListWidgetItem *previous )
+void ConfigDialog::changePage (QListWidgetItem *current, QListWidgetItem *previous)
{
- if ( !current )
+ if (!current)
current = previous;
- ui.stackedWidget->setCurrentIndex ( ui.contentsWidget->row ( current ) );
+ ui.stackedWidget->setCurrentIndex (ui.contentsWidget->row (current));
}
void ConfigDialog::changeSkin()
@@ -133,8 +140,6 @@ void ConfigDialog::changeSkin()
void ConfigDialog::loadSkins()
{
m_skinList.clear();
- //findSkins(":/");
-
QFileInfo fileInfo (":/default");
QPixmap preview = Skin::getPixmap ("main", QDir (fileInfo.filePath()));
QListWidgetItem *item = new QListWidgetItem (fileInfo.fileName ());
@@ -184,16 +189,18 @@ void ConfigDialog::loadPluginsInfo()
ui.inputPluginTable->setRowCount ( decoders->count () );
for ( int i = 0; i < decoders->count (); ++i )
{
- InputPluginItem *item = new InputPluginItem(this,decoders->at(i),files.at(i));
+ InputPluginItem *item = new InputPluginItem(this, decoders->at(i));
+ m_inputPluginItems.append(item);
QCheckBox* checkBox = new QCheckBox ( ui.inputPluginTable );
- connect(checkBox, SIGNAL(toggled(bool)), item, SLOT(setSelected(bool)));
checkBox->setChecked(item->isSelected());
+ connect(checkBox, SIGNAL(toggled(bool)), item, SLOT(setSelected(bool)));
ui.inputPluginTable->setCellWidget ( i, 0, checkBox );
ui.inputPluginTable->setItem ( i,1,
- new QTableWidgetItem (item->factory()->properties().name) );
- ui.inputPluginTable->setItem ( i,2, new QTableWidgetItem (files.at (i)) );
+ new QTableWidgetItem (item->factory()->properties().name));
+ ui.inputPluginTable->setItem ( i,2, new QTableWidgetItem (files.at (i).section('/',-1)));
ui.inputPluginTable->item(i,1)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
ui.inputPluginTable->item(i,2)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ ui.inputPluginTable->item(i,2)->setToolTip(files.at (i));
}
ui.inputPluginTable->resizeColumnToContents ( 0 );
ui.inputPluginTable->resizeColumnToContents ( 1 );
@@ -212,17 +219,18 @@ void ConfigDialog::loadPluginsInfo()
for ( int i = 0; i < outputs->count (); ++i )
{
- OutputPluginItem *item = new OutputPluginItem(this,outputs->at(i),files.at(i));
+ OutputPluginItem *item = new OutputPluginItem(this,outputs->at(i));
m_outputPluginItems.append(item);
QRadioButton* button = new QRadioButton ( ui.outputPluginTable );
- connect(button, SIGNAL(pressed ()), item, SLOT(select()));
button->setChecked ( item->isSelected() );
+ connect(button, SIGNAL(pressed ()), item, SLOT(select()));
ui.outputPluginTable->setCellWidget ( i, 0, button );
ui.outputPluginTable->setItem (i,1,
new QTableWidgetItem (item->factory()->properties().name));
- ui.outputPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i)));
+ ui.outputPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i).section('/',-1)));
ui.outputPluginTable->item(i,1)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
ui.outputPluginTable->item(i,2)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ ui.outputPluginTable->item(i,2)->setToolTip(files.at (i));
}
ui.outputPluginTable->resizeColumnToContents ( 0 );
@@ -242,17 +250,18 @@ void ConfigDialog::loadPluginsInfo()
for ( int i = 0; i < visuals->count (); ++i )
{
- VisualPluginItem *item = new VisualPluginItem(this,visuals->at(i),files.at(i));
+ VisualPluginItem *item = new VisualPluginItem(this,visuals->at(i));
m_visualPluginItems.append(item);
QCheckBox* button = new QCheckBox (ui.visualPluginTable);
- connect(button, SIGNAL(clicked (bool)), item, SLOT(select(bool)));
button->setChecked (item->isSelected());
+ connect(button, SIGNAL(clicked (bool)), item, SLOT(select(bool)));
ui.visualPluginTable->setCellWidget ( i, 0, button );
ui.visualPluginTable->setItem (i,1,
- new QTableWidgetItem (item->factory()->properties().name));
- ui.visualPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i)));
+ new QTableWidgetItem (item->factory()->properties().name));
+ ui.visualPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i).section('/',-1)));
ui.visualPluginTable->item(i,1)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
ui.visualPluginTable->item(i,2)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ ui.visualPluginTable->item(i,2)->setToolTip(files.at (i));
}
ui.visualPluginTable->resizeColumnToContents ( 0 );
@@ -273,25 +282,26 @@ void ConfigDialog::loadPluginsInfo()
for ( int i = 0; i < effects->count (); ++i )
{
- EffectPluginItem *item = new EffectPluginItem(this,effects->at(i),files.at(i));
+ EffectPluginItem *item = new EffectPluginItem(this,effects->at(i));
m_effectPluginItems.append(item);
QCheckBox* button = new QCheckBox (ui.effectPluginTable);
- connect(button, SIGNAL(clicked (bool)), item, SLOT(select(bool)));
button->setChecked (item->isSelected());
+ connect(button, SIGNAL(clicked (bool)), item, SLOT(select(bool)));
ui.effectPluginTable->setCellWidget ( i, 0, button );
ui.effectPluginTable->setItem (i,1,
- new QTableWidgetItem (item->factory()->properties().name));
- ui.effectPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i)));
+ new QTableWidgetItem (item->factory()->properties().name));
+ ui.effectPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i).section('/',-1)));
ui.effectPluginTable->item(i,1)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
ui.effectPluginTable->item(i,2)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ ui.effectPluginTable->item(i,2)->setToolTip(files.at (i));
}
ui.effectPluginTable->resizeColumnToContents ( 0 );
ui.effectPluginTable->resizeColumnToContents ( 1 );
ui.effectPluginTable->resizeRowsToContents ();
- /*
- load general plugin information
+ /*
+ load general plugin information
*/
QList <GeneralFactory *> *generals = 0;
generals = General::generalFactories();
@@ -304,17 +314,18 @@ void ConfigDialog::loadPluginsInfo()
for ( int i = 0; i < generals->count (); ++i )
{
- GeneralPluginItem *item = new GeneralPluginItem(this,generals->at(i),files.at(i));
+ GeneralPluginItem *item = new GeneralPluginItem(this,generals->at(i));
m_generalPluginItems.append(item);
QCheckBox* button = new QCheckBox (ui.generalPluginTable);
- connect(button, SIGNAL(clicked (bool)), item, SLOT(select(bool)));
button->setChecked (item->isSelected());
+ connect(button, SIGNAL(clicked (bool)), item, SLOT(select(bool)));
ui.generalPluginTable->setCellWidget ( i, 0, button );
ui.generalPluginTable->setItem (i,1,
- new QTableWidgetItem (item->factory()->properties().name));
- ui.generalPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i)));
+ new QTableWidgetItem (item->factory()->properties().name));
+ ui.generalPluginTable->setItem (i,2, new QTableWidgetItem (files.at(i).section('/',-1)));
ui.generalPluginTable->item(i,1)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
ui.generalPluginTable->item(i,2)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ ui.generalPluginTable->item(i,2)->setToolTip(files.at (i));
}
ui.generalPluginTable->resizeColumnToContents ( 0 );
@@ -421,21 +432,18 @@ void ConfigDialog::showPluginInfo()
{
case 0:
{
- QList <DecoderFactory *> *decoders = 0;
- decoders = Decoder::decoderFactories();
int row = ui.inputPluginTable->currentRow ();
- if ( !decoders || row<0 )
+ if (m_inputPluginItems.isEmpty() || row < 0)
return;
-
- decoders->at ( row )->showAbout ( this );
+ m_inputPluginItems.at(row)->factory()->showAbout (this);
break;
}
case 1:
{
int row = ui.outputPluginTable->currentRow ();
- if ( m_outputPluginItems.isEmpty() || row < 0 )
+ if (m_outputPluginItems.isEmpty() || row < 0)
return;
- m_outputPluginItems.at(row)->factory()->showAbout ( this );
+ m_outputPluginItems.at(row)->factory()->showAbout (this);
break;
}
case 2:
@@ -443,7 +451,7 @@ void ConfigDialog::showPluginInfo()
int row = ui.visualPluginTable->currentRow ();
if ( m_visualPluginItems.isEmpty() || row < 0 )
return;
- m_visualPluginItems.at(row)->factory()->showAbout ( this );
+ m_visualPluginItems.at(row)->factory()->showAbout (this);
break;
}
case 3:
@@ -451,7 +459,7 @@ void ConfigDialog::showPluginInfo()
int row = ui.effectPluginTable->currentRow ();
if ( m_effectPluginItems.isEmpty() || row < 0 )
return;
- m_effectPluginItems.at(row)->factory()->showAbout ( this );
+ m_effectPluginItems.at(row)->factory()->showAbout (this);
break;
}
case 4:
@@ -459,7 +467,7 @@ void ConfigDialog::showPluginInfo()
int row = ui.generalPluginTable->currentRow ();
if ( m_generalPluginItems.isEmpty() || row < 0 )
return;
- m_generalPluginItems.at(row)->factory()->showAbout ( this );
+ m_generalPluginItems.at(row)->factory()->showAbout (this);
break;
}
}
@@ -507,3 +515,64 @@ void ConfigDialog::saveSettings()
settings.setValue ("Volume/software_volume", ui.softVolumeCheckBox->isChecked());
}
+void ConfigDialog::updateButtons()
+{
+
+ bool preferences = FALSE;
+ bool information = FALSE;
+ switch ( ( int ) ui.pluginsTab -> currentIndex () )
+ {
+ case 0:
+ {
+ int row = ui.inputPluginTable->currentRow ();
+ if (m_inputPluginItems.isEmpty() || row < 0)
+ break;
+ DecoderFactory *factory = m_inputPluginItems.at(row)->factory();
+ information = factory->properties().hasAbout;
+ preferences = factory->properties().hasSettings;
+ break;
+ }
+ case 1:
+ {
+ int row = ui.outputPluginTable->currentRow ();
+ if (m_outputPluginItems.isEmpty() || row < 0 )
+ break;
+ OutputFactory *factory = m_outputPluginItems.at(row)->factory();
+ information = factory->properties().hasAbout;
+ preferences = factory->properties().hasSettings;
+ break;
+ }
+ case 2:
+ {
+ int row = ui.visualPluginTable->currentRow ();
+ if (m_visualPluginItems.isEmpty() || row < 0 )
+ break;
+ VisualFactory *factory = m_visualPluginItems.at(row)->factory();
+ information = factory->properties().hasAbout;
+ preferences = factory->properties().hasSettings;
+ break;
+ }
+ case 3:
+ {
+ int row = ui.effectPluginTable->currentRow ();
+ if ( m_effectPluginItems.isEmpty() || row < 0 )
+ break;
+ EffectFactory *factory = m_effectPluginItems.at(row)->factory();
+ information = factory->properties().hasAbout;
+ preferences = factory->properties().hasSettings;
+ break;
+ }
+ case 4:
+ {
+ int row = ui.generalPluginTable->currentRow ();
+ if ( m_generalPluginItems.isEmpty() || row < 0 )
+ break;
+ GeneralFactory *factory = m_generalPluginItems.at(row)->factory();
+ information = factory->properties().hasAbout;
+ preferences = factory->properties().hasSettings;
+ break;
+ }
+ }
+ ui.preferencesButton->setEnabled(preferences);
+ ui.informationButton->setEnabled(information);
+}
diff --git a/src/ui/configdialog.h b/src/ui/configdialog.h
index 7b9b1fab2..968eea48d 100644
--- a/src/ui/configdialog.h
+++ b/src/ui/configdialog.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2007-2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -53,8 +53,9 @@ private slots:
void setMainFont();
void showPluginSettings();
void showPluginInfo();
- void addTitleString( QAction * );
+ void addTitleString(QAction *);
void saveSettings();
+ void updateButtons();
private:
void readSettings();
diff --git a/src/ui/pluginitem.cpp b/src/ui/pluginitem.cpp
index 2ccd8e41d..a8666a7c8 100644
--- a/src/ui/pluginitem.cpp
+++ b/src/ui/pluginitem.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2007-2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -33,11 +33,9 @@
#include "pluginitem.h"
/*Input*/
-InputPluginItem::InputPluginItem(QObject *parent, DecoderFactory *fact,
- const QString &filePath)
+InputPluginItem::InputPluginItem(QObject *parent, DecoderFactory *fact)
: QObject(parent)
{
- m_fileName = filePath.section('/',-1);
m_factory = fact;
}
@@ -46,9 +44,7 @@ InputPluginItem::~InputPluginItem()
bool InputPluginItem::isSelected()
{
- QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
- QStringList blacklist = settings.value("Decoder/disabled_plugins").toStringList();
- return !blacklist.contains(m_fileName);
+ return Decoder::isEnabled(m_factory);
}
DecoderFactory* InputPluginItem::factory()
@@ -58,20 +54,12 @@ DecoderFactory* InputPluginItem::factory()
void InputPluginItem::setSelected(bool select)
{
- QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
- QStringList blacklist = settings.value("Decoder/disabled_plugins").toStringList();
- if (select)
- blacklist.removeAll (m_fileName);
- else
- blacklist.append (m_fileName);
- settings.setValue("Decoder/disabled_plugins", blacklist);
+ Decoder::setEnabled(m_factory, select);
}
/*Output*/
-OutputPluginItem::OutputPluginItem(QObject *parent, OutputFactory *fact,
- const QString &filePath): QObject(parent)
+OutputPluginItem::OutputPluginItem(QObject *parent, OutputFactory *fact): QObject(parent)
{
- m_fileName = filePath.section('/',-1);
m_factory = fact;
}
@@ -81,14 +69,12 @@ OutputPluginItem::~OutputPluginItem()
void OutputPluginItem::select()
{
- QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
- settings.setValue("Output/plugin_file", m_fileName);
+ Output::setEnabled(m_factory);
}
bool OutputPluginItem::isSelected()
{
- QSettings settings (QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat);
- return m_fileName == settings.value("Output/plugin_file","libalsa.so").toString();
+ return Output::isEnabled(m_factory);
}
OutputFactory *OutputPluginItem::factory()
@@ -97,10 +83,8 @@ OutputFactory *OutputPluginItem::factory()
}
/*Visual*/
-VisualPluginItem::VisualPluginItem(QObject *parent, VisualFactory *fact,
- const QString &filePath): QObject(parent)
+VisualPluginItem::VisualPluginItem(QObject *parent, VisualFactory *fact): QObject(parent)
{
- m_fileName = filePath.section('/',-1);
m_factory = fact;
}
@@ -127,10 +111,8 @@ VisualFactory *VisualPluginItem::factory()
}
/*Effect*/
-EffectPluginItem::EffectPluginItem(QObject *parent, EffectFactory *fact,
- const QString &filePath): QObject(parent)
+EffectPluginItem::EffectPluginItem(QObject *parent, EffectFactory *fact): QObject(parent)
{
- m_fileName = filePath.section('/',-1);
m_factory = fact;
}
@@ -154,14 +136,11 @@ EffectFactory *EffectPluginItem::factory()
}
/*General*/
-GeneralPluginItem::GeneralPluginItem(QObject *parent, GeneralFactory *fact,
- const QString &filePath): QObject(parent)
+GeneralPluginItem::GeneralPluginItem(QObject *parent, GeneralFactory *fact): QObject(parent)
{
- m_fileName = filePath.section('/',-1);
m_factory = fact;
}
-
GeneralPluginItem::~GeneralPluginItem()
{}
diff --git a/src/ui/pluginitem.h b/src/ui/pluginitem.h
index 8b3dc3b73..1238ce18c 100644
--- a/src/ui/pluginitem.h
+++ b/src/ui/pluginitem.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2007-2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -36,7 +36,7 @@ class InputPluginItem : public QObject
{
Q_OBJECT
public:
- InputPluginItem(QObject *parent, DecoderFactory *fact, const QString &filePath);
+ InputPluginItem(QObject *parent, DecoderFactory *fact);
~InputPluginItem();
@@ -47,7 +47,6 @@ public slots:
void setSelected(bool);
private:
- QString m_fileName;
DecoderFactory *m_factory;
};
@@ -56,7 +55,7 @@ class OutputPluginItem : public QObject
{
Q_OBJECT
public:
- OutputPluginItem(QObject *parent, OutputFactory *fact, const QString &filePath);
+ OutputPluginItem(QObject *parent, OutputFactory *fact);
~OutputPluginItem();
@@ -67,7 +66,6 @@ public slots:
void select();
private:
- QString m_fileName;
OutputFactory *m_factory;
};
@@ -76,7 +74,7 @@ class VisualPluginItem : public QObject
{
Q_OBJECT
public:
- VisualPluginItem(QObject *parent, VisualFactory *fact, const QString &filePath);
+ VisualPluginItem(QObject *parent, VisualFactory *fact);
~VisualPluginItem();
@@ -87,7 +85,6 @@ public slots:
void select(bool);
private:
- QString m_fileName;
VisualFactory *m_factory;
};
@@ -95,7 +92,7 @@ class EffectPluginItem : public QObject
{
Q_OBJECT
public:
- EffectPluginItem(QObject *parent, EffectFactory *fact, const QString &filePath);
+ EffectPluginItem(QObject *parent, EffectFactory *fact);
~EffectPluginItem();
@@ -106,7 +103,6 @@ public slots:
void select(bool);
private:
- QString m_fileName;
EffectFactory *m_factory;
};
@@ -114,7 +110,7 @@ class GeneralPluginItem : public QObject
{
Q_OBJECT
public:
- GeneralPluginItem(QObject *parent, GeneralFactory *fact, const QString &filePath);
+ GeneralPluginItem(QObject *parent, GeneralFactory *fact);
~GeneralPluginItem();
@@ -125,7 +121,6 @@ public slots:
void select(bool);
private:
- QString m_fileName;
GeneralFactory *m_factory;
};
diff --git a/src/ui/visualmenu.cpp b/src/ui/visualmenu.cpp
index 2b0ad6797..f41f5bbec 100644
--- a/src/ui/visualmenu.cpp
+++ b/src/ui/visualmenu.cpp
@@ -35,7 +35,7 @@ VisualMenu::VisualMenu(QWidget *parent)
QAction *act = this->addAction(factory->properties().name);
act->setCheckable (TRUE);
act->setChecked (Visual::isEnabled(factory));
- VisualPluginItem *vi = new VisualPluginItem(this,factory, "");
+ VisualPluginItem *vi = new VisualPluginItem(this,factory);
connect(act, SIGNAL(toggled(bool)), vi, SLOT(select(bool)));
}
}