home *** CD-ROM | disk | FTP | other *** search
- /*
- UserData.mcc is a subclass of groupclass. Several gadgets
- allow entering a users name and address. This silly class
- is just a demo how to write subclasses of group class.
-
- Note: Compile with SAS/C 6.1 and above.
- */
-
- /* Includes */
- #include <libraries/mui.h>
- #include <dos/dos.h>
- #include <clib/alib_protos.h>
- #include <clib/exec_protos.h>
- #include <clib/dos_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/utility_protos.h>
- #include <clib/muimaster_protos.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include <pragmas/exec_sysbase_pragmas.h>
- #include <pragmas/dos_pragmas.h>
- #include <pragmas/intuition_pragmas.h>
- #include <pragmas/utility_pragmas.h>
- #include <pragmas/muimaster_pragmas.h>
-
- #include "UserData_mcc.h"
-
- static const char VersionTag[] = "\0$VER: UserData.mcc 8.57 (03.07.94)";
-
- #define CLASS MUIC_UserData
- #define SUPERCLASS MUIC_Group
-
- struct Data
- {
- Object *group;
- Object *first;
- Object *name;
- Object *street;
- Object *city;
- Object *country;
- Object *phone;
- Object *email;
- };
-
-
- static struct Library *MUIClassBase;
- static struct Library *MUIMasterBase;
- static struct Library *SysBase;
- static struct Library *UtilityBase;
- static struct Library *DOSBase;
- static struct Library *IntuitionBase;
-
- static struct MUI_CustomClass *ThisClass;
-
-
- static const char *PopNames[] =
- {
- "Germany",
- "Suisse",
- "Italy",
- "U.S.A.",
- "Australia",
- NULL
- };
-
-
- static ULONG mNew(struct IClass *cl,Object *obj,struct opSet *msg)
- {
- struct Data *data;
-
- if (!(obj = (Object *)DoSuperMethodA(cl,obj,(Msg)msg)))
- return(0);
-
- data = INST_DATA(cl,obj);
-
- data->group = VGroup,
- Child, HGroup, GroupFrameT("Customer"),
- Child, ColGroup(2), MUIA_Weight, 200,
- Child, Label("Name:" ), Child, HGroup,
- Child, data->name = MUI_MakeObject(MUIO_String,NULL,50),
- Child, data->first = MUI_MakeObject(MUIO_String,NULL,50),
- End,
- Child, Label("Street:" ), Child, data->street = MUI_MakeObject(MUIO_String,NULL,100),
- Child, Label("PC, City:"), Child, data->city = MUI_MakeObject(MUIO_String,NULL,100),
- End,
- Child, ColGroup(2),
- Child, Label("Country:"),
- Child, data->country = PoplistObject,
- MUIA_Poplist_Array , PopNames,
- MUIA_Popstring_String, MUI_MakeObject(MUIO_String,NULL,30),
- MUIA_Popstring_Button, MUI_MakeObject(MUIO_PopButton,MUII_PopUp),
- End,
- Child, Label("Phone:" ), Child, data->phone = MUI_MakeObject(MUIO_String,NULL,30),
- Child, Label("EMail:" ), Child, data->email = MUI_MakeObject(MUIO_String,NULL,30),
- End,
- End,
- End;
-
- if (!data->group)
- {
- CoerceMethod(cl,obj,OM_DISPOSE);
- return(0);
- }
-
- DoMethod(obj,OM_ADDMEMBER,data->group);
-
- msg->MethodID = OM_SET; /* a little trick to parse taglist */
- DoMethodA(obj,msg); /* and set attributes with OM_SET. */
- msg->MethodID = OM_NEW; /* restore method id */
-
- return((ULONG)obj);
- }
-
-
- static ULONG mDispose(struct IClass *cl,Object *obj,Msg msg)
- {
- return(DoSuperMethodA(cl,obj,msg));
- }
-
-
- static ULONG mSet(struct IClass *cl,Object *obj,struct opSet *msg)
- {
- struct Data *data = INST_DATA(cl,obj);
- struct TagItem *tags,*tag;
-
- for (tags=msg->ops_AttrList;tag=NextTagItem(&tags);)
- {
- switch (tag->ti_Tag)
- {
- case MUIA_UserData_Name : set(data->name ,MUIA_String_Contents,tag->ti_Data); break;
- case MUIA_UserData_First : set(data->first ,MUIA_String_Contents,tag->ti_Data); break;
- case MUIA_UserData_Street : set(data->street ,MUIA_String_Contents,tag->ti_Data); break;
- case MUIA_UserData_City : set(data->city ,MUIA_String_Contents,tag->ti_Data); break;
- case MUIA_UserData_Country: set(data->country,MUIA_String_Contents,tag->ti_Data); break;
- case MUIA_UserData_EMail : set(data->email ,MUIA_String_Contents,tag->ti_Data); break;
- case MUIA_UserData_Phone : set(data->phone ,MUIA_String_Contents,tag->ti_Data); break;
- }
- }
-
- return(DoSuperMethodA(cl,obj,msg));
- }
-
-
- static ULONG mGet(struct IClass *cl,Object *obj,Msg msg)
- {
- struct Data *data = INST_DATA(cl,obj);
-
- switch (((struct opGet *)msg)->opg_AttrID)
- {
- case MUIA_UserData_Name : return(DoMethodA(data->name ,msg));
- case MUIA_UserData_First : return(DoMethodA(data->first ,msg));
- case MUIA_UserData_Street : return(DoMethodA(data->street ,msg));
- case MUIA_UserData_City : return(DoMethodA(data->city ,msg));
- case MUIA_UserData_Country: return(DoMethodA(data->country,msg));
- case MUIA_UserData_EMail : return(DoMethodA(data->email ,msg));
- case MUIA_UserData_Phone : return(DoMethodA(data->phone ,msg));
- }
-
- return(DoSuperMethodA(cl,obj,msg));
- }
-
-
- static ULONG mEdit(struct IClass *cl,Object *obj,Msg msg)
- {
- /* do something here */
- return(0);
- }
-
-
- static ULONG mPrint(struct IClass *cl,Object *obj,Msg msg)
- {
- /* do some other thing here */
- return(0);
- }
-
-
- static ULONG __asm Dispatcher(register __a0 struct IClass *cl,register __a2 Object *obj,register __a1 Msg msg)
- {
- switch (msg->MethodID)
- {
- case OM_NEW : return(mNew (cl,obj,(APTR)msg));
- case OM_DISPOSE : return(mDispose (cl,obj,(APTR)msg));
- case OM_GET : return(mGet (cl,obj,(APTR)msg));
- case OM_SET : return(mSet (cl,obj,(APTR)msg));
-
- case MUIM_UserData_Edit : return(mEdit (cl,obj,(APTR)msg));
- case MUIM_UserData_Print : return(mPrint (cl,obj,(APTR)msg));
- }
-
- return(DoSuperMethodA(cl,obj,msg));
- }
-
-
- long __asm __UserLibInit(register __a6 struct Library *mybase)
- {
- SysBase = *((struct Library **)4);
- MUIClassBase = mybase;
-
- if (MUIMasterBase = OpenLibrary("muimaster.library",8))
- {
- if (ThisClass = MUI_CreateCustomClass(mybase,SUPERCLASS,NULL,sizeof(struct Data),Dispatcher))
- {
- UtilityBase = ThisClass->mcc_UtilityBase;
- DOSBase = ThisClass->mcc_DOSBase;
- IntuitionBase = ThisClass->mcc_IntuitionBase;
- return(0);
- }
- CloseLibrary(MUIMasterBase);
- }
- return(-1);
- }
-
-
- void __asm __UserLibCleanup(register __a6 struct Library *mybase)
- {
- if (MUIMasterBase)
- {
- if (ThisClass) MUI_DeleteCustomClass(ThisClass);
- CloseLibrary(MUIMasterBase);
- }
- }
-
-
- struct MUI_CustomClass * __asm MCC_GetClass(VOID)
- {
- return(ThisClass);
- }
-