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