@@ -28,8 +28,7 @@ using namespace OnixSourcePlugin;
2828using namespace ColourScheme ;
2929
3030NeuropixelsV1Interface::NeuropixelsV1Interface (std::shared_ptr<Neuropixels1> d, OnixSourceEditor* e, OnixSourceCanvas* c) :
31- SettingsInterface(d, e, c),
32- neuropix_info(" INFO" )
31+ SettingsInterface(d, e, c)
3332{
3433 if (d->getDeviceType () != OnixDeviceType::NEUROPIXELSV1E && d->getDeviceType () != OnixDeviceType::NEUROPIXELSV1F)
3534 {
@@ -130,20 +129,34 @@ NeuropixelsV1Interface::NeuropixelsV1Interface(std::shared_ptr<Neuropixels1> d,
130129 probeInterfaceLabel->setColour (Label::textColourId, Colours::black);
131130 addAndMakeVisible (probeInterfaceLabel.get ());
132131
133- saveJsonButton = std::make_unique<UtilityButton>(" SAVE TO JSON" );
132+ saveJsonButton = std::make_unique<UtilityButton>(" Save to JSON" );
134133 saveJsonButton->setRadius (3 .0f );
135134 saveJsonButton->setBounds (probeInterfaceRectangle->getX () + 3 , probeInterfaceRectangle->getY () + 20 , 120 , 22 );
136135 saveJsonButton->addListener (this );
137- saveJsonButton->setTooltip (" Save channel map to probeinterface .json file" );
136+ saveJsonButton->setTooltip (" Save channel map to ProbeInterface .json file" );
138137 addAndMakeVisible (saveJsonButton.get ());
139138
140- loadJsonButton = std::make_unique<UtilityButton>(" LOAD FROM JSON" );
139+ loadJsonButton = std::make_unique<UtilityButton>(" Load from JSON" );
141140 loadJsonButton->setRadius (3 .0f );
142141 loadJsonButton->setBounds (saveJsonButton->getRight () + 5 , saveJsonButton->getY (), 120 , 22 );
143142 loadJsonButton->addListener (this );
144- loadJsonButton->setTooltip (" Load channel map from probeinterface .json file" );
143+ loadJsonButton->setTooltip (" Load channel map from ProbeInterface .json file" );
145144 addAndMakeVisible (loadJsonButton.get ());
146145
146+ saveSettingsButton = std::make_unique<UtilityButton>(" Save Settings" );
147+ saveSettingsButton->setRadius (3 .0f );
148+ saveSettingsButton->setBounds (saveJsonButton->getX (), probeBrowser->getBottom () - 80 , 120 , 22 );
149+ saveSettingsButton->addListener (this );
150+ saveSettingsButton->setTooltip (" Save all Neuropixels settings to file." );
151+ addAndMakeVisible (saveSettingsButton.get ());
152+
153+ loadSettingsButton = std::make_unique<UtilityButton>(" Load Settings" );
154+ loadSettingsButton->setRadius (3 .0f );
155+ loadSettingsButton->setBounds (saveSettingsButton->getRight () + 5 , saveSettingsButton->getY (), saveSettingsButton->getWidth (), saveSettingsButton->getHeight ());
156+ loadSettingsButton->addListener (this );
157+ loadSettingsButton->setTooltip (" Load all Neuropixels settings from a file." );
158+ addAndMakeVisible (loadSettingsButton.get ());
159+
147160 electrodesLabel = std::make_unique<Label>(" ELECTRODES" , " ELECTRODES" );
148161 electrodesLabel->setFont (FontOptions (" Inter" , " Regular" , 13 .0f ));
149162 electrodesLabel->setBounds (446 , currentHeight - 20 , 100 , 20 );
@@ -294,36 +307,6 @@ NeuropixelsV1Interface::NeuropixelsV1Interface(std::shared_ptr<Neuropixels1> d,
294307
295308 currentHeight += 55 ;
296309
297- // activityViewButton = std::make_unique<UtilityButton>("VIEW");
298- // activityViewButton->setFont(fontRegularButton);
299- // activityViewButton->setRadius(3.0f);
300-
301- // activityViewButton->addListener(this);
302- // activityViewButton->setTooltip("View peak-to-peak amplitudes for each channel");
303- // addAndMakeVisible(activityViewButton.get());
304-
305- // activityViewComboBox = std::make_unique<ComboBox>("ActivityView Combo Box");
306-
307- // if (settings->availableLfpGains.size() > 0)
308- // {
309- // activityViewComboBox->setBounds(450, currentHeight, 65, 22);
310- // activityViewComboBox->addListener(this);
311- // activityViewComboBox->addItem("AP", 1);
312- // activityViewComboBox->addItem("LFP", 2);
313- // activityViewComboBox->setSelectedId(1, dontSendNotification);
314- // addAndMakeVisible(activityViewComboBox.get());
315- // activityViewButton->setBounds(530, currentHeight + 2, 45, 18);
316- // }
317- // else
318- // {
319- // activityViewButton->setBounds(450, currentHeight + 2, 45, 18);
320- // }
321-
322- // activityViewLabel = std::make_unique<Label>("PROBE SIGNAL", "PROBE SIGNAL");
323- // activityViewLabel->setFont(fontRegularLabel);
324- // activityViewLabel->setBounds(446, currentHeight - 20, 180, 20);
325- // addAndMakeVisible(activityViewLabel.get());
326-
327310#pragma region Draw Legends
328311
329312 // ENABLE View
@@ -785,6 +768,32 @@ void NeuropixelsV1Interface::buttonClicked(Button* button)
785768 CoreServices::sendStatusMessage (" Successfully wrote probe channel map." );
786769 }
787770 }
771+ else if (button == saveSettingsButton.get ())
772+ {
773+ FileChooser fileChooser (" Save Neuropixels settings to an XML file." , File (), " *.xml" );
774+
775+ if (fileChooser.browseForFileToSave (true ))
776+ {
777+ XmlElement rootElement (" DEVICE" );
778+
779+ saveParameters (&rootElement);
780+
781+ writeToXmlFile (&rootElement, fileChooser.getResult ());
782+ }
783+ }
784+ else if (button == loadSettingsButton.get ())
785+ {
786+ FileChooser fileChooser (" Load Neuropixels settings from an XML file." , File (), " *.xml" );
787+
788+ if (fileChooser.browseForFileToOpen ())
789+ {
790+ auto rootElement = readFromXmlFile (fileChooser.getResult ());
791+
792+ loadParameters (rootElement);
793+
794+ delete rootElement;
795+ }
796+ }
788797 else if (button == adcCalibrationFileButton.get ())
789798 {
790799 if (adcCalibrationFileChooser->browseForFileToOpen ())
@@ -1061,7 +1070,7 @@ void NeuropixelsV1Interface::loadParameters(XmlElement* xml)
10611070
10621071 if (xmlNode == nullptr )
10631072 {
1064- LOGD (" No NEUROPIXELSV1F element found matching name = " + npx->getName () + " , and idx = " + npx->getDeviceIdx ());
1073+ LOGD (" No " , deviceName, " element found matching name = " + npx->getName () + " , and idx = " + std::to_string ( npx->getDeviceIdx () ));
10651074 return ;
10661075 }
10671076
0 commit comments