#ifndef CTKEVENTBUS_H
#define CTKEVENTBUS_H
#include "ctkEvent.h"
<<<<<<< Updated upstream
class ctkEventBus {
=======
/**
* The Event Bus service. Plugins wishing to publish events can either
* obtain the Event Bus service and call one of the event delivery methods
* or publish a Qt signal for a specific event topic.
*
*/
class CTK_PLUGINFW_EXPORT ctkEventBus {
>>>>>>> Stashed changes
public:
virtual ~ctkEventBus() {}
/**
* Initiate asynchronous delivery of an event. This method returns to the
* caller before delivery of the event is completed.
*
* @param event The event to send to all listeners which subscribe to the
* topic of the event.
*
*/
virtual void postEvent(const ctkEvent& event) = 0;
/**
* Initiate synchronous delivery of an event. This method does not return to
* the caller until delivery of the event is completed.
*
* @param event The event to send to all listeners which subscribe to the
* topic of the event.
*
*/
virtual void sendEvent(const ctkEvent& event) = 0;
<<<<<<< Updated upstream
virtual void publishSignal(const QObject* publisher, const char* signal) = 0;
=======
/**
* Publish (register) a Qt signal for event delivery. Emitting the signal
* has the same effect as calling postEvent() if type
is
* Qt::QueuedConnection and as sendEvent() if type
is
* Qt::DirectConnection.
*
* @param publisher The owner of the signal.
* @param signal The signal in normalized form.
* @param signal_topic The topic string for the events this signal is emitting.
* @param type Qt::QueuedConnection for asynchronous delivery and
* Qt::DirectConnection for synchronous delivery.
*/
virtual void publishSignal(const QObject* publisher, const char* signal,
const QString& signal_topic, Qt::ConnectionType type = Qt::QueuedConnection) = 0;
/**
* Subsribe for (observe) events. The slot is called whenever an event is sent
* which matches the supplied properties.
*
* Slots should be registered with a property EventConstants::EVENT_TOPIC.
* The value being a QString or QStringList object that describes which
* topics the slot is interested in. A wildcard (’*’ \u002A) may be used as
* the last token of a topic name, for example com/action/*. This matches any
* topic that shares the same first tokens. For example, com/action/* matches
* com/action/listen. Slot which have not been specified with the EVENT_TOPIC
* property must not receive events.
* The value of each entry in the EVENT_TOPIC property must conform to the
* following grammar:
* \verbatim
* topic-scope ::= ’*’ | ( topic ’/*’ ? )
* \endverbatim
*
* Slots can also be registered with a property named EventConstants::EVENT_FILTER.
* The value of this property must be a string containing a filter specification.
* Any of the event's properties can be used in the filter expression.
* Each slot is notified for any event which belongs to the topics the
* slot has expressed an interest in. If the handler has defined a
* EVENT_FILTER property then the event properties must also match the filter
* expression. If the filter is an error, then the Event Bus service
* should log a warning and further ignore the registered slot.
*
* @param subscriber The owner of the slot.
* @param member The slot in normalized form.
* @param properties A map containing topics and a filter expression.
* @return Returns an id which can be used to update the properties.
*/
virtual QString subscribeSlot(const QObject* subscriber, const char* member, const ctkProperties& properties) = 0;
>>>>>>> Stashed changes
/**
* Updates the properties of a previously registered slot. This can be used
* to change the topics the slot is interested in or to change the filter expression.
* A previously registered property can be removed by providing an invalid QVariant.
*
* @param subscriptionId The slot id obtained by a call to subscribeSlot().
* @param properties The properties which should be updated.
*/
virtual void updateProperties(const QString& subsriptionId, const ctkProperties& properties) = 0;
};
Q_DECLARE_INTERFACE(ctkEventBus, "org.commontk.core.ctkEventBus")
#endif // CTKEVENTBUS_H