diff options
author | Tim E. Real <termtech@rogers.com> | 2011-04-01 05:05:34 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2011-04-01 05:05:34 +0000 |
commit | 0fcb500389e91c0692f2b5fa9c95684b3416e254 (patch) | |
tree | 0c6ffdf3a32cc75ec26f4dc5660a247afaceda11 /muse2/muse/plugin.cpp | |
parent | 1ba4f03ff7fea99fc7d215837f8a4f6d8f27c859 (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.cpp | 79 |
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 //--------------------------------------------------------- |