From 761ce77b7cc495e3662bb457791f7c5cb3b46392 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 30 Dec 2012 01:14:10 +0000 Subject: [PATCH] Carla: Implement findDSSIGUI for bridges --- c++/carla-bridge/Makefile | 3 +- c++/carla-bridge/carla_bridge_plugin.cpp | 9 ++--- c++/carla/Shared.cpp | 42 ++++++++++++++++++++++++ c++/carla/Shared.hpp | 8 +++++ src/claudia_launcher.py | 5 ++- 5 files changed, 61 insertions(+), 6 deletions(-) diff --git a/c++/carla-bridge/Makefile b/c++/carla-bridge/Makefile index 3741076..f3066b4 100644 --- a/c++/carla-bridge/Makefile +++ b/c++/carla-bridge/Makefile @@ -471,9 +471,10 @@ doxygen: carla_bridge.doxygen clean: rm -f *.o *.dll *.so *.exe + rm -f $(OBJS_NATIVE) rm -f $(OBJS_POSIX32) rm -f $(OBJS_POSIX64) rm -f $(OBJS_WIN32) rm -f $(OBJS_WIN64) rm -f carla-bridge-lv2-gtk2 carla-bridge-lv2-gtk3 carla-bridge-lv2-qt4 carla-bridge-lv2-qt5 carla-bridge-lv2-x11 carla-bridge-vst-x11 - rm -f carla-bridge-posix32 carla-bridge-posix64 + rm -f carla-bridge-native carla-bridge-posix32 carla-bridge-posix64 diff --git a/c++/carla-bridge/carla_bridge_plugin.cpp b/c++/carla-bridge/carla_bridge_plugin.cpp index ce22b48..91ea99b 100644 --- a/c++/carla-bridge/carla_bridge_plugin.cpp +++ b/c++/carla-bridge/carla_bridge_plugin.cpp @@ -1098,10 +1098,8 @@ int main(int argc, char* argv[]) void* extraStuff = nullptr; -#if 1 // TESTING - static const char* const dssiGUI = "/usr/lib/dssi/calf/calf_gtk"; - extraStuff = (void*)dssiGUI; -#endif + if (itype == CarlaBackend::PLUGIN_DSSI) + extraStuff = findDSSIGUI(filename, name, label); // Init plugin short id = engine->addPlugin(itype, filename, name, label, extraStuff); @@ -1132,6 +1130,9 @@ int main(int argc, char* argv[]) ret = 1; } + if (extraStuff && itype == CarlaBackend::PLUGIN_DSSI) + free((char*)extraStuff); + engine->aboutToClose(); engine->removeAllPlugins(); engine->close(); diff --git a/c++/carla/Shared.cpp b/c++/carla/Shared.cpp index 42bbaef..cf6baa5 100644 --- a/c++/carla/Shared.cpp +++ b/c++/carla/Shared.cpp @@ -17,6 +17,9 @@ #include "Shared.hpp" +#include +#include + //#define __STDC_LIMIT_MACROS //#include @@ -255,3 +258,42 @@ QString xmlSafeString(QString string, const bool toXml) else return string.replace("&", "&").replace("<","<").replace(">",">").replace("'","'").replace(""","\""); } + +// ------------------------------------------------------------------------------------------------------------ +// Plugin Query (helper functions) + +char* findDSSIGUI(const char* const filename, const char* const name, const char* const label) +{ + static QString guiFilename; + guiFilename.clear(); + + QString pluginDir(filename); + pluginDir.resize(pluginDir.lastIndexOf(".")); + + QString shortName = QFileInfo(pluginDir).baseName(); + + QString checkName = QString(name).replace(" ", "_"); + QString checkLabel = QString(label); + QString checkSName = shortName; + + if (! checkName.endsWith("_")) checkName += "_"; + if (! checkLabel.endsWith("_")) checkLabel += "_"; + if (! checkSName.endsWith("_")) checkSName += "_"; + + QStringList guiFiles = QDir(pluginDir).entryList(); + + foreach (const QString& gui, guiFiles) + { + if (gui.startsWith(checkName) || gui.startsWith(checkLabel) || gui.startsWith(checkSName)) + { + QFileInfo finalname(pluginDir + QDir::separator() + gui); + guiFilename = finalname.absoluteFilePath(); + break; + } + } + + if (guiFilename.isEmpty()) + return nullptr; + + return strdup(guiFilename.toUtf8().constData()); +} diff --git a/c++/carla/Shared.hpp b/c++/carla/Shared.hpp index 1db4bf1..0d13f23 100644 --- a/c++/carla/Shared.hpp +++ b/c++/carla/Shared.hpp @@ -148,4 +148,12 @@ const CarlaSaveState* getSaveStateDictFromXML(const QDomNode& xmlNode); QString xmlSafeString(QString string, const bool toXml); +// ------------------------------------------------------------------------------------------------------------ +// Plugin Query (helper functions) + +// needs free() afterwars if valid +char* findDSSIGUI(const char* const filename, const char* const name, const char* const label); + +// ------------------------------------------------------------------------------------------------------------ + #endif // SHARED_HPP diff --git a/src/claudia_launcher.py b/src/claudia_launcher.py index dc30c19..b492db6 100755 --- a/src/claudia_launcher.py +++ b/src/claudia_launcher.py @@ -213,6 +213,9 @@ class ClaudiaLauncher(QWidget, ui_claudia_launcher.Ui_ClaudiaLauncherW): if binary.startswith("startBristol"): self.createAppTemplate("bristol", app, binary) + elif binary.startswith("carla-standalone"): + self.createAppTemplate("carla-standalone", app, binary) + elif app == "Ardour 2.8": self.createAppTemplate("ardour2", app, binary) @@ -737,7 +740,7 @@ class ClaudiaLauncher(QWidget, ui_claudia_launcher.Ui_ClaudiaLauncherW): if not "bristol" in pkglist: self.tabWidget.setTabEnabled(iTabBristol, False) - if not ("carla-bridge-linux32" in pkglist or "carla-bridge-linux64" in pkglist): + if not ("carla" in pkglist or "cadence-git" in pkglist): self.tabWidget.setTabEnabled(iTabPlugin, False) last_pos = 0