summaryrefslogtreecommitdiff
path: root/muse2/muse/plugin.cpp
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2011-04-01 05:05:34 +0000
committerTim E. Real <termtech@rogers.com>2011-04-01 05:05:34 +0000
commit0fcb500389e91c0692f2b5fa9c95684b3416e254 (patch)
tree0c6ffdf3a32cc75ec26f4dc5660a247afaceda11 /muse2/muse/plugin.cpp
parent1ba4f03ff7fea99fc7d215837f8a4f6d8f27c859 (diff)
Initial support for custom LADSPA DSSI GUIs, such as those generated by FLAM.
Diffstat (limited to 'muse2/muse/plugin.cpp')
-rw-r--r--muse2/muse/plugin.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp
index 428afd24..88f73784 100644
--- a/muse2/muse/plugin.cpp
+++ b/muse2/muse/plugin.cpp
@@ -11,6 +11,7 @@
#include <dlfcn.h>
#include <cmath>
#include <math.h>
+#include <sys/stat.h>
#include <QButtonGroup>
#include <QCheckBox>
@@ -1304,6 +1305,33 @@ bool Pipeline::isDssiPlugin(int idx) const
return false;
}
+/*
+//---------------------------------------------------------
+// dssi_ui_filename
+//---------------------------------------------------------
+
+QString dssi_ui_filename(int idx) const
+{
+ PluginI* p = (*this)[idx];
+ if(p)
+ return p->dssi_ui_filename();
+
+ return QString();
+}
+*/
+
+//---------------------------------------------------------
+// has_dssi_ui
+//---------------------------------------------------------
+
+bool Pipeline::has_dssi_ui(int idx) const
+{
+ PluginI* p = (*this)[idx];
+ if(p)
+ return !p->dssi_ui_filename().isEmpty();
+
+ return false;
+}
//---------------------------------------------------------
// showGui
//---------------------------------------------------------
@@ -1433,6 +1461,57 @@ void Pipeline::apply(int ports, unsigned long nframes, float** buffer1)
}
//---------------------------------------------------------
+// PluginIBase
+//---------------------------------------------------------
+
+QString PluginIBase::dssi_ui_filename() const
+{
+ //QString guiPath(info.path() + "/" + info.baseName());
+ //QString guiPath(synth->info.dirPath() + "/" + synth->info.baseName());
+ if(dirPath().isEmpty() || lib().isEmpty())
+ return QString();
+
+ QString guiPath(dirPath() + "/" + lib());
+
+ //fprintf(stderr, "PluginIBase::dssi_ui_filename :%s\n", guiPath.toLatin1().constData());
+
+ QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files);
+ if(!guiDir.exists())
+ return QString();
+
+ QStringList list = guiDir.entryList();
+
+ for(int i = 0; i < list.count(); ++i)
+ {
+ QFileInfo fi(guiPath + QString("/") + list[i]);
+ QString gui(fi.filePath());
+ if (gui.contains('_') == 0)
+ continue;
+ struct stat buf;
+
+ if(stat(gui.toLatin1().constData(), &buf))
+ {
+
+ //perror("stat failed");
+ //fprintf(stderr, "PluginIBase::dssi_ui_filename stat failed\n");
+ continue;
+ }
+
+ if (!((S_ISREG(buf.st_mode) || S_ISLNK(buf.st_mode)) &&
+ (buf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))))
+ {
+ //perror("stat failed");
+ //fprintf(stderr, "PluginIBase::dssi_ui_filename File stat mode is wrong\n");
+ continue;
+ }
+
+ return gui;
+ }
+
+ return QString();
+};
+
+//---------------------------------------------------------
// PluginI
//---------------------------------------------------------