home *** CD-ROM | disk | FTP | other *** search
- // Gestionnaire de Check gadget V0.18
- // (C) 1992 Christophe PASSUELLO
- // Tue Dec 15 15:22:11 1992
-
-
- #include <exec/types.h>
- #include <exec/memory.h>
- #include "mytypes.h"
- #define INTUITION_PREFERENCES_H 0
- #include <intuition/intuition.h>
- #include "IObject_priv.h"
-
- // Image pour le check
- IMPORT struct Image CheckImage;
- #define CHECKWIDTH 23
- #define CHECKHEIGHT 12
-
-
- struct Check
- {
- struct ObjectTMV *TMV;
- UWORD ObjectID;
- UWORD Flags;
- STRPTR LabelText;
- struct TextFont *Font;
- struct Window *window;
- struct Requester *requester;
- UWORD ClassFlags;
- struct Box BorderBox;
- struct Gadget Gadget;
- };
-
-
- // prototypes pour les methodes
- PRIVATE BOOL CheckMsg(struct Check *, struct IntuiMessage *);
- PRIVATE VOID ModifyCheck(struct Check *, BOOL);
- PRIVATE VOID DisplayCheck(struct Check *);
- PRIVATE VOID EraseCheck(struct Check *);
- PRIVATE BOOL CheckValue(struct Check *);
- PRIVATE VOID OnCheck(struct Check *);
- PRIVATE VOID ActivateCheck(struct Check *);
-
-
- // Methodes pour les Checks
- const static struct ObjectTMV CheckMethod=
- {
- CLASS_CHECK, sizeof(struct Check),
- DisposeObject, CheckMsg, AddObject, RemoveObject, DisplayCheck, EraseCheck,
- ModifyCheck, CheckValue, OffObjectGad, OnCheck, ActivateCheck
- };
-
-
- //
- // Alloue et Initialise le Check
- //
- struct Check *CreateCheck(struct NewCheck *nc, UWORD ID)
- {
- struct Check *ck;
-
- if (ck = (struct Check *) AllocMem(sizeof(struct Check), MEMF_PUBLIC|MEMF_CLEAR))
- {
- // Initialise la TMV
- ck->TMV = &CheckMethod;
- ck->ObjectID = ID;
-
- // recupere les champs de NewCheck
- InitObjectGad( (struct ObjectGad *) ck, (struct NewObject *) nc);
-
- // Ajuste les boites
- ck->Gadget.Width = ck->BorderBox.w = CHECKWIDTH;
- ck->Gadget.Height = ck->BorderBox.h = CHECKHEIGHT;
- AdjustBox((struct Box *) &ck->Gadget.LeftEdge, TRUE);
-
- ck->Gadget.Flags = GADGHNONE;
- ck->Gadget.Activation = GADGIMMEDIATE;
- ck->Gadget.GadgetType = BOOLGADGET;
- }
- return (ck);
- }
-
-
- //
- // Renvoie l'etat du check
- //
- PRIVATE BOOL CheckValue(struct Check *ck)
- {
- return (ck->ClassFlags & CK_CHECKED);
- }
-
-
- //
- // Change le texte a afficher
- //
- PRIVATE VOID ModifyCheck(struct Check *ck, BOOL status)
- {
- struct RastPort *rp;
-
- rp = ck->window->RPort;
- if (status)
- {
- // objet a cocher
- if (!(ck->ClassFlags & CK_CHECKED) && !(ck->Flags & OBJ_DISABLED))
- DrawImage(rp, &CheckImage, ck->BorderBox.x, ck->BorderBox.y);
-
- ck->ClassFlags |= CK_CHECKED;
- }
- else
- {
- if (ck->ClassFlags & CK_CHECKED && !(ck->Flags & OBJ_DISABLED))
- {
- EraseBox( (struct Box *) &ck->Gadget.LeftEdge, rp);
- ck->ClassFlags &= (~CK_CHECKED);
- }
- }
- }
-
-
- //
- // Change le Check d'etat
- //
- PRIVATE VOID ActivateCheck(struct Check *ck)
- {
- BOOL check;
-
- check = (ck->ClassFlags & CK_CHECKED) ? FALSE : TRUE;
- ModifyCheck(ck, check);
- }
-
-
- //
- // Gestion de l'IntuiMessage pour le Check
- //
- PRIVATE BOOL CheckMsg(struct Check *ck, struct IntuiMessage *msg)
- {
- ActivateCheck(ck);
- return (TRUE);
- }
-
-
- //
- // Affiche le Check en entier
- //
- PRIVATE VOID DisplayCheck(struct Check *ck)
- {
- struct TextEnv env;
- struct RastPort *rp;
-
- // verifie que le Check est dans une fenetre
- if (ck->window)
- {
- rp = ck->window->RPort;
- SaveTextEnv(rp, &env);
-
- FastDraw3DBox( &ck->BorderBox, rp, BOX_1OUT);
- if (ck->ClassFlags & CK_CHECKED)
- DrawImage(rp, &CheckImage, ck->BorderBox.x, ck->BorderBox.y);
-
- PrintObjectLabel( (struct Object *) ck, &ck->BorderBox);
- RestoreTextEnv(rp, &env);
-
- if (ck->Flags & OBJ_DISABLED)
- OffObjectGad((struct ObjectGad *) ck);
- }
- }
-
-
- //
- // Efface le Check
- //
- PRIVATE VOID EraseCheck(struct Check *ck)
- {
- EraseObjectFrame( (struct Object *) ck, &ck->BorderBox);
- }
-
-
- //
- // UnGhoste le Check
- //
- PRIVATE VOID OnCheck(struct Check *ck)
- {
- struct RastPort *rp;
-
- if (ck->Flags & OBJ_DISABLED)
- {
- rp = ck->window->RPort;
-
- OnGadget(&ck->Gadget, ck->window, ck->requester);
- ck->Flags &= (~OBJ_DISABLED);
-
- EraseBox((struct Box *) &ck->Gadget.LeftEdge, rp);
- if (ck->ClassFlags & CK_CHECKED)
- DrawImage(rp, &CheckImage, ck->BorderBox.x, ck->BorderBox.y);
- }
- }
-