Changeset 5929 for code/trunk/src/libraries/core/EventIncludes.h
- Timestamp:
- Oct 12, 2009, 8:20:07 PM (16 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/core5 (added) merged: 5768-5769,5772,5775-5780,5783-5785,5791-5792,5795-5807,5809-5814,5816-5832,5836-5839,5842-5853,5855-5899,5904-5922,5924-5928
- Property svn:mergeinfo changed
-
code/trunk/src/libraries/core/EventIncludes.h
r5781 r5929 32 32 #include "CorePrereqs.h" 33 33 #include "Executor.h" 34 #include "XMLPort.h" 34 35 35 #define ORXONOX_SET_EVENT(classname, eventname, functionname, event) \ 36 ORXONOX_SET_EVENT_GENERIC(eventcontainer##classname##functionname, classname, eventname, functionname, event, BaseObject) 36 /** 37 @brief Defines a new event state (a state of the object which can be changed by events). 38 39 @param classname The name of this class 40 @param subclassname Usually BaseObject - if different, only instances of this class can send events to this object 41 @param statename The name (string) of this state 42 @param function The function which should be used to set the state 43 @param xmlelement Argument for XMLPort 44 @param mode Argument for XMLPort 45 */ 46 #define XMLPortEventState(classname, subclassname, statename, function, xmlelement, mode) \ 47 orxonox::EventState* containername##function = this->getEventState(statename); \ 48 if (!containername##function) \ 49 { \ 50 containername##function = new orxonox::EventState(orxonox::createFunctor(&classname::function, this), orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 51 this->addEventState(statename, containername##function); \ 52 } \ 53 XMLPortEventStateIntern(xmlportevent##function, classname, statename, xmlelement, mode) 37 54 38 #define ORXONOX_SET_EVENT_TEMPLATE(classname, eventname, functionname, event, ...) \ 39 ORXONOX_SET_EVENT_GENERIC_TEMPLATE(eventcontainer##classname##functionname, classname, eventname, functionname, event, BaseObject, __VA_ARGS__) 55 /** 56 @brief Like XMLPortEventState but with additional template arguments to identify the function of the state (if ambiguous). 57 */ 58 #define XMLPortEventStateTemplate(classname, subclassname, statename, function, xmlelement, mode, ...) \ 59 orxonox::EventState* containername##function = this->getEventState(statename); \ 60 if (!containername##function) \ 61 { \ 62 containername##function = new orxonox::EventState(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::function, this), orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 63 this->addEventState(statename, containername##function); \ 64 } \ 65 XMLPortEventStateIntern(xmlportevent##function, classname, statename, xmlelement, mode) 40 66 41 #define ORXONOX_SET_SUBCLASS_EVENT(classname, eventname, functionname, event, subclassname) \ 42 ORXONOX_SET_EVENT_GENERIC(eventcontainer##classname##functionname, classname, eventname, functionname, event, subclassname) 67 #define XMLPortEventStateIntern(name, classname, statename, xmlelement, mode) \ 68 static orxonox::ExecutorMember<classname>* xmlsetfunctor##name = (orxonox::ExecutorMember<classname>*)&orxonox::createExecutor(orxonox::createFunctor(&classname::addEventSource), std::string( #classname ) + "::" + "addEventSource" + "(" + statename + ")")->setDefaultValue(1, statename); \ 69 static orxonox::ExecutorMember<classname>* xmlgetfunctor##name = (orxonox::ExecutorMember<classname>*)&orxonox::createExecutor(orxonox::createFunctor(&classname::getEventSource), std::string( #classname ) + "::" + "getEventSource" + "(" + statename + ")")->setDefaultValue(1, statename); \ 70 XMLPortObjectGeneric(xmlport##name, classname, orxonox::BaseObject, statename, xmlsetfunctor##name, xmlgetfunctor##name, xmlelement, mode, false, true) 71 43 72 44 #define ORXONOX_SET_SUBCLASS_EVENT_TEMPLATE(classname, eventname, functionname, event, subclassname, ...) \ 45 ORXONOX_SET_EVENT_GENERIC_TEMPLATE(eventcontainer##classname##functionname, classname, eventname, functionname, event, subclassname, __VA_ARGS__) 73 /** 74 @brief Defines a new event name for a class. Named events can only have names which were defined with this macro. 75 76 @param classname The name of the class 77 @param name The name of the event 78 */ 79 #define CreateEventName(classname, name) \ 80 static std::string eventname##classname##name = #name 46 81 47 #define ORXONOX_SET_EVENT_GENERIC(containername, classname, eventname, functionname, event, subclassname) \ 48 orxonox::EventContainer* containername = this->getEventContainer(eventname); \ 49 if (!containername) \ 50 { \ 51 ExecutorMember<classname>* executor = orxonox::createExecutor(orxonox::createFunctor(&classname::functionname), std::string( #classname ) + "::" + #functionname); \ 52 executor->setObject(this); \ 53 containername = new orxonox::EventContainer(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 54 this->addEventContainer(eventname, containername); \ 55 } \ 56 event.castedOriginator_ = orxonox::orxonox_cast<subclassname*>(event.originator_); \ 57 containername->process(this, event) 58 59 #define ORXONOX_SET_EVENT_GENERIC_TEMPLATE(containername, classname, eventname, functionname, event, subclassname, ...) \ 60 orxonox::EventContainer* containername = this->getEventContainer(eventname); \ 61 if (!containername) \ 62 { \ 63 ExecutorMember<classname>* executor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::functionname), std::string( #classname ) + "::" + #functionname); \ 64 executor->setObject(this); \ 65 containername = new orxonox::EventContainer(std::string(eventname), executor, orxonox::ClassIdentifier<subclassname>::getIdentifier()); \ 66 this->addEventContainer(eventname, containername); \ 67 } \ 68 event.castedOriginator_ = orxonox::orxonox_cast<subclassname*>(event.originator_); \ 69 containername->process(this, event) 70 82 /** 83 @brief This macro is needed to fire an event with this name. The event name must previously be declared with @ref CreateEventName. 84 */ 85 #define FireEventName(classname, name) \ 86 eventname##classname##name 87 71 88 #endif /* _EventIncludes_H__ */
Note: See TracChangeset
for help on using the changeset viewer.