aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Effect/ladspa
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-12-06 18:20:45 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-12-06 18:20:45 +0000
commit648d09c5cea5ad4c2e31d51ff804ec32b23ac458 (patch)
tree4f6f236373690c7ad65720fbdf1bd8498ac99c81 /src/plugins/Effect/ladspa
parent6c37e46ff15eab4ccd47b6162a3d350aa35b7b39 (diff)
downloadqmmp-648d09c5cea5ad4c2e31d51ff804ec32b23ac458.tar.gz
qmmp-648d09c5cea5ad4c2e31d51ff804ec32b23ac458.tar.bz2
qmmp-648d09c5cea5ad4c2e31d51ff804ec32b23ac458.zip
changed effect api
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1425 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Effect/ladspa')
-rw-r--r--src/plugins/Effect/ladspa/effectladspafactory.cpp4
-rw-r--r--src/plugins/Effect/ladspa/effectladspafactory.h2
-rw-r--r--src/plugins/Effect/ladspa/ladspaplugin.cpp57
-rw-r--r--src/plugins/Effect/ladspa/ladspaplugin.h23
-rw-r--r--src/plugins/Effect/ladspa/settingsdialog.cpp35
5 files changed, 71 insertions, 50 deletions
diff --git a/src/plugins/Effect/ladspa/effectladspafactory.cpp b/src/plugins/Effect/ladspa/effectladspafactory.cpp
index c2536969b..6c517408f 100644
--- a/src/plugins/Effect/ladspa/effectladspafactory.cpp
+++ b/src/plugins/Effect/ladspa/effectladspafactory.cpp
@@ -34,9 +34,9 @@ const EffectProperties EffectLADSPAFactory::properties() const
return properties;
}
-Effect *EffectLADSPAFactory::create(QObject *parent)
+Effect *EffectLADSPAFactory::create()
{
- return new LADSPAHost(parent);
+ return new LADSPAHost();
}
void EffectLADSPAFactory::showSettings(QWidget *parent)
diff --git a/src/plugins/Effect/ladspa/effectladspafactory.h b/src/plugins/Effect/ladspa/effectladspafactory.h
index 9a9c5f184..80714d5e4 100644
--- a/src/plugins/Effect/ladspa/effectladspafactory.h
+++ b/src/plugins/Effect/ladspa/effectladspafactory.h
@@ -34,7 +34,7 @@ Q_INTERFACES(EffectFactory);
public:
const EffectProperties properties() const;
- Effect *create(QObject *parent);
+ Effect *create();
void showSettings(QWidget *parent);
void showAbout(QWidget *parent);
QTranslator *createTranslator(QObject *parent);
diff --git a/src/plugins/Effect/ladspa/ladspaplugin.cpp b/src/plugins/Effect/ladspa/ladspaplugin.cpp
index 99392a5d0..bef363397 100644
--- a/src/plugins/Effect/ladspa/ladspaplugin.cpp
+++ b/src/plugins/Effect/ladspa/ladspaplugin.cpp
@@ -22,13 +22,10 @@
#include <QByteArray>
#include <QDir>
#include <QFileInfo>
-#include <QFormLayout>
-#include <QWidget>
#include <math.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <qmmp/qmmp.h>
-#include "ladspaslider.h"
#include "ladspaplugin.h"
#ifndef PATH_MAX
@@ -40,7 +37,7 @@
LADSPAHost *LADSPAHost::m_instance = 0;
-LADSPAHost::LADSPAHost(QObject* parent) : Effect(parent)
+LADSPAHost::LADSPAHost() : Effect()
{
m_instance = this;
findAllPlugins();
@@ -366,42 +363,34 @@ LADSPAEffect *LADSPAHost::addPlugin(LADSPAPlugin *plugin)
instance->stereo = plugin->stereo;
if (channels() && sampleRate())
bootPlugin(instance);
- draw_plugin(instance);
+ initialize(instance);
m_effects.append(instance);
return instance;
}
-void LADSPAHost::draw_plugin(LADSPAEffect *instance)
+void LADSPAHost::initialize(LADSPAEffect *instance)
{
const LADSPA_Descriptor *plugin = instance->descriptor;
const LADSPA_PortRangeHint *hints = plugin->PortRangeHints;
LADSPA_Data fact, min, max, step, start;
int dp;
- unsigned long k;
- bool no_ui = TRUE;
- QWidget *widget = new QWidget();
- QFormLayout *formLayout = new QFormLayout(widget);
- widget->setLayout(formLayout);
-
- for (k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k)
+ for (unsigned long k = 0; k < MAX_KNOBS && k < plugin->PortCount; ++k)
{
if (!LADSPA_IS_PORT_CONTROL(plugin->PortDescriptors[k]))
continue;
- no_ui = FALSE;
- //hbox = gtk_hbox_new(FALSE, 3);
- //widget = gtk_label_new(plugin->PortNames[k]);
- //gtk_container_add(GTK_CONTAINER(hbox), widget);
+
+ LADSPAControl *c = new LADSPAControl;
+ c->name = QString(plugin->PortNames[k]);
if (LADSPA_IS_HINT_TOGGLED(hints[k].HintDescriptor))
{
- /*widget = gtk_toggle_button_new_with_label("Press");
- g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggled), &(instance->knobs[k]));
- gtk_container_add(GTK_CONTAINER(hbox), widget);
- gtk_container_add(GTK_CONTAINER(vbox), hbox);*/
-
-
- //formLayout->addRow(plugin->PortNames[k], slider);
+ c->type = LADSPAControl::BUTTON;
+ c->min = 0;
+ c->max = 0;
+ c->step = 0;
+ c->value = &instance->knobs[k];
+ instance->controls << c;
continue;
}
@@ -488,19 +477,11 @@ void LADSPAHost::draw_plugin(LADSPAEffect *instance)
start = min * 0.5f + max * 0.5f;
instance->knobs[k] = start;
- LADSPASlider *slider = new LADSPASlider(min, max, step, &instance->knobs[k], this, widget);
-
- //slider->setEnabled(!LADSPA_IS_PORT_OUTPUT(plugin->PortDescriptors[k]));
-
- formLayout->addRow(plugin->PortNames[k], slider);
+ c->type = LADSPAControl::SLIDER;
+ c->min = min;
+ c->max = max;
+ c->step = step;
+ c->value = &instance->knobs[k];
+ instance->controls << c;
}
- widget->setLayout(formLayout);
- widget->setFixedSize(widget->sizeHint());
- instance->widget = widget;
-
- /*if (no_ui)
- {
- widget = gtk_label_new(_("This LADSPA plugin has no user controls"));
- gtk_container_add(GTK_CONTAINER(vbox), widget);
- }*/
}
diff --git a/src/plugins/Effect/ladspa/ladspaplugin.h b/src/plugins/Effect/ladspa/ladspaplugin.h
index c8d61acb7..fa9b0200e 100644
--- a/src/plugins/Effect/ladspa/ladspaplugin.h
+++ b/src/plugins/Effect/ladspa/ladspaplugin.h
@@ -45,6 +45,22 @@ public:
bool stereo;
};
+class LADSPAControl
+{
+public:
+ enum Type
+ {
+ BUTTON = 0,
+ SLIDER
+ };
+ double min;
+ double max;
+ double step;
+ LADSPA_Data *value;
+ bool type;
+ QString name;
+};
+
class LADSPAEffect
{
public:
@@ -55,15 +71,14 @@ public:
LADSPA_Handle handle; /* left or mono */
LADSPA_Handle handle2; /* right stereo */
LADSPA_Data knobs[MAX_KNOBS];
- QWidget *widget;
+ QList <LADSPAControl*> controls;
};
class LADSPAHost : public Effect
{
- Q_OBJECT
public:
- LADSPAHost(QObject *parent = 0);
+ LADSPAHost();
virtual ~LADSPAHost();
@@ -84,7 +99,7 @@ private:
void findPlugins(const QString &path);
LADSPAEffect *load(const QString &path, long num);
void portAssign(LADSPAEffect *instance);
- void draw_plugin(LADSPAEffect *instance);
+ void initialize(LADSPAEffect *instance);
QList <LADSPAPlugin *> m_plugins;
QList <LADSPAEffect *> m_effects;
diff --git a/src/plugins/Effect/ladspa/settingsdialog.cpp b/src/plugins/Effect/ladspa/settingsdialog.cpp
index 4d0c33a6f..e4d78a698 100644
--- a/src/plugins/Effect/ladspa/settingsdialog.cpp
+++ b/src/plugins/Effect/ladspa/settingsdialog.cpp
@@ -22,7 +22,11 @@
#include <QApplication>
#include <QStyle>
#include <QStandardItemModel>
+#include <QFormLayout>
+#include <QWidget>
+#include <QLabel>
#include <qmmp/qmmp.h>
+#include "ladspaslider.h"
#include "ladspaplugin.h"
#include "settingsdialog.h"
@@ -90,13 +94,34 @@ void SettingsDialog::on_configureButton_clicked()
{
LADSPAHost *l = LADSPAHost::instance();
QModelIndex index = ui.runningListWidget->currentIndex ();
- if(index.isValid())
+ if(!index.isValid())
+ return;
+
+ LADSPAEffect *effect = l->runningPlugins().at(index.row());
+ QDialog *dialog = new QDialog(this);
+ dialog->setWindowTitle(effect->descriptor->Name);
+ QFormLayout *formLayout = new QFormLayout(dialog);
+
+ foreach(LADSPAControl *c, effect->controls)
+ {
+ switch ((int) c->type)
+ {
+ case LADSPAControl::BUTTON:
+ break;
+ case LADSPAControl::SLIDER:
+ LADSPASlider *slider = new LADSPASlider(c->min, c->max, c->step, c->value, l, dialog);
+ formLayout->addRow(c->name, slider);
+ }
+ }
+ if (effect->controls.isEmpty())
{
- l->runningPlugins().at(index.row())->widget->setParent(this);
- l->runningPlugins().at(index.row())->widget->setWindowFlags(Qt::Window);
- l->runningPlugins().at(index.row())->widget->show();
- //updateRunningPlugins();
+ QLabel *label = new QLabel(tr("This LADSPA plugin has no user controls"), dialog);
+ formLayout->addRow(label);
}
+ dialog->setLayout(formLayout);
+ dialog->setFixedSize(dialog->sizeHint());
+ dialog->exec();
+ dialog->deleteLater();
}
void SettingsDialog::accept()