From f20dcd954da93888dfda9613bac63484123dc482 Mon Sep 17 00:00:00 2001
From: jsiegle <jsiegle@mit.edu>
Date: Fri, 4 Apr 2014 21:30:12 -0400
Subject: [PATCH] Fix error in control panel button logic

---
 Source/Processors/RecordNode.cpp |  33 ++++----
 Source/UI/ControlPanel.cpp       | 129 ++++++++++++-------------------
 2 files changed, 67 insertions(+), 95 deletions(-)

diff --git a/Source/Processors/RecordNode.cpp b/Source/Processors/RecordNode.cpp
index ed48582ba..27fce6e2c 100755
--- a/Source/Processors/RecordNode.cpp
+++ b/Source/Processors/RecordNode.cpp
@@ -570,27 +570,27 @@ String RecordNode::generateHeader(Channel* ch)
 
 void RecordNode::closeAllFiles()
 {
-
-    for (int i = 0; i < channelPointers.size(); i++)
+    if (allFilesOpened)
     {
-        if (channelPointers[i]->getRecordState())
+        for (int i = 0; i < channelPointers.size(); i++)
         {
-
-            if (blockIndex < BLOCK_LENGTH)
+            if (channelPointers[i]->getRecordState())
             {
-                // fill out the rest of the current buffer
-                writeContinuousBuffer(zeroBuffer.getSampleData(0), BLOCK_LENGTH - blockIndex, i);
-            }
-
-            closeFile(channelPointers[i]);
-        }
-    }
 
-    closeFile(eventChannel);
+                if (blockIndex < BLOCK_LENGTH)
+                {
+                    // fill out the rest of the current buffer
+                    writeContinuousBuffer(zeroBuffer.getSampleData(0), BLOCK_LENGTH - blockIndex, i);
+                }
 
-    blockIndex = 0; // back to the beginning of the block
+                closeFile(channelPointers[i]);
+            }
+        }
 
-    allFilesOpened = false;
+        closeFile(eventChannel);
+        blockIndex = 0; // back to the beginning of the block
+        allFilesOpened = false;
+    }
 }
 
 bool RecordNode::enable()
@@ -606,6 +606,9 @@ bool RecordNode::disable()
     // close files if necessary
     setParameter(0, 10.0f);
 
+    if (isProcessing)
+        closeAllFiles();
+
     isProcessing = false;
 
     return true;
diff --git a/Source/UI/ControlPanel.cpp b/Source/UI/ControlPanel.cpp
index 730302f12..8fe0a4cfc 100755
--- a/Source/UI/ControlPanel.cpp
+++ b/Source/UI/ControlPanel.cpp
@@ -653,16 +653,14 @@ void ControlPanel::labelTextChanged(Label* label)
 
 void ControlPanel::startRecording()
 {
-    //playButton->setToggleState(true,true);
-    
-    if (audio->callbacksAreActive())
-    {
-        masterClock->startRecording(); // turn on recording
-        backgroundColour = Colour(255,0,0);
-        prependText->setEditable(false);
-        appendText->setEditable(false);
-    }
-    
+
+    masterClock->startRecording(); // turn on recording
+    backgroundColour = Colour(255,0,0);
+    prependText->setEditable(false);
+    appendText->setEditable(false);
+    dateText->setColour(Label::textColourId, Colours::black);
+
+    graph->setRecordState(true); 
 
     repaint();
 }
@@ -670,6 +668,7 @@ void ControlPanel::startRecording()
 void ControlPanel::stopRecording()
 {
     graph->setRecordState(false); // turn off recording in processor graph
+
     masterClock->stopRecording();
     newDirectoryButton->setEnabledState(true);
     backgroundColour = Colour(58,58,58);
@@ -677,6 +676,8 @@ void ControlPanel::stopRecording()
     prependText->setEditable(true);
     appendText->setEditable(true);
 
+    recordButton->setToggleState(false,false);
+
     repaint();
 }
 
@@ -684,40 +685,7 @@ void ControlPanel::buttonClicked(Button* button)
 
 {
     
-    if (button == recordButton)
-    {
-        std::cout << "Record button pressed." << std::endl;
-        if (recordButton->getToggleState())
-        {
-
-            startRecording();
-            playButton->setToggleState(true, false);
-
-        }
-        else
-        {
-            stopRecording();
-        }
-
-        dateText->setColour(Label::textColourId, Colours::black);
-
-    }
-    else if (button == playButton)
-    {
-        std::cout << "Play button pressed." << std::endl;
-        if (!playButton->getToggleState())
-        {
-            if (recordButton->getToggleState())
-            {
-                recordButton->setToggleState(false,false);
-                stopRecording();
-                //newDirectoryButton->setEnabledState(true);
-            }
-
-        }
-
-    }
-    else if (button == newDirectoryButton && newDirectoryButton->getEnabledState())
+    if (button == newDirectoryButton && newDirectoryButton->getEnabledState())
     {
         graph->getRecordNode()->newDirectoryNeeded = true;
         newDirectoryButton->setEnabledState(false);
@@ -729,67 +697,68 @@ void ControlPanel::buttonClicked(Button* button)
 
     }
 
-    if (playButton->getToggleState())
+    if (button == playButton)
     {
-
-        if (!audio->callbacksAreActive())
+        if (playButton->getToggleState())
         {
 
-            if (graph->enableProcessors())
+            if (graph->enableProcessors()) // start the processor graph
             {
-                
-                //std::cout << "Enabling processors from " << getThreadName() << " thread." << std::endl;
-                
-                if (recordButton->getToggleState())
-                    graph->setRecordState(true);
-
-                stopTimer();
-                
                 audio->beginCallbacks();
                 masterClock->start();
+                audioEditor->disable();
                 
+                stopTimer();
                 startTimer(250); // refresh every 250 ms
 
             }
-
-        }
-        else
-        {
+        } else {
 
             if (recordButton->getToggleState())
             {
-                graph->setRecordState(true); //getRecordNode()->setParameter(1,10.0f);
+                stopRecording();
             }
 
-        }
-
-    }
-    else
-    {
-
-        if (audio->callbacksAreActive())
-        {
-            
-            std::cout << "Control panel requesting to end callbacks." << std::endl;
-            
             audio->endCallbacks();
-            
-            std::cout << "Control panel requesting to disable processors." << std::endl;
             graph->disableProcessors();
-            
             refreshMeters();
             masterClock->stop();
             stopTimer();
             startTimer(60000); // back to refresh every minute
-
+            audioEditor->enable();
+            
         }
 
+        return;
     }
 
-    if (playButton->getToggleState())
-        audioEditor->disable();
-    else
-        audioEditor->enable();
+    if (button == recordButton)
+    {
+        if (recordButton->getToggleState())
+        {
+            if (playButton->getToggleState())
+            {
+                startRecording();
+            } else {
+                if (graph->enableProcessors()) // start the processor graph
+                {
+                    audio->beginCallbacks();
+                    masterClock->start();
+                    audioEditor->disable();
+                    
+                    stopTimer();
+                    startTimer(250); // refresh every 250 ms
+
+                    startRecording();
+
+                    playButton->setToggleState(true,false);
+
+                }
+            }
+        } else {
+            stopRecording();
+        }
+    }     
 
 }
 
-- 
GitLab