1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <BALL/PLUGIN/pluginHandler.h>
#include <BALL/PLUGIN/BALLPlugin.h>
#include <QtCore/QReadLocker>
namespace BALL
{
PluginHandler::~PluginHandler()
{
}
bool PluginHandler::isRunning(BALLPlugin* plugin) const
{
QReadLocker locker(&mutex_);
std::list<BALLPlugin*>::const_iterator it = running_plugins_.begin();
for(; it != running_plugins_.end(); ++it) {
if(*it == plugin) {
return true;
}
}
return false;
}
bool PluginHandler::startPlugin(BALLPlugin* plugin)
{
if(plugin && canHandle(plugin) && !isRunning(plugin) && specificSetup_(plugin)) {
mutex_.lockForWrite();
running_plugins_.push_back(plugin);
mutex_.unlock();
return true;
}
return false;
}
bool PluginHandler::stopPlugin(BALLPlugin* plugin)
{
if(plugin && isRunning(plugin) && specificShutdown_(plugin)) {
mutex_.lockForWrite();
running_plugins_.remove(plugin);
mutex_.unlock();
return true;
}
return false;
}
}
|