From c1bb155817b9c477e84c97b23c3c3e1608e5647f Mon Sep 17 00:00:00 2001
From: jsiegle <jsiegle@mit.edu>
Date: Sun, 11 Mar 2012 14:49:08 -0400
Subject: [PATCH] Fixed minor signal chain bugs

---
 Source/Processors/Editors/GenericEditor.cpp   | 15 +++--
 Source/Processors/Editors/GenericEditor.h     |  1 +
 .../Processors/Editors/LfpDisplayEditor.cpp   | 12 ++--
 Source/Processors/Editors/LfpDisplayEditor.h  |  8 +--
 Source/Processors/GenericProcessor.cpp        |  3 +
 Source/Processors/SignalGenerator.cpp         |  2 +-
 Source/Processors/Utilities/Merger.cpp        |  3 +
 Source/Processors/Utilities/Splitter.cpp      |  3 +
 .../Visualization/LfpDisplayCanvas.cpp        | 16 ++---
 .../Visualization/LfpDisplayCanvas.h          |  3 +-
 Source/UI/EditorViewport.cpp                  |  2 +-
 Source/UI/SignalChainManager.cpp              | 58 ++-----------------
 12 files changed, 38 insertions(+), 88 deletions(-)

diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp
index 1bca25cca..a9c2a9e85 100644
--- a/Source/Processors/Editors/GenericEditor.cpp
+++ b/Source/Processors/Editors/GenericEditor.cpp
@@ -413,10 +413,12 @@ bool GenericEditor::checkChannelSelectors(Button* button)
 void GenericEditor::update()
 {
 
-	std::cout << "Updating" << std::endl;
+	std::cout << "Editor for ";
 
 	GenericProcessor* p = (GenericProcessor*) getProcessor();
 
+	std::cout << p->getName() << " updating settings." << std::endl;
+
 	if (!p->isSink())
 	{
 
@@ -437,6 +439,9 @@ void GenericEditor::update()
 		numChannels = p->getNumInputs();
 	}
 
+	updateVisualizer(); // does nothing unless this method
+						// has been implemented
+
 }
 
 Array<int> GenericEditor::getActiveChannels()
