00001 #include <QCoreApplication> 00002 #include <QObject> 00003 #include <QMutex> 00004 00005 #include "mythobservable.h" 00006 00025 MythObservable::MythObservable() : m_lock(new QMutex()) 00026 { 00027 } 00028 00029 MythObservable::~MythObservable() 00030 { 00031 m_lock->lock(); 00032 m_listeners.clear(); 00033 m_lock->unlock(); 00034 delete m_lock; 00035 m_lock = NULL; 00036 } 00037 00045 void MythObservable::addListener(QObject *listener) 00046 { 00047 if (listener) 00048 { 00049 QMutexLocker locker(m_lock); 00050 m_listeners.insert(listener); 00051 } 00052 } 00053 00054 00062 void MythObservable::removeListener(QObject *listener) 00063 { 00064 if (listener) 00065 { 00066 QMutexLocker locker(m_lock); 00067 m_listeners.remove(listener); 00068 QCoreApplication::removePostedEvents(listener); 00069 } 00070 } 00071 00080 void MythObservable::dispatch(const MythEvent &event) 00081 { 00082 QMutexLocker locker(m_lock); 00083 00084 QSet<QObject*>::const_iterator it = m_listeners.begin(); 00085 for (; it != m_listeners.end() ; ++it) 00086 QCoreApplication::postEvent(*it, event.clone()); 00087 } 00088 00097 void MythObservable::dispatchNow(const MythEvent &event) 00098 { 00099 QMutexLocker locker(m_lock); 00100 00101 QSet<QObject*>::const_iterator it = m_listeners.begin(); 00102 for (; it != m_listeners.end() ; ++it) 00103 QCoreApplication::sendEvent(*it, event.clone()); 00104 } 00105
1.6.3