void SpikeDetectorEditor::buttonEvent(Button* button) { if (electrodeButtons.contains((ElectrodeButton*) button)) { if (electrodeEditorButtons[0]->getToggleState()) // EDIT is active { ElectrodeButton* eb = (ElectrodeButton*) button; int electrodeNum = eb->getChannelNum()-1; // std::cout << "Channel number: " << electrodeNum << std::endl; Array<int> a; a.add(electrodeNum); channelSelector->setActiveChannels(a); SpikeDetector* processor = (SpikeDetector*) getProcessor(); thresholdSlider->setActive(true); thresholdSlider->setValue(processor->getChannelThreshold(electrodeList->getSelectedItemIndex(), electrodeButtons.indexOf((ElectrodeButton*) button))); } else { SpikeDetector* processor = (SpikeDetector*) getProcessor(); ElectrodeButton* eb = (ElectrodeButton*) button; int electrodeNum = electrodeList->getSelectedItemIndex(); int channelNum = electrodeButtons.indexOf(eb); processor->setChannelActive(electrodeNum, channelNum, button->getToggleState()); std::cout << "Disabling channel " << channelNum << " of electrode " << electrodeNum << std::endl; } } int num = numElectrodes->getText().getIntValue(); if (button == upButton) { numElectrodes->setText(String(++num), sendNotification); return; } else if (button == downButton) { if (num > 1) numElectrodes->setText(String(--num), sendNotification); return; } else if (button == plusButton) { // std::cout << "Plus button pressed!" << std::endl; if (acquisitionIsActive) { CoreServices::sendStatusMessage("Stop acquisition before adding electrodes."); return; } int type = electrodeTypes->getSelectedId(); // std::cout << type << std::endl; int nChans; switch (type) { case 1: nChans = 1; break; case 2: nChans = 2; break; case 3: nChans = 4; break; default: nChans = 1; } for (int n = 0; n < num; n++) { if (!addElectrode(nChans)) { CoreServices::sendStatusMessage("Not enough channels to add electrode."); } } electrodeEditorButtons[1]->setToggleState(false, dontSendNotification); CoreServices::updateSignalChain(this); CoreServices::highlightEditor(this); return; } else if (button == electrodeEditorButtons[0]) // EDIT { Array<int> activeChannels; for (int i = 0; i < electrodeButtons.size(); i++) { if (button->getToggleState()) { electrodeButtons[i]->setToggleState(false, dontSendNotification); electrodeButtons[i]->setRadioGroupId(299); channelSelector->activateButtons(); channelSelector->setRadioStatus(true); } else { electrodeButtons[i]->setToggleState(true, dontSendNotification); electrodeButtons[i]->setRadioGroupId(0); channelSelector->inactivateButtons(); channelSelector->setRadioStatus(false); activeChannels.add(electrodeButtons[i]->getChannelNum()-1); } } if (!button->getToggleState()) { thresholdSlider->setActive(false); // This will be -1 with nothing selected int selectedItemIndex = electrodeList->getSelectedItemIndex(); if (selectedItemIndex != -1) { drawElectrodeButtons(selectedItemIndex); } else { electrodeButtons.clear(); } } // channelSelector->setActiveChannels(activeChannels); return; } else if (button == electrodeEditorButtons[1]) // MONITOR { Button* audioMonitorButton = electrodeEditorButtons[1]; channelSelector->clearAudio(); SpikeDetector* processor = (SpikeDetector*) getProcessor(); Array<SimpleElectrode*> electrodes = processor->getElectrodes(); for (int i = 0; i < electrodes.size(); i++) { SimpleElectrode* e = electrodes[i]; e->isMonitored = false; } SimpleElectrode* e = processor->getActiveElectrode(); if (e != nullptr) { e->isMonitored = audioMonitorButton->getToggleState(); for (int i = 0; i < e->numChannels; i++) { std::cout << "Channel " << e->channels[i] << std::endl; int channelNum = e->channels[i]; channelSelector->setAudioStatus(channelNum, audioMonitorButton->getToggleState()); } } else { audioMonitorButton->setToggleState(false, dontSendNotification); } return; } else if (button == electrodeEditorButtons[2]) // DELETE { if (acquisitionIsActive) { CoreServices::sendStatusMessage("Stop acquisition before deleting electrodes."); return; } removeElectrode(electrodeList->getSelectedItemIndex()); CoreServices::updateSignalChain(this); CoreServices::highlightEditor(this); return; } }
void SpikeDetectorEditor::buttonEvent(Button* button) { if (electrodeEditorButtons[0]->getToggleState()) // EDIT is active { std::cout << "Editing active." << std::endl; if (electrodeButtons.contains((ElectrodeButton*) button)) { ElectrodeButton* eb = (ElectrodeButton*) button; int electrodeNum = eb->getChannelNum()-1; std::cout << "Channel number: " << electrodeNum << std::endl; Array<int> a; a.add(electrodeNum); channelSelector->setActiveChannels(a); SpikeDetector* processor = (SpikeDetector*) getProcessor(); thresholdSlider->setActive(true); thresholdSlider->setValue(processor->getChannelThreshold(electrodeList->getSelectedItemIndex(), electrodeButtons.indexOf((ElectrodeButton*) button))); } } int num = numElectrodes->getText().getIntValue(); if (button == upButton) { numElectrodes->setText(String(++num), true); return; } else if (button == downButton) { if (num > 1) numElectrodes->setText(String(--num), true); return; } else if (button == plusButton) { // std::cout << "Plus button pressed!" << std::endl; int type = electrodeTypes->getSelectedId(); std::cout << type << std::endl; int nChans; switch (type) { case 1: nChans = 1; break; case 2: nChans = 2; break; case 3: nChans = 4; break; default: nChans = 1; } for (int n = 0; n < num; n++) { if (!addElectrode(nChans)) { sendActionMessage("Not enough channels to add electrode."); } } refreshElectrodeList(); if (electrodeList->getNumItems() > 0) { electrodeList->setSelectedId(electrodeList->getNumItems(), true); electrodeList->setText(electrodeList->getItemText(electrodeList->getNumItems()-1)); lastId = electrodeList->getNumItems(); electrodeList->setEditableText(true); drawElectrodeButtons(electrodeList->getNumItems()-1); } getEditorViewport()->makeEditorVisible(this, true, true); return; } else if (button == electrodeEditorButtons[0]) // EDIT { Array<int> activeChannels; for (int i = 0; i < electrodeButtons.size(); i++) { if (button->getToggleState()) { electrodeButtons[i]->setToggleState(false, false); electrodeButtons[i]->setRadioGroupId(299); channelSelector->activateButtons(); channelSelector->setRadioStatus(true); } else { electrodeButtons[i]->setToggleState(true, false); electrodeButtons[i]->setRadioGroupId(0); channelSelector->inactivateButtons(); channelSelector->setRadioStatus(false); activeChannels.add(electrodeButtons[i]->getChannelNum()-1); } } if (!button->getToggleState()) { thresholdSlider->setActive(false); // This will be -1 with nothing selected int selectedItemIndex = electrodeList->getSelectedItemIndex(); if (selectedItemIndex != -1) { drawElectrodeButtons(selectedItemIndex); } else { electrodeButtons.clear(); } } // channelSelector->setActiveChannels(activeChannels); return; } else if (button == electrodeEditorButtons[1]) // MONITOR { return; } else if (button == electrodeEditorButtons[2]) // DELETE { removeElectrode(electrodeList->getSelectedItemIndex()); getEditorViewport()->makeEditorVisible(this, true, true); return; } }