Skip to content

Commit f70a2e1

Browse files
committed
Simplify deciding what to connect and update after changing merger cxn settings
1 parent 726fe6b commit f70a2e1

3 files changed

Lines changed: 20 additions & 39 deletions

File tree

Source/Processors/Merger/MergerEditor.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,9 +191,11 @@ void MergerEditor::mouseDown(const MouseEvent& e)
191191
} else if (result == eventMerge)
192192
{
193193
*eventPtr = !(*eventPtr);
194+
CoreServices::updateSignalChain(this);
194195
} else if (result == continuousMerge)
195196
{
196197
*continuousPtr = !(*continuousPtr);
198+
CoreServices::updateSignalChain(this);
197199
}
198200
}
199201

Source/Processors/ProcessorGraph/ProcessorGraph.cpp

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -271,15 +271,14 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
271271
// stores the pointer to a source leading into a particular dest node
272272
// along with a boolean vector indicating the position of this source
273273
// relative to other sources entering the dest via mergers
274-
// and a vector indicating the splitter settings between the source and dest.
275274
// (when the mergerOrder vectors of all incoming nodes to a dest are
276275
// lexicographically sorted, the sources will be in the correct order)
277276
struct ConnectionInfo
278277
{
279-
// give friendlier names to the pair entries
280-
std::vector<bool> mergerOrder;
281-
std::vector<bool> splitterSettings;
282278
GenericProcessor* source;
279+
std::vector<int> mergerOrder;
280+
bool connectContinuous;
281+
bool connectEvents;
283282

284283
// for SortedSet sorting:
285284
bool operator<(const ConnectionInfo& other) const
@@ -331,28 +330,28 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
331330

332331
ConnectionInfo conn;
333332
conn.source = source;
333+
conn.connectContinuous = true;
334+
conn.connectEvents = true;
334335

335336
while (dest != nullptr && (dest->isMerger() || dest->isSplitter()))
336337
{
337-
if (dest->isSplitter())
338+
if (dest->isSplitter() && dest != activeSplitter && !splitters.contains(dest))
338339
{
339-
if (dest != activeSplitter && !splitters.contains(dest))
340-
{
341-
// add to stack of splitters to explore
342-
splitters.add(dest);
343-
dest->switchIO(0); // go down first path
344-
}
345-
346-
int path = static_cast<Splitter*>(dest)->getPath();
347-
conn.splitterSettings.push_back(bool(path));
340+
// add to stack of splitters to explore
341+
splitters.add(dest);
342+
dest->switchIO(0); // go down first path
348343
}
349344
else if (dest->isMerger())
350345
{
346+
auto merger = static_cast<Merger*>(dest);
347+
351348
// keep the input aligned with the current path
352-
int path = static_cast<Merger*>(dest)->switchToSourceNode(prev);
349+
int path = merger->switchToSourceNode(prev);
353350
jassert(path != -1); // merger not connected to prev?
354351

355-
conn.mergerOrder.insert(conn.mergerOrder.begin(), bool(path));
352+
conn.mergerOrder.insert(conn.mergerOrder.begin(), path);
353+
conn.connectContinuous &= merger->sendContinuousForSource(prev);
354+
conn.connectEvents &= merger->sendEventsForSource(prev);
356355
}
357356

358357
prev = dest;
@@ -424,7 +423,7 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
424423

425424
for (const ConnectionInfo& conn : destSources.second)
426425
{
427-
connectProcessors(conn.source, dest, conn.splitterSettings);
426+
connectProcessors(conn.source, dest, conn.connectContinuous, conn.connectEvents);
428427
}
429428
}
430429

@@ -436,7 +435,7 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
436435
} // end method
437436

438437
void ProcessorGraph::connectProcessors(GenericProcessor* source, GenericProcessor* dest,
439-
const std::vector<bool>& splitterSettings)
438+
bool connectContinuous, bool connectEvents)
440439
{
441440

442441
if (source == nullptr || dest == nullptr)
@@ -445,26 +444,6 @@ void ProcessorGraph::connectProcessors(GenericProcessor* source, GenericProcesso
445444
std::cout << " Connecting " << source->getName() << " " << source->getNodeId(); //" channel ";
446445
std::cout << " to " << dest->getName() << " " << dest->getNodeId() << std::endl;
447446

448-
// determine what to connect by looking at each merger
449-
bool connectContinuous = true;
450-
bool connectEvents = true;
451-
int splitterInd = 0;
452-
453-
for (GenericProcessor* curr = source->getDestNode(); curr != dest; curr = curr->getDestNode())
454-
{
455-
jassert(curr != nullptr); // should be a path from source to dest
456-
if (curr->isSplitter())
457-
{
458-
curr->switchIO(int(splitterSettings[splitterInd++]));
459-
}
460-
else if (curr->isMerger())
461-
{
462-
Merger* merger = static_cast<Merger*>(curr);
463-
connectContinuous &= merger->sendContinuousForSource(source);
464-
connectEvents &= merger->sendEventsForSource(source);
465-
}
466-
}
467-
468447
// 1. connect continuous channels
469448
if (connectContinuous)
470449
{

Source/Processors/ProcessorGraph/ProcessorGraph.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class ProcessorGraph : public AudioProcessorGraph
115115
void clearConnections();
116116

117117
void connectProcessors(GenericProcessor* source, GenericProcessor* dest,
118-
const std::vector<bool>& splitterSettings);
118+
bool connectContinuous, bool connectEvents);
119119
void connectProcessorToAudioAndRecordNodes(GenericProcessor* source);
120120

121121
int64 m_startSoftTimestamp{ 0 };

0 commit comments

Comments
 (0)