home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classes.lha / Classes / Intuition / IDCMP.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-31  |  2.8 KB  |  110 lines

  1. #ifndef CPP_INTUITION_IDCMP_H
  2. #define CPP_INTUITION_IDCMP_H
  3.  
  4. // Klassen zur Verwaltung des IDCMP
  5. // HandlerCklassen für die Antwort auf ein bestimmtes EventC,
  6. // Klasse zur Verwaltung von HandlerClisten und eines IDCMP
  7. // Message Ports und eine Listenklasse dieser Klasse
  8. //
  9. // Autor: Jochen Becher
  10. //
  11. // Historie:
  12. // Version 1.0 am 8. Januar 94
  13. //
  14.  
  15. #ifndef EXEC_PORTS_H
  16. #include <exec/ports.h>
  17. #endif
  18.  
  19. #ifndef INTUITION_INTUITION_H
  20. #include <intuition/intuition.h>
  21. #endif
  22.  
  23. #ifndef CPP_EXEC_PORTS_H
  24. #include <classes/exec/ports.h>
  25. #endif
  26.  
  27. class IntuiMessageC : public MessageC {
  28. public:
  29.     ULONG Class;
  30.     UWORD Code;
  31.     UWORD Qualifier;
  32.     APTR IAddress;
  33.     WORD MouseX, MouseY;
  34.     ULONG Seconds,Micros;
  35.     struct Window *IDCMPWindow;
  36.     struct IntuiMessage *SpecialLink;
  37. };
  38.  
  39. class IDCMPEventHandlerC : public MessageHandlerC {
  40. public:
  41.     IDCMPEventHandlerC(ULONG IDCMPclass);
  42.     ULONG eventClass() const { return evClass; };
  43.     BOOL handle(MessageC &);
  44.     BOOL forMe(MessageC &);
  45. protected:
  46.     virtual BOOL _handle(IntuiMessageC &msg);
  47.     virtual BOOL _forMe(IntuiMessageC &msg);
  48. private:
  49.     ULONG evClass;
  50. };
  51.  
  52. class IDCMPEventHandlerChainC
  53.     : public IDCMPEventHandlerC, public HandlerChainC {
  54. public:
  55.     IDCMPEventHandlerChainC(ULONG IDCMPclass);
  56.     VOID add(IDCMPEventHandlerC &h) { HandlerChainC::add(h); };
  57.     BOOL handle(MessageC &msg) { return HandlerChainC::handle(msg); };
  58.     BOOL exit() { return HandlerChainC::exit(); };
  59. };
  60.  
  61. class IDCMPortC : public HandlerPortC {
  62. public:
  63.     IDCMPortC() throw (PortX, MemoryX)
  64.         : HandlerPortC() { };
  65.     IDCMPortC(STRPTR name, BYTE pri = 0) throw (PortX, MemoryX)
  66.         : HandlerPortC(name,pri) { };
  67.     IDCMPortC(struct MsgPort *port) throw (PortX, MemoryX)
  68.         : HandlerPortC(port) { };
  69.     VOID add(IDCMPEventHandlerC &h) { HandlerPortC::add(h); };
  70. protected:
  71.     BOOL handleMsg(MessageC &msg);
  72.     IntuiMessageC imsg;
  73. };
  74.  
  75. // Ein EventHandlerC zu einer IDCMP Class mit bestimmten Qualifiern
  76. class IDCMPQEventHandlerC : public virtual IDCMPEventHandlerC {
  77. public:
  78.     IDCMPQEventHandlerC(ULONG IDCMPclass, UWORD IDCMPqualifier);
  79. protected:
  80.     BOOL _forMe(IntuiMessageC &msg)
  81.         { return qualifier == msg.Qualifier };
  82. private:
  83.     UWORD qualifier;
  84. };
  85.  
  86. // Ein EventHandlerC zu einer IDCMP Class mit einem bestimmten Code
  87. class IDCMPCEventHandlerC : public virtual IDCMPEventHandlerC {
  88. public:
  89.     IDCMPCEventHandlerC(ULONG IDCMPclass, UWORD IDCMPcode);
  90. protected:
  91.     BOOL _forMe(IntuiMessageC &msg)
  92.         { return code == msg.Code };
  93. private:
  94.     UWORD code;
  95. };
  96.  
  97. // Ein EventHandlerC zu einer IDCMP Class mit bestimmten Qualifiern
  98. // und einem bestimmten Code
  99. class IDCMPQCEventHandlerC
  100.     : public virtual IDCMPQEventHandlerC,
  101.       public virtual IDCMPCEventHandlerC {
  102. public:
  103.     IDCMPQCEventHandlerC(ULONG IDCMPclass, UWORD IDCMPqualifier, UWORD IDCMPcode);
  104. protected:
  105.     BOOL _forMe(IntuiMessageC &msg)
  106.         { return IDCMPQEventHandlerC::_forMe(msg) && IDCMPCEventHandlerC::_forMe(msg); };
  107. };
  108.  
  109. #endif
  110.