//
//    c 1996 Thomas Wilhelmi
//
//
// Address : Taunusstrasse 14
//           61138 Niederdorfelden
//           Germany
//
//  E-Mail : willi@twi.rhein-main.de
//
//   Phone : +49 (0)6101 531060
//   Fax   : +49 (0)6101 531061
//

#include <clib/alib_protos.h>
#include <proto/utility.h>
#include "Class.h"

TWiList::TWiList()
	:   MUIList(ReadListFrame,
			MUIA_List_CompareHook, compare(),
			MUIA_List_ConstructHook, construct(),
			MUIA_List_DestructHook, destruct(),
			MUIA_List_DisplayHook, display(),
			TAG_DONE)
	{
	};

LONG TWiList::CompareHookFunc(struct Hook *h, APTR e2, APTR e1)
	{
	return(Stricmp(((ListCont *)e1)->getStr(),((ListCont *)e2)->getStr()));
	};

APTR TWiList::ConstructHookFunc(struct Hook *h, APTR p, APTR e)
	{
	return(new ListCont((STRPTR)e));
	};

void TWiList::DestructHookFunc(struct Hook *h, APTR p, APTR e)
	{
	delete (ListCont *)e;
	};

void TWiList::DisplayHookFunc(struct Hook *h, STRPTR *a, APTR e)
	{
	*a = ((ListCont *)e)->getStr();
	};

TWiWin::TWiWin()
	:   MUIWindow(),
		Liste(),
		lv(MUIA_Listview_Input, TRUE,
			MUIA_Listview_MultiSelect, MUIV_Listview_MultiSelect_None,
			MUIA_Listview_List, Liste.object(),
			MUIA_CycleChain, 1,
			TAG_DONE),
		BSave("_Save"),
		BUse("_Use"),
		BCancel("_Cancel"),
		MsgSave(0L,"Demo-Message","_Ok","Es wurde 'Save' gedrückt",0UL),
		MsgUse(0L,"Demo-Message","_Ok","Es wurde 'Use' gedrückt",0UL),
		MsgCan(0L,"Demo-Message","_Ok","Es wurde 'Cancel' gedrückt",0UL)
	{
	Liste.InsertSingle("3. String",MUIV_List_Insert_Sorted);
	Liste.InsertSingle("2. String",MUIV_List_Insert_Sorted);
	Liste.InsertSingle("4. String",MUIV_List_Insert_Sorted);
	Liste.InsertSingle("1. String",MUIV_List_Insert_Sorted);
	Liste.InsertSingle("5. String",MUIV_List_Insert_Sorted);
	Create(
		MUIA_Window_Title, "TWiDVI Ver 1.0",
		MUIA_Window_ID,    MakeId('T','D','V','I'),
		WindowContents,    VGroup,
			Child, lv.object(),
			Child, HGroup,
				MUIA_Group_SameSize, TRUE,
				Child, (Object *)BSave,
				Child, (Object *)BUse,
				Child, (Object *)BCancel,
				End,
			End,
		TAG_DONE);
	BSave.CycleChain(1);
	BUse.CycleChain(1);
	BCancel.CycleChain(1);
	DefaultObject(lv);
	BSave.Notify(MUIA_Pressed,   FALSE, *this, 1, MUIM_Demo_Save);
	BUse.Notify(MUIA_Pressed,    FALSE, *this, 1, MUIM_Demo_Use);
	BCancel.Notify(MUIA_Pressed, FALSE, *this, 1, MUIM_Demo_Cancel);
	};

TWiWin::~TWiWin()
	{
	}

void TWiWin::save()
	{
	MsgSave.show(*AppClass(),*this);
	};

void TWiWin::use()
	{
	MsgUse.show(*AppClass(),*this);
	};

void TWiWin::cancel()
	{
	MsgCan.show(*AppClass(),*this);
	};

ULONG TWiWin::UserDispatch(struct IClass *cl, Object *obj, Msg msg)
	{
	ULONG rc = 0UL;
	switch(msg->MethodID)
		{
		case MUIM_Demo_Save:
			save();
			break;
		case MUIM_Demo_Use:
			use();
			break;
		case MUIM_Demo_Cancel:
			cancel();
			break;
		default:
			rc = DoSuperMethodA(cl,obj,msg);
			break;
		}
	return(rc);
	};
