From cde648d377910acc3f5506131eb8659649ab6088 Mon Sep 17 00:00:00 2001
From: Jakob Voigts <jvoigts@jvoigts-x300.(none)>
Date: Sat, 18 May 2013 12:34:55 -0400
Subject: [PATCH] added channel height selection used the term 'spread' as in
 the neuralynx software for now

---
 .../Visualization/LfpDisplayCanvas.cpp        | 42 +++++++++++++++++++
 .../Visualization/LfpDisplayCanvas.h          |  4 ++
 2 files changed, 46 insertions(+)

diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
index 7bbfe9dc2..dce90aaf1 100755
--- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
@@ -69,6 +69,15 @@ LfpDisplayCanvas::LfpDisplayCanvas(LfpDisplayNode* processor_) :
     timebases.add("5.0");
     timebases.add("10.0");
 
+    
+    spreads.add("10");
+    spreads.add("20");
+    spreads.add("30");
+    spreads.add("40");
+    spreads.add("50");
+    spreads.add("60");
+
+
     rangeSelection = new ComboBox("Voltage range");
     rangeSelection->addItemList(voltageRanges, 1);
     rangeSelection->setSelectedId(4,false);
@@ -81,6 +90,14 @@ LfpDisplayCanvas::LfpDisplayCanvas(LfpDisplayNode* processor_) :
     timebaseSelection->addListener(this);
     addAndMakeVisible(timebaseSelection);
 
+
+    spreadSelection = new ComboBox("Spread");
+    spreadSelection->addItemList(spreads, 1);
+    spreadSelection->setSelectedId(5,false);
+    spreadSelection->addListener(this);
+    addAndMakeVisible(spreadSelection);
+
+
     lfpDisplay->setNumChannels(nChans);
     lfpDisplay->setRange(1000.0f);
 
@@ -102,6 +119,7 @@ void LfpDisplayCanvas::resized()
 
     rangeSelection->setBounds(5,getHeight()-30,100,25);
     timebaseSelection->setBounds(175,getHeight()-30,100,25);
+    spreadSelection->setBounds(345,getHeight()-30,100,25);
 
 }
 
@@ -152,6 +170,13 @@ void LfpDisplayCanvas::comboBoxChanged(ComboBox* cb)
         lfpDisplay->setRange(voltageRanges[cb->getSelectedId()-1].getFloatValue());
         //std::cout << "Setting range to " << voltageRanges[cb->getSelectedId()-1].getFloatValue() << std::endl;
     }
+    else if (cb == spreadSelection)
+    {
+         //spread = spreads[cb->getSelectedId()-1].getFloatValue();
+         lfpDisplay->setChannelHeight(spreads[cb->getSelectedId()-1].getFloatValue());
+         lfpDisplay->resized();
+         std::cout << "Setting spread to " << spreads[cb->getSelectedId()-1].getFloatValue() << std::endl;
+    }
 
     timescale->setTimebase(timebase);
 }
@@ -333,6 +358,7 @@ void LfpDisplayCanvas::paint(Graphics& g)
     g.drawText("Voltage range (uV)",5,getHeight()-55,300,20,Justification::left, false);
 
     g.drawText("Timebase (s)",175,getHeight()-55,300,20,Justification::left, false);
+    g.drawText("Spread (px)",345,getHeight()-55,300,20,Justification::left, false);
 
 }
 
@@ -351,8 +377,10 @@ void LfpDisplayCanvas::saveVisualizerParameters(XmlElement* xml)
 
     XmlElement* xmlNode = xml->createNewChildElement("LFPDISPLAY");
 
+
     xmlNode->setAttribute("Range",rangeSelection->getSelectedId());
     xmlNode->setAttribute("Timebase",timebaseSelection->getSelectedId());
+    xmlNode->setAttribute("Spread",spreadSelection->getSelectedId());
 
     xmlNode->setAttribute("ScrollX",viewport->getViewPositionX());
     xmlNode->setAttribute("ScrollY",viewport->getViewPositionY());
@@ -367,6 +395,8 @@ void LfpDisplayCanvas::loadVisualizerParameters(XmlElement* xml)
         {
             rangeSelection->setSelectedId(xmlNode->getIntAttribute("Range"));
             timebaseSelection->setSelectedId(xmlNode->getIntAttribute("Timebase"));
+            spreadSelection->setSelectedId(xmlNode->getIntAttribute("Spread"));
+
             viewport->setViewPosition(xmlNode->getIntAttribute("ScrollX"),
                                       xmlNode->getIntAttribute("ScrollY"));
         }
@@ -559,6 +589,18 @@ void LfpDisplay::setRange(float r)
 
 }
 
+void LfpDisplay::setChannelHeight(float r)
+{
+
+    for (int i = 0; i < numChans; i++)
+    {
+
+        channels[i]->setChannelHeight(r);
+
+    }
+
+}
+
 void LfpDisplay::mouseDown(const MouseEvent& event)
 {
     //int x = event.getMouseDownX();
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.h b/Source/Processors/Visualization/LfpDisplayCanvas.h
index 6c30c3b98..89cca530a 100755
--- a/Source/Processors/Visualization/LfpDisplayCanvas.h
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.h
@@ -85,6 +85,7 @@ private:
     float timebase;
     float displayGain;
     float timeOffset;
+    float spread ; // vertical spacing between channels
 
     static const int MAX_N_CHAN = 256;  // maximum number of channels
     static const int MAX_N_SAMP = 5000; // maximum display size in pixels
@@ -101,9 +102,11 @@ private:
 
     ScopedPointer<ComboBox> timebaseSelection;
     ScopedPointer<ComboBox> rangeSelection;
+    ScopedPointer<ComboBox> spreadSelection;
 
     StringArray voltageRanges;
     StringArray timebases;
+    StringArray spreads; // option for vertical spacing between channels
 
     void refreshScreenBuffer();
     void updateScreenBuffer();
@@ -162,6 +165,7 @@ public:
     void mouseDown(const MouseEvent& event);
 
     void setRange(float range);
+    void setChannelHeight(float r);
 
 private:
     int numChans;
-- 
GitLab