home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 2 / goldfish_vol2_cd1.bin / files / dev / gui / mui / developer / extclasses / mcc_userdata / userdata.c < prev    next >
C/C++ Source or Header  |  1994-08-08  |  6KB  |  229 lines

  1. /*
  2.     UserData.mcc is a subclass of groupclass. Several gadgets
  3.     allow entering a users name and address. This silly class
  4.     is just a demo how to write subclasses of group class.
  5.  
  6.    Note: Compile with SAS/C 6.1 and above.
  7. */
  8.  
  9. /* Includes */
  10. #include <libraries/mui.h>
  11. #include <dos/dos.h>
  12. #include <clib/alib_protos.h>
  13. #include <clib/exec_protos.h>
  14. #include <clib/dos_protos.h>
  15. #include <clib/intuition_protos.h>
  16. #include <clib/utility_protos.h>
  17. #include <clib/muimaster_protos.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20.  
  21. #include <pragmas/exec_sysbase_pragmas.h>
  22. #include <pragmas/dos_pragmas.h>
  23. #include <pragmas/intuition_pragmas.h>
  24. #include <pragmas/utility_pragmas.h>
  25. #include <pragmas/muimaster_pragmas.h>
  26.  
  27. #include "UserData_mcc.h"
  28.  
  29. static const char VersionTag[] = "\0$VER: UserData.mcc 9.11 (07.08.94)";
  30.  
  31. #define CLASS      MUIC_UserData
  32. #define SUPERCLASS MUIC_Group
  33.  
  34. struct Data
  35. {
  36.     Object *group;
  37.     Object *first;
  38.     Object *name;
  39.     Object *street;
  40.     Object *city;
  41.     Object *country;
  42.     Object *phone;
  43.     Object *email;
  44. };
  45.  
  46.  
  47. static struct Library *MUIClassBase;
  48. static struct Library *MUIMasterBase;
  49. static struct Library *SysBase;
  50. static struct Library *UtilityBase;
  51. static struct Library *DOSBase;
  52. static struct Library *IntuitionBase;
  53.  
  54. static struct MUI_CustomClass *ThisClass;
  55.  
  56.  
  57. static const char *PopNames[] =
  58. {
  59.     "Germany",
  60.     "Suisse",
  61.     "Italy",
  62.     "U.S.A.",
  63.     "Australia",
  64.     NULL
  65. };
  66.  
  67.  
  68. static ULONG mNew(struct IClass *cl,Object *obj,struct opSet *msg)
  69. {
  70.     struct Data *data;
  71.  
  72.     if (!(obj = (Object *)DoSuperMethodA(cl,obj,(Msg)msg)))
  73.         return(0);
  74.  
  75.     data = INST_DATA(cl,obj);
  76.  
  77.     data->group = VGroup,
  78.         Child, HGroup, GroupFrameT("Customer"),
  79.             Child, ColGroup(2), MUIA_Weight, 200,
  80.                 Child, Label("Name:"   ), Child, HGroup,
  81.                     Child, data->name  = MUI_MakeObject(MUIO_String,NULL,50),
  82.                     Child, data->first = MUI_MakeObject(MUIO_String,NULL,50),
  83.                     End,
  84.                 Child, Label("Street:"  ), Child, data->street = MUI_MakeObject(MUIO_String,NULL,100),
  85.                 Child, Label("PC, City:"), Child, data->city   = MUI_MakeObject(MUIO_String,NULL,100),
  86.                 End,
  87.             Child, ColGroup(2),
  88.                 Child, Label("Country:"),
  89.                 Child, data->country = PoplistObject,
  90.                     MUIA_Poplist_Array   , PopNames,
  91.                     MUIA_Popstring_String, MUI_MakeObject(MUIO_String,NULL,30),
  92.                     MUIA_Popstring_Button, MUI_MakeObject(MUIO_PopButton,MUII_PopUp),
  93.                     End,
  94.                 Child, Label("Phone:"  ), Child, data->phone = MUI_MakeObject(MUIO_String,NULL,30),
  95.                 Child, Label("EMail:"  ), Child, data->email = MUI_MakeObject(MUIO_String,NULL,30),
  96.                 End,
  97.             End,
  98.         End;
  99.  
  100.     if (!data->group)
  101.     {
  102.         CoerceMethod(cl,obj,OM_DISPOSE);
  103.         return(0);
  104.     }
  105.  
  106.     DoMethod(obj,OM_ADDMEMBER,data->group);
  107.  
  108.     msg->MethodID = OM_SET; /* a little trick to parse taglist */
  109.     DoMethodA(obj,msg);     /* and set attributes with OM_SET. */
  110.     msg->MethodID = OM_NEW; /* restore method id               */
  111.  
  112.     return((ULONG)obj);
  113. }
  114.  
  115.  
  116. static ULONG mDispose(struct IClass *cl,Object *obj,Msg msg)
  117. {
  118.     return(DoSuperMethodA(cl,obj,msg));
  119. }
  120.  
  121.  
  122. static ULONG mSet(struct IClass *cl,Object *obj,struct opSet *msg)
  123. {
  124.     struct Data *data = INST_DATA(cl,obj);
  125.     struct TagItem *tags,*tag;
  126.  
  127.     for (tags=msg->ops_AttrList;tag=NextTagItem(&tags);)
  128.     {
  129.         switch (tag->ti_Tag)
  130.         {
  131.             case MUIA_UserData_Name   : set(data->name   ,MUIA_String_Contents,tag->ti_Data); break;
  132.             case MUIA_UserData_First  : set(data->first  ,MUIA_String_Contents,tag->ti_Data); break;
  133.             case MUIA_UserData_Street : set(data->street ,MUIA_String_Contents,tag->ti_Data); break;
  134.             case MUIA_UserData_City   : set(data->city   ,MUIA_String_Contents,tag->ti_Data); break;
  135.             case MUIA_UserData_Country: set(data->country,MUIA_String_Contents,tag->ti_Data); break;
  136.             case MUIA_UserData_EMail  : set(data->email  ,MUIA_String_Contents,tag->ti_Data); break;
  137.             case MUIA_UserData_Phone  : set(data->phone  ,MUIA_String_Contents,tag->ti_Data); break;
  138.         }
  139.     }
  140.  
  141.     return(DoSuperMethodA(cl,obj,msg));
  142. }
  143.  
  144.  
  145. static ULONG mGet(struct IClass *cl,Object *obj,Msg msg)
  146. {
  147.     struct Data *data = INST_DATA(cl,obj);
  148.  
  149.     switch (((struct opGet *)msg)->opg_AttrID)
  150.     {
  151.         case MUIA_UserData_Name   : return(DoMethodA(data->name   ,msg));
  152.         case MUIA_UserData_First  : return(DoMethodA(data->first  ,msg));
  153.         case MUIA_UserData_Street : return(DoMethodA(data->street ,msg));
  154.         case MUIA_UserData_City   : return(DoMethodA(data->city   ,msg));
  155.         case MUIA_UserData_Country: return(DoMethodA(data->country,msg));
  156.         case MUIA_UserData_EMail  : return(DoMethodA(data->email  ,msg));
  157.         case MUIA_UserData_Phone  : return(DoMethodA(data->phone  ,msg));
  158.     }
  159.  
  160.     return(DoSuperMethodA(cl,obj,msg));
  161. }
  162.  
  163.  
  164. static ULONG mEdit(struct IClass *cl,Object *obj,Msg msg)
  165. {
  166.     /* do something here */
  167.     return(0);
  168. }
  169.  
  170.  
  171. static ULONG mPrint(struct IClass *cl,Object *obj,Msg msg)
  172. {
  173.     /* do some other thing here */
  174.     return(0);
  175. }
  176.  
  177.  
  178. static ULONG __asm Dispatcher(register __a0 struct IClass *cl,register __a2 Object *obj,register __a1 Msg msg)
  179. {
  180.     switch (msg->MethodID)
  181.     {
  182.         case OM_NEW                  : return(mNew        (cl,obj,(APTR)msg));
  183.         case OM_DISPOSE              : return(mDispose    (cl,obj,(APTR)msg));
  184.         case OM_GET                  : return(mGet        (cl,obj,(APTR)msg));
  185.         case OM_SET                  : return(mSet        (cl,obj,(APTR)msg));
  186.  
  187.         case MUIM_UserData_Edit      : return(mEdit       (cl,obj,(APTR)msg));
  188.         case MUIM_UserData_Print     : return(mPrint      (cl,obj,(APTR)msg));
  189.     }
  190.  
  191.     return(DoSuperMethodA(cl,obj,msg));
  192. }
  193.  
  194.  
  195. long __asm __UserLibInit(register __a6 struct Library *mybase)
  196. {
  197.     SysBase = *((struct Library **)4);
  198.     MUIClassBase = mybase;
  199.  
  200.     if (MUIMasterBase = OpenLibrary("muimaster.library",8))
  201.     {
  202.         if (ThisClass = MUI_CreateCustomClass(mybase,SUPERCLASS,NULL,sizeof(struct Data),Dispatcher))
  203.         {
  204.             UtilityBase   = ThisClass->mcc_UtilityBase;
  205.             DOSBase       = ThisClass->mcc_DOSBase;
  206.             IntuitionBase = ThisClass->mcc_IntuitionBase;
  207.             return(0);
  208.         }
  209.         CloseLibrary(MUIMasterBase);
  210.     }
  211.     return(-1);
  212. }
  213.  
  214.  
  215. void __asm __UserLibCleanup(register __a6 struct Library *mybase)
  216. {
  217.     if (MUIMasterBase)
  218.     {
  219.         if (ThisClass) MUI_DeleteCustomClass(ThisClass);
  220.         CloseLibrary(MUIMasterBase);
  221.     }
  222. }
  223.  
  224.  
  225. struct MUI_CustomClass * __asm MCC_GetClass(VOID)
  226. {
  227.     return(ThisClass);
  228. }
  229.