/* MyListClass */


#include <OSIncludes.h>
#pragma header

#include <clib/alib_protos.h>
#include <libraries/mui.h>
#include <pragma/muimaster_lib.h>

#define CATCOMP_NUMBERS
#include "catalogs/PrefsAttack.h"
#include "PWPrefs.h"
#include "Version.h"
#include "PrefsAttackIO.h"

#include <stdio.h>
#include <string.h>


#define REG(x) register __ ## x


struct MyList_Data
{
	WORD dummy;
};

static ULONG DoSuperNew(struct IClass *cl,Object *obj,ULONG tag1,...)
{
	return(DoSuperMethod(cl,obj,OM_NEW,&tag1,NULL));
}

static LONG MyList_DisplayFunc(REG(a0) struct Hook *hook,REG(a2) char **array,REG(a1) struct Gruppe *gr)
{
 	if (gr->gr_ListImage)
 	{
 	   *array++  = gr->gr_ImageSpec;
 	   *array    = gr->gr_Name;
 	} else {
		*array++	 = "";
	 	*array    = gr->gr_Name;
	}
	return 0;
}

static ULONG MyList_Setup(struct IClass *cl,Object *obj,Msg msg)
{
	struct Gruppe *gr;
	WORD i;

	if (!DoSuperMethodA(cl,obj,msg))
		return FALSE;


	gr=(struct Gruppe *)GruppenListe.lh_Head;
	for (i=0;i<Anz_Gruppen;i++)
	{
		if (gr->gr_Image.im_OK)
		{
			gr->gr_ListImage= (Object *)DoMethod(obj,MUIM_List_CreateImage,gr->gr_Image.im_Image,0);
	 	   sprintf(gr->gr_ImageSpec,"\33O[%08x]",gr->gr_ListImage);

			gr=(struct Gruppe *)gr->gr_Node.ln_Succ;
		}
	}
	
	return TRUE;
}

static ULONG MyList_Cleanup(struct IClass *cl,Object *obj,Msg msg)
{
	struct Gruppe *gr;
	WORD i;

	gr=(struct Gruppe *)GruppenListe.lh_Head;
	for (i=0;i<Anz_Gruppen;i++)
	{
		if (gr->gr_ListImage) DoMethod(obj,MUIM_List_DeleteImage,gr->gr_ListImage);
		gr=(struct Gruppe *)gr->gr_Node.ln_Succ;
	}

	return(DoSuperMethodA(cl,obj,msg));
}

static ULONG MyList_New(struct IClass *cl,Object *obj,struct opSet *msg)
{
	static const struct Hook MyList_DisplayHook = { { 0,0 }, (VOID *)MyList_DisplayFunc, NULL, NULL };

	obj=(Object *)DoSuperNew(cl,obj,
		MUIA_List_DisplayHook  , &MyList_DisplayHook,
		MUIA_List_Format       , ",",
		TAG_MORE,msg->ops_AttrList);

	return((ULONG)obj);
}

static ULONG MyList_Dispatcher(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
{
	switch (msg->MethodID)
	{
		case OM_NEW              : return(MyList_New    (cl,obj,(APTR)msg));
		case MUIM_Setup          : return(MyList_Setup  (cl,obj,(APTR)msg));
		case MUIM_Cleanup        : return(MyList_Cleanup(cl,obj,(APTR)msg));
	}
	return(DoSuperMethodA(cl,obj,msg));
}


void InitMyListClass(void)
{
	CL_MyList=MUI_CreateCustomClass(0,MUIC_List,0,sizeof(struct MyList_Data ),MyList_Dispatcher );

}

