/* 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. */ /* Compiler specific stuff */ #if defined(_DCC) #define REG(x) __ ## x #define SAVEDS __geta4 #define ASM #define REGARGS __regargs #else #if defined(__SASC) #define REG(x) register __ ## x #define SAVEDS __saveds #define ASM __asm #define REGARGS __regargs #else #error "Don't know how to handle register arguments for your compiler." #endif #endif /* Includes */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "UserData_mcc.h" static const char VersionTag[] = "\0$VER: UserData.mcc 11.62 (05.09.95)"; #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; }; struct Library *MUIClassBase; struct Library *MUIMasterBase; struct Library *SysBase; struct Library *UtilityBase; struct Library *DOSBase; 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) 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)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 SAVEDS ASM ULONG Dispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(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(REG(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(REG(a6) struct Library *mybase) { if (MUIMasterBase) { if (ThisClass) MUI_DeleteCustomClass(ThisClass); CloseLibrary(MUIMasterBase); } } SAVEDS ASM struct MUI_CustomClass *MCC_GetClass(REG(d0) LONG which) { switch (which) { case 0: return(ThisClass); } return(NULL); }