diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-12-06 18:20:45 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-12-06 18:20:45 +0000 |
| commit | 648d09c5cea5ad4c2e31d51ff804ec32b23ac458 (patch) | |
| tree | 4f6f236373690c7ad65720fbdf1bd8498ac99c81 /src/plugins/Effect/ladspa | |
| parent | 6c37e46ff15eab4ccd47b6162a3d350aa35b7b39 (diff) | |
| download | qmmp-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.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/effectladspafactory.h | 2 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/ladspaplugin.cpp | 57 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/ladspaplugin.h | 23 | ||||
| -rw-r--r-- | src/plugins/Effect/ladspa/settingsdialog.cpp | 35 |
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() |
