Browse Source

Now using juce for engine/plugin file loading (plus xml)

tags/1.9.4
falkTX 10 years ago
parent
commit
4ec007ee1d
10 changed files with 150 additions and 164 deletions
  1. +57
    -65
      source/backend/engine/CarlaEngine.cpp
  2. +9
    -6
      source/backend/engine/CarlaEngineJack.cpp
  3. +22
    -16
      source/backend/engine/CarlaEngineNative.cpp
  4. +4
    -4
      source/backend/engine/Makefile
  5. +34
    -29
      source/backend/plugin/CarlaPlugin.cpp
  6. +1
    -1
      source/backend/plugin/Makefile
  7. +1
    -3
      source/utils/CarlaMutex.hpp
  8. +1
    -3
      source/utils/CarlaRingBuffer.hpp
  9. +20
    -22
      source/utils/CarlaStateUtils.cpp
  10. +1
    -15
      source/utils/CarlaStateUtils.hpp

+ 57
- 65
source/backend/engine/CarlaEngine.cpp View File

@@ -34,12 +34,14 @@
#include "CarlaMIDI.h"

#include "jackbridge/JackBridge.hpp"
#include "juce_core.h"

#include <QtCore/QDir>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
#include <QtCore/QTextStream>
#include <QtXml/QDomNode>
using juce::File;
using juce::MemoryOutputStream;
using juce::ScopedPointer;
using juce::String;
using juce::XmlDocument;
using juce::XmlElement;

// -----------------------------------------------------------------------

@@ -1038,9 +1040,9 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, cons
}
}

QFile file(bridgeBinary.buffer());
File file(bridgeBinary.buffer());

if (! file.exists())
if (! file.existsAsFile())
bridgeBinary.clear();
}

