MNE-CPP  beta 1.0
pluginconnectorconnection.cpp
Go to the documentation of this file.
1 //=============================================================================================================
36 //*************************************************************************************************************
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
43 
44 #include <xMeas/newnumeric.h>
47 #include <xMeas/realtimeevoked.h>
48 #include <xMeas/realtimecov.h>
50 
51 
52 //*************************************************************************************************************
53 //=============================================================================================================
54 // USED NAMESPACES
55 //=============================================================================================================
56 
57 using namespace MNEX;
58 using namespace XMEASLIB;
59 
60 
61 //*************************************************************************************************************
62 //=============================================================================================================
63 // DEFINE MEMBER METHODS
64 //=============================================================================================================
65 
66 PluginConnectorConnection::PluginConnectorConnection(IPlugin::SPtr sender, IPlugin::SPtr receiver, QObject *parent)
67 : QObject(parent)
68 , m_pSender(sender)
69 , m_pReceiver(receiver)
70 {
71  createConnection();
72 }
73 
74 
75 //*************************************************************************************************************
76 
78 {
80 }
81 
82 
83 //*************************************************************************************************************
84 
86 {
87  QHash<QPair<QString, QString>, QMetaObject::Connection>::iterator it;
88  for (it = m_qHashConnections.begin(); it != m_qHashConnections.end(); ++it)
89  disconnect(it.value());
90 
91  m_qHashConnections.clear();
92 }
93 
94 
95 //*************************************************************************************************************
96 
97 bool PluginConnectorConnection::createConnection()
98 {
99  // Creat initial connection
100  clearConnection();
101 
102  bool bConnected = false;
103 
104  //search for suiting connection
105  qint32 i, j;
106  for(i = 0; i < m_pSender->getOutputConnectors().size(); ++i)
107  {
108  for(j = 0; j < m_pReceiver->getInputConnectors().size(); ++j)
109  {
110  //ToDo make this auto connection more fancy
111  // < --- Type Check --- >
112 
113  //Cast to NewRealTimeSampleArray
114  QSharedPointer< PluginOutputData<NewRealTimeSampleArray> > senderRTSA = m_pSender->getOutputConnectors()[i].dynamicCast< PluginOutputData<NewRealTimeSampleArray> >();
115  QSharedPointer< PluginInputData<NewRealTimeSampleArray> > receiverRTSA = m_pReceiver->getInputConnectors()[j].dynamicCast< PluginInputData<NewRealTimeSampleArray> >();
116  if(senderRTSA && receiverRTSA)
117  {
118  m_qHashConnections.insert(QPair<QString,QString>(m_pSender->getOutputConnectors()[i]->getName(), m_pReceiver->getInputConnectors()[j]->getName()), connect(m_pSender->getOutputConnectors()[i].data(), &PluginOutputConnector::notify,
119  m_pReceiver->getInputConnectors()[j].data(), &PluginInputConnector::update, Qt::BlockingQueuedConnection));
120  bConnected = true;
121  break;
122  }
123 
124  //Cast to NewRealTimeMultiSampleArray
125  QSharedPointer< PluginOutputData<NewRealTimeMultiSampleArray> > senderRTMSA = m_pSender->getOutputConnectors()[i].dynamicCast< PluginOutputData<NewRealTimeMultiSampleArray> >();
126  QSharedPointer< PluginInputData<NewRealTimeMultiSampleArray> > receiverRTMSA = m_pReceiver->getInputConnectors()[j].dynamicCast< PluginInputData<NewRealTimeMultiSampleArray> >();
127  if(senderRTMSA && receiverRTMSA)
128  {
129  m_qHashConnections.insert(QPair<QString,QString>(m_pSender->getOutputConnectors()[i]->getName(), m_pReceiver->getInputConnectors()[j]->getName()), connect(m_pSender->getOutputConnectors()[i].data(), &PluginOutputConnector::notify,
130  m_pReceiver->getInputConnectors()[j].data(), &PluginInputConnector::update, Qt::BlockingQueuedConnection));
131  bConnected = true;
132  break;
133  }
134 
135  //Cast to RealTimeSourceEstimate
136  QSharedPointer< PluginOutputData<RealTimeEvoked> > senderRTE = m_pSender->getOutputConnectors()[i].dynamicCast< PluginOutputData<RealTimeEvoked> >();
137  QSharedPointer< PluginInputData<RealTimeEvoked> > receiverRTE = m_pReceiver->getInputConnectors()[j].dynamicCast< PluginInputData<RealTimeEvoked> >();
138  if(senderRTE && receiverRTE)
139  {
140  m_qHashConnections.insert(QPair<QString,QString>(m_pSender->getOutputConnectors()[i]->getName(), m_pReceiver->getInputConnectors()[j]->getName()), connect(m_pSender->getOutputConnectors()[i].data(), &PluginOutputConnector::notify,
141  m_pReceiver->getInputConnectors()[j].data(), &PluginInputConnector::update, Qt::BlockingQueuedConnection));
142  bConnected = true;
143  break;
144  }
145 
146  //Cast to RealTimeSourceEstimate
147  QSharedPointer< PluginOutputData<RealTimeCov> > senderRTC = m_pSender->getOutputConnectors()[i].dynamicCast< PluginOutputData<RealTimeCov> >();
148  QSharedPointer< PluginInputData<RealTimeCov> > receiverRTC = m_pReceiver->getInputConnectors()[j].dynamicCast< PluginInputData<RealTimeCov> >();
149  if(senderRTC && receiverRTC)
150  {
151  m_qHashConnections.insert(QPair<QString,QString>(m_pSender->getOutputConnectors()[i]->getName(), m_pReceiver->getInputConnectors()[j]->getName()), connect(m_pSender->getOutputConnectors()[i].data(), &PluginOutputConnector::notify,
152  m_pReceiver->getInputConnectors()[j].data(), &PluginInputConnector::update, Qt::BlockingQueuedConnection));
153  bConnected = true;
154  break;
155  }
156 
157  //Cast to RealTimeSourceEstimate
158  QSharedPointer< PluginOutputData<RealTimeSourceEstimate> > senderRTSE = m_pSender->getOutputConnectors()[i].dynamicCast< PluginOutputData<RealTimeSourceEstimate> >();
159  QSharedPointer< PluginInputData<RealTimeSourceEstimate> > receiverRTSE = m_pReceiver->getInputConnectors()[j].dynamicCast< PluginInputData<RealTimeSourceEstimate> >();
160  if(senderRTSE && receiverRTSE)
161  {
162  m_qHashConnections.insert(QPair<QString,QString>(m_pSender->getOutputConnectors()[i]->getName(), m_pReceiver->getInputConnectors()[j]->getName()), connect(m_pSender->getOutputConnectors()[i].data(), &PluginOutputConnector::notify,
163  m_pReceiver->getInputConnectors()[j].data(), &PluginInputConnector::update, Qt::BlockingQueuedConnection));
164  bConnected = true;
165  break;
166  }
167  }
168 
169  if(bConnected)
170  break;
171  }
172 
173  //DEBUG
174  QHash<QPair<QString, QString>, QMetaObject::Connection>::iterator it;
175  for (it = m_qHashConnections.begin(); it != m_qHashConnections.end(); ++it)
176  qDebug() << "Connected: " << it.key().first << it.key().second;
177  //DEBUG
178 
179  return bConnected;
180 }
181 
182 
183 //*************************************************************************************************************
184 
185 ConnectorDataType PluginConnectorConnection::getDataType(QSharedPointer<PluginConnector> pPluginConnector)
186 {
187  QSharedPointer< PluginOutputData<XMEASLIB::NewRealTimeSampleArray> > RTSA_Out = pPluginConnector.dynamicCast< PluginOutputData<XMEASLIB::NewRealTimeSampleArray> >();
188  QSharedPointer< PluginInputData<XMEASLIB::NewRealTimeSampleArray> > RTSA_In = pPluginConnector.dynamicCast< PluginInputData<XMEASLIB::NewRealTimeSampleArray> >();
189  if(RTSA_Out || RTSA_In)
190  return ConnectorDataType::_RTSA;
191 
192  QSharedPointer< PluginOutputData<XMEASLIB::NewRealTimeMultiSampleArray> > RTMSA_Out = pPluginConnector.dynamicCast< PluginOutputData<XMEASLIB::NewRealTimeMultiSampleArray> >();
193  QSharedPointer< PluginInputData<XMEASLIB::NewRealTimeMultiSampleArray> > RTMSA_In = pPluginConnector.dynamicCast< PluginInputData<XMEASLIB::NewRealTimeMultiSampleArray> >();
194  if(RTMSA_Out || RTMSA_In)
195  return ConnectorDataType::_RTMSA;
196 
197  QSharedPointer< PluginOutputData<XMEASLIB::RealTimeEvoked> > RTE_Out = pPluginConnector.dynamicCast< PluginOutputData<XMEASLIB::RealTimeEvoked> >();
198  QSharedPointer< PluginInputData<XMEASLIB::RealTimeEvoked> > RTE_In = pPluginConnector.dynamicCast< PluginInputData<XMEASLIB::RealTimeEvoked> >();
199  if(RTE_Out || RTE_In)
200  return ConnectorDataType::_RTE;
201 
202  QSharedPointer< PluginOutputData<XMEASLIB::RealTimeCov> > RTC_Out = pPluginConnector.dynamicCast< PluginOutputData<XMEASLIB::RealTimeCov> >();
203  QSharedPointer< PluginInputData<XMEASLIB::RealTimeCov> > RTC_In = pPluginConnector.dynamicCast< PluginInputData<XMEASLIB::RealTimeCov> >();
204  if(RTC_Out || RTC_In)
205  return ConnectorDataType::_RTC;
206 
207  QSharedPointer< PluginOutputData<XMEASLIB::RealTimeSourceEstimate> > RTSE_Out = pPluginConnector.dynamicCast< PluginOutputData<XMEASLIB::RealTimeSourceEstimate> >();
208  QSharedPointer< PluginInputData<XMEASLIB::RealTimeSourceEstimate> > RTSE_In = pPluginConnector.dynamicCast< PluginInputData<XMEASLIB::RealTimeSourceEstimate> >();
209  if(RTSE_Out || RTSE_In)
210  return ConnectorDataType::_RTSE;
211 
212  QSharedPointer< PluginOutputData<XMEASLIB::NewNumeric> > Num_Out = pPluginConnector.dynamicCast< PluginOutputData<XMEASLIB::NewNumeric> >();
213  QSharedPointer< PluginInputData<XMEASLIB::NewNumeric> > Num_In = pPluginConnector.dynamicCast< PluginInputData<XMEASLIB::NewNumeric> >();
214  if(Num_Out || Num_In)
215  return ConnectorDataType::_N;
216 
217  return ConnectorDataType::_None;
218 }
219 
220 
221 //*************************************************************************************************************
222 
224 {
226  return pccWidget;
227 }
Contains the declaration of the RealTimeSourceEstimate class.
Contains the declaration of the PluginConnectorConnection class.
Contains the declaration of the RealTimeEvoked class.
QSharedPointer< IPlugin > SPtr
Definition: IPlugin.h:108
Contains the declaration of the NewRealTimeSampleArray class.
Contains the declaration of the Numeric class.
Definition: arrow.h:75
The PluginConnectorConnectionWidget class provides an user interface for connector connections...
PluginOutputConnector with specified Measurement.
Contains the declaration of the NewRealTimeMultiSampleArray class.
Contains the declaration of the PluginConnectorConnectionWidget class.
Contains the declaration of the RealTimeCov class.