home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / Software / TemaCD / tcvpa / data1.cab / MyFileGroup / INCLUDE / EvMaster.hpp < prev    next >
C/C++ Source or Header  |  1999-06-03  |  4KB  |  139 lines

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