aboutsummaryrefslogtreecommitdiff
path: root/lib/visual.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/visual.cpp')
-rw-r--r--lib/visual.cpp106
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);
+}