From 677a64d9d764ed6e37c3f7b1b9ec29239de37a6b Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 12 Nov 2000 20:01:46 +0000 Subject: LeoCAD messaging system git-svn-id: http://svn.leocad.org/trunk@159 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/message.cpp | 32 ++++++++++++++++++++++++++++++++ common/message.h | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 common/message.cpp create mode 100644 common/message.h diff --git a/common/message.cpp b/common/message.cpp new file mode 100644 index 0000000..a124ed6 --- /dev/null +++ b/common/message.cpp @@ -0,0 +1,32 @@ +// +// LeoCAD messaging system +// + +#include "message.h" + +Messenger::Messenger () +{ + m_nRef = 0; +} + +Messenger::~Messenger () +{ + for (unsigned int i = 0; i < m_Listeners.GetSize (); i++) + delete m_Listeners[i]; +} + +void Messenger::Dispatch (int message, void *data) +{ + for (unsigned int i = 0; i < m_Listeners.GetSize (); i++) + m_Listeners[i]->func (message, data, m_Listeners[i]->user); +} + +void Messenger::Listen (LC_MSG_CALLBACK func, void *user) +{ + LC_MSG_STRUCT *s = new LC_MSG_STRUCT; + + s->func = func; + s->user = user; + + m_Listeners.Add (s); +} diff --git a/common/message.h b/common/message.h new file mode 100644 index 0000000..f97cff2 --- /dev/null +++ b/common/message.h @@ -0,0 +1,40 @@ +#ifndef _MESSAGE_H_ +#define _MESSAGE_H_ + +#include "array.h" + +typedef void (*LC_MSG_CALLBACK) (int message, void *data, void *user); + +typedef enum +{ + LC_MSG_FOCUS_CHANGED, + // LC_MSG_SELECTION_CHANGED, + LC_MSG_COUNT +} LC_MESSAGES; + +typedef struct +{ + LC_MSG_CALLBACK func; + void *user; +} LC_MSG_STRUCT; + +class Messenger +{ + public: + Messenger (); + ~Messenger (); + + void AddRef () + { m_nRef++; }; + void DecRef () + { m_nRef--; if (m_nRef == 0) delete this; }; + + void Dispatch (int message, void *data); + void Listen (LC_MSG_CALLBACK func, void *user); + + protected: + int m_nRef; + PtrArray m_Listeners; +}; + +#endif // _MESSAGE_H_ -- cgit v1.2.3