MNE-CPP  beta 1.0
pluginscenemanager.cpp
Go to the documentation of this file.
1 //=============================================================================================================
36 //*************************************************************************************************************
37 //=============================================================================================================
38 // INCLUDES
39 //=============================================================================================================
40 
41 #include "pluginscenemanager.h"
42 
43 
44 //*************************************************************************************************************
45 //=============================================================================================================
46 // USED NAMESPACES
47 //=============================================================================================================
48 
49 using namespace MNEX;
50 
51 
52 //*************************************************************************************************************
53 //=============================================================================================================
54 // DEFINE MEMBER METHODS
55 //=============================================================================================================
56 
58 : QObject(parent)
59 {
60 }
61 
62 
63 //*************************************************************************************************************
64 
66 {
67  clear();
68 }
69 
70 
71 //*************************************************************************************************************
72 
73 bool PluginSceneManager::addPlugin(const IPlugin* pPlugin, IPlugin::SPtr &pAddedPlugin)
74 {
75  if(pPlugin->multiInstanceAllowed())
76  {
77  pAddedPlugin = pPlugin->clone();
78  m_pluginList.append(pAddedPlugin);
79  m_pluginList.last()->init();
80  return true;
81  }
82  else
83  {
84  //multi instance not allowed -> check if already added
85  QString sPluginName = pPlugin->getName();
86  bool bPluginFound = false;
87 
88  for(qint32 i = 0; i < m_pluginList.size(); ++i)
89  {
90  if(sPluginName == m_pluginList[i]->getName())
91  {
92  bPluginFound = true;
93  break;
94  }
95  }
96 
97  //Not added jet
98  if(!bPluginFound)
99  {
100  pAddedPlugin = pPlugin->clone();
101  m_pluginList.append(pAddedPlugin);
102  m_pluginList.last()->init();
103  return true;
104  }
105  }
106  pAddedPlugin.clear();
107  return false;
108 }
109 
110 
111 //*************************************************************************************************************
112 
114 {
115  qint32 pos = -1;
116  for(qint32 i = 0; i < m_pluginList.size(); ++i)
117  {
118  if(m_pluginList[i] == pPlugin)
119  {
120  pos = i;
121  break;
122  }
123  }
124  if(pos != -1)
125  {
126  m_pluginList.removeAt(pos);
127  return true;
128  }
129  else
130  return false;
131 }
132 
133 
134 //*************************************************************************************************************
135 
137 {
138  // Start ISensor and IRTAlgorithm plugins first!
139  bool bFlag = startSensorPlugins();
140 
141  if(bFlag)
142  {
144  startIOPlugins();
145  }
146 
147  return bFlag;
148 }
149 
150 
151 //*************************************************************************************************************
152 
154 {
155  bool bFlag = false;
156 
157  QList<IPlugin::SPtr>::iterator it = m_pluginList.begin();
158  for( ; it != m_pluginList.end(); ++it)
159  {
160  if((*it)->getType() == IPlugin::_ISensor)
161  {
162  if(!(*it)->start())
163  qWarning() << "Could not start ISensor: " << (*it)->getName();
164  else
165  bFlag = true; //At least one sensor has to be started
166  }
167  }
168 
169  return bFlag;
170 }
171 
172 
173 //*************************************************************************************************************
174 
176 {
177  QList<IPlugin::SPtr>::iterator it = m_pluginList.begin();
178  for( ; it != m_pluginList.end(); ++it)
179  if((*it)->getType() == IPlugin::_IAlgorithm)
180  if(!(*it)->start())
181  qWarning() << "Could not start IAlgorithm: " << (*it)->getName();
182 }
183 
184 
185 //*************************************************************************************************************
186 
188 {
189  QList<IPlugin::SPtr>::iterator it = m_pluginList.begin();
190  for( ; it != m_pluginList.end(); ++it)
191  if((*it)->getType() == IPlugin::_IIO)
192  if(!(*it)->start())
193  qWarning() << "Could not start IIO: " << (*it)->getName();
194 }
195 
196 
197 //*************************************************************************************************************
198 
200 {
201  // Stop ISensor plugins first!
202  QList<IPlugin::SPtr>::iterator it = m_pluginList.begin();
203  for( ; it != m_pluginList.end(); ++it)
204  if((*it)->getType() == IPlugin::_ISensor)
205  if(!(*it)->stop())
206  qWarning() << "Could not stop IPlugin: " << (*it)->getName();
207 
208  // Stop all other plugins!
209  it = m_pluginList.begin();
210  for( ; it != m_pluginList.end(); ++it)
211  if((*it)->getType() != IPlugin::_ISensor)
212  if(!(*it)->stop())
213  qWarning() << "Could not stop IPlugin: " << (*it)->getName();
214 }
215 
216 
217 //*************************************************************************************************************
218 
220 {
221 // m_pluginList.clear();
222 }
Contains declaration of PluginSceneManager class.
virtual bool multiInstanceAllowed() const =0
Definition: IPlugin.h:233
The IPlugin class is the base interface class of all plugins.
Definition: IPlugin.h:92
virtual QString getName() const =0
PluginSceneManager(QObject *parent=0)
QSharedPointer< IPlugin > SPtr
Definition: IPlugin.h:108
Definition: arrow.h:75
bool addPlugin(const IPlugin *pPlugin, IPlugin::SPtr &pAddedPlugin)
virtual QSharedPointer< IPlugin > clone() const =0
bool removePlugin(const IPlugin::SPtr pPlugin)