00001 #ifndef __Q_IBUS_FACTORY_ADAPTOR_H_ 00002 #define __Q_IBUS_FACTORY_ADAPTOR_H_ 00003 00004 #include <QLinkedList> 00005 #include <QDBusConnection> 00006 #include <QDBusObjectPath> 00007 #include "qibusobject.h" 00008 00009 class IBusFactoryAdaptor; 00010 00011 namespace IBus { 00012 00013 class Engine; 00014 typedef Pointer<Engine> EnginePointer; 00015 00016 class EngineFactory : public Object 00017 { 00018 Q_OBJECT; 00019 00020 private : 00021 Q_INVOKABLE EngineFactory (const QDBusConnection &conn, uint id = 0); 00022 ~EngineFactory (); 00023 00024 public: 00025 void addMetaObject (const QString &name, const QMetaObject *metaObject); 00026 static EngineFactory *getEngineFactory (const QDBusConnection &conn); 00027 00028 protected: 00029 virtual QString createEngine (const QString &name); 00030 00031 private Q_SLOTS: 00032 Q_INVOKABLE QDBusObjectPath CreateEngine (const QString &name); 00033 Q_INVOKABLE void Destroy (); 00034 00035 private : 00036 00037 uint m_id; 00038 QDBusConnection m_conn; 00039 QMap<QString, const QMetaObject *> m_engineMap; 00040 QLinkedList<EnginePointer> m_engineLList; 00041 IBusFactoryAdaptor *m_factoryAdaptor; 00042 00043 static EngineFactory *m_factory; 00044 }; 00045 00046 }; 00047 00048 #endif