home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / dev / mui-2.1.lha / MUI-2.1 / Developer / ExtClasses / MCC_Busy / Source / Busy.c next >
Encoding:
C/C++ Source or Header  |  1994-06-17  |  5.6 KB  |  268 lines

  1. /*
  2.  
  3.         Busy.mcc (c) 1994 by kmel, Klaus Melchior
  4.  
  5.         Registered MUI class, Serial Number: 0002
  6.  
  7.         busy.c
  8.  
  9. */
  10.  
  11. /* SMAKE */
  12.  
  13.  
  14. #define SUPERCLASS "Area.mui"
  15.  
  16. /*** includes ***/
  17.  
  18. #include "mui_class.h"
  19. #include "busy_mcc.h"
  20.  
  21.  
  22. struct Data
  23. {
  24.     UWORD Pos;
  25.     UWORD Size;
  26.     UBYTE Color1;
  27.     UBYTE Color2;
  28. };
  29.  
  30.  
  31. #define DEFAULT_POSITION 0
  32. #define DEFAULT_COLOR1   1
  33. #define DEFAULT_COLOR2   2
  34. #define DEFAULT_SIZE     8
  35.  
  36.  
  37. static struct Library *MUIClassBase;
  38. static struct Library *MUIMasterBase;
  39. static struct Library *SysBase;
  40. static struct Library *UtilityBase;
  41. static struct Library *DOSBase;
  42. static struct Library *GfxBase;
  43. static struct Library *IntuitionBase;
  44.  
  45. struct MUI_CustomClass *ThisClass;
  46.  
  47.  
  48. ULONG _New(struct IClass *cl, Object *obj, Msg msg)
  49. {
  50.     struct Data *data;
  51.  
  52.     if (!(obj = (Object *)DoSuperMethodA(cl, obj, msg)))
  53.         return(0);
  54.  
  55.     data = INST_DATA(cl, obj);
  56.  
  57.     /*** parse taglist ***/
  58.     data->Pos    = GetTagData(MUIA_Busy_Position, DEFAULT_POSITION, ((struct opSet *)msg)->ops_AttrList);
  59.     data->Color1 = GetTagData(MUIA_Busy_Color1,   DEFAULT_COLOR1, ((struct opSet *)msg)->ops_AttrList);
  60.     data->Color2 = GetTagData(MUIA_Busy_Color2,   DEFAULT_COLOR2, ((struct opSet *)msg)->ops_AttrList);
  61.     data->Size   = GetTagData(MUIA_Busy_Size,     DEFAULT_SIZE, ((struct opSet *)msg)->ops_AttrList);
  62.  
  63.     return((ULONG)obj);
  64. }
  65.  
  66.  
  67.  
  68. ULONG _Dispose(struct IClass *cl,Object *obj,Msg msg)
  69. {
  70.     return(DoSuperMethodA(cl,obj,msg));
  71. }
  72.  
  73.  
  74.  
  75. ULONG _Set(struct IClass *cl,Object *obj,Msg msg)
  76. {
  77.     struct Data *data = INST_DATA(cl, obj);
  78.     struct TagItem *tags,*tag;
  79.  
  80.     for (tags=((struct opSet *)msg)->ops_AttrList;tag=NextTagItem(&tags);)
  81.     {
  82.         switch (tag->ti_Tag)
  83.         {
  84.             case MUIA_Busy_Position:
  85.                 data->Pos = tag->ti_Data;
  86.                 MUI_Redraw(obj,MADF_DRAWOBJECT);
  87.                 break;
  88.  
  89.             case MUIA_Busy_Color1:
  90.                 data->Color1 = tag->ti_Data;
  91.                 MUI_Redraw(obj,MADF_DRAWOBJECT);
  92.                 break;
  93.  
  94.             case MUIA_Busy_Color2:
  95.                 data->Color2 = tag->ti_Data;
  96.                 MUI_Redraw(obj,MADF_DRAWOBJECT);
  97.                 break;
  98.  
  99.             case MUIA_Busy_Size:
  100.                 data->Size = tag->ti_Data;
  101.                 MUI_Redraw(obj,MADF_DRAWOBJECT);
  102.                 break;
  103.  
  104.         }
  105.     }
  106.  
  107.     return(DoSuperMethodA(cl,obj,msg));
  108. }
  109.  
  110.  
  111. static ULONG _Get(struct IClass *cl,Object *obj,Msg msg)
  112. {
  113.     struct Data *data = INST_DATA(cl,obj);
  114.     ULONG *store = ((struct opGet *)msg)->opg_Storage;
  115.  
  116.     switch (((struct opGet *)msg)->opg_AttrID)
  117.     {
  118.         case MUIA_Busy_Position:
  119.             *store = data->Pos;
  120.             return(TRUE);
  121.         break;
  122.  
  123.         case MUIA_Busy_Color1:
  124.             *store = data->Color1;
  125.             return(TRUE);
  126.         break;
  127.  
  128.         case MUIA_Busy_Color2:
  129.             *store = data->Color2;
  130.             return(TRUE);
  131.         break;
  132.  
  133.         case MUIA_Busy_Size:
  134.             *store = data->Size;
  135.             return(TRUE);
  136.         break;
  137.  
  138.     }
  139.  
  140.     return(DoSuperMethodA(cl,obj,msg));
  141. }
  142.  
  143.  
  144. ULONG _AskMinMax(struct IClass *cl, Object *obj, struct MUIP_AskMinMax *msg)
  145. {
  146.     /*** first ask the superclass ***/
  147.     DoSuperMethodA(cl,obj,(Msg)msg);
  148.  
  149.     /*** add our values ***/
  150.     msg->MinMaxInfo->MinWidth  += 8;
  151.     msg->MinMaxInfo->DefWidth  += 24;
  152.     msg->MinMaxInfo->MaxWidth  += MBQ_MUI_MAXMAX;
  153.  
  154.     msg->MinMaxInfo->MinHeight += 4;
  155.     msg->MinMaxInfo->DefHeight += 4;
  156.     msg->MinMaxInfo->MaxHeight += MBQ_MUI_MAXMAX;
  157.  
  158.     return(0);
  159. }
  160.  
  161.  
  162. ULONG _Draw(struct IClass *cl,Object *obj,struct MUIP_Draw *msg)
  163. {
  164.     struct Data *data = INST_DATA(cl,obj);
  165.     int i;
  166.  
  167.     /*** first draws the superclass ***/
  168.     DoSuperMethodA(cl,obj,(Msg)msg);
  169.  
  170.     if (!(msg->flags & MADF_DRAWOBJECT))
  171.         return(0);
  172.  
  173.     SetAPen(_rp(obj), data->Color2);
  174.     RectFill(_rp(obj), _mleft(obj), _mtop(obj), _mright(obj), _mbottom(obj));
  175.  
  176.     SetAPen(_rp(obj), data->Color1);
  177.  
  178.     if (data->Pos > data->Size)
  179.         RectFill(_rp(obj), _mleft(obj), _mtop(obj), _mleft(obj) + data->Pos - data->Size - 1, _mbottom(obj));
  180.  
  181.     for (i=_mleft(obj) + data->Pos; (i + data->Size) < _mright(obj); i += (data->Size << 1))
  182.         RectFill(_rp(obj), i, _mtop(obj), i + data->Size - 1, _mbottom(obj));
  183.  
  184.     if (_mright(obj) - i > 0)
  185.         RectFill(_rp(obj), i, _mtop(obj), _mright(obj), _mbottom(obj));
  186.  
  187.     return(0);
  188. }
  189.  
  190.  
  191. ULONG ASM _Dispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
  192. {
  193.     switch (msg->MethodID)
  194.     {
  195.         case OM_NEW        : return(_New      (cl,obj,(APTR)msg));
  196.         case OM_DISPOSE    : return(_Dispose  (cl,obj,(APTR)msg));
  197.         case OM_SET        : return(_Set      (cl,obj,(APTR)msg));
  198.         case OM_GET        : return(_Get      (cl,obj,(APTR)msg));
  199.         case MUIM_AskMinMax: return(_AskMinMax(cl,obj,(APTR)msg));
  200.         case MUIM_Draw     : return(_Draw     (cl,obj,(APTR)msg));
  201.  
  202.         case MUIM_Busy_Move:
  203.         {
  204.             struct Data *data = INST_DATA(cl,obj);
  205.  
  206.             data->Pos += 2;
  207.  
  208.             if (data->Pos > (data->Size << 1))
  209.                 data->Pos -= (data->Size << 1);
  210.  
  211.             SetBPen(_rp(obj), data->Color2);
  212.  
  213.             ScrollRaster(_rp(obj), -2, 0,    
  214.                  _mleft(obj), _mtop(obj), _mright(obj) , _mbottom(obj));
  215.  
  216.             SetAPen(_rp(obj), data->Color1);
  217.  
  218.             if (data->Pos > data->Size)
  219.                 RectFill(_rp(obj), _mleft(obj), _mtop(obj), _mleft(obj) + data->Pos - data->Size - 1, _mbottom(obj));
  220.  
  221.             return(TRUE);
  222.         }
  223.         break;
  224.  
  225.     }
  226.  
  227.     return(DoSuperMethodA(cl,obj,msg));
  228. }
  229.  
  230.  
  231. int ASM __UserLibInit(REG(a6) struct Library *mybase)
  232. {
  233.     SysBase = *((struct Library **)4);
  234.     MUIClassBase = mybase;
  235.  
  236.     if (MUIMasterBase = OpenLibrary("muimaster.library",8))
  237.     {
  238.         if (ThisClass = MUI_CreateCustomClass(
  239.             mybase, SUPERCLASS, NULL, sizeof(struct Data), _Dispatcher))
  240.         {
  241.             UtilityBase   = ThisClass->mcc_UtilityBase;
  242.             DOSBase       = ThisClass->mcc_DOSBase;
  243.             GfxBase       = ThisClass->mcc_GfxBase;
  244.             IntuitionBase = ThisClass->mcc_IntuitionBase;
  245.  
  246.             return(0);
  247.         }
  248.         CloseLibrary(MUIMasterBase);
  249.     }
  250.     return(-1);
  251. }
  252.  
  253.  
  254. void ASM __UserLibCleanup(REG(a6) struct Library *mybase)
  255. {
  256.     if (MUIMasterBase)
  257.     {
  258.         if (ThisClass) MUI_DeleteCustomClass(ThisClass);
  259.         CloseLibrary(MUIMasterBase);
  260.     }
  261. }
  262.  
  263.  
  264. struct MUI_CustomClass *ASM MCC_GetClass(VOID)
  265. {
  266.     return(ThisClass);
  267. }
  268.