| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | /* *  ctkEventDispatcher.h *  ctkEventBus * *  Created by Paolo Quadrani on 27/03/09. *  Copyright 2009 B3C. All rights reserved. * *  See Licence at: http://tiny.cc/QXJ4D * */#ifndef CTKEVENTDISPATCHER_H#define CTKEVENTDISPATCHER_H#include "ctkEventDefinitions.h"namespace ctkEventBus {/** Class name: ctkEventDispatcher This allows dispatching events coming from local application to attached observers. */class org_commontk_eventbus_EXPORT ctkEventDispatcher : public QObject {    Q_OBJECTpublic:    /// object constructor.    ctkEventDispatcher();    /// object destructor.    virtual ~ctkEventDispatcher();    /// Add the observer to the events.    /** Return true if observer has beed added correctly, false otherwise.    This method check before adding a new observer that it has not already been inserted into the events' Hash with the same id and callback signature.*/    bool addObserver(ctkBusEvent &props);    /// remove the callback from the observer's hash.    bool removeObserver(ctkBusEvent &props);    /// remove the callback from the observer's hash.    bool removeObserver(const QObject *obj, const QString topic, bool qt_disconnect = true);    /// Remove the signal from the signal's hash.    bool removeSignal(const QObject *obj, const QString topic = "", bool qt_disconnect = true);    /// register custom signals use by objects to raise them events.    /** Return true if signal has beed added correctly, false otherwise.    This method check before adding a new signal that it has not already been inserted into the events' Hash with the same id and signal signature.    WARNING: due to Qt limitation you cannot use the same signal in different Topics.*/    bool registerSignal(ctkBusEvent &props);    /// Remove the signal from the signal's hash.    bool removeSignal(ctkBusEvent &props);    /// method used to check if the given signal has been already registered for the given id.    bool isLocalSignalPresent(const QString topic) const;    /// Emit event corresponding to the given id (present into the event_dictionary) locally to the application.    virtual void notifyEvent(ctkBusEvent &event_dictionary, ctkEventArgumentsList *argList = NULL, ctkGenericReturnArgument *returnArg = NULL) const;    /// clean the signal and callback hashes.    /** This method is used when the destructor is called. The destructor of the dispatcher is called by the ctkEventBusManager destructor.*/    void resetHashes();Q_SIGNALS:    /// Default notification signals for default events.    void notifyDefaultEvent();    /// Signal used to notify to observers that the remote communication has been terminated with success.    void remoteCommunicationDone();    /// Signal used to notify to observers that the remote communication failed.    void remoteCommunicationFailed();protected:    /// Register MAF global events    virtual void initializeGlobalEvents();    /// Interanl method used to remove the given event property.    bool removeEventItem(ctkBusEvent &props);    /// Return the signal item property associated to the given ID.    ctkEventItemListType signalItemProperty(const QString topic) const;private:    /// method used to check if the given object has been already registered for the given id and signature.    bool isSignaturePresent(ctkBusEvent &props) const;    /// disconnection signal/observer.    /** This function disconnects the signal and all the observers. */    bool disconnectSignal(ctkBusEvent &props);    /// This function disconnects observer from signal.    bool disconnectCallback(ctkBusEvent &props);    /// Remove the given object from the has passed as argument    bool removeFromHash(ctkEventsHashType *hash, const QObject *obj, const QString topic, bool qt_disconnect = true);    ctkEventsHashType m_CallbacksHash; ///< Callbacks' hash for receiving events like updates or refreshes.    ctkEventsHashType m_SignalsHash; ///< Signals' hash for sending events.};/////////////////////////////////////////////////////////////// Inline methods/////////////////////////////////////////////////////////////inline ctkEventItemListType ctkEventDispatcher::signalItemProperty(const QString topic) const {    return m_SignalsHash.values(topic);}} // namespace ctkEventBus#endif // CTKEVENTDISPATCHER_H
 |