-
Jakob Voigts authored
used the term 'spread' as in the neuralynx software for now
Jakob Voigts authoredused the term 'spread' as in the neuralynx software for now
LfpDisplayCanvas.h 4.76 KiB
/*
------------------------------------------------------------------
This file is part of the Open Ephys GUI
Copyright (C) 2013 Open Ephys
------------------------------------------------------------------
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __LFPDISPLAYCANVAS_H_B711873A__
#define __LFPDISPLAYCANVAS_H_B711873A__
#include "../../../JuceLibraryCode/JuceHeader.h"
#include "../LfpDisplayNode.h"
#include "Visualizer.h"
class LfpDisplayNode;
class LfpTimescale;
class LfpDisplay;
class LfpChannelDisplay;
/**
Displays multiple channels of continuous data.
@see LfpDisplayNode, LfpDisplayEditor
*/
class LfpDisplayCanvas : public Visualizer,
public ComboBox::Listener
{
public:
LfpDisplayCanvas(LfpDisplayNode* n);
~LfpDisplayCanvas();
void beginAnimation();
void endAnimation();
void refreshState();
void update();
void setParameter(int, float);
void setParameter(int, int, int, float) {}
void paint(Graphics& g);
void refresh();
void resized();
float getXCoord(int chan, int samp);
float getYCoord(int chan, int samp);
int screenBufferIndex;
int lastScreenBufferIndex;
void comboBoxChanged(ComboBox* cb);
void saveVisualizerParameters(XmlElement* xml);
void loadVisualizerParameters(XmlElement* xml);
private:
float sampleRate;
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
//float waves[MAX_N_CHAN][MAX_N_SAMP*2]; // we need an x and y point for each sample
LfpDisplayNode* processor;
AudioSampleBuffer* displayBuffer;
AudioSampleBuffer* screenBuffer;
MidiBuffer* eventBuffer;
ScopedPointer<LfpTimescale> timescale;
ScopedPointer<LfpDisplay> lfpDisplay;
ScopedPointer<Viewport> viewport;
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();
int displayBufferIndex;
int displayBufferSize;
int scrollBarThickness;
int nChans;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(LfpDisplayCanvas);
};
class LfpTimescale : public Component
{
public:
LfpTimescale(LfpDisplayCanvas*);
~LfpTimescale();
void paint(Graphics& g);
void setTimebase(float t);
private:
LfpDisplayCanvas* canvas;
float timebase;
Font font;
StringArray labels;
};
class LfpDisplay : public Component
{
public:
LfpDisplay(LfpDisplayCanvas*, Viewport*);
~LfpDisplay();
void setNumChannels(int numChannels);
int getTotalHeight()
{
return totalHeight;
}
void paint(Graphics& g);
void refresh();
void resized();
void mouseDown(const MouseEvent& event);
void setRange(float range);
void setChannelHeight(float r);
private:
int numChans;
int totalHeight;
LfpDisplayCanvas* canvas;
Viewport* viewport;
Array<LfpChannelDisplay*> channels;
Array<Colour> channelColours;
float range;
};
class LfpChannelDisplay : public Component
{
public:
LfpChannelDisplay(LfpDisplayCanvas*, int channelNumber);
~LfpChannelDisplay();
void paint(Graphics& g);
void select();
void deselect();
void setColour(Colour c);
void setChannelHeight(int);
int getChannelHeight();
void setChannelOverlap(int);
int getChannelOverlap();
void setRange(float range);
private:
LfpDisplayCanvas* canvas;
bool isSelected;
int chan;
Font channelFont;
Colour lineColour;
int channelOverlap;
int channelHeight;
float ch;
float range;
};
#endif // __LFPDISPLAYCANVAS_H_B711873A__