home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / C_C++ / VisualProgrammingArmoury / data1.cab / MyFileGroup / INCLUDE / EvMaster.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-23  |  4.4 KB  |  155 lines

  1. #ifndef _INC_EVMASTER_HPP
  2. #define _INC_EVMASTER_HPP
  3. #ifdef __GNUG__
  4.  
  5. #ifdef BUILD_TCCORE
  6. #define TCCORELIB    dllexport
  7. #else
  8. #ifdef BUILD_LOCAL
  9. #define TCCORELIB
  10. #else
  11. #define TCCORELIB    dllimport
  12. #endif
  13. #endif
  14.  
  15. #else
  16.  
  17. #ifdef BUILD_TCCORE
  18. #define TCCORELIB    __declspec(dllexport)
  19. #else
  20. #ifdef BUILD_LOCAL
  21. #define TCCORELIB
  22. #else
  23. #define TCCORELIB    __declspec(dllimport)
  24. #endif
  25. #endif
  26.  
  27. #endif
  28. class TC_CEventMaster;
  29. struct _TC_CEvInfItem;
  30. struct TC_Event;
  31.  
  32. struct event_t
  33. {
  34.     int        type;
  35.     int        id;
  36.     event_t () { type=0; id=0; }
  37.     event_t (int t,int i) { type=t; id=i; }
  38.     event_t (LPCSTR str) { type=id=0; strncpy((char*)&type,str,8); }
  39. };
  40.  
  41. struct TC_Event
  42. {
  43.     event_t event;
  44.     TC_CEventMaster * object;
  45.     TC_CEventMaster * sender;
  46.     long    dw_user;
  47.     long    arg;
  48.  
  49.     TC_Event() { sender = 0; }
  50. };
  51.  
  52.  
  53. typedef BOOL (TC_CEventMaster::* C_EVENT_HANDLER)( TC_Event * ev );
  54. typedef BOOL (                 * S_EVENT_HANDLER)( TC_Event * ev );
  55.  
  56. inline BOOL operator == (const event_t &e1, const event_t &e2)
  57. {
  58.     return (e1.type == e2.type && e1.id == e2.id);
  59. }
  60. inline BOOL operator > (const event_t &e1, const event_t &e2)
  61. {
  62.     if(e1.type < e2.type ) return FALSE;
  63.     if(e1.type > e2.type ) return TRUE;
  64.     return (e1.id > e2.id);
  65. }
  66. inline BOOL operator < (const event_t &e1, const event_t &e2)
  67. {
  68.     if(e1.type > e2.type ) return FALSE;
  69.     if(e1.type < e2.type ) return TRUE;
  70.     return (e1.id < e2.id);
  71. }
  72. inline BOOL operator == (const event_t &e1, LPCSTR s)
  73. {
  74.     return !strncmp( (char*)&e1.type, s, 8 );
  75. }
  76. #define C_EVENT_CAST(f,cls)  (C_EVENT_HANDLER)((BOOL(cls::*)(TC_Event*))f)
  77.  
  78. //#define SET_C_EV(t,i,o,f)  SetCEventHandler(event_t(t,i),o,(C_EVENT_HANDLER)(f))
  79. #define SET_S_EV(t,i,f)    SetSEventHandler(event_t(t,(int)(i)),(S_EVENT_HANDLER)(f))
  80. #define SET_S_EV_(t,i,f,o) SetSEventHandler(event_t(t,(int)(i)),(S_EVENT_HANDLER)(f),(long)o)
  81.  
  82. #define SET_S_EV_STR(ss,f)    SetSEventHandler(event_t(ss),(S_EVENT_HANDLER)(f))
  83.  
  84. #define SET_C_EV(t,i,o,f,cls)  SetCEventHandler(\
  85.     event_t((int)(t),(int)(i)),\
  86.     o,\
  87.     (C_EVENT_HANDLER)((BOOL(cls::*)(TC_Event*))f))
  88.  
  89. #define SET_THIS_EV(t,i,f,cls)  SetCEventHandler(\
  90.     event_t((int)(t),(int)(i)),\
  91.     this,\
  92.     (C_EVENT_HANDLER)((BOOL(cls::*)(TC_Event*))f)\
  93.     )
  94.  
  95. #define SET_THIS_EV_(t,i,dwu,f,cls)  SetCEventHandler(\
  96.     event_t((int)(t),(int)(i)),\
  97.     this,\
  98.     (C_EVENT_HANDLER)((BOOL(cls::*)(TC_Event*))f),\
  99.     dwu\
  100.     )
  101.  
  102. #define SET_OBJ_EV(w,t,i,f,cls)  (w)->SetCEventHandler(\
  103.     event_t((int)(t),(int)(i)),\
  104.     w,\
  105.     (C_EVENT_HANDLER)((BOOL(cls::*)(TC_Event*))f)\
  106.     )
  107.  
  108. #define SET_THIS_EV_STR(ss,f,cls)  SetCEventHandler(\
  109.     event_t(ss),\
  110.     this,\
  111.     (C_EVENT_HANDLER)((BOOL(cls::*)(TC_Event*))f)\
  112.     )
  113.  
  114. // **********************************************************************
  115. class TCCORELIB TC_CEventMaster 
  116. {
  117. private:  TC_TArrayPTR <_TC_CEvInfItem>* _EvTbl ;
  118. private:  TC_TArrayPTR <TC_CEventMaster>* _EvHandled ;
  119. public:   TC_CEventMaster ()  ;
  120. public: virtual  ~TC_CEventMaster ()  ;
  121. private:  void _SetEventHandler (event_t event, TC_CEventMaster * object, C_EVENT_HANDLER c_func, S_EVENT_HANDLER s_func, long dw_user)  ;
  122. public:  void SetCEventHandler (event_t event, TC_CEventMaster * object, C_EVENT_HANDLER c_func, long dw_user=0)  ;
  123. public:  void SetSEventHandler (event_t event, S_EVENT_HANDLER s_func, long dw_user=0)  ;
  124. public:  void ClearAllHandlers ()  ;
  125. public:  void RemoveLinkHandlers (TC_CEventMaster * object)  ;
  126. public:  BOOL RemoveLinkCHandler (TC_CEventMaster * object, C_EVENT_HANDLER c_proc)  ;
  127. public:  void RemoveMyHandlers ()  ;
  128. public:  void RemoveMyCHandler (C_EVENT_HANDLER c_proc)  ;
  129. public:  BOOL CallEventHandler (TC_Event * es)  ;
  130. public: virtual void* GetInterface (LPCSTR name)  ;
  131. public: virtual const char* GetClassName ()  ;
  132. public: static void Destroy (TC_CEventMaster *obj)  ;
  133.  
  134. }; // end of class TC_CEventMaster
  135.  
  136. // **********************************************************************
  137.  
  138. // **********************************************************************
  139. struct TCCORELIB _TC_CEvInfItem 
  140. {
  141. public:  event_t event ;
  142. public:  C_EVENT_HANDLER c_func ;
  143. public:  S_EVENT_HANDLER s_func ;
  144. public:  TC_CEventMaster* object ;
  145. public:  _TC_CEvInfItem* next ;
  146. public:  long dw_user ;
  147. public:   ~_TC_CEvInfItem ()  ;
  148.  
  149. }; // end of class _TC_CEvInfItem
  150.  
  151. // **********************************************************************
  152. TCCORELIB BOOL _NullHandler (TC_Event *)  ;
  153.  
  154. #endif // _INC_EVMASTER_HPP
  155.