Skip to content
Snippets Groups Projects
Commit d04adb49 authored by kmichaelfox's avatar kmichaelfox
Browse files

Rewrite subprocessor filtering functionality

parent 330f0eeb
No related branches found
No related tags found
No related merge requests found
......@@ -493,6 +493,11 @@ int LfpDisplayCanvas::getNumChannelsVisible()
return lfpDisplay->drawableChannels.size();
}
int LfpDisplayCanvas::getChannelSubprocessorIdx(int channel)
{
return processor->getDataChannel(channel)->getSubProcessorIdx();
}
const float LfpDisplayCanvas::getYCoord(int chan, int samp)
{
return *screenBuffer->getReadPointer(chan, samp);
......@@ -577,6 +582,11 @@ void LfpDisplayCanvas::setDrawableSampleRate(float samplerate)
lfpDisplay->setDisplayedSampleRate(samplerate);
}
void LfpDisplayCanvas::setDrawableSubprocessor(int idx)
{
lfpDisplay->setDisplayedSubprocessor(idx);
}
void LfpDisplayCanvas::redraw()
{
fullredraw=true;
......@@ -1956,6 +1966,7 @@ void LfpDisplay::setNumChannels(int numChannels)
//lfpInfo->setColour(channelColours[i % channelColours.size()]);
lfpInfo->setRange(range[options->getChannelType(i)]);
lfpInfo->setChannelHeight(canvas->getChannelHeight());
lfpInfo->setSubprocessorIdx(canvas->getChannelSubprocessorIdx(i));
addAndMakeVisible(lfpInfo);
......@@ -2249,6 +2260,16 @@ void LfpDisplay::setDisplayedSampleRate(float samplerate)
drawableSampleRate = samplerate;
}
int LfpDisplay::getDisplayedSubprocessor()
{
return drawableSubprocessorIdx;
}
void LfpDisplay::setDisplayedSubprocessor(int subProcessorIdx)
{
drawableSubprocessorIdx = subProcessorIdx;
}
bool LfpDisplay::getChannelsReversed()
{
return channelsReversed;
......@@ -2502,8 +2523,9 @@ void LfpDisplay::rebuildDrawableChannelsList()
// iterate over all channels and select drawable ones
for (size_t i = 0; i < channels.size(); i++)
{
// if channel[i] is not the right samplerate, hide it and continue
if (canvas->getChannelSampleRate(i) != getDisplayedSampleRate())
// std::cout << "\tchannel " << i << " has subprocessor index of " << channelInfo[i]->getSubprocessorIdx() << std::endl;
// if channel[i] is not sourced from the correct subprocessor, then hide it and continue
if (channelInfo[i]->getSubprocessorIdx() != getDisplayedSubprocessor())
{
channels[i]->setHidden(true);
channelInfo[i]->setHidden(true);
......
......@@ -107,6 +107,13 @@ public:
/** Delegates a samplerate for drawing to the LfpDisplay referenced by this canvas */
void setDrawableSampleRate(float samplerate);
/** Returns the subprocessor index of the given channel */
int getChannelSubprocessorIdx(int channel);
/** Delegates a subprocessor index for drawing to the LfpDisplay referenced by this
this canvas */
void setDrawableSubprocessor(int idx);
const float getXCoord(int chan, int samp);
const float getYCoord(int chan, int samp);
......@@ -467,6 +474,10 @@ public:
*/
void setDisplayedSampleRate(float samplerate);
int getDisplayedSubprocessor();
void setDisplayedSubprocessor(int subProcessorIdx);
/** Caches a new channel height without updating the channels */
void cacheNewChannelHeight(int r);
......@@ -574,6 +585,7 @@ private:
int displaySkipAmt;
int cachedDisplayChannelHeight; // holds a channel height if reset during single channel focus
float drawableSampleRate;
int drawableSubprocessorIdx;
int totalHeight;
......@@ -712,6 +724,7 @@ protected:
class LfpChannelDisplayInfo : public LfpChannelDisplay,
public Button::Listener
{
friend class LfpDisplay;
public:
LfpChannelDisplayInfo(LfpDisplayCanvas*, LfpDisplay*, LfpDisplayOptions*, int channelNumber);
......@@ -733,6 +746,10 @@ public:
/** Sets the sample rate associated with this channel */
void setChannelSampleRate(int samplerate);
int getSubprocessorIdx() { return subProcessorIdx; }
void setSubprocessorIdx(int subProcessorIdx_) { subProcessorIdx = subProcessorIdx_; }
/** Updates the parent LfpDisplay that the track vertical zoom should update */
virtual void mouseDrag(const MouseEvent &event) override;
......@@ -747,6 +764,7 @@ private:
float x, y;
int samplerate;
int subProcessorIdx;
ScopedPointer<UtilityButton> enableButton;
......
......@@ -35,14 +35,21 @@ LfpDisplayEditor::LfpDisplayEditor(GenericProcessor* parentNode, bool useDefault
desiredWidth = 180;
subprocessorSelectionLabel = new Label("Display subprocessor sample rate", "Display Subproc. Sample Rate");
subprocessorSelectionLabel->setBounds(10, 25, 140, 20);
addAndMakeVisible(subprocessorSelectionLabel);
subprocessorSelection = new ComboBox("Subprocessor sample rate");
subprocessorSelection->setBounds(subprocessorSelectionLabel->getX()+5, subprocessorSelectionLabel->getBottom(), 60, 22);
// subprocessorSelection->setBounds(subprocessorSelectionLabel->getX()+5, subprocessorSelectionLabel->getBottom(), 60, 22);
subprocessorSelection->setBounds(10, 30, 50, 22);
subprocessorSelection->addListener(this);
addAndMakeVisible(subprocessorSelection);
subprocessorSelectionLabel = new Label("Display subprocessor sample rate", "Display Subproc.");
// subprocessorSelectionLabel->setBounds(10, 25, 140, 20);
subprocessorSelectionLabel->setBounds(subprocessorSelection->getRight(), subprocessorSelection->getY(), 100, 20);
addAndMakeVisible(subprocessorSelectionLabel);
subprocessorSampleRateLabel = new Label("Subprocessor sample rate label", "Sample Rate:");
subprocessorSampleRateLabel->setFont(Font(Font::getDefaultSerifFontName(), 14, italic));
subprocessorSampleRateLabel->setBounds(subprocessorSelection->getX(), subprocessorSelection->getBottom() + 10, 200, 40);
addAndMakeVisible(subprocessorSampleRateLabel);
}
LfpDisplayEditor::~LfpDisplayEditor()
......@@ -67,7 +74,8 @@ void LfpDisplayEditor::buttonClicked(Button *button)
// (else) initialization errors. lots of time-critical cross dependencies here,
// should be cleaned up
updateSubprocessorSelectorOptions();
((LfpDisplayCanvas*)canvas.get())->setDrawableSampleRate(*(inputSampleRates.begin() + (subprocessorSelection->getSelectedId() - 1)));
((LfpDisplayCanvas *)canvas.get())->setDrawableSubprocessor(*(inputSubprocessorIndices.begin() + (subprocessorSelection->getSelectedId() - 1)));
// ((LfpDisplayCanvas*)canvas.get())->setDrawableSampleRate(*(inputSampleRates.begin() + (subprocessorSelection->getSelectedId() - 1)));
canvas->update();
......@@ -90,50 +98,57 @@ void LfpDisplayEditor::comboBoxChanged(juce::ComboBox *cb)
{
if (cb == subprocessorSelection)
{
setCanvasDrawableSampleRate(cb->getSelectedId() - 1);
// setCanvasDrawableSampleRate(cb->getSelectedId() - 1);
setCanvasDrawableSubprocessor(cb->getSelectedId() - 1);
}
}
void LfpDisplayEditor::updateSubprocessorSelectorOptions()
{
// clear out the old data
inputSubprocessorIndices.clear();
inputSampleRates.clear();
subprocessorSelection->clear(dontSendNotification);
// get a list of all the sample rates
for (int i = 0, len = lfpProcessor->getNumInputs(); i < len; ++i)
for (int i = 0, len = lfpProcessor->getTotalDataChannels(); i < len; ++i)
{
float samplerate = lfpProcessor->getDataChannel(i)->getSampleRate();
bool success = inputSampleRates.add(samplerate);
int subProcessorIdx = lfpProcessor->getDataChannel(i)->getSubProcessorIdx();
// if (success) std::cout << "\t\tadding sample rate " << samplerate << " ... size = " << inputSampleRates.size() << std::endl;
bool success = inputSubprocessorIndices.add(subProcessorIdx);
if (success) inputSampleRates.set(subProcessorIdx, lfpProcessor->getDataChannel(i)->getSampleRate());
// if (success) std::cout << "\t\tadding subprocessor index " << subProcessorIdx << std::endl;
}
// if the source changes, default to first samplerate given
int sampleRateToSet = -1;
if (inputSampleRates.size() > 0)
int subprocessorToSet = -1;
if (inputSubprocessorIndices.size() > 0)
{
sampleRateToSet = 0;
subprocessorToSet = 0;
}
// add the samplerate options to the combobox
for (int i = 0; i < inputSampleRates.size(); ++i)
for (int i = 0; i < inputSubprocessorIndices.size(); ++i)
{
subprocessorSelection->addItem(String(*(inputSampleRates.begin()+i)), i+1);
subprocessorSelection->addItem (String (*(inputSubprocessorIndices.begin() + i)), i + 1);
}
if (sampleRateToSet >= 0)
if (subprocessorToSet >= 0)
{
subprocessorSelection->setSelectedId(sampleRateToSet + 1, dontSendNotification);
setCanvasDrawableSampleRate(sampleRateToSet);
subprocessorSelection->setSelectedId(subprocessorToSet + 1, dontSendNotification);
String sampleRateLabelText = "Sample Rate: ";
sampleRateLabelText += String(inputSampleRates[*(inputSubprocessorIndices.begin()+subprocessorToSet)]);
subprocessorSampleRateLabel->setText(sampleRateLabelText, dontSendNotification);
setCanvasDrawableSubprocessor(subprocessorToSet);
}
}
void LfpDisplayEditor::setCanvasDrawableSampleRate(int index)
void LfpDisplayEditor::setCanvasDrawableSubprocessor(int index)
{
if (canvas)
{
((LfpDisplayCanvas*)canvas.get())->setDrawableSampleRate(*(inputSampleRates.begin() + (index)));
((LfpDisplayCanvas *)canvas.get())->setDrawableSubprocessor(*(inputSubprocessorIndices.begin() + index));
}
}
......@@ -73,7 +73,8 @@ public:
private:
SortedSet<float> inputSampleRates; // hold the possible subprocessor sample rates
HashMap<int, float> inputSampleRates; // hold the possible subprocessor sample rates
SortedSet<int> inputSubprocessorIndices;
LfpDisplayNode* lfpProcessor;
......@@ -81,10 +82,12 @@ private:
ScopedPointer<Label> subprocessorSelectionLabel;
ScopedPointer<ComboBox> subprocessorSelection;
/** Communicates the drawable sample rate information to the canvas, if
one exists
ScopedPointer<Label> subprocessorSampleRateLabel;
/** Communicates the drawable subprocessor information to the canvas, if
one exists
*/
void setCanvasDrawableSampleRate(int index);
void setCanvasDrawableSubprocessor(int index);
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(LfpDisplayEditor);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment