Skip to content
Snippets Groups Projects
Commit de073638 authored by jsiegle's avatar jsiegle
Browse files

Start to allow SpikeDetector to load and save parameters

parent eb55d92c
Branches
Tags
No related merge requests found
......@@ -171,6 +171,7 @@ void SpikeDetectorEditor::sliderEvent(Slider* slider)
}
void SpikeDetectorEditor::buttonEvent(Button* button)
{
......
......@@ -58,6 +58,8 @@ public:
{
chan = i;
}
private:
void paintButton(Graphics& g, bool isMouseOver, bool isButtonDown);
......@@ -150,6 +152,8 @@ public:
void channelChanged(int chan);
bool addElectrode(int nChans);
private:
void drawElectrodeButtons(int);
......@@ -169,7 +173,7 @@ private:
OwnedArray<ElectrodeButton> electrodeButtons;
Array<ElectrodeEditorButton*> electrodeEditorButtons;
bool addElectrode(int nChans);
void removeElectrode(int index);
void editElectrode(int index, int chan, int newChan);
......
......@@ -100,6 +100,9 @@ void SpikeDetector::updateSettings()
bool SpikeDetector::addElectrode(int nChans)
{
std::cout << "Adding electrode with " << nChans << " channels." << std::endl;
int firstChan;
if (electrodes.size() == 0)
......@@ -214,6 +217,18 @@ int SpikeDetector::getChannel(int index, int i)
return *(electrodes[index]->channels+i);
}
void SpikeDetector::setChannelActive(int electrodeIndex, int i, bool active)
{
*(electrodes[electrodeIndex]->isActive+i) = active;
}
bool SpikeDetector::isChannelActive(int electrodeIndex, int i)
{
return *(electrodes[electrodeIndex]->isActive+i);
}
void SpikeDetector::setChannelThreshold(int electrodeNum, int channelNum, float thresh)
{
currentElectrode = electrodeNum;
......@@ -557,3 +572,69 @@ bool SpikeDetector::samplesAvailable(int& nSamples)
}
void SpikeDetector::saveCustomParametersToXml(XmlElement* parentElement)
{
for (int i = 0; i < electrodes.size(); i++)
{
XmlElement* electrodeNode = parentElement->createNewChildElement("ELECTRODE");
electrodeNode->setAttribute("name", electrodes[i]->name);
electrodeNode->setAttribute("numChannels", electrodes[i]->numChannels);
electrodeNode->setAttribute("prePeakSamples", electrodes[i]->prePeakSamples);
electrodeNode->setAttribute("postPeakSamples", electrodes[i]->postPeakSamples);
for (int j = 0; j < electrodes[i]->numChannels; j++)
{
XmlElement* channelNode = electrodeNode->createNewChildElement("CHANNEL");
channelNode->setAttribute("ch",*(electrodes[i]->channels+j));
channelNode->setAttribute("thresh",*(electrodes[i]->thresholds+j));
channelNode->setAttribute("isActive",*(electrodes[i]->isActive+j));
}
}
}
void SpikeDetector::loadCustomParametersFromXml()
{
if (parametersAsXml != nullptr)
{
// use parametersAsXml to restore state
int electrodeIndex = -1;
forEachXmlChildElement(*parametersAsXml, xmlNode)
{
if (xmlNode->hasTagName("ELECTRODE"))
{
electrodeIndex++;
int channelsPerElectrode = xmlNode->getIntAttribute("numChannels");
SpikeDetectorEditor* sde = (SpikeDetectorEditor*) getEditor();
sde->addElectrode(channelsPerElectrode);
//setElectrodeName(electrodeIndex, xmlNode->getStringAttribute("name"));
int channelIndex = -1;
forEachXmlChildElement(*parametersAsXml, channelNode)
{
if (channelNode->hasTagName("CHANNEL"))
{
channelIndex++;
// setChannel(electrodeIndex, channelIndex, channelNode->getIntAttribute("ch"));
//setChannelThreshold(electrodeIndex, channelIndex, channelNode->getDoubleAttribute("thresh"));
// setChannelActive(electrodeIndex, channelIndex, channelNode->getBoolAttribute("isActive"));
}
}
}
}
}
}
\ No newline at end of file
......@@ -108,6 +108,11 @@ public:
/** Sets the name of a given electrode. */
void setElectrodeName(int index, String newName);
/** */
void setChannelActive(int electrodeIndex, int channelNum, bool active);
/** */
bool isChannelActive(int electrodeIndex, int channelNum);
// RETURN STRING ARRAYS //
......@@ -121,6 +126,9 @@ public:
double getChannelThreshold(int electrodeNum, int channelNum);
void saveCustomParametersToXml(XmlElement* parentElement);
void loadCustomParametersFromXml();
private:
/** Reference to a continuous buffer. */
AudioSampleBuffer& dataBuffer;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment