diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-02-10 15:46:28 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-02-10 15:46:28 +0000 |
| commit | a9fe5096a37a5f67ca017ea25481066544d5f749 (patch) | |
| tree | fef489008f7c9aa400ba9d2ae293899336f2d3e0 | |
| parent | 999b2065da19260e1f3e6644de9200101814e636 (diff) | |
| download | qmmp-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.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Output/jack/outputjackfactory.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/Visual/analyzer/visualanalyzerfactory.cpp | 2 | ||||
| -rw-r--r-- | src/qmmp/decoder.cpp | 86 | ||||
| -rw-r--r-- | src/qmmp/decoder.h | 5 | ||||
| -rw-r--r-- | src/qmmp/output.cpp | 36 | ||||
| -rw-r--r-- | src/qmmp/output.h | 2 | ||||
| -rw-r--r-- | src/ui/configdialog.cpp | 169 | ||||
| -rw-r--r-- | src/ui/configdialog.h | 5 | ||||
| -rw-r--r-- | src/ui/pluginitem.cpp | 41 | ||||
| -rw-r--r-- | src/ui/pluginitem.h | 17 | ||||
| -rw-r--r-- | src/ui/visualmenu.cpp | 2 |
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))); } } |
