@@ -20,7 +20,9 @@ | |||||
#include "CarlaStateUtils.hpp" | #include "CarlaStateUtils.hpp" | ||||
#include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
#include <QtCore/QDir> | |||||
#include <QtCore/QFile> | #include <QtCore/QFile> | ||||
#include <QtCore/QFileInfo> | |||||
#include <QtCore/QTextStream> | #include <QtCore/QTextStream> | ||||
CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
@@ -391,6 +393,40 @@ void doPluginRemove(CarlaEngineProtectedData* const kData, const bool unlock) | |||||
kData->nextAction.mutex.unlock(); | kData->nextAction.mutex.unlock(); | ||||
} | } | ||||
const char* findDSSIGUI(const char* const filename, const char* const label) | |||||
{ | |||||
QString guiFilename; | |||||
guiFilename.clear(); | |||||
QString pluginDir(filename); | |||||
pluginDir.resize(pluginDir.lastIndexOf(".")); | |||||
QString shortName = QFileInfo(pluginDir).baseName(); | |||||
QString checkLabel = QString(label); | |||||
QString checkSName = shortName; | |||||
if (! checkLabel.endsWith("_")) checkLabel += "_"; | |||||
if (! checkSName.endsWith("_")) checkSName += "_"; | |||||
QStringList guiFiles = QDir(pluginDir).entryList(); | |||||
foreach (const QString& gui, guiFiles) | |||||
{ | |||||
if (gui.startsWith(checkLabel) || gui.startsWith(checkSName)) | |||||
{ | |||||
QFileInfo finalname(pluginDir + QDir::separator() + gui); | |||||
guiFilename = finalname.absoluteFilePath(); | |||||
break; | |||||
} | |||||
} | |||||
if (guiFilename.isEmpty()) | |||||
return nullptr; | |||||
return carla_strdup(guiFilename.toUtf8().constData()); | |||||
} | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Static values and calls | // Static values and calls | ||||
@@ -993,8 +1029,13 @@ bool CarlaEngine::loadProject(const char* const filename) | |||||
{ | { | ||||
const SaveState& saveState = getSaveStateDictFromXML(node); | const SaveState& saveState = getSaveStateDictFromXML(node); | ||||
const void* extraStuff = nullptr; | |||||
if (std::strcmp(saveState.type, "DSSI") == 0) | |||||
extraStuff = findDSSIGUI(saveState.binary, saveState.label); | |||||
// TODO - proper find&load plugins | // TODO - proper find&load plugins | ||||
if (addPlugin(getPluginTypeFromString(saveState.type), saveState.binary, saveState.name, saveState.label, nullptr)) | |||||
if (addPlugin(getPluginTypeFromString(saveState.type), saveState.binary, saveState.name, saveState.label, extraStuff)) | |||||
{ | { | ||||
if (CarlaPlugin* plugin = getPlugin(kData->curPluginCount-1)) | if (CarlaPlugin* plugin = getPlugin(kData->curPluginCount-1)) | ||||
plugin->loadSaveState(saveState); | plugin->loadSaveState(saveState); | ||||
@@ -597,7 +597,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||||
// Part 3 - set midi program | // Part 3 - set midi program | ||||
if (saveState.currentMidiBank >= 0 && saveState.currentMidiProgram) | if (saveState.currentMidiBank >= 0 && saveState.currentMidiProgram) | ||||
setMidiProgramById(saveState.currentMidiBank, currentMidiProgram(), true, true, true); | |||||
setMidiProgramById(saveState.currentMidiBank, saveState.currentMidiProgram, true, true, true); | |||||
// --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||
// Part 4a - get plugin parameter symbols | // Part 4a - get plugin parameter symbols | ||||
@@ -1508,17 +1508,22 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url) | |||||
osc_send_sample_rate(&kData->osc.data, kData->engine->getSampleRate()); | osc_send_sample_rate(&kData->osc.data, kData->engine->getSampleRate()); | ||||
#if 0 | |||||
for (size_t i=0; i < kData->custom.count(); i++) | |||||
for (size_t i=0, count=kData->custom.count(); i < count; i++) | |||||
{ | { | ||||
// TODO | |||||
//if (m_type == PLUGIN_LV2) | |||||
//osc_send_lv2_transfer_event(&osc.data, getCustomDataTypeString(custom[i].type), /*custom[i].key,*/ custom[i].value); | |||||
//else | |||||
if (custom[i].type == CUSTOM_DATA_STRING) | |||||
osc_send_configure(&osc.data, custom[i].key, custom[i].value); | |||||
} | |||||
CustomData* const cData(kData->custom.getAt(i)); | |||||
assert(cData->type != nullptr); | |||||
assert(cData->key != nullptr); | |||||
assert(cData->value != nullptr); | |||||
#ifdef WANT_LV2 | |||||
if (type() == PLUGIN_LV2) | |||||
osc_send_lv2_transfer_event(&kData->osc.data, 0, cData->type, cData->value); | |||||
else | |||||
#endif | #endif | ||||
if (std::strcmp(cData->type, CUSTOM_DATA_STRING) == 0) | |||||
osc_send_configure(&kData->osc.data, cData->key, cData->value); | |||||
} | |||||
if (kData->prog.current >= 0) | if (kData->prog.current >= 0) | ||||
osc_send_program(&kData->osc.data, kData->prog.current); | osc_send_program(&kData->osc.data, kData->prog.current); | ||||
@@ -247,6 +247,7 @@ public: | |||||
void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) | void setCustomData(const char* const type, const char* const key, const char* const value, const bool sendGui) | ||||
{ | { | ||||
carla_debug("DssiPlugin::setCustomData(%s, %s, %s, %s)", type, key, value, bool2str(sendGui)); | |||||
CARLA_ASSERT(fDescriptor != nullptr); | CARLA_ASSERT(fDescriptor != nullptr); | ||||
CARLA_ASSERT(fHandle != nullptr); | CARLA_ASSERT(fHandle != nullptr); | ||||
CARLA_ASSERT(type != nullptr); | CARLA_ASSERT(type != nullptr); | ||||
@@ -101,39 +101,9 @@ void initSignalHandler() | |||||
extern CarlaBackend::CarlaEngine* carla_get_standalone_engine(); | extern CarlaBackend::CarlaEngine* carla_get_standalone_engine(); | ||||
const char* findDSSIGUI(const char* const filename, const char* const label) | |||||
{ | |||||
QString guiFilename; | |||||
guiFilename.clear(); | |||||
QString pluginDir(filename); | |||||
pluginDir.resize(pluginDir.lastIndexOf(".")); | |||||
QString shortName = QFileInfo(pluginDir).baseName(); | |||||
QString checkLabel = QString(label); | |||||
QString checkSName = shortName; | |||||
if (! checkLabel.endsWith("_")) checkLabel += "_"; | |||||
if (! checkSName.endsWith("_")) checkSName += "_"; | |||||
QStringList guiFiles = QDir(pluginDir).entryList(); | |||||
foreach (const QString& gui, guiFiles) | |||||
{ | |||||
if (gui.startsWith(checkLabel) || gui.startsWith(checkSName)) | |||||
{ | |||||
QFileInfo finalname(pluginDir + QDir::separator() + gui); | |||||
guiFilename = finalname.absoluteFilePath(); | |||||
break; | |||||
} | |||||
} | |||||
if (guiFilename.isEmpty()) | |||||
return nullptr; | |||||
return carla_strdup(guiFilename.toUtf8().constData()); | |||||
} | |||||
CARLA_BACKEND_START_NAMESPACE | |||||
extern const char* findDSSIGUI(const char* const filename, const char* const label); | |||||
CARLA_BACKEND_END_NAMESPACE | |||||
CARLA_BRIDGE_START_NAMESPACE | CARLA_BRIDGE_START_NAMESPACE | ||||
@@ -537,7 +507,7 @@ int main(int argc, char* argv[]) | |||||
const void* extraStuff = nullptr; | const void* extraStuff = nullptr; | ||||
if (itype == CarlaBackend::PLUGIN_DSSI) | if (itype == CarlaBackend::PLUGIN_DSSI) | ||||
extraStuff = findDSSIGUI(filename, label); | |||||
extraStuff = CarlaBackend::findDSSIGUI(filename, label); | |||||
// Init plugin | // Init plugin | ||||
int ret; | int ret; | ||||