From ff2dbd28c7d20535776feb6c77b5d286d6b8b0d1 Mon Sep 17 00:00:00 2001
From: jsiegle <jsiegle@mit.edu>
Date: Sun, 19 Jan 2014 15:30:24 -0500
Subject: [PATCH] Fix issues with loading SpikeDetector parameters

---
 Source/Processors/Editors/ChannelSelector.cpp |  2 +-
 .../Editors/SpikeDetectorEditor.cpp           | 24 +++++++++++--------
 .../Processors/Editors/SpikeDetectorEditor.h  |  8 +++----
 Source/Processors/GenericProcessor.cpp        |  5 ++--
 Source/Processors/SpikeDetector.cpp           | 17 ++++++++-----
 5 files changed, 32 insertions(+), 24 deletions(-)

diff --git a/Source/Processors/Editors/ChannelSelector.cpp b/Source/Processors/Editors/ChannelSelector.cpp
index 1433cd15e..569018be7 100755
--- a/Source/Processors/Editors/ChannelSelector.cpp
+++ b/Source/Processors/Editors/ChannelSelector.cpp
@@ -302,7 +302,7 @@ Array<int> ChannelSelector::getActiveChannels()
 void ChannelSelector::setActiveChannels(Array<int> a)
 {
 
-    std::cout << "Setting active channels!" << std::endl;
+    //std::cout << "Setting active channels!" << std::endl;
 
     for (int i = 0; i < parameterButtons.size(); i++)
     {
diff --git a/Source/Processors/Editors/SpikeDetectorEditor.cpp b/Source/Processors/Editors/SpikeDetectorEditor.cpp
index 9b6ad49ed..47e23390a 100755
--- a/Source/Processors/Editors/SpikeDetectorEditor.cpp
+++ b/Source/Processors/Editors/SpikeDetectorEditor.cpp
@@ -337,19 +337,23 @@ void SpikeDetectorEditor::buttonEvent(Button* button)
 
 void SpikeDetectorEditor::channelChanged(int chan)
 {
-    //std::cout << "New channel: " << chan << std::endl;
 
-    for (int i = 0; i < electrodeButtons.size(); i++)
+    if (electrodeEditorButtons[0]->getToggleState()) // editing is active
     {
-        if (electrodeButtons[i]->getToggleState())
+        std::cout << "New channel: " << chan << std::endl;
+
+        for (int i = 0; i < electrodeButtons.size(); i++)
         {
-            electrodeButtons[i]->setChannelNum(chan);
-            electrodeButtons[i]->repaint();
+            if (electrodeButtons[i]->getToggleState())
+            {
+                electrodeButtons[i]->setChannelNum(chan);
+                electrodeButtons[i]->repaint();
 
-            SpikeDetector* processor = (SpikeDetector*) getProcessor();
-            processor->setChannel(electrodeList->getSelectedItemIndex(),
-                                  i,
-                                  chan-1);
+                SpikeDetector* processor = (SpikeDetector*) getProcessor();
+                processor->setChannel(electrodeList->getSelectedItemIndex(),
+                                      i,
+                                      chan-1);
+            }
         }
     }
 
@@ -548,7 +552,7 @@ ThresholdSlider::ThresholdSlider(Font f) : Slider("name"), font(f)
 
     setSliderStyle(Slider::Rotary);
     setRange(25.0f,400.0f,25.0f);
-    setValue(75.0f);
+   // setValue(75.0f);
     setTextBoxStyle(Slider::NoTextBox, false, 40, 20);
 
 }
diff --git a/Source/Processors/Editors/SpikeDetectorEditor.h b/Source/Processors/Editors/SpikeDetectorEditor.h
index 5e955937c..36363951b 100755
--- a/Source/Processors/Editors/SpikeDetectorEditor.h
+++ b/Source/Processors/Editors/SpikeDetectorEditor.h
@@ -94,15 +94,15 @@ public:
     void channelChanged(int chan);
 
     bool addElectrode(int nChans);
+    void removeElectrode(int index);
 
     void checkSettings();
+    void refreshElectrodeList();
 
 private:
 
     void drawElectrodeButtons(int);
 
-    void refreshElectrodeList();
-
     ComboBox* electrodeTypes;
     ComboBox* electrodeList;
     Label* numElectrodes;
@@ -115,9 +115,7 @@ private:
 
     OwnedArray<ElectrodeButton> electrodeButtons;
     Array<ElectrodeEditorButton*> electrodeEditorButtons;
-
-
-    void removeElectrode(int index);
+    
     void editElectrode(int index, int chan, int newChan);
 
     int lastId;
diff --git a/Source/Processors/GenericProcessor.cpp b/Source/Processors/GenericProcessor.cpp
index ef13adae8..16ca2df00 100755
--- a/Source/Processors/GenericProcessor.cpp
+++ b/Source/Processors/GenericProcessor.cpp
@@ -684,11 +684,12 @@ void GenericProcessor::loadFromXml()
 
     update(); // make sure settings are updated
 
-    std::cout << "Loading parameters for " << name << std::endl;
-
+  
     if (!paramsWereLoaded)
     {
 
+        std::cout << "Loading parameters for " << name << std::endl;
+
         if (parametersAsXml != nullptr)
         {
             // use parametersAsXml to restore state
diff --git a/Source/Processors/SpikeDetector.cpp b/Source/Processors/SpikeDetector.cpp
index 7c7d00450..61d2ae8e9 100755
--- a/Source/Processors/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector.cpp
@@ -229,7 +229,7 @@ void SpikeDetector::setChannelActive(int electrodeIndex, int subChannel, bool ac
     currentElectrode = electrodeIndex;
     currentChannelIndex = subChannel;
 
-    std::cout << "Setting parameter 98 to " << active << std::endl;
+    std::cout << "Setting channel active to " << active << std::endl;
 
     if (active)
         setParameter(98, 1);
@@ -248,6 +248,7 @@ void SpikeDetector::setChannelThreshold(int electrodeNum, int channelNum, float
 {
     currentElectrode = electrodeNum;
     currentChannelIndex = channelNum;
+    std::cout << "Setting electrode " << electrodeNum << " channel threshold " << channelNum << " to " << thresh << std::endl;
     setParameter(99, thresh);
 }
 
@@ -624,10 +625,13 @@ void SpikeDetector::saveCustomParametersToXml(XmlElement* parentElement)
 void SpikeDetector::loadCustomParametersFromXml()
 {
 
-    if (parametersAsXml != nullptr)
+   
+    if (parametersAsXml != nullptr) // prevent double-loading
     {
         // use parametersAsXml to restore state
 
+        SpikeDetectorEditor* sde = (SpikeDetectorEditor*) getEditor();
+
         int electrodeIndex = -1;
 
         forEachXmlChildElement(*parametersAsXml, xmlNode)
@@ -637,12 +641,14 @@ void SpikeDetector::loadCustomParametersFromXml()
 
                 electrodeIndex++;
 
+                std::cout << "ELECTRODE>>>" << std::endl;
+
                 int channelsPerElectrode = xmlNode->getIntAttribute("numChannels");
 
-                SpikeDetectorEditor* sde = (SpikeDetectorEditor*) getEditor();
                 sde->addElectrode(channelsPerElectrode);
 
                 setElectrodeName(electrodeIndex+1, xmlNode->getStringAttribute("name"));
+                sde->refreshElectrodeList();
 
                 int channelIndex = -1;
 
@@ -663,9 +669,8 @@ void SpikeDetector::loadCustomParametersFromXml()
 
             }
         }
-    }
 
-    SpikeDetectorEditor* ed = (SpikeDetectorEditor*) getEditor();
-    ed->checkSettings();
+        sde->checkSettings();
+    }
 
 }
-- 
GitLab