aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-09-13 16:13:18 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-09-13 16:13:18 +0000
commit3ffc8b54aff2cf907d4c35dc9a9972005db51f36 (patch)
treece78caa00820dd4b08c34f3fd54c40b79eaa9064 /src
parentd3fd87588a559dc23b29106cd8a7283ecc8b4507 (diff)
downloadqmmp-3ffc8b54aff2cf907d4c35dc9a9972005db51f36.tar.gz
qmmp-3ffc8b54aff2cf907d4c35dc9a9972005db51f36.tar.bz2
qmmp-3ffc8b54aff2cf907d4c35dc9a9972005db51f36.zip
improved visalization
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@551 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/plugins/Visual/analyzer/analyzer.cpp2
-rw-r--r--src/plugins/Visual/analyzer/settingsdialog.cpp1
-rw-r--r--src/plugins/Visual/analyzer/settingsdialog.ui8
-rw-r--r--src/plugins/Visual/analyzer/visualanalyzerfactory.cpp15
-rw-r--r--src/plugins/Visual/analyzer/visualanalyzerfactory.h4
-rw-r--r--src/qmmp/output.cpp10
-rw-r--r--src/qmmp/soundcore.cpp60
-rw-r--r--src/qmmp/soundcore.h25
-rw-r--r--src/qmmp/visual.cpp209
-rw-r--r--src/qmmp/visual.h29
-rw-r--r--src/qmmp/visualfactory.h5
-rw-r--r--src/qmmpui/generalhandler.cpp2
-rw-r--r--src/ui/aboutdialog.cpp2
-rw-r--r--src/ui/configdialog.cpp6
-rw-r--r--src/ui/mainvisual.cpp24
-rw-r--r--src/ui/mainwindow.cpp3
-rw-r--r--src/ui/pluginitem.cpp14
-rw-r--r--src/ui/shadedvisual.cpp35
-rw-r--r--src/ui/shadedvisual.h2
-rw-r--r--src/ui/titlebar.cpp23
-rw-r--r--src/ui/visualmenu.cpp6
-rw-r--r--src/ui/visualmenu.h7
22 files changed, 241 insertions, 251 deletions
diff --git a/src/plugins/Visual/analyzer/analyzer.cpp b/src/plugins/Visual/analyzer/analyzer.cpp
index c47ee71de..90c3c9ac6 100644
--- a/src/plugins/Visual/analyzer/analyzer.cpp
+++ b/src/plugins/Visual/analyzer/analyzer.cpp
@@ -126,7 +126,7 @@ void Analyzer::timeout()
{
VisualNode *node = 0;
- if ( /*playing &&*/ output())
+ //if ( /*playing &&*/ output())
{
//output()->mutex()->lock ();
//long olat = output()->latency();
diff --git a/src/plugins/Visual/analyzer/settingsdialog.cpp b/src/plugins/Visual/analyzer/settingsdialog.cpp
index badadc190..cfbd84594 100644
--- a/src/plugins/Visual/analyzer/settingsdialog.cpp
+++ b/src/plugins/Visual/analyzer/settingsdialog.cpp
@@ -27,7 +27,6 @@ SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
- setAttribute(Qt::WA_DeleteOnClose, TRUE);
QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat);
ui.analyzerComboBox->setCurrentIndex(settings.value("Analyzer/analyzer_falloff", 3).toInt()-1);
ui.peaksCheckBox->setChecked(settings.value("Analyzer/show_peaks", TRUE).toBool());
diff --git a/src/plugins/Visual/analyzer/settingsdialog.ui b/src/plugins/Visual/analyzer/settingsdialog.ui
index 4ddd391a3..b4f0abd35 100644
--- a/src/plugins/Visual/analyzer/settingsdialog.ui
+++ b/src/plugins/Visual/analyzer/settingsdialog.ui
@@ -280,7 +280,7 @@
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0" >
<size>
<width>111</width>
<height>20</height>
@@ -325,7 +325,7 @@
<property name="sizeType" >
<enum>QSizePolicy::Minimum</enum>
</property>
- <property name="sizeHint" >
+ <property name="sizeHint" stdset="0" >
<size>
<width>95</width>
<height>29</height>
@@ -390,8 +390,8 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel" >
- <x>220</x>
- <y>286</y>
+ <x>282</x>
+ <y>317</y>
</hint>
<hint type="destinationlabel" >
<x>276</x>
diff --git a/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp b/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp
index ffc2e84a1..e57341d62 100644
--- a/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp
+++ b/src/plugins/Visual/analyzer/visualanalyzerfactory.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -33,25 +33,24 @@ const VisualProperties VisualAnalyzerFactory::properties() const
return properties;
};
-Visual *VisualAnalyzerFactory::create(QWidget *parent)
+Visual *VisualAnalyzerFactory::create(QWidget *parent)
{
return new Analyzer(parent);
};
-void VisualAnalyzerFactory::showSettings(QWidget *parent)
+QDialog *VisualAnalyzerFactory::createConfigDialog(QWidget *parent)
{
- SettingsDialog *s = new SettingsDialog(parent);
- s -> show();
+ return new SettingsDialog(parent);
};
-void VisualAnalyzerFactory::showAbout(QWidget *parent)
+void VisualAnalyzerFactory::showAbout(QWidget *parent)
{
- QMessageBox::about (parent, tr("About Analyzer Visual Plugin"),
+ QMessageBox::about (parent, tr("About Analyzer Visual Plugin"),
tr("Qmmp Analyzer Visual Plugin")+"\n"+
tr("Writen by: Ilya Kotov <forkotov02@hotmail.ru>"));
};
-QTranslator *VisualAnalyzerFactory::createTranslator(QObject *parent)
+QTranslator *VisualAnalyzerFactory::createTranslator(QObject *parent)
{
QTranslator *translator = new QTranslator(parent);
QString locale = QLocale::system().name();
diff --git a/src/plugins/Visual/analyzer/visualanalyzerfactory.h b/src/plugins/Visual/analyzer/visualanalyzerfactory.h
index 6f8619125..b7b9a3832 100644
--- a/src/plugins/Visual/analyzer/visualanalyzerfactory.h
+++ b/src/plugins/Visual/analyzer/visualanalyzerfactory.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -37,7 +37,7 @@ Q_INTERFACES(VisualFactory);
public:
const VisualProperties properties() const;
Visual *create(QWidget *parent);
- void showSettings(QWidget *parent);
+ QDialog *createConfigDialog(QWidget *parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);
};
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp
index 11e4eb781..5126a9a48 100644
--- a/src/qmmp/output.cpp
+++ b/src/qmmp/output.cpp
@@ -45,7 +45,7 @@ Output::~Output()
visual->setOutput(0);
visual->close();
}
- foreach (Visual *visual , visuals) //external
+ /*foreach (Visual *visual , visuals) //external
{
visual->setOutput(0);
}*/
@@ -117,7 +117,7 @@ void Output::dispatchVisual ( Buffer *buffer, unsigned long written,
if (!buffer)
return;
Visual* visual = 0;
- foreach (visual , visuals) //external
+ /*foreach (visual , visuals) //external
{
visual->mutex()->lock ();
visual->add ( buffer, written, chan, prec );
@@ -128,6 +128,12 @@ void Output::dispatchVisual ( Buffer *buffer, unsigned long written,
visual->mutex()->lock ();
visual->add ( buffer, written, chan, prec );
visual->mutex()->unlock();
+ }*/
+ foreach (visual, *Visual::visuals())
+ {
+ visual->mutex()->lock ();
+ visual->add ( buffer, written, chan, prec );
+ visual->mutex()->unlock();
}
}
diff --git a/src/qmmp/soundcore.cpp b/src/qmmp/soundcore.cpp
index 76fc6db23..be7c124d9 100644
--- a/src/qmmp/soundcore.cpp
+++ b/src/qmmp/soundcore.cpp
@@ -56,7 +56,9 @@ SoundCore::SoundCore(QObject *parent)
SoundCore::~SoundCore()
-{}
+{
+ stop();
+}
bool SoundCore::play(const QString &source)
{
@@ -281,21 +283,13 @@ Qmmp::State SoundCore::state() const
void SoundCore::setState(Qmmp::State state)
{
- qDebug("new state = %d",state);
+ QStringList states;
+ states << "Playing" << "Paused" << "Stopped" << "Buffering" << "NormalError" << "FatalError";
+ qDebug("SoundCore: Current state: %s", qPrintable(states.at(state)));
m_state = state;
emit stateChanged (state);
}
-/*void SoundCore::addVisualization(Visual *visual)
-{
- if (m_visuals.indexOf (visual) == -1)
- {
- m_visuals.append(visual);
- if (m_output)
- m_output->addVisual(visual);
- }
-}*/
-
bool SoundCore::decode()
{
if (!m_input || !m_output)
@@ -330,48 +324,6 @@ bool SoundCore::decode()
return FALSE;
}
-/*void SoundCore::showVisualization(QWidget *parent)
-{
- if (!m_parentWidget)
- {
- m_parentWidget = parent;
- if (!m_output)
- return;
- VisualFactory* factory;
- foreach(factory, *Visual::visualFactories())
- {
- if (Visual::isEnabled(factory))
- m_output->addVisual(factory, m_parentWidget);
- }
- }
-}
-
-void SoundCore::addVisual(VisualFactory *factory, QWidget *parent)
-{
- if (m_output)
- m_output->addVisual(factory, parent);
- else
- Visual::setEnabled(factory, TRUE);
-}
-
-void SoundCore::removeVisual(VisualFactory *factory)
-{
- if (m_output)
- m_output->removeVisual(factory);
- else
- Visual::setEnabled(factory, FALSE);
-}
-
-void SoundCore::removeVisual(Visual *visual)
-{
- if (m_visuals.indexOf (visual) != -1)
- {
- m_visuals.removeAll(visual);
- if (m_output)
- m_output->removeVisual(visual);
- }
-}*/
-
SoundCore* SoundCore::instance()
{
return m_instance;
diff --git a/src/qmmp/soundcore.h b/src/qmmp/soundcore.h
index c3d52469f..604ae8c65 100644
--- a/src/qmmp/soundcore.h
+++ b/src/qmmp/soundcore.h
@@ -68,31 +68,6 @@ public:
void setEQEnabled(bool on);
/*!
- * adds visualization \p visual
- */
- //void addVisualization(Visual *visual);
-
- /*!
- * shows enabled visualization with the parent widget \p parent
- */
- //void showVisualization(QWidget *parent);
-
- /*!
- * adds visualization by factory \p factory
- */
- //void addVisual(VisualFactory *factory, QWidget *parent);
-
- /*!
- * removes visualization by factory \p factory
- */
- //void removeVisual(VisualFactory *factory);
-
- /*!
- * removes visualization \p visual
- */
- //void removeVisual(Visual *visual);
-
- /*!
* reads current volume.
* \p left contains volume of the left channel.
* \p right contains volume of the right channel.
diff --git a/src/qmmp/visual.cpp b/src/qmmp/visual.cpp
index c97154baf..453a7abd0 100644
--- a/src/qmmp/visual.cpp
+++ b/src/qmmp/visual.cpp
@@ -21,6 +21,7 @@
#include <QtGui>
#include <QObject>
#include <QList>
+#include <QMetaObject>
#include <QApplication>
#include "visualfactory.h"
@@ -30,43 +31,6 @@
#include "visual.h"
-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));
- else
- qWarning("Visual: %s", qPrintable(loader.errorString ()));
-
- VisualFactory *factory = 0;
- if (plugin)
- factory = qobject_cast<VisualFactory *>(plugin);
-
- if (factory)
- {
- factories->append(factory);
- files << pluginsDir.absoluteFilePath(fileName);
- qApp->installTranslator(factory->createTranslator(qApp));
- }
- }
- }
-}
-
-
Visual::Visual(QWidget *parent) : QWidget(parent)
{
setAttribute(Qt::WA_DeleteOnClose, TRUE);
@@ -80,50 +44,60 @@ Visual::~Visual()
qDebug("Visual::~Visual()");
}
-Decoder *Visual::decoder() const
-{
- return m_decoder;
-}
-
-void Visual::setDecoder(Decoder *decoder)
-{
- m_decoder = decoder;
-}
-
-Output *Visual::output() const
+QMutex *Visual::mutex()
{
- return m_output;
+ return &m_mutex;
}
-void Visual::setOutput(Output *output)
+void Visual::closeEvent (QCloseEvent *event)
{
- m_output = output;
+ m_visuals.removeAll(this);
+ if (event->spontaneous () && m_vis_map.key(this))
+ {
+ VisualFactory *factory = m_vis_map.key(this);
+ m_vis_map.remove(factory);
+ Visual::setEnabled(factory, FALSE);
+ emit closedByUser();
+ }
+ else
+ {
+ if (m_vis_map.key(this))
+ {
+ VisualFactory *factory = m_vis_map.key(this);
+ m_vis_map.remove(factory);
+ }
+ }
+ QWidget::closeEvent(event);
}
-QMutex *Visual::mutex()
-{
- return &m_mutex;
-}
+//static members
+QList<VisualFactory*> *Visual::m_factories = 0;
+QStringList Visual::m_files;
+QList<Visual*> Visual::m_visuals;
+QMap<VisualFactory*, Visual*> Visual::m_vis_map;
+QWidget *Visual::m_parentWidget = 0;
+QObject *Visual::m_receiver = 0;
+const char *Visual::m_member = 0;
-QList<VisualFactory*> *Visual::visualFactories()
+QList<VisualFactory*> *Visual::factories()
{
checkFactories();
- return factories;
+ return m_factories;
}
-QStringList Visual::visualFiles()
+QStringList Visual::files()
{
checkFactories();
- return files;
+ return m_files;
}
void Visual::setEnabled(VisualFactory* factory, bool enable)
{
checkFactories();
- if (!factories->contains(factory))
+ if (!m_factories->contains(factory))
return;
- QString name = files.at(factories->indexOf(factory)).section('/',-1);
+ QString name = m_files.at(m_factories->indexOf(factory)).section('/',-1);
QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat );
QStringList visList = settings.value("Visualization/plugin_files").toStringList();
@@ -131,25 +105,128 @@ void Visual::setEnabled(VisualFactory* factory, bool enable)
{
if (!visList.contains(name))
visList << name;
+ if (!m_vis_map.value(factory) && m_parentWidget)
+ {
+ Visual* visual = factory->create(m_parentWidget);
+ if (m_receiver && m_member)
+ connect(visual, SIGNAL(closedByUser()), m_receiver, m_member);
+ visual->setWindowFlags(Qt::Window);
+ m_vis_map.insert (factory, visual);
+ m_visuals.append(visual);
+ visual->show();
+ }
}
else
+ {
visList.removeAll(name);
+ if (m_vis_map.value(factory))
+ {
+ m_visuals.removeAll(m_vis_map.value(factory));
+ m_vis_map.value(factory)->close();
+ m_vis_map.remove (factory);
+ }
+ }
settings.setValue("Visualization/plugin_files", visList);
}
bool Visual::isEnabled(VisualFactory* factory)
{
checkFactories();
- if (!factories->contains(factory))
+ if (!m_factories->contains(factory))
return FALSE;
- QString name = files.at(factories->indexOf(factory)).section('/',-1);
+ QString name = m_files.at(m_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)
+void Visual::add(Visual *visual)
{
- m_output->processCloseEvent(this, event);
- QWidget::closeEvent(event);
+ if (!m_visuals.contains(visual))
+ m_visuals.append(visual);
+}
+
+void Visual::remove(Visual *visual)
+{
+ m_visuals.removeAll(visual);
}
+
+void Visual::initialize(QWidget *parent , QObject *receiver, const char *member)
+{
+ m_receiver = receiver;
+ m_member = member;
+ m_parentWidget = parent;
+ foreach(VisualFactory* factory, *factories())
+ {
+ if (isEnabled(factory))
+ {
+ Visual* visual = factory->create(parent);
+ if (m_receiver && m_member)
+ connect(visual, SIGNAL(closedByUser()), m_receiver, m_member);
+ visual->setWindowFlags(Qt::Window);
+ qDebug("Visual: added visualization: %s", qPrintable(factory->properties().name));
+ m_vis_map.insert (factory, visual);
+ m_visuals.append(visual);
+ visual->show();
+ }
+ }
+}
+
+QList<Visual*>* Visual::visuals()
+{
+ return &m_visuals;
+}
+
+void Visual::showSettings(VisualFactory *factory, QWidget *parent)
+{
+ QDialog *dialog = factory->createConfigDialog(parent);
+ if (!dialog)
+ return;
+
+ if (dialog->exec() == QDialog::Accepted && m_vis_map.contains(factory))
+ {
+ Visual *visual = m_vis_map.value(factory);
+ remove(visual);
+ visual->close();
+ visual = factory->create(m_parentWidget);
+ visual->setWindowFlags(Qt::Window);
+ m_vis_map[factory] = visual;
+ visual->show();
+ add(visual);
+ }
+ dialog->deleteLater();
+}
+
+void Visual::checkFactories()
+{
+ if (!m_factories)
+ {
+ m_files.clear();
+ m_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));
+ else
+ qWarning("Visual: %s", qPrintable(loader.errorString ()));
+
+ VisualFactory *factory = 0;
+ if (plugin)
+ factory = qobject_cast<VisualFactory *>(plugin);
+
+ if (factory)
+ {
+ m_factories->append(factory);
+ m_files << pluginsDir.absoluteFilePath(fileName);
+ qApp->installTranslator(factory->createTranslator(qApp));
+ }
+ }
+ }
+}
+
diff --git a/src/qmmp/visual.h b/src/qmmp/visual.h
index ef663bb37..e4159db46 100644
--- a/src/qmmp/visual.h
+++ b/src/qmmp/visual.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -44,18 +44,22 @@ public:
virtual void add(Buffer *, unsigned long, int, int) = 0;
virtual void clear() = 0;
-
- Decoder *decoder() const;
- void setDecoder(Decoder *decoder);
- Output *output() const;
- void setOutput(Output *output);
+ //virtual void stop() = 0;
QMutex *mutex();
//static methods
- static QList<VisualFactory*> *visualFactories();
- static QStringList visualFiles();
+ static QList<VisualFactory*> *factories();
+ static QStringList files();
static void setEnabled(VisualFactory* factory, bool enable = TRUE);
static bool isEnabled(VisualFactory* factory);
+ static void add(Visual*);
+ static void remove(Visual*);
+ static void initialize(QWidget *parent, QObject *receiver = 0, const char *member = 0);
+ static QList<Visual*>* visuals();
+ static void showSettings(VisualFactory *factory, QWidget *parent);
+
+signals:
+ void closedByUser();
protected:
virtual void closeEvent (QCloseEvent *);
@@ -64,6 +68,15 @@ private:
Decoder *m_decoder;
Output *m_output;
QMutex m_mutex;
+
+ static QList<VisualFactory*> *m_factories;
+ static QStringList m_files;
+ static void checkFactories();
+ static QList<Visual*> m_visuals;
+ static QMap<VisualFactory*, Visual*> m_vis_map; //internal visualization
+ static QWidget *m_parentWidget;
+ static QObject *m_receiver;
+ static const char *m_member;
};
#endif
diff --git a/src/qmmp/visualfactory.h b/src/qmmp/visualfactory.h
index 6862032bb..723c86970 100644
--- a/src/qmmp/visualfactory.h
+++ b/src/qmmp/visualfactory.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007 by Ilya Kotov *
+ * Copyright (C) 2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -24,6 +24,7 @@
class QObject;
class QWidget;
class QTranslator;
+class QDialog;
class Visual;
@@ -40,7 +41,7 @@ public:
virtual ~VisualFactory() {}
virtual const VisualProperties properties() const = 0;
virtual Visual *create(QWidget *parent) = 0;
- virtual void showSettings(QWidget *parent) = 0;
+ virtual QDialog *createConfigDialog(QWidget *parent) = 0;
virtual void showAbout(QWidget *parent) = 0;
virtual QTranslator *createTranslator(QObject *parent) = 0;
};
diff --git a/src/qmmpui/generalhandler.cpp b/src/qmmpui/generalhandler.cpp
index 02ca51e15..152a310ec 100644
--- a/src/qmmpui/generalhandler.cpp
+++ b/src/qmmpui/generalhandler.cpp
@@ -154,7 +154,7 @@ void GeneralHandler::showSettings(GeneralFactory* factory, QWidget* parentWidget
general->setSongInfo(m_songInfo);
}
}
- delete dialog;
+ dialog->deleteLater();
}
bool GeneralHandler::visibilityControl()
diff --git a/src/ui/aboutdialog.cpp b/src/ui/aboutdialog.cpp
index 198b5a47c..128f89bc0 100644
--- a/src/ui/aboutdialog.cpp
+++ b/src/ui/aboutdialog.cpp
@@ -100,7 +100,7 @@ QString AboutDialog::loadAbout()
text.append("</ul>");
text.append("<h5>"+tr("Visual plugins:")+"</h5>");
text.append("<ul type=\"square\">");
- foreach(VisualFactory *fact, *Visual::visualFactories())
+ foreach(VisualFactory *fact, *Visual::factories())
{
text.append("<li>");
text.append(fact->properties().name);
diff --git a/src/ui/configdialog.cpp b/src/ui/configdialog.cpp
index 185b4bfc0..a27a8cb31 100644
--- a/src/ui/configdialog.cpp
+++ b/src/ui/configdialog.cpp
@@ -258,8 +258,8 @@ void ConfigDialog::loadPluginsInfo()
load visual plugin information
*/
QList <VisualFactory *> *visuals = 0;
- visuals = Visual::visualFactories();
- files = Visual::visualFiles();
+ visuals = Visual::factories();
+ files = Visual::files();
ui.visualPluginTable->setColumnCount ( 3 );
ui.visualPluginTable->verticalHeader()->hide();
ui.visualPluginTable->setHorizontalHeaderLabels ( QStringList()
@@ -434,7 +434,7 @@ void ConfigDialog::showPluginSettings()
int row = ui.visualPluginTable->currentRow ();
if ( m_visualPluginItems.isEmpty() || row < 0 )
return;
- m_visualPluginItems.at(row)->factory()->showSettings ( this );
+ Visual::showSettings(m_visualPluginItems.at(row)->factory(), this);
break;
}
case 3:
diff --git a/src/ui/mainvisual.cpp b/src/ui/mainvisual.cpp
index 056bf79fd..0d491dab5 100644
--- a/src/ui/mainvisual.cpp
+++ b/src/ui/mainvisual.cpp
@@ -142,20 +142,18 @@ void MainVisual::timeout()
{
VisualNode *node = 0;
- if (output())
+ mutex()->lock ();
+ VisualNode *prev = 0;
+ while ((!m_nodes.isEmpty()))
{
- mutex()->lock ();
- VisualNode *prev = 0;
- while ((!m_nodes.isEmpty()))
- {
- node = m_nodes.takeFirst();
- if (prev)
- delete prev;
- prev = node;
- }
- mutex()->unlock();
- node = prev;
+ node = m_nodes.takeFirst();
+ if (prev)
+ delete prev;
+ prev = node;
}
+ mutex()->unlock();
+ node = prev;
+
if (m_vis && node)
{
m_vis->process (node);
@@ -166,7 +164,7 @@ void MainVisual::timeout()
update();
m_draw = TRUE;
}
- else if (m_draw && !(output() && output()->isRunning()))
+ else if (m_draw)
{
m_draw = FALSE;
m_pixmap = m_bg;
diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp
index d63237df7..fdf2e1bd7 100644
--- a/src/ui/mainwindow.cpp
+++ b/src/ui/mainwindow.cpp
@@ -26,6 +26,7 @@
#include <math.h>
#include <qmmp/soundcore.h>
+#include <qmmp/visual.h>
#include <qmmpui/generalhandler.h>
#include <qmmpui/general.h>
#include <qmmpui/playlistparser.h>
@@ -138,6 +139,8 @@ MainWindow::MainWindow(const QStringList& args, BuiltinCommandLineOption* option
SLOT(changeTitle(const QString&)));
connect(m_core, SIGNAL(bufferingProgress(int)), TextScroller::getPointer(),
SLOT(setProgress(int)));*/
+ Visual::initialize(this, m_visMenu, SLOT(updateActions()));
+ Visual::add(m_vis);
diff --git a/src/ui/pluginitem.cpp b/src/ui/pluginitem.cpp
index f606a7223..bbfdab306 100644
--- a/src/ui/pluginitem.cpp
+++ b/src/ui/pluginitem.cpp
@@ -80,7 +80,7 @@ bool OutputPluginItem::isSelected()
OutputFactory *OutputPluginItem::factory()
{
- return m_factory;
+ return m_factory;
}
/*Visual*/
@@ -95,10 +95,7 @@ VisualPluginItem::~VisualPluginItem()
void VisualPluginItem::select(bool on)
{
- /*if(on)
- SoundCore::instance()->addVisual(m_factory, 0);
- else
- SoundCore::instance()->removeVisual(m_factory);*/
+ Visual::setEnabled(m_factory, on);
}
bool VisualPluginItem::isSelected()
@@ -108,7 +105,7 @@ bool VisualPluginItem::isSelected()
VisualFactory *VisualPluginItem::factory()
{
- return m_factory;
+ return m_factory;
}
/*Effect*/
@@ -133,7 +130,7 @@ bool EffectPluginItem::isSelected()
EffectFactory *EffectPluginItem::factory()
{
- return m_factory;
+ return m_factory;
}
/*General*/
@@ -157,6 +154,5 @@ bool GeneralPluginItem::isSelected()
GeneralFactory *GeneralPluginItem::factory()
{
- return m_factory;
+ return m_factory;
}
-
diff --git a/src/ui/shadedvisual.cpp b/src/ui/shadedvisual.cpp
index 2dea3d419..2c9d0f3fa 100644
--- a/src/ui/shadedvisual.cpp
+++ b/src/ui/shadedvisual.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 *
@@ -99,30 +99,20 @@ void ShadedVisual::timeout()
VisualNode *node = 0;
m_pixmap.fill(m_skin->getVisColor(0));
- if ( /*playing &&*/ output())
+ mutex()->lock ();
+ VisualNode *prev = 0;
+ while ((!m_nodes.isEmpty()))
{
- //output()->mutex()->lock ();
- //long olat = output()->latency();
- //long owrt = output()->written();
- //output()->mutex()->unlock();
+ node = m_nodes.takeFirst();
+ /*if ( node->offset > synctime )
+ break;*/
- //long synctime = owrt < olat ? 0 : owrt - olat;
-
- mutex()->lock ();
- VisualNode *prev = 0;
- while ((!m_nodes.isEmpty()))
- {
- node = m_nodes.takeFirst();
- /*if ( node->offset > synctime )
- break;*/
-
- if (prev)
- delete prev;
- prev = node;
- }
- mutex()->unlock();
- node = prev;
+ if (prev)
+ delete prev;
+ prev = node;
}
+ mutex()->unlock();
+ node = prev;
if (!node)
return;
@@ -202,4 +192,3 @@ void ShadedVisual::updateSkin()
{
clear();
}
-
diff --git a/src/ui/shadedvisual.h b/src/ui/shadedvisual.h
index 0c1d6a37e..b1820a484 100644
--- a/src/ui/shadedvisual.h
+++ b/src/ui/shadedvisual.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 *
diff --git a/src/ui/titlebar.cpp b/src/ui/titlebar.cpp
index 400c9c2ec..d91bb3032 100644
--- a/src/ui/titlebar.cpp
+++ b/src/ui/titlebar.cpp
@@ -173,7 +173,7 @@ void TitleBar::shade()
connect (m_control, SIGNAL (stopClicked()), parent(), SLOT (stop()));
connect (m_control, SIGNAL (ejectClicked()), parent(), SLOT (addFile()));
m_visual = new ShadedVisual(this);
- //SoundCore::instance()->addVisualization(m_visual);
+ Visual::add(m_visual);
m_visual->show();
m_visual->move(79,5);
}
@@ -184,7 +184,7 @@ void TitleBar::shade()
m_shade2->deleteLater();
m_currentTime->deleteLater();
m_control->deleteLater();
- //SoundCore::instance()->removeVisual(m_visual);
+ Visual::remove(m_visual);
m_visual->deleteLater();
m_shade2 = 0;
m_currentTime = 0;
@@ -209,25 +209,6 @@ QString TitleBar::formatTime ( int sec )
return str_minutes + ":" + str_seconds;
}
-//void TitleBar::setInfo(const OutputState &st)
-//{
-/*if (!m_currentTime)
- return;*/
-/*switch ( ( int ) st.type() )
-{
-case OutputState::Info:
-{
- m_currentTime->display(formatTime(st.elapsedSeconds()));
- break;
-}
-case OutputState::Stopped:
-{
- m_currentTime->display("--:--");
- break;
-}
-}*/
-//}
-
void TitleBar::setTime(qint64 time)
{
if (!m_currentTime)
diff --git a/src/ui/visualmenu.cpp b/src/ui/visualmenu.cpp
index c0e0b2d2f..94a116057 100644
--- a/src/ui/visualmenu.cpp
+++ b/src/ui/visualmenu.cpp
@@ -30,7 +30,7 @@ VisualMenu::VisualMenu(QWidget *parent)
: QMenu(tr("Visualization"), parent)
{
VisualFactory *factory = 0;
- foreach(factory, *Visual::visualFactories())
+ foreach(factory, *Visual::factories())
{
QAction *act = this->addAction(factory->properties().name);
act->setCheckable (TRUE);
@@ -46,8 +46,8 @@ VisualMenu::~VisualMenu()
void VisualMenu::updateActions()
{
- for(int i = 0; i < Visual::visualFactories()->size(); ++i)
+ for(int i = 0; i < Visual::factories()->size(); ++i)
{
- actions()[i]->setChecked(Visual::isEnabled(Visual::visualFactories()->at(i)));
+ actions()[i]->setChecked(Visual::isEnabled(Visual::factories()->at(i)));
}
}
diff --git a/src/ui/visualmenu.h b/src/ui/visualmenu.h
index 9202a8a7d..a4833974d 100644
--- a/src/ui/visualmenu.h
+++ b/src/ui/visualmenu.h
@@ -23,17 +23,18 @@
#include <QMenu>
/**
- @author Ilya Kotov <forkotov02@hotmail.ru>
+ @author Ilya Kotov <forkotov02@hotmail.ru>
*/
class VisualMenu : public QMenu
{
-Q_OBJECT
+ Q_OBJECT
public:
VisualMenu(QWidget *parent = 0);
~VisualMenu();
-void updateActions();
+public slots:
+ void updateActions();
};