module_interface.h

Go to the documentation of this file.
00001 
00023 #ifndef MODULE_INTERFACE_H
00024 #define MODULE_INTERFACE_H
00025 
00026 #include <QtCore>
00027 #include "property_data.h"
00028 #include "exceptions.h"
00029 
00031 class ModuleInterface : public QObject
00032 {
00033         public:
00034                 inline PropertyData* propertyData(const char* name) { m_property.setName(name); return &m_property; }
00035                 inline void setModuleID(const QString& id) { m_moduleID = id; }
00036                 inline QString moduleID() const { return m_moduleID; }
00037 
00038         private:
00039                 PropertyData m_property;
00040                 QString m_moduleID;
00041 };
00042 
00044 class PluginInterface : public ModuleInterface
00045 {
00046         public:
00047                 virtual ~PluginInterface(){};
00048                 virtual QGraphicsItem* graphicsItem() = 0;
00049                 virtual bool init() = 0;
00050                 virtual void timer(){};
00051                 virtual bool hasTimer() { return false; }
00052 };
00053 
00055 class ControllerInterface : public ModuleInterface
00056 {
00057         public:
00058                 virtual ~ControllerInterface(){};
00059                 virtual QWidget* configWidget() = 0;
00060                 virtual QSize size() = 0;
00061                 virtual bool init() = 0;
00062                 virtual void exit() = 0;
00063                 virtual void setPixel(int, int, bool) = 0;
00064                 virtual void update() = 0;
00065                 virtual void clear(const QRect& rect=QRect()) = 0;
00066 };
00067 
00069 class ModuleFactory : public QObject
00070 {
00071         public:
00072                 enum ModulType { Plugin, Controller, NoPlugin };
00073                 inline ModuleFactory(const QString& name, const QString& label, const QIcon& icon = QIcon()) {
00074                         m_groupName = name;
00075                         m_groupLabel = label;
00076                         m_groupIcon = icon;
00077                 }
00078                 virtual ~ModuleFactory(){ qDeleteAll(m_modules.values()); };
00079                 virtual void init() = 0;
00080                 virtual ModulType type() = 0;
00081                 virtual ModuleInterface* create(const QString&) = 0;
00082         
00083                 inline QString name(int index) const { return m_modules.value(index)->name; }
00084                 inline QString label(int index) const { return m_modules.value(index)->label; }
00085                 inline QIcon icon(int index) const { return m_modules.value(index)->icon; }
00086                 inline QString groupName() const { return m_groupName; }
00087                 inline QString groupLabel() const { return m_groupLabel; }
00088                 inline QIcon groupIcon() const { return m_groupIcon; }
00089                 inline int count() const { return m_modules.count(); }
00090 
00091         protected:
00092                 inline void addModul(const QString& name, const QString& label, const QIcon& icon = QIcon()){
00093                         ModulItem* item = new ModulItem;
00094                         item->name = name;
00095                         item->label = label;
00096                         item->icon = icon;
00097                         
00098                         m_modules.insert(m_modules.count(), item);
00099                 }
00100 
00101         private:
00102                 struct ModulItem
00103                 {
00104                         QString name;
00105                         QString label;
00106                         QIcon icon;
00107                 };
00108                 
00109                 QString m_groupName;
00110                 QString m_groupLabel;
00111                 QIcon m_groupIcon;
00112                 QMap<int, ModulItem*> m_modules;
00113 };
00114 
00115 Q_DECLARE_INTERFACE(ModuleFactory, "lcdbuilder.ModuleFactory")
00116                 
00117 #endif

Generated on Thu Apr 5 13:06:31 2007 for LCDBuilder by  doxygen 1.4.7