From be70d18aea0f68d9629378bbc532d7b97d0519c6 Mon Sep 17 00:00:00 2001
From: Aaron Cuevas Lopez <aacuelo@teleco.upv.es>
Date: Tue, 5 Apr 2016 19:51:02 +0200
Subject: [PATCH] Add CoreServices methods to set and get the selected record
 engine

---
 Source/CoreServices.cpp    | 12 +++++++++++-
 Source/CoreServices.h      |  8 ++++++++
 Source/UI/ControlPanel.cpp | 24 ++++++++++++++++++++++++
 Source/UI/ControlPanel.h   |  4 ++++
 4 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/Source/CoreServices.cpp b/Source/CoreServices.cpp
index 84a668fd6..f17620830 100644
--- a/Source/CoreServices.cpp
+++ b/Source/CoreServices.cpp
@@ -107,6 +107,16 @@ void setAppendTextToRecordingDir(String text)
     getControlPanel()->setAppendText(text);
 }
 
+String getSelectedRecordEngineId()
+{
+	return getControlPanel()->getSelectedRecordEngineId();
+}
+
+bool setSelectedRecordEngineId(String id)
+{
+	return getControlPanel()->setSelectedRecordEngineId(id);
+}
+
 namespace RecordNode
 {
 void createNewrecordingDir()
@@ -145,7 +155,7 @@ int addSpikeElectrode(SpikeRecordInfo* elec)
 }
 };
 
-PLUGIN_API const char* getApplicationResource(const char* name, int& size)
+const char* getApplicationResource(const char* name, int& size)
 {
 	return BinaryData::getNamedResource(name, size);
 }
diff --git a/Source/CoreServices.h b/Source/CoreServices.h
index 4b46d403a..b8e254d4a 100644
--- a/Source/CoreServices.h
+++ b/Source/CoreServices.h
@@ -78,6 +78,14 @@ PLUGIN_API void setPrependTextToRecordingDir(String text);
 /** Manually set the text to be appended to the recording directory */
 PLUGIN_API void setAppendTextToRecordingDir(String text);
 
+/** Gets the ID fo the selected Record Engine*/
+PLUGIN_API String getSelectedRecordEngineId();
+
+/** Sets a specific RecordEngine to be used based on its id. 
+Return true if there is an engine with the specified ID and it's possible to
+change the current engine or false otherwise. */
+PLUGIN_API bool setSelectedRecordEngineId(String id);
+
 namespace RecordNode
 {
 /** Forces creation of new directory on recording */
diff --git a/Source/UI/ControlPanel.cpp b/Source/UI/ControlPanel.cpp
index 987121fc3..b5328948a 100755
--- a/Source/UI/ControlPanel.cpp
+++ b/Source/UI/ControlPanel.cpp
@@ -552,6 +552,30 @@ void ControlPanel::updateRecordEngineList()
 		recordSelector->setSelectedId(selectedEngine, sendNotification);
 }
 
+String ControlPanel::getSelectedRecordEngineId()
+{
+	return recordEngines[recordSelector->getSelectedId() - 1]->getID();
+}
+
+bool ControlPanel::setSelectedRecordEngineId(String id)
+{
+	if (getAcquisitionState())
+	{
+		return false;
+	}
+
+	int nEngines = recordEngines.size();
+	for (int i = 0; i < nEngines; ++i)
+	{
+		if (recordEngines[i]->getID() == id)
+		{
+			recordSelector->setSelectedId(i + 1, sendNotificationSync);
+			return true;
+		}
+	}
+	return false;
+}
+
 void ControlPanel::createPaths()
 {
     /*  int w = getWidth() - 325;
diff --git a/Source/UI/ControlPanel.h b/Source/UI/ControlPanel.h
index cec8bc118..f63296ecf 100755
--- a/Source/UI/ControlPanel.h
+++ b/Source/UI/ControlPanel.h
@@ -365,6 +365,10 @@ public:
 
     void updateRecordEngineList();
 
+	String getSelectedRecordEngineId();
+
+	bool setSelectedRecordEngineId(String id);
+
     ScopedPointer<RecordButton> recordButton;
 private:
     ScopedPointer<PlayButton> playButton;
-- 
GitLab