defuze.me  Client
plugins.hpp
00001 /**************************************************************************
00002 ** defuze.me Epitech Innovative Project
00003 **
00004 ** Copyright 2010-2011
00005 **   Athena Calmettes - Jocelyn De La Rosa - Francois Gaillard
00006 **   Adrien Jarthon - Alexandre Moore - Luc Peres - Arnaud Sellier
00007 **
00008 ** All rights reserved.
00009 **************************************************************************/
00010 
00011 class Plugins;
00012 
00013 #ifndef PLUGINS_HPP
00014 #define PLUGINS_HPP
00015 
00016 #include <QObject>
00017 #include <QHash>
00018 #include "plugin.hpp"
00019 
00024 class Plugins : public QObject
00025 {
00026     Q_OBJECT
00027 public:
00028     explicit Plugins(Cores* c);
00029     ~Plugins();
00030     void            init();                                     
00031     void            add(const QString& name, Plugin* plugin);   
00032     Plugin*         get(const QString& name);                   
00033     template<class T> T*    cast(const QString& name) {
00034         return dynamic_cast<T*>(get(name));
00035     }
00036 
00037 signals:
00038     void            message(const QString& msg);
00039 public slots:
00040     void            aboutToQuit();                              
00041 
00042 private:
00043     Cores                   &cores;
00044     QHash<QString, Plugin*> plugins;
00045 };
00046 
00047 #endif // PLUGINS_HPP