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

  1. #ifndef CPP_BOOPSI_POPUPMENUCLASS_H
  2. #define CPP_BOOPSI_POPUPMENUCLASS_H
  3.  
  4. // Eine Klasse für Popup Menüs.
  5. //
  6. // Gadgets dieser Klasse können (und sollten) komplett von anderen Gadgets
  7. // gesteuert werden: Diese schicken bei Bedarf ein GM_GOACTIVE, daraufhin
  8. // öffnet sich das Menü. Dann können die InputEvents mittels GM_HANDLEINPUT
  9. // an das Menü geschickt werden, bis dieses nicht mehr mit GM_MEACTIVE
  10. // antwortet. Zum Ausblenden muß GM_GOINACTIVE an das Menü geschickt werden.
  11. //
  12. // Zwischen GM_GOACTIVE und GM_GOINACTIVE ist die LayerInfo gelockt, also
  13. // dürfen solange keine weiteren Zeichenroutinen benutzt werden.
  14. //
  15. // Autor: Jochen Becher
  16. //
  17. // Historie:
  18. // Version 1.0 am 2. März 94
  19.  
  20. #ifndef CPP_BOOPSI_BOOPSICLASS_H
  21. #include <classes/boopsi/boopsiclass.h>
  22. #endif
  23.  
  24. #ifndef CPP_BOOPSI_GADGETCLASS_H
  25. #include <classes/boopsi/gadgetclass.h>
  26. #endif
  27.  
  28. #define MA_Active     (TAG_USER+1)  // (ISG)
  29. #define MA_Labels     (TAG_USER+2)  // (IS.)
  30. #define MA_Font       (TAG_USER+3)  // (IS.)
  31. #define MA_MaxHeight  (TAG_USER+4)  // (I..)
  32.  
  33. class PopupMenuClass : public BoopsiClass {
  34. public:
  35.     PopupMenuClass();
  36. private:
  37.     static ULONG dispatcher(Class *cl, Object *o, Msg msg);
  38.     static ULONG renderPopupMenu(Class *cl, struct Gadget *g,
  39.         struct gpRender *msg, struct InstanceData *);
  40.     static UWORD countLabels(STRPTR *labels);
  41.     static VOID cutActive(struct InstanceData *data);
  42.     static BOOL InitPopupMenu(struct InstanceData *, struct Gadget *,
  43.             struct GadgetInfo *);
  44.     static VOID FinishPopupMenu(struct InstanceData *, struct GadgetInfo *);
  45.     static VOID renderLabels(struct InstanceData *data,
  46.         struct GadgetInfo *ginfo);
  47.     static VOID invertActive(struct InstanceData *data,
  48.         struct GadgetInfo *ginfo);
  49.     static VOID renderArrowUp(struct InstanceData *data,
  50.         struct GadgetInfo *ginfo);
  51.     static VOID renderArrowDown(struct InstanceData *data,
  52.         struct GadgetInfo *ginfo);
  53.     static VOID scrollUp(struct InstanceData *data,
  54.         struct GadgetInfo *ginfo);
  55.     static VOID scrollDown(struct InstanceData *data,
  56.         struct GadgetInfo *ginfo);
  57.     static VOID renderPopupMenuFrame(struct RastPort *, UWORD left, UWORD top,
  58.             UWORD width, UWORD height, UWORD *pens);
  59. };
  60.  
  61. class BPopupMenuC : public BGadgetC {
  62. public:
  63.     BPopupMenuC(GadgetEventC *ev,WindowC &w, Tag tag1type, ...)
  64.         : BGadgetC(ev,pmc.boopsiclass(),NULL,w,(struct TagItem *) &tag1type) { };
  65.     BPopupMenuC(GadgetEventC *ev,WindowC &w, struct TagItem *tags)
  66.         : BGadgetC(ev,pmc.boopsiclass(),NULL,w,tags) { };
  67.     static PopupMenuClass *boopsiclass() { return &pmc; };
  68. protected:
  69.     BPopupMenuC(GadgetEventC *ev, struct IClass *c, STRPTR pubclass,
  70.         WindowC &w, struct TagItem *tags)
  71.         : BGadgetC(ev,NULL,pubclass,w,tags) { };
  72. private:
  73.     static PopupMenuClass pmc;
  74. };
  75.  
  76. #endif
  77.