home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat31 / iobject / sources.lha / sources / Check.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-23  |  3.9 KB  |  195 lines

  1. // Gestionnaire de Check gadget V0.18
  2. // (C) 1992 Christophe PASSUELLO
  3. // Tue Dec 15 15:22:11 1992
  4.  
  5.  
  6. #include <exec/types.h>
  7. #include <exec/memory.h>
  8. #include "mytypes.h"
  9. #define  INTUITION_PREFERENCES_H 0
  10. #include <intuition/intuition.h>
  11. #include "IObject_priv.h"
  12.  
  13. // Image pour le check
  14. IMPORT struct Image CheckImage;
  15. #define CHECKWIDTH    23
  16. #define CHECKHEIGHT 12
  17.  
  18.  
  19. struct Check
  20. {
  21.     struct ObjectTMV *TMV;
  22.     UWORD  ObjectID;
  23.     UWORD  Flags;
  24.     STRPTR LabelText;
  25.     struct TextFont *Font;
  26.     struct Window *window;
  27.     struct Requester *requester;
  28.     UWORD  ClassFlags;
  29.     struct Box BorderBox;
  30.     struct Gadget Gadget;
  31. };
  32.  
  33.  
  34. // prototypes pour les methodes
  35. PRIVATE BOOL CheckMsg(struct Check *, struct IntuiMessage *);
  36. PRIVATE VOID ModifyCheck(struct Check *, BOOL);
  37. PRIVATE VOID DisplayCheck(struct Check *);
  38. PRIVATE VOID EraseCheck(struct Check *);
  39. PRIVATE BOOL CheckValue(struct Check *);
  40. PRIVATE VOID OnCheck(struct Check *);
  41. PRIVATE VOID ActivateCheck(struct Check *);
  42.  
  43.  
  44. // Methodes pour les Checks
  45. const static struct ObjectTMV CheckMethod=
  46. {
  47.     CLASS_CHECK, sizeof(struct Check),
  48.     DisposeObject, CheckMsg, AddObject, RemoveObject, DisplayCheck, EraseCheck,
  49.     ModifyCheck, CheckValue, OffObjectGad, OnCheck, ActivateCheck
  50. };
  51.  
  52.  
  53. //
  54. // Alloue et Initialise le Check
  55. //
  56. struct Check *CreateCheck(struct NewCheck *nc, UWORD ID)
  57. {
  58.     struct Check *ck;
  59.  
  60.     if (ck = (struct Check *) AllocMem(sizeof(struct Check), MEMF_PUBLIC|MEMF_CLEAR))
  61.     {
  62.         // Initialise la TMV
  63.         ck->TMV = &CheckMethod;
  64.         ck->ObjectID = ID;
  65.  
  66.         // recupere les champs de NewCheck
  67.         InitObjectGad( (struct ObjectGad *) ck, (struct NewObject *) nc);
  68.  
  69.         // Ajuste les boites
  70.         ck->Gadget.Width = ck->BorderBox.w = CHECKWIDTH;
  71.         ck->Gadget.Height = ck->BorderBox.h = CHECKHEIGHT;
  72.         AdjustBox((struct Box *) &ck->Gadget.LeftEdge, TRUE);
  73.  
  74.         ck->Gadget.Flags = GADGHNONE;
  75.         ck->Gadget.Activation = GADGIMMEDIATE;
  76.         ck->Gadget.GadgetType = BOOLGADGET;
  77.     }
  78.     return (ck);
  79. }
  80.  
  81.  
  82. //
  83. // Renvoie l'etat du check
  84. //
  85. PRIVATE BOOL CheckValue(struct Check *ck)
  86. {
  87.     return (ck->ClassFlags & CK_CHECKED);
  88. }
  89.  
  90.  
  91. //
  92. // Change le texte a afficher
  93. //
  94. PRIVATE VOID ModifyCheck(struct Check *ck, BOOL status)
  95. {
  96.     struct RastPort *rp;
  97.  
  98.     rp = ck->window->RPort;
  99.     if (status)
  100.     {
  101.         // objet a cocher
  102.         if (!(ck->ClassFlags & CK_CHECKED) && !(ck->Flags & OBJ_DISABLED))
  103.             DrawImage(rp, &CheckImage, ck->BorderBox.x, ck->BorderBox.y);
  104.  
  105.         ck->ClassFlags |= CK_CHECKED;
  106.     }
  107.     else
  108.     {
  109.         if (ck->ClassFlags & CK_CHECKED && !(ck->Flags & OBJ_DISABLED))
  110.         {
  111.             EraseBox( (struct Box *) &ck->Gadget.LeftEdge, rp);
  112.             ck->ClassFlags &= (~CK_CHECKED);
  113.         }
  114.     }
  115. }
  116.  
  117.  
  118. //
  119. // Change le Check d'etat
  120. //
  121. PRIVATE VOID ActivateCheck(struct Check *ck)
  122. {
  123.     BOOL check;
  124.  
  125.     check = (ck->ClassFlags & CK_CHECKED) ? FALSE : TRUE;
  126.     ModifyCheck(ck, check);
  127. }
  128.  
  129.  
  130. //
  131. // Gestion de l'IntuiMessage pour le Check
  132. //
  133. PRIVATE BOOL CheckMsg(struct Check *ck, struct IntuiMessage *msg)
  134. {
  135.     ActivateCheck(ck);
  136.     return (TRUE);
  137. }
  138.  
  139.  
  140. //
  141. // Affiche le Check en entier
  142. //
  143. PRIVATE VOID DisplayCheck(struct Check *ck)
  144. {
  145.     struct TextEnv env;
  146.     struct RastPort *rp;
  147.  
  148.     // verifie que le Check est dans une fenetre
  149.     if (ck->window)
  150.     {
  151.         rp = ck->window->RPort;
  152.         SaveTextEnv(rp, &env);
  153.  
  154.         FastDraw3DBox( &ck->BorderBox, rp, BOX_1OUT);
  155.         if (ck->ClassFlags & CK_CHECKED)
  156.             DrawImage(rp, &CheckImage, ck->BorderBox.x, ck->BorderBox.y);
  157.  
  158.         PrintObjectLabel( (struct Object *) ck, &ck->BorderBox);
  159.         RestoreTextEnv(rp, &env);
  160.  
  161.         if (ck->Flags & OBJ_DISABLED)
  162.             OffObjectGad((struct ObjectGad *) ck);
  163.     }
  164. }
  165.  
  166.  
  167. //
  168. // Efface le Check
  169. //
  170. PRIVATE VOID EraseCheck(struct Check *ck)
  171. {
  172.     EraseObjectFrame( (struct Object *) ck, &ck->BorderBox);
  173. }
  174.  
  175.  
  176. //
  177. // UnGhoste le Check
  178. //
  179. PRIVATE VOID OnCheck(struct Check *ck)
  180. {
  181.     struct RastPort *rp;
  182.  
  183.     if (ck->Flags & OBJ_DISABLED)
  184.     {
  185.         rp = ck->window->RPort;
  186.  
  187.         OnGadget(&ck->Gadget, ck->window, ck->requester);
  188.         ck->Flags &= (~OBJ_DISABLED);
  189.  
  190.         EraseBox((struct Box *) &ck->Gadget.LeftEdge, rp);
  191.         if (ck->ClassFlags & CK_CHECKED)
  192.             DrawImage(rp, &CheckImage, ck->BorderBox.x, ck->BorderBox.y);
  193.     }
  194. }
  195.