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 >
Wrap
C/C++ Source or Header
|
1994-08-08
|
6KB
|
229 lines
/*
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 9.11 (07.08.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);
}