ctkEventBusImpl.cpp

Go to the documentation of this file.
00001 #include "ctkEventBusImpl_p.h"
00002 
00003 #include <QSetIterator>
00004 
00005 #include "ctkEventHandlerWrapper_p.h"
00006 
00007 
00008 ctkEventBusImpl* ctkEventBusImpl::instance()
00009 {
00010   static ctkEventBusImpl inst;
00011   return &inst;
00012 }
00013 
00014 ctkEventBusImpl::ctkEventBusImpl()
00015 {
00016 
00017 }
00018 
00019 void ctkEventBusImpl::postEvent(const ctkEvent& event)
00020 {
00021   dispatchEvent(event, true);
00022 }
00023 
00024 void ctkEventBusImpl::sendEvent(const ctkEvent& event)
00025 {
00026   dispatchEvent(event, false);
00027 }
00028 
00029 void ctkEventBusImpl::publishSignal(const QObject* publisher, const char* signal)
00030 {
00031 
00032 }
00033 
00034 void ctkEventBusImpl::subscribeSlot(const QObject* subscriber, const char* member, const Properties& properties)
00035 {
00036 
00037   // TODO check for duplicates
00038 
00039   ctkEventHandlerWrapper* wrapper = new ctkEventHandlerWrapper(subscriber, member, properties);
00040   if (wrapper->init())
00041   {
00042     bucket(wrapper);
00043   }
00044 }
00045 
00046 void ctkEventBusImpl::dispatchEvent(const ctkEvent& event, bool isAsync)
00047 {
00048   QString topic = event.topic();
00049 
00050   QSet<ctkEventHandlerWrapper*> eventHandlers = this->handlers(topic);
00051   if (eventHandlers.empty()) return;
00052 
00053   QSetIterator<ctkEventHandlerWrapper*> iter(eventHandlers);
00054   while (iter.hasNext())
00055   {
00056     iter.next()->handleEvent(event);
00057   }
00058 }
00059 
00060 void ctkEventBusImpl::bucket(ctkEventHandlerWrapper* wrapper)
00061 {
00062   // TODO bucket logic
00063   globalWildcard.push_back(wrapper);
00064 }
00065 
00066 QSet<ctkEventHandlerWrapper*> ctkEventBusImpl::handlers(const QString& topic)
00067 {
00068   // TODO
00069   return globalWildcard.toSet();
00070 }
00071 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated on 21 May 2010 for CTK by  doxygen 1.6.1