Skip to content

Commit 7aeec06

Browse files
authored
Merge pull request #280 from tne-lab/splitter-save-fix
Fix saving chains starting with splitter and simplify
2 parents e6846d2 + 17109be commit 7aeec06

2 files changed

Lines changed: 26 additions & 77 deletions

File tree

Source/UI/EditorViewport.cpp

Lines changed: 25 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,14 +1136,11 @@ void SignalChainTabButton::paintButton(Graphics& g, bool isMouseOver, bool isBut
11361136

11371137
// how about some loading and saving?
11381138

1139-
XmlElement* EditorViewport::createNodeXml(GenericEditor* editor,
1140-
int insertionPt)
1139+
XmlElement* EditorViewport::createNodeXml(GenericProcessor* source)
11411140
{
11421141

11431142
XmlElement* e = new XmlElement("PROCESSOR");
11441143

1145-
GenericProcessor* source = (GenericProcessor*) editor->getProcessor();
1146-
11471144
String name = "";
11481145

11491146
if (source->isSource())
@@ -1155,12 +1152,12 @@ XmlElement* EditorViewport::createNodeXml(GenericEditor* editor,
11551152
else
11561153
name += "Filters/";
11571154

1158-
name += editor->getName();
1155+
name += source->getEditor()->getName();
11591156

11601157
std::cout << name << std::endl;
11611158

11621159
e->setAttribute("name", name);
1163-
e->setAttribute("insertionPoint", insertionPt);
1160+
e->setAttribute("insertionPoint", 1);
11641161
e->setAttribute("pluginName", source->getPluginName());
11651162
e->setAttribute("pluginType", (int)(source->getPluginType()));
11661163
e->setAttribute("pluginIndex", source->getIndex());
@@ -1222,7 +1219,6 @@ const String EditorViewport::saveState(File fileToUse, String* xmlText)
12221219
/** Used to reset saveOrder at end, to allow saving the same processor multiple times*/
12231220
Array<GenericProcessor*> allProcessors;
12241221

1225-
bool moveForward;
12261222
int saveOrder = 0;
12271223

12281224
XmlElement* xml = new XmlElement("SETTINGS");
@@ -1246,103 +1242,56 @@ const String EditorViewport::saveState(File fileToUse, String* xmlText)
12461242
XmlElement* machineName = info->createNewChildElement("MACHINE");
12471243
machineName->addTextElement(SystemStats::getComputerName());
12481244

1249-
GenericEditor* editor;
1250-
12511245
for (int n = 0; n < signalChainArray.size(); n++)
12521246
{
1253-
1254-
moveForward = true;
1255-
12561247
XmlElement* signalChain = new XmlElement("SIGNALCHAIN");
12571248

1258-
editor = signalChainArray[n]->getEditor();
1259-
1260-
int insertionPt = 1;
1249+
GenericProcessor* processor = signalChainArray[n]->getEditor()->getProcessor();
12611250

1262-
while (editor != 0)
1251+
while (processor != nullptr)
12631252
{
1264-
1265-
GenericProcessor* currentProcessor = (GenericProcessor*) editor->getProcessor();
1266-
GenericProcessor* nextProcessor;
1267-
1268-
if (currentProcessor->saveOrder < 0) // create a new XML element
1253+
if (processor->saveOrder < 0)
12691254
{
1255+
if (processor->isSplitter())
1256+
{
1257+
// add to list of splitters to come back to
1258+
splitPoints.add(processor);
1259+
processor->switchIO(0);
1260+
}
12701261

1271-
signalChain->addChildElement(createNodeXml(editor, insertionPt));
1272-
currentProcessor->saveOrder = saveOrder;
1273-
allProcessors.addIfNotAlreadyThere(currentProcessor);
1262+
// create a new XML element
1263+
signalChain->addChildElement(createNodeXml(processor));
1264+
processor->saveOrder = saveOrder;
1265+
allProcessors.addIfNotAlreadyThere(processor);
12741266
saveOrder++;
12751267

12761268
}
12771269
else
12781270
{
1279-
std::cout << " Processor already saved as number " << currentProcessor->saveOrder << std::endl;
1280-
}
1281-
1282-
if (moveForward)
1283-
{
1284-
std::cout << " Moving forward along signal chain." << std::endl;
1285-
nextProcessor = currentProcessor->getDestNode();
1286-
}
1287-
else
1288-
{
1289-
std::cout << " Moving backward along signal chain." << std::endl;
1290-
nextProcessor = currentProcessor->getSourceNode();
1271+
std::cout << " Processor already saved as number " << processor->saveOrder << std::endl;
12911272
}
12921273

1274+
// continue until the end of the chain
1275+
std::cout << " Moving forward along signal chain." << std::endl;
1276+
processor = processor->getDestNode();
12931277

1294-
if (nextProcessor != 0) // continue until the end of the chain
1278+
if (processor == nullptr)
12951279
{
1296-
1297-
editor = (GenericEditor*) nextProcessor->getEditor();
1298-
1299-
if ((nextProcessor->isSplitter())// || nextProcessor->isMerger())
1300-
&& nextProcessor->saveOrder < 0)
1301-
{
1302-
splitPoints.add(nextProcessor);
1303-
1304-
nextProcessor->switchIO(0);
1305-
}
1306-
1307-
}
1308-
else
1309-
{
1310-
1311-
std::cout << " No processor found." << std::endl;
1312-
13131280
if (splitPoints.size() > 0)
13141281
{
1282+
std::cout << " Going back to first unswitched splitter." << std::endl;
13151283

1316-
nextProcessor = splitPoints.getFirst();
1284+
processor = splitPoints.getFirst();
13171285
splitPoints.remove(0);
13181286

1319-
nextProcessor->switchIO(1);
1320-
signalChain->addChildElement(switchNodeXml(nextProcessor));
1321-
1322-
if (nextProcessor->isMerger())
1323-
{
1324-
insertionPt = 0;
1325-
moveForward = false;
1326-
}
1327-
else
1328-
{
1329-
insertionPt = 1;
1330-
moveForward = true;
1331-
}
1332-
1333-
editor = nextProcessor->getEditor();
1334-
1287+
processor->switchIO(1);
1288+
signalChain->addChildElement(switchNodeXml(processor));
13351289
}
13361290
else
13371291
{
1338-
13391292
std::cout << " End of chain." << std::endl;
1340-
1341-
editor = 0;
13421293
}
13431294
}
1344-
1345-
//insertionPt++;
13461295
}
13471296

13481297
xml->addChildElement(signalChain);

Source/UI/EditorViewport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ class EditorViewport : public Component,
156156
const String loadState(File filename);
157157

158158
/** Converts information about a given editor to XML. */
159-
XmlElement* createNodeXml(GenericEditor*, int);
159+
XmlElement* createNodeXml(GenericProcessor*);
160160

161161
/** Converts information about a splitter or merge to XML. */
162162
XmlElement* switchNodeXml(GenericProcessor*);

0 commit comments

Comments
 (0)