@@ -43,7 +43,7 @@ public:
44IndicatorsManager::IndicatorsManager(QObject* parent)
44IndicatorsManager::IndicatorsManager(QObject* parent)
45: QObject(parent)
45: QObject(parent)
46−, m_factory(new IndicatorsFactory())
46+, m_loaded(false)
@@ -74,6 +74,7 @@ void IndicatorsManager::load()
75 QObject::connect(m_fsWatcher.data(), SIGNAL(directoryChanged(const QString&)), this, SLOT(onDirectoryChanged(const QString&)));
75 QObject::connect(m_fsWatcher.data(), SIGNAL(directoryChanged(const QString&)), this, SLOT(onDirectoryChanged(const QString&)));
76 QObject::connect(m_fsWatcher.data(), SIGNAL(fileChanged(const QString&)), this, SLOT(onFileChanged(const QString&)));
76 QObject::connect(m_fsWatcher.data(), SIGNAL(fileChanged(const QString&)), this, SLOT(onFileChanged(const QString&)));
79void IndicatorsManager::onDirectoryChanged(const QString& direcory)
80void IndicatorsManager::onDirectoryChanged(const QString& direcory)
@@ -114,6 +115,13 @@ void IndicatorsManager::load(const QFileInfo& file_info)
114 indicator_settings.beginGroup("Indicator Service");
115 indicator_settings.beginGroup("Indicator Service");
115 QString name = indicator_settings.value("Name").toString();
116 QString name = indicator_settings.value("Name").toString();
118+ // don't bother loading if it's not registered.
119+ if (!IndicatorsFactory::instance().isRegistered(name))
121+ qWarning() << Q_FUNC_INFO << "Invalid plugin name: " << name << " - not registered in factory.";
117 auto iter = m_indicatorsData.find(name);
125 auto iter = m_indicatorsData.find(name);
118 if (iter != m_indicatorsData.end())
126 if (iter != m_indicatorsData.end())
@@ -147,7 +155,7 @@ void IndicatorsManager::load(const QFileInfo& file_info)
147 file_info != currentData->m_fileInfo)
155 file_info != currentData->m_fileInfo)
149 currentData->m_fileInfo = file_info;
157 currentData->m_fileInfo = file_info;
150− Q_EMIT loaded(name);
158+ Q_EMIT indicatorLoaded(name);
@@ -155,7 +163,7 @@ void IndicatorsManager::load(const QFileInfo& file_info)
155 IndicatorData* data = new IndicatorData(name, file_info);
163 IndicatorData* data = new IndicatorData(name, file_info);
156 data->m_verified = true;
164 data->m_verified = true;
157 m_indicatorsData[name]= data;
165 m_indicatorsData[name]= data;
158− Q_EMIT loaded(name);
166+ Q_EMIT indicatorLoaded(name);
@@ -165,11 +173,18 @@ void IndicatorsManager::unload()
165 while(iter.hasNext())
173 while(iter.hasNext())
167 iter.next();
175 iter.next();
168− Q_EMIT aboutToBeUnloaded(iter.key());
176+ IndicatorData* data = iter.value();
179+ data->m_obj->shutdown();
181+ Q_EMIT indicatorAboutToBeUnloaded(iter.key());
171 qDeleteAll(m_indicatorsData);
184 qDeleteAll(m_indicatorsData);
172 m_indicatorsData.clear();
185 m_indicatorsData.clear();
175void IndicatorsManager::unload(const QFileInfo& file)
190void IndicatorsManager::unload(const QFileInfo& file)
@@ -184,13 +199,24 @@ void IndicatorsManager::unload(const QFileInfo& file)
184 if (!data->m_verified)
199 if (!data->m_verified)
186 QString name = data->m_name;
201 QString name = data->m_name;
187− Q_EMIT aboutToBeUnloaded(name);
202+ Q_EMIT indicatorAboutToBeUnloaded(name);
189 delete data;
204 delete data;
190 iter.remove();
205 iter.remove();
210+ setLoaded(m_indicatorsData.size() > 0);
213+void IndicatorsManager::setLoaded(bool loaded)
215+ if (loaded != m_loaded)
218+ Q_EMIT loadedChanged(m_loaded);
196void IndicatorsManager::startVerify(const QString& path)
222void IndicatorsManager::startVerify(const QString& path)
@@ -217,7 +243,7 @@ void IndicatorsManager::endVerify(const QString& path)
217 if (!data->m_verified)
243 if (!data->m_verified)
219 QString name = data->m_name;
245 QString name = data->m_name;
220− Q_EMIT aboutToBeUnloaded(name);
246+ Q_EMIT indicatorAboutToBeUnloaded(name);
222 delete data;
248 delete data;
223 iter.remove();
249 iter.remove();
@@ -237,7 +263,7 @@ IndicatorClientInterface::Ptr IndicatorsManager::indicator(const QString& indica
237 if (data->m_obj)
263 if (data->m_obj)
238 return data->m_obj;
264 return data->m_obj;
240− IndicatorClientInterface::Ptr plugin = m_factory->create(indicator, this);
266+ IndicatorClientInterface::Ptr plugin = IndicatorsFactory::instance().create(indicator, this);
241 if (plugin)
267 if (plugin)
243 data->m_obj = plugin;
269 data->m_obj = plugin;
@@ -256,3 +282,8 @@ QList<IndicatorClientInterface::Ptr> IndicatorsManager::indicators()
257 return list;
283 return list;
286+bool IndicatorsManager::isLoaded() const