@@ -1054,9 +1056,9 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, cons
else if (btype == BINARY_WIN32)
{
// fallback to dssi-vst
QFileInfo fileInfo(filename);
File file(filename);

CarlaString label2(fileInfo.fileName().toUtf8().constData());
CarlaString label2(file.getFullPathName().toRawUTF8());
label2.replace(' ', '*');

CarlaPlugin::Initializer init2 = {
@@ -1069,7 +1071,7 @@ bool CarlaEngine::addPlugin(const BinaryType btype, const PluginType ptype, cons
};

char* const oldVstPath(getenv("VST_PATH"));
carla_setenv("VST_PATH", fileInfo.absoluteDir().absolutePath().toUtf8().constData());
carla_setenv("VST_PATH", file.getParentDirectory().getFullPathName().toRawUTF8());

plugin = CarlaPlugin::newDSSI(init2);

@@ -1525,28 +1527,11 @@ bool CarlaEngine::loadFile(const char* const filename)
CARLA_SAFE_ASSERT_RETURN_ERR(filename != nullptr && filename[0] != '\0', "Invalid filename (err #1)");
carla_debug("CarlaEngine::loadFile(\"%s\")", filename);

QFileInfo fileInfo(filename);
File file(filename);
CARLA_SAFE_ASSERT_RETURN_ERR(file.existsAsFile(), "Requested file does not exist or is not a readable file");

if (! fileInfo.exists())
{
setLastError("File does not exist");
return false;
}

if (! fileInfo.isFile())
{
setLastError("Not a file");
return false;
}

if (! fileInfo.isReadable())
{
setLastError("File is not readable");
return false;
}

CarlaString baseName(fileInfo.baseName().toUtf8().constData());
CarlaString extension(fileInfo.suffix().toLower().toUtf8().constData());
CarlaString baseName(file.getFileName().toRawUTF8());
CarlaString extension(file.getFileExtension().toRawUTF8());
extension.toLower();

// -------------------------------------------------------------------
@@ -1656,32 +1641,35 @@ bool CarlaEngine::loadProject(const char* const filename)
CARLA_SAFE_ASSERT_RETURN_ERR(filename != nullptr && filename[0] != '\0', "Invalid filename (err #2)");
carla_debug("CarlaEngine::loadProject(\"%s\")", filename);

QFile file(filename);

if (! file.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
File file(filename);
CARLA_SAFE_ASSERT_RETURN_ERR(file.existsAsFile(), "Requested file does not exist or is not a readable file");

QDomDocument xml;
xml.setContent(file.readAll());
file.close();
XmlDocument xml(file);
ScopedPointer<XmlElement> xmlElement(xml.getDocumentElement(true));
CARLA_SAFE_ASSERT_RETURN_ERR(xmlElement != nullptr, "Failed to parse project file");

QDomNode xmlNode(xml.documentElement());
const String& xmlType(xmlElement->getTagName());
const bool isPreset(xmlType.equalsIgnoreCase("carla-preset"));

const bool isPreset(xmlNode.toElement().tagName().compare("carla-preset", Qt::CaseInsensitive) == 0);

if (xmlNode.toElement().tagName().compare("carla-project", Qt::CaseInsensitive) != 0 && ! isPreset)
if (! (xmlType.equalsIgnoreCase("carla-project") || isPreset))
{
setLastError("Not a valid Carla project or preset file");
return false;
}

// completely load file
xmlElement = xml.getDocumentElement(false);
CARLA_SAFE_ASSERT_RETURN_ERR(xmlElement != nullptr, "Failed to completely parse project file");

// handle plugins first
for (QDomNode node = xmlNode.firstChild(); ! node.isNull(); node = node.nextSibling())
for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement())
{
if (isPreset || node.toElement().tagName().compare("plugin", Qt::CaseInsensitive) == 0)
const String& tagName(elem->getTagName());

if (isPreset || tagName.equalsIgnoreCase("plugin"))
{
StateSave stateSave;
stateSave.fillFromXmlNode(isPreset ? xmlNode : node);
stateSave.fillFromXmlElement(isPreset ? xmlElement.get() : elem);

callback(ENGINE_CALLBACK_IDLE, 0, 0, 0, 0.0f, nullptr);

@@ -1725,30 +1713,34 @@ bool CarlaEngine::loadProject(const char* const filename)
return true;
}

// now connections
for (QDomNode node = xmlNode.firstChild(); ! node.isNull(); node = node.nextSibling())
// now handle connections
for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement())
{
if (node.toElement().tagName().compare("patchbay", Qt::CaseInsensitive) == 0)
const String& tagName(elem->getTagName());

if (tagName.equalsIgnoreCase("patchbay"))
{
CarlaString sourcePort, targetPort;

for (QDomNode patchNode = node.firstChild(); ! patchNode.isNull(); patchNode = patchNode.nextSibling())
for (XmlElement* patchElem = elem->getFirstChildElement(); patchElem != nullptr; patchElem = patchElem->getNextElement())
{
const String& patchTag(patchElem->getTagName());

sourcePort.clear();
targetPort.clear();

if (patchNode.toElement().tagName().compare("connection", Qt::CaseInsensitive) != 0)
if (! patchTag.equalsIgnoreCase("connection"))
continue;

for (QDomNode connNode = patchNode.firstChild(); ! connNode.isNull(); connNode = connNode.nextSibling())
for (XmlElement* connElem = patchElem->getFirstChildElement(); connElem != nullptr; connElem = connElem->getNextElement())
{
const QString tag(connNode.toElement().tagName());
const QString text(connNode.toElement().text().trimmed());
const String& tag(connElem->getTagName());
const String text(connElem->getAllSubText().trim());

if (tag.compare("source", Qt::CaseInsensitive) == 0)
sourcePort = text.toUtf8().constData();
else if (tag.compare("target", Qt::CaseInsensitive) == 0)
targetPort = text.toUtf8().constData();
if (tag.equalsIgnoreCase("source"))
sourcePort = text.toRawUTF8();
else if (tag.equalsIgnoreCase("target"))
targetPort = text.toRawUTF8();
}

if (sourcePort.isNotEmpty() && targetPort.isNotEmpty())
@@ -1767,12 +1759,7 @@ bool CarlaEngine::saveProject(const char* const filename)
CARLA_SAFE_ASSERT_RETURN_ERR(filename != nullptr && filename[0] != '\0', "Invalid filename (err #3)");
carla_debug("CarlaEngine::saveProject(\"%s\")", filename);

QFile file(filename);

if (! file.open(QIODevice::WriteOnly | QIODevice::Text))
return false;

QTextStream out(&file);
MemoryOutputStream out;
out << "<?xml version='1.0' encoding='UTF-8'?>\n";
out << "<!DOCTYPE CARLA-PROJECT>\n";
out << "<CARLA-PROJECT VERSION='2.0'>\n";
@@ -1842,8 +1829,13 @@ bool CarlaEngine::saveProject(const char* const filename)

out << "</CARLA-PROJECT>\n";

file.close();
return true;
File file(filename);

if (file.replaceWithData(out.getData(), out.getDataSize()))
return true;

setLastError("Failed to write file");
return false;
}

// -----------------------------------------------------------------------


+ 9
- 6
source/backend/engine/CarlaEngineJack.cpp View File

@@ -26,7 +26,7 @@
#include "jackbridge/JackBridge.hpp"
#include "jackey.h"

#include <QtCore/QStringList>
#include "juce_core.h"

#ifdef __SSE2_MATH__
# include <xmmintrin.h>
@@ -34,6 +34,9 @@

#define URI_CANVAS_ICON "http://kxstudio.sf.net/ns/canvas/icon"

using juce::String;
using juce::StringArray;

CARLA_BACKEND_START_NAMESPACE

#if 0
@@ -1862,11 +1865,11 @@ private:
{
CARLA_SAFE_ASSERT_RETURN(ourName != nullptr && ourName[0] != '\0',);

QStringList parsedGroups;
StringArray parsedGroups;

// add our client first
{
parsedGroups.append(QString(ourName));
parsedGroups.add(String(ourName));

GroupNameToId groupNameToId;
groupNameToId.setData(++fUsedGroups.lastId, ourName);
@@ -1899,9 +1902,9 @@ private:

CARLA_SAFE_ASSERT_CONTINUE(found);

QString qGroupName(groupName.buffer());
String jGroupName(groupName.buffer());

if (parsedGroups.contains(qGroupName))
if (parsedGroups.contains(jGroupName))
{
groupId = fUsedGroups.getGroupId(groupName);
CARLA_SAFE_ASSERT_CONTINUE(groupId > 0);
@@ -1909,7 +1912,7 @@ private:
else
{
groupId = ++fUsedGroups.lastId;
parsedGroups.append(qGroupName);
parsedGroups.add(jGroupName);

int pluginId = -1;
PatchbayIcon icon = (jackPortFlags & JackPortIsPhysical) ? PATCHBAY_ICON_HARDWARE : PATCHBAY_ICON_APPLICATION;


+ 22
- 16
source/backend/engine/CarlaEngineNative.cpp View File

@@ -34,8 +34,13 @@
#include "CarlaExternalUI.hpp"
#include "CarlaNative.hpp"

#include <QtCore/QTextStream>
#include <QtXml/QDomNode>
#include "juce_core.h"

using juce::MemoryOutputStream;
using juce::ScopedPointer;
using juce::String;
using juce::XmlDocument;
using juce::XmlElement;

CARLA_BACKEND_START_NAMESPACE

@@ -1288,8 +1293,7 @@ protected:

char* getState() const
{
QString string;
QTextStream out(&string);
MemoryOutputStream out;
out << "<?xml version='1.0' encoding='UTF-8'?>\n";
out << "<!DOCTYPE CARLA-PROJECT>\n";
out << "<CARLA-PROJECT VERSION='2.0'>\n";
@@ -1323,30 +1327,32 @@ protected:

out << "</CARLA-PROJECT>\n";

return strdup(string.toUtf8().constData());
return strdup(out.toString().toRawUTF8());
}

void setState(const char* const data)
{
QDomDocument xml;
xml.setContent(QString(data));
const String text(data);
XmlDocument xml(text);

QDomNode xmlNode(xml.documentElement());
ScopedPointer<XmlElement> xmlElement(xml.getDocumentElement(true));
CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr,);
CARLA_SAFE_ASSERT_RETURN(xmlElement->getTagName().equalsIgnoreCase("carla-project"),);

if (xmlNode.toElement().tagName().compare("carla-project", Qt::CaseInsensitive) != 0)
{
carla_stderr2("Not a valid Carla project");
return;
}
// completely load file
xmlElement = xml.getDocumentElement(false);
CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr,);

//bool pluginsAdded = false;

for (QDomNode node = xmlNode.firstChild(); ! node.isNull(); node = node.nextSibling())
for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement())
{
if (node.toElement().tagName().compare("plugin", Qt::CaseInsensitive) == 0)
const String& tagName(elem->getTagName());

if (tagName.equalsIgnoreCase("plugin"))
{
StateSave stateSave;
stateSave.fillFromXmlNode(node);
stateSave.fillFromXmlElement(elem);

CARLA_SAFE_ASSERT_CONTINUE(stateSave.type != nullptr);



+ 4
- 4
source/backend/engine/Makefile View File

@@ -60,7 +60,7 @@ debug:
# --------------------------------------------------------------

CarlaEngine.cpp.o: CarlaEngine.cpp $(CARLA_ENGINE_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) $(QTXML_FLAGS) -c -o $@
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

CarlaEngineInternal.cpp.o: CarlaEngineInternal.cpp $(CARLA_ENGINE_INTERNAL_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@
@@ -72,7 +72,7 @@ CarlaEngineThread.cpp.o: CarlaEngineThread.cpp $(CARLA_ENGINE_THREAD_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

CarlaEngineJack.cpp.o: CarlaEngineJack.cpp $(CARLA_ENGINE_JACK_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) -c -o $@
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

CarlaEngineRtAudio.cpp.o: CarlaEngineRtAudio.cpp $(CARLA_ENGINE_RTAUDIO_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(RTAUDIO_FLAGS) $(RTMIDI_FLAGS) -c -o $@
@@ -81,9 +81,9 @@ CarlaEngineJuce.cpp.o: CarlaEngineJuce.cpp $(CARLA_ENGINE_JUCE_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

CarlaEngineNative.cpp.o: CarlaEngineNative.cpp $(CARLA_ENGINE_NATIVE_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) $(QTXML_FLAGS) -c -o $@
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

CarlaEngineNative.cpp.exp.o: CarlaEngineNative.cpp $(CARLA_ENGINE_NATIVE_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) $(QTXML_FLAGS) -DCARLA_PLUGIN_EXPORT -c -o $@
$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_PLUGIN_EXPORT -c -o $@

# --------------------------------------------------------------

+ 34
- 29
source/backend/plugin/CarlaPlugin.cpp View File

@@ -24,9 +24,17 @@

#include <ctime>

#include <QtCore/QFile>
#include <QtCore/QTextStream>
#include <QtXml/QDomNode>
// FIXME
#include <QtCore/QByteArray>

#include "juce_core.h"

using juce::File;
using juce::MemoryOutputStream;
using juce::ScopedPointer;
using juce::String;
using juce::XmlDocument;
using juce::XmlElement;

CARLA_BACKEND_START_NAMESPACE

@@ -856,20 +864,20 @@ bool CarlaPlugin::saveStateToFile(const char* const filename)
CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false);
carla_debug("CarlaPlugin::saveStateToFile(\"%s\")", filename);

QFile file(filename);

if (! file.open(QIODevice::WriteOnly | QIODevice::Text))
return false;

QTextStream out(&file);
MemoryOutputStream out;
out << "<?xml version='1.0' encoding='UTF-8'?>\n";
out << "<!DOCTYPE CARLA-PRESET>\n";
out << "<CARLA-PRESET VERSION='2.0'>\n";
out << getStateSave().toString();
out << "</CARLA-PRESET>\n";

file.close();
return true;
File file(filename);

if (file.replaceWithData(out.getData(), out.getDataSize()))
return true;

pData->engine->setLastError("Failed to write file");
return false;
}

bool CarlaPlugin::loadStateFromFile(const char* const filename)
@@ -877,25 +885,20 @@ bool CarlaPlugin::loadStateFromFile(const char* const filename)
CARLA_SAFE_ASSERT_RETURN(filename != nullptr && filename[0] != '\0', false);
carla_debug("CarlaPlugin::loadStateFromFile(\"%s\")", filename);

QFile file(filename);
File file(filename);
CARLA_SAFE_ASSERT_RETURN(file.existsAsFile(), false);

if (! file.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
XmlDocument xml(file);
ScopedPointer<XmlElement> xmlElement(xml.getDocumentElement(true));
CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false);
CARLA_SAFE_ASSERT_RETURN(xmlElement->getTagName().equalsIgnoreCase("carla-preset"), false);

QDomDocument xml;
xml.setContent(file.readAll());
file.close();
// completely load file
xmlElement = xml.getDocumentElement(false);
CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false);

QDomNode xmlNode(xml.documentElement());

if (xmlNode.toElement().tagName().compare("carla-preset", Qt::CaseInsensitive) == 0)
{
pData->engine->setLastError("Not a valid Carla preset file");
return false;
}

pData->stateSave.fillFromXmlNode(xmlNode);
loadStateSave(pData->stateSave);
if (pData->stateSave.fillFromXmlElement(xmlElement->getFirstChildElement()))
loadStateSave(pData->stateSave);

return true;
}
@@ -1410,8 +1413,10 @@ void CarlaPlugin::idle()

carla_stdout("Trying to get window...");

QString uiTitle(QString("%1 (GUI)").arg(pData->name));
if (CarlaPluginUi::tryTransientWinIdMatch(pData->osc.data.target != nullptr ? pData->osc.thread.getPid() : 0, uiTitle.toUtf8().constData(), pData->engine->getOptions().frontendWinId))
CarlaString uiTitle(pData->name);
uiTitle += " (GUI)";

if (CarlaPluginUi::tryTransientWinIdMatch(pData->osc.data.target != nullptr ? pData->osc.thread.getPid() : 0, uiTitle, pData->engine->getOptions().frontendWinId))
pData->transientTryCounter = 0;
}



+ 1
- 1
source/backend/plugin/Makefile View File

@@ -52,7 +52,7 @@ debug:
# --------------------------------------------------------------

CarlaPlugin.cpp.o: CarlaPlugin.cpp $(CARLA_PLUGIN_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) $(QTXML_FLAGS) -c -o $@
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) -c -o $@

CarlaPluginInternal.cpp.o: CarlaPluginInternal.cpp $(CARLA_PLUGIN_INTERNAL_CPP_DEPS)
$(CXX) $< $(BUILD_CXX_FLAGS) $(QTCORE_FLAGS) -c -o $@


+ 1
- 3
source/utils/CarlaMutex.hpp View File

@@ -209,9 +209,7 @@ class CarlaScopeTryLocker
public:
CarlaScopeTryLocker(const Mutex& mutex) noexcept
: fMutex(mutex),
fLocked(mutex.tryLock())
{
}
fLocked(mutex.tryLock()) {}

~CarlaScopeTryLocker() noexcept
{


+ 1
- 3
source/utils/CarlaRingBuffer.hpp View File

@@ -120,9 +120,7 @@ public:

bool isDataAvailableForReading() const noexcept
{
CARLA_SAFE_ASSERT_RETURN(fBuffer != nullptr, false);

return (fBuffer->buf != nullptr && fBuffer->head != fBuffer->tail);
return (fBuffer != nullptr && fBuffer->buf != nullptr && fBuffer->head != fBuffer->tail);
}

bool isEmpty() const noexcept


+ 20
- 22
source/utils/CarlaStateUtils.cpp View File

@@ -21,11 +21,11 @@
#include "CarlaMathUtils.hpp"
#include "CarlaMIDI.h"

#ifdef HAVE_JUCE_LATER
# include "juce_core.h"
#include "juce_core.h"
using juce::String;
using juce::XmlElement;
#else

#if 0
# include <QtCore/QString>
# include <QtXml/QDomNode>
#endif
@@ -35,7 +35,6 @@ CARLA_BACKEND_START_NAMESPACE
// -----------------------------------------------------------------------
// xmlSafeString

#ifdef HAVE_JUCE_LATER
static String xmlSafeString(const String& string, const bool toXml)
{
String newString(string);
@@ -45,7 +44,7 @@ static String xmlSafeString(const String& string, const bool toXml)
else
return newString.replace("&lt;","<").replace("&gt;",">").replace("&apos;","'").replace("&quot;","\"").replace("&amp;","&");
}
#else
#if 0
static QString xmlSafeString(const QString& string, const bool toXml)
{
QString newString(string);
@@ -60,12 +59,11 @@ static QString xmlSafeString(const QString& string, const bool toXml)
// -----------------------------------------------------------------------
// xmlSafeStringCharDup

#ifdef HAVE_JUCE_LATER
static const char* xmlSafeStringCharDup(const String& string, const bool toXml)
{
return carla_strdup(xmlSafeString(string, toXml).toRawUTF8());
}
#else
#if 0
static const char* xmlSafeStringCharDup(const QString& string, const bool toXml)
{
return carla_strdup(xmlSafeString(string, toXml).toUtf8().constData());
@@ -216,16 +214,15 @@ void StateSave::clear() noexcept
// -----------------------------------------------------------------------
// fillFromXmlElement

#ifdef HAVE_JUCE_LATER
void StateSave::fillFromXmlElement(const XmlElement* const xmlElement)
bool StateSave::fillFromXmlElement(const XmlElement* const xmlElement)
{
clear();
CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr, false);

CARLA_SAFE_ASSERT_RETURN(xmlElement != nullptr,);
clear();

for (XmlElement* elem = xmlElement->getFirstChildElement(); elem != nullptr; elem = elem->getNextElement())
{
String tagName(elem->getTagName());
const String& tagName(elem->getTagName());

// ---------------------------------------------------------------
// Info
@@ -404,8 +401,10 @@ void StateSave::fillFromXmlElement(const XmlElement* const xmlElement)
}
}
}

return true;
}
#else
#if 0
void StateSave::fillFromXmlNode(const QDomNode& xmlNode)
{
clear();
@@ -629,7 +628,6 @@ void StateSave::fillFromXmlNode(const QDomNode& xmlNode)
// -----------------------------------------------------------------------
// fillXmlStringFromStateSave

#ifdef HAVE_JUCE_LATER
String StateSave::toString() const
{
String content;
@@ -702,15 +700,15 @@ String StateSave::toString() const
dataXml << " <Active>" << (active ? "Yes" : "No") << "</Active>\n";

if (dryWet != 1.0f)
dataXml << " <DryWet>" << dryWet << "</DryWet>\n";
dataXml << " <DryWet>" << String(dryWet, 7) << "</DryWet>\n";
if (volume != 1.0f)
dataXml << " <Volume>" << volume << "</Volume>\n";
dataXml << " <Volume>" << String(volume, 7) << "</Volume>\n";
if (balanceLeft != -1.0f)
dataXml << " <Balance-Left>" << balanceLeft << "</Balance-Left>\n";
dataXml << " <Balance-Left>" << String(balanceLeft, 7) << "</Balance-Left>\n";
if (balanceRight != 1.0f)
dataXml << " <Balance-Right>" << balanceRight << "</Balance-Right>\n";
dataXml << " <Balance-Right>" << String(balanceRight, 7) << "</Balance-Right>\n";
if (panning != 0.0f)
dataXml << " <Panning>" << panning << "</Panning>\n";
dataXml << " <Panning>" << String(panning, 7) << "</Panning>\n";

if (ctrlChannel < 0)
dataXml << " <ControlChannel>N</ControlChannel>\n";
@@ -733,7 +731,7 @@ String StateSave::toString() const
parameterXml << " <Symbol>" << xmlSafeString(stateParameter->symbol, true) << "</Symbol>\n";

if (stateParameter->isInput)
parameterXml << " <Value>" << stateParameter->value << "</Value>\n";
parameterXml << " <Value>" << String(stateParameter->value, 15) << "</Value>\n";

if (stateParameter->midiCC > 0)
{
@@ -783,7 +781,7 @@ String StateSave::toString() const
{
customDataXml << " <Value>\n";
customDataXml << xmlSafeString(stateCustomData->value, true);
customDataXml << " </Value>\n";
customDataXml << "\n </Value>\n";
}
else
{
@@ -809,7 +807,7 @@ String StateSave::toString() const

return content;
}
#else
#if 0
QString StateSave::toString() const
{
QString content;


+ 1
- 15
source/utils/CarlaStateUtils.hpp View File

@@ -21,15 +21,10 @@
#include "CarlaBackend.h"
#include "LinkedList.hpp"

#ifdef HAVE_JUCE_LATER
namespace juce {
class String;
class XmlElement;
}
#else
class QDomNode;
class QString;
#endif

// -----------------------------------------------------------------------

@@ -101,17 +96,8 @@ struct StateSave {
~StateSave() noexcept;
void clear() noexcept;

#ifdef HAVE_JUCE_LATER
void fillFromXmlElement(const juce::XmlElement* const xmlElement);
#else
void fillFromXmlNode(const QDomNode& xmlNode);
#endif

#ifdef HAVE_JUCE_LATER
bool fillFromXmlElement(const juce::XmlElement* const xmlElement);
juce::String toString() const;
#else
QString toString() const;
#endif

CARLA_DECLARE_NON_COPY_STRUCT(StateSave)
};


Loading…
Cancel
Save