add has_hook

This commit is contained in:
David Rose 2003-10-29 02:08:14 +00:00
parent 6faea2fcad
commit 70d1868ce3
2 changed files with 33 additions and 5 deletions

View File

@ -163,10 +163,37 @@ add_hook(const string &event_name, EventFunction *function) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
bool EventHandler:: bool EventHandler::
add_hook(const string &event_name, EventCallbackFunction *function, add_hook(const string &event_name, EventCallbackFunction *function,
void *data) { void *data) {
return _cbhooks[event_name].insert(CallbackFunction(function, data)).second; return _cbhooks[event_name].insert(CallbackFunction(function, data)).second;
} }
////////////////////////////////////////////////////////////////////
// Function: EventHandler::has_hook
// Access: Public
// Description: Returns true if there is any hook added on the
// indicated event name, false otherwise.
////////////////////////////////////////////////////////////////////
bool EventHandler::
has_hook(const string &event_name) const {
Hooks::const_iterator hi;
hi = _hooks.find(event_name);
if (hi != _hooks.end()) {
if (!(*hi).second.empty()) {
return true;
}
}
CallbackHooks::const_iterator chi;
chi = _cbhooks.find(event_name);
if (chi != _cbhooks.end()) {
if (!(*chi).second.empty()) {
return true;
}
}
return false;
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: EventHandler::remove_hook // Function: EventHandler::remove_hook
@ -191,7 +218,7 @@ remove_hook(const string &event_name, EventFunction *function) {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
bool EventHandler:: bool EventHandler::
remove_hook(const string &event_name, EventCallbackFunction *function, remove_hook(const string &event_name, EventCallbackFunction *function,
void *data) { void *data) {
return _cbhooks[event_name].erase(CallbackFunction(function, data)) != 0; return _cbhooks[event_name].erase(CallbackFunction(function, data)) != 0;
} }

View File

@ -45,7 +45,7 @@ class EXPCL_PANDAEXPRESS EventHandler : public TypedObject {
public: public:
// Define a function type suitable for receiving events. // Define a function type suitable for receiving events.
typedef void EventFunction(CPT_Event); typedef void EventFunction(CPT_Event);
typedef void EventCallbackFunction(CPT(Event), void*); typedef void EventCallbackFunction(CPT_Event, void *);
PUBLISHED: PUBLISHED:
EventHandler(EventQueue *queue); EventHandler(EventQueue *queue);
@ -59,10 +59,11 @@ PUBLISHED:
public: public:
bool add_hook(const string &event_name, EventFunction *function); bool add_hook(const string &event_name, EventFunction *function);
bool add_hook(const string &event_name, EventCallbackFunction *function, bool add_hook(const string &event_name, EventCallbackFunction *function,
void*); void *data);
bool has_hook(const string &event_name) const;
bool remove_hook(const string &event_name, EventFunction *function); bool remove_hook(const string &event_name, EventFunction *function);
bool remove_hook(const string &event_name, EventCallbackFunction *function, bool remove_hook(const string &event_name, EventCallbackFunction *function,
void*); void *data);
void remove_all_hooks(); void remove_all_hooks();