diff options
Diffstat (limited to 'lib/visual.cpp')
| -rw-r--r-- | lib/visual.cpp | 106 |
1 files changed, 102 insertions, 4 deletions
diff --git a/lib/visual.cpp b/lib/visual.cpp index 8c03bd65d..ce5e8a982 100644 --- a/lib/visual.cpp +++ b/lib/visual.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * + * Copyright (C) 2007 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -18,14 +18,63 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include <QtGui> +#include <QObject> +#include <QList> +#include <QApplication> + +#include "visualfactory.h" +#include "constants.h" +#include "output.h" + #include "visual.h" -Visual::Visual() -{} +static QList<VisualFactory*> *factories = 0; +static QStringList files; + +static void checkFactories() +{ + if (! factories) + { + files.clear(); + factories = new QList<VisualFactory *>; + + QDir pluginsDir (qApp->applicationDirPath()); + pluginsDir.cdUp(); + pluginsDir.cd("./"LIB_DIR"/qmmp/Visual"); + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) + { + QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = loader.instance(); + if (loader.isLoaded()) + { + qDebug("Visual: plugin loaded - %s", qPrintable(fileName)); + } + VisualFactory *factory = 0; + if (plugin) + factory = qobject_cast<VisualFactory *>(plugin); + + if (factory) + { + factories->append(factory); + files << pluginsDir.absoluteFilePath(fileName); + } + } + } +} + + +Visual::Visual(QWidget *parent) : QWidget(parent) +{ + setAttribute(Qt::WA_DeleteOnClose, TRUE); + setAttribute(Qt::WA_QuitOnClose, FALSE); +} Visual::~Visual() -{} +{ + qDebug("Visual::~Visual()"); +} Decoder *Visual::decoder() const { @@ -51,3 +100,52 @@ QMutex *Visual::mutex() { return &m_mutex; } + +QList<VisualFactory*> *Visual::visualFactories() +{ + checkFactories(); + return factories; +} + +QStringList Visual::visualFiles() +{ + checkFactories(); + return files; +} + +void Visual::setEnabled(VisualFactory* 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 visList = settings.value("Visualization/plugin_files").toStringList(); + + if(enable) + { + if (!visList.contains(name)) + visList << name; + } + else + visList.removeAll(name); + settings.setValue("Visualization/plugin_files", visList); +} + +bool Visual::isEnabled(VisualFactory* 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 visList = settings.value("Visualization/plugin_files").toStringList(); + return visList.contains(name); +} + +void Visual::closeEvent (QCloseEvent *event) +{ + m_output->removeVisual(this); + QWidget::closeEvent(event); +} |