@@ -488,12 +493,10 @@ void GenericEditor::createRadioButtons(int x, int y, int w, StringArray values,
 int GenericEditor::createChannelSelectors()
 {
 
-	GenericProcessor* p = (GenericProcessor*) getProcessor();
-
+	GenericProcessor* p = getProcessor();
 
 	if (channelSelectorButtons.size() == 0) {
 
-
 		int width = 20;
 		int height = 14;
 		int numChannels;
@@ -503,7 +506,9 @@ int GenericEditor::createChannelSelectors()
 		else
 			numChannels = p->getNumInputs();
 
-		int nColumns = ceil(numChannels/4);
+		int nColumns = jmax((int) ceil(numChannels/4),1);
+		//std::cout << numChannels << " channels" << std::endl;
+		//std::cout << nColumns << " columns" << std::endl;
 
 		for (int n = 1; n < numChannels+1; n++)
 		{
diff --git a/Source/Processors/Editors/GenericEditor.h b/Source/Processors/Editors/GenericEditor.h
index 301e22f2c..0184c5c42 100644
--- a/Source/Processors/Editors/GenericEditor.h
+++ b/Source/Processors/Editors/GenericEditor.h
@@ -100,6 +100,7 @@ public:
 	bool checkChannelSelectors(Button* button);
 
 	virtual void update();
+	virtual void updateVisualizer() {}
 
 	Array<int> getActiveChannels();
 	
diff --git a/Source/Processors/Editors/LfpDisplayEditor.cpp b/Source/Processors/Editors/LfpDisplayEditor.cpp
index afb8b23be..1d818d1c4 100644
--- a/Source/Processors/Editors/LfpDisplayEditor.cpp
+++ b/Source/Processors/Editors/LfpDisplayEditor.cpp
@@ -150,19 +150,15 @@ void LfpDisplayEditor::disable()
 	isPlaying = false;
 }
 
-void LfpDisplayEditor::updateNumInputs(int n)
+void LfpDisplayEditor::updateVisualizer()
 {
-	std::cout << "Setting num inputs on LfpDisplayEditor to " << n << std::endl;
-	if (canvas != 0)
-		canvas->updateNumInputs(n);
-}
 
-void LfpDisplayEditor::updateSampleRate(float r) 
-{
 	if (canvas != 0)
-		canvas->updateSampleRate(r);
+		canvas->update();
+
 }
 
+
 void LfpDisplayEditor::setBuffers(AudioSampleBuffer* asb, MidiBuffer* mb)
 {
 	std::cout << "LfpDisplayEditor buffers are set!" << std::endl;
diff --git a/Source/Processors/Editors/LfpDisplayEditor.h b/Source/Processors/Editors/LfpDisplayEditor.h
index 255812705..935316a5e 100644
--- a/Source/Processors/Editors/LfpDisplayEditor.h
+++ b/Source/Processors/Editors/LfpDisplayEditor.h
@@ -61,8 +61,7 @@ public:
 	void enable();
 	void disable();
 
-	void updateNumInputs(int);
-	void updateSampleRate(float);
+	void updateVisualizer();
 
 private:	
 
@@ -78,11 +77,6 @@ private:
 
 	ScopedPointer <LfpDisplayCanvas> canvas;
 
-	//AudioSampleBuffer* streamBuffer;
-	//MidiBuffer* eventBuffer;
-	//UIComponent* UI;
-	//DataViewport* dataViewport;
-
 	int tabIndex;
 
 	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LfpDisplayEditor);
diff --git a/Source/Processors/GenericProcessor.cpp b/Source/Processors/GenericProcessor.cpp
index 5f658a44f..2ffebde26 100644
--- a/Source/Processors/GenericProcessor.cpp
+++ b/Source/Processors/GenericProcessor.cpp
@@ -248,12 +248,15 @@ void GenericProcessor::clearSettings()
 void GenericProcessor::update()
 {
 
+	std::cout << getName() << " updating settings." << std::endl;
+
 	clearSettings();
 	
 	if (sourceNode != 0)
 	{
 		// everything is inherited except numOutputs
 		settings = sourceNode->settings;
+		settings.numInputs = settings.numOutputs;
 		settings.numOutputs = settings.numInputs;
 
 	} else {
diff --git a/Source/Processors/SignalGenerator.cpp b/Source/Processors/SignalGenerator.cpp
index 20aa46afc..32b019c88 100644
--- a/Source/Processors/SignalGenerator.cpp
+++ b/Source/Processors/SignalGenerator.cpp
@@ -51,7 +51,7 @@ AudioProcessorEditor* SignalGenerator::createEditor( )
 void SignalGenerator::updateSettings()
 {
 
-	std::cout << "Signal generator updating parameters" << std::endl;
+	//std::cout << "Signal generator updating parameters" << std::endl;
 
 	frequencies.clear();
 	amplitudes.clear();
diff --git a/Source/Processors/Utilities/Merger.cpp b/Source/Processors/Utilities/Merger.cpp
index 36947163e..fd6f69cc7 100644
--- a/Source/Processors/Utilities/Merger.cpp
+++ b/Source/Processors/Utilities/Merger.cpp
@@ -94,6 +94,9 @@ bool Merger::stillHasSource()
 
 void Merger::switchIO()
 {
+
+	std::cout << "Merger switching source." << std::endl;
+
 	if (activePath == 0) {
 		activePath = 1;
 		sourceNode = sourceNodeB;
diff --git a/Source/Processors/Utilities/Splitter.cpp b/Source/Processors/Utilities/Splitter.cpp
index 7290be5f4..fed00295d 100644
--- a/Source/Processors/Utilities/Splitter.cpp
+++ b/Source/Processors/Utilities/Splitter.cpp
@@ -83,6 +83,9 @@ void Splitter::switchIO(int destNum) {
 
 void Splitter::switchIO()
 {
+
+	std::cout << "Splitter switching source." << std::endl;
+
 	if (activePath == 0) {
 		activePath = 1;
 		destNode = destNodeB;
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
index 868371bfe..2eed8c953 100644
--- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
@@ -86,21 +86,17 @@ void LfpDisplayCanvas::endAnimation()
 	stopCallbacks();
 }
 
-void LfpDisplayCanvas::updateNumInputs(int n)
+void LfpDisplayCanvas::update()
 {
-	std::cout << "Setting num inputs on LfpDisplayCanvas to " << n << std::endl;
-	nChans = n;
-	if (n < 200 && n > 0)
+	nChans = processor->getNumInputs();
+	sampleRate = processor->getSampleRate();
+
+	std::cout << "Setting num inputs on LfpDisplayCanvas to " << nChans << std::endl;
+	if (nChans < 200 && nChans > 0)
 		screenBuffer->setSize(nChans, 10000);
 	//sampleRate = processor->getSampleRate();
 }
 
-void LfpDisplayCanvas::updateSampleRate(float r)
-{
-	sampleRate = r;
-	//displayBufferSize = displayBuffer->getNumSamples();
-	std::cout << "Display canvas updating sample rate to " << r << std::endl;
-}
 
 void LfpDisplayCanvas::setParameter(int param, float val)
 {
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.h b/Source/Processors/Visualization/LfpDisplayCanvas.h
index f9350ee35..e831c2966 100644
--- a/Source/Processors/Visualization/LfpDisplayCanvas.h
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.h
@@ -45,8 +45,7 @@ public:
 
 	void refreshState();
 
-	void updateNumInputs(int);
-	void updateSampleRate(float);
+	void update();
 
 	void setParameter(int, float);
 
diff --git a/Source/UI/EditorViewport.cpp b/Source/UI/EditorViewport.cpp
index 657fc69f5..3d6a52461 100644
--- a/Source/UI/EditorViewport.cpp
+++ b/Source/UI/EditorViewport.cpp
@@ -572,7 +572,7 @@ void EditorViewport::mouseExit(const MouseEvent &e) {
 void EditorViewport::checkScrollButtons(int topTab)
 {
     
-    if (editorArray.size() - topTab > 4)
+    if (signalChainArray.size() - topTab > 4)
     {
         downButton->setActive(true);
     } else {
diff --git a/Source/UI/SignalChainManager.cpp b/Source/UI/SignalChainManager.cpp
index 8885e20f1..cd1487433 100644
--- a/Source/UI/SignalChainManager.cpp
+++ b/Source/UI/SignalChainManager.cpp
@@ -244,12 +244,7 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
         GenericProcessor* source = 0;
         GenericProcessor* dest = (GenericProcessor*) editorArray[0]->getProcessor();
 
-        if (!dest->isMerger())
-        	dest->setSourceNode(source); // set first source as 0
-        else
-        	dest->setMergerSourceNode(source);
-
-      //  std::cout << "        " << dest->getName() << "::";
+        dest->setSourceNode(source); 
 
         for (int n = 1; n < editorArray.size(); n++)
         {
@@ -257,23 +252,12 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
             dest = (GenericProcessor*) editorArray[n]->getProcessor();
             source = (GenericProcessor*) editorArray[n-1]->getProcessor();
 
-            if (!dest->isMerger())
-        		dest->setSourceNode(source);
-        	else
-        		dest->setMergerSourceNode(source);
-
-           //std::cout << dest->getName() << "::";
+        	dest->setSourceNode(source);
         }
 
-       // if (!dest->isSplitter())
-        	dest->setDestNode(0); // set first source as 0
-       // else
-       // 	dest->setSplitterDestNode(0);
-      //  dest->setDestNode(0); // set last dest as 0
-
-      // std::cout << std::endl;
-    }//
+        dest->setDestNode(0);
 
+    }
 
     // Step 3: check for new tabs
    if (action != ACTIVATE) {
@@ -284,8 +268,6 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
         {
             GenericProcessor* p = (GenericProcessor*) editorArray[n]->getProcessor();
 
-      //      std::cout << editorArray[n]->tabNumber() << std::endl;
-
             if (p->getSourceNode() == 0)// && editorArray[n]->tabNumber() == -1)
             {
                
@@ -316,26 +298,12 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
         }
     }
 
-
-
-    
     // Step 4: Refresh editors in editor array, based on active editor
     for (int n = 0; n < editorArray.size(); n++)
     {
         editorArray[n]->setVisible(false);
     }
 
- //    int activeChain;
-
-	// for (int n = 0; n < signalChainArray.size(); n++)
-	// {
-	// 	if (signalChainArray[n]->getToggleState())
-	// 	{
-	// 		activeChain = n;
-	// 		break;
-	// 	}
-	// }
-
     editorArray.clear();
     std::cout << "Cleared editor array." << std::endl;
 
@@ -361,18 +329,6 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
             editorToAdd = 0;
            
         }
-
-        // if (currentProcessor->isMerger())
-        // {
-         //   	std::cout << "It's a merger!" << std::endl;
-
-		    	//if (currentProcessor->getSource() == activeChain)
-		    	// 	editorToAdd->switchSource(0);
-		    	// else
-		    	// 	editorToAdd->switchSource(1);
-            
-        // }
-
     }
 
     editorToAdd = activeEditor;
@@ -397,8 +353,6 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
 
 				 if (dest->getSourceNode() != currentProcessor)
 				 	editorToAdd->switchSource();
-				// else
-				// 	editorToAdd->switchSource(1);
             
          	}
 
@@ -410,8 +364,6 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
 
     }
 
-    //std::cout << "OK1." << std::endl;
-
     // Step 5: check the validity of the signal chain
     if (true) {
         bool enable = true;
@@ -426,8 +378,6 @@ void SignalChainManager::updateVisibleEditors(GenericEditor* activeEditor,
 
         } else {
 
-            //bool sourceIsInChain = true;
-
             for (int n = 0; n < editorArray.size()-1; n++)
             {
                 GenericProcessor* source = (GenericProcessor*) editorArray[n]->getProcessor();
-- 
GitLab