/*
 *	File:					GUI_Preferences.h
 *	Description:	Functions to set up the GUI and manipulate it.
 *
 *	(C) 1993-1994, Ketil Hunn
 *
 */

#ifndef	GUI_PREFERENCES_H
#define	GUI_PREFERENCES_H

#include "GetFileObject().h"
#include "Active().h"

// Functions instead of macros saves space

APTR KeyButtonH(char *name, char key, char *helpnode)
{
	return(TextObject,
					ButtonFrame,
					MUIA_Text_Contents, name,
					MUIA_Text_PreParse, "\33c",
					MUIA_Text_HiChar  , key,
					MUIA_ControlChar  , key,
					MUIA_InputMode    , MUIV_InputMode_RelVerify,
					MUIA_Background   , MUII_ButtonBack,
					MUIA_HelpNode,			helpnode,
				 End
				);
}

APTR CleanButton(char *name)
{
	return(TextObject,
					ButtonFrame,
					MUIA_Text_Contents, name,
					MUIA_Text_PreParse, "\33c",
					MUIA_InputMode    , MUIV_InputMode_RelVerify,
					MUIA_Background   , MUII_ButtonBack,
				 End
				);
}

/* VARIABLES set up exactly like the GUI is shown */

APTR	whendate,					whentime,
			day[32],					hour, minutes,
			month,	year,
			days,		repeat,

			editnow, editclear;


APTR																				whenstring,		edit,
			eventlistview,												textlistview,
			eventstring,													getfile, textstring,

			addevent, 	eventup, 		eventtop,			addtext,		textup,		type,
			copyevent,	eventdown,	eventbottom,	copytext,		textdown,	show,
			deleteevent,purgeevent,	sortevent,		deletetext,	sorttext,	calc,

		save,															test,											cancel;


// Global date and time values to ensure we only calculate the datestring
// when necessary
short oldwhendate,	oldday,	oldmonth, oldyear;
short oldwhentime,	oldhour, oldminutes;
int		olddays,			oldrepeat;

APTR app,window,editwin;
Object *eventlist, *textlist;

#define REQUESTER	0
#define ALERT			1
#define EXECUTE		2

#define EXACT			0
#define BEFORE		1
#define AFTER			2

static char *cltype[]={	"","","",NULL};
static char *clshow[]={	"","","",NULL };
static char *clcount[]={"","",NULL };
static char *clwhen[]={	"","","",NULL };
char *clmonths[]={"","","","","","","","","","","","","",NULL};

struct NewMenu recmenu[] = {
	NM_TITLE, "",	NULL,	0,	0L,	NULL,												// 0
		NM_ITEM,"",	"N",	0,	0L,	(APTR)ID_NEW,								// 1
		NM_ITEM,NM_BARLABEL,			NULL,	0,	0L,	NULL,
		NM_ITEM,"",	"O",	0,	0L,	(APTR)ID_OPEN,							// 3
		NM_ITEM,"",	"M",	0,	0L,	(APTR)ID_MERGE,							// 4
		NM_ITEM,"",	NULL,	0,	0L,	NULL,												// 5
		 NM_SUB,"ASCII...",	NULL,	0, 	0L,	(APTR)ID_IMPORT_ASCII,
		 NM_SUB,"Recall V1.x...",	NULL, 0,	0L,	(APTR)ID_IMPORT_V14,
		NM_ITEM,NM_BARLABEL,			NULL,	0,	0L,	NULL,
		NM_ITEM,"",	"S",	0,	0L,	(APTR)ID_SAVE,							// 9
		NM_ITEM,"",	"A",	0,	0L,	(APTR)ID_SAVE_AS,						// 10
		NM_ITEM,"",	NULL,	0,	0L,	(APTR)ID_EXPORT_ASCII,			// 11
		 NM_SUB,"ASCII...",	NULL,	0,	0L,	(APTR)ID_EXPORT_ASCII,
		NM_ITEM,NM_BARLABEL,			NULL,	0,	0L,	NULL,
		NM_ITEM,CONVERTERNAME,		NULL,	0,	0L,	(APTR)ID_CONVERTER,
		NM_ITEM,NM_BARLABEL,			NULL,	0,	0L,	NULL,
		NM_ITEM,"",	"T",	0,	0L,	(APTR)ID_TEST,							// 16
		NM_ITEM,"",	"I",	0,	0L,	(APTR)ID_ICONIFY,						// 17
		NM_ITEM,"",	"?",	0,	0L,	(APTR)ID_ABOUT,							// 18
		NM_ITEM,NM_BARLABEL,			NULL,	0,	0L,	NULL,
		NM_ITEM,"",	"Q",	0,	0L,	(APTR)MUIV_Application_ReturnID_Quit,

	NM_TITLE,	"",	NULL,	0,	0L,	NULL,												// 21
		NM_ITEM,"",	"L",	0,	0L,	(APTR)ID_LAST_SAVED,				// 22

	NM_TITLE,	"",	NULL,	0,	0L,	NULL,												// 23
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_GROUP_EVENTS,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_FLASH_SCREEN,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_ACK_EVENTS,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_ACK_ALERTS,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_ASK_BEFORE_EXECUTE,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_PUTOFF,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_REQTOOLS,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_CENTRE_REQUESTERS,
	NM_ITEM,NM_BARLABEL,	NULL,	0,	0L,	NULL,
		NM_ITEM,"",	NULL,CHECKIT|MENUTOGGLE,0L,(APTR)ID_CONFIRM,
		NM_ITEM,"",	NULL,CHECKIT|MENUTOGGLE,0L,(APTR)ID_AUTOOPEN_CALENDAR,
		NM_ITEM,"",	NULL,CHECKIT|CHECKED|MENUTOGGLE,0L,(APTR)ID_AUTODELETE,
		NM_ITEM,"", NULL,0, NULL, NULL,
		 NM_SUB,"", NULL,CHECKIT|CHECKED, 2L,(APTR)ID_SORTBY_NAME,
		 NM_SUB,"", NULL,CHECKIT, 1L,(APTR)ID_SORTBY_DATE,
	{NM_END,	NULL,	0,		0,	0,	(APTR)0},
 };

/* Setting up the GUI */
APTR SetupGUI(void)
{
	init();

	/* Setting up the local stuff */
	cltype[0]=GetString(&li, MSG_REQUESTERTYPE);
	cltype[1]=GetString(&li, MSG_ALERTTYPE);
	cltype[2]=GetString(&li, MSG_EXECUTETYPE);

	clshow[0]=GetString(&li, MSG_SHOWALWAYS);
	clshow[1]=GetString(&li, MSG_SHOWONCEADAY);
	clshow[2]=GetString(&li, MSG_SHOWNEVER);

	clcount[0]=GetString(&li, MSG_COUNTYEARS);
	clcount[1]=GetString(&li, MSG_COUNTDAYS);

	clwhen[0]=GetString(&li, MSG_EXACT);
	clwhen[1]=GetString(&li, MSG_BEFORE);
	clwhen[2]=GetString(&li, MSG_AFTER);

	clmonths[0]=GetString(&li, MSG_ANYMONTH),
	clmonths[1]=GetString(&li, MSG_JANUARY),
	clmonths[2]=GetString(&li, MSG_FEBRUARY);
	clmonths[3]=GetString(&li, MSG_MARCH);
	clmonths[4]=GetString(&li, MSG_APRIL);
	clmonths[5]=GetString(&li, MSG_MAY);
	clmonths[6]=GetString(&li, MSG_JUNE);
	clmonths[7]=GetString(&li, MSG_JULY);
	clmonths[8]=GetString(&li, MSG_AUGUST);
	clmonths[9]=GetString(&li, MSG_SEPTEMBER);
	clmonths[10]=GetString(&li, MSG_OCTOBER);
	clmonths[11]=GetString(&li, MSG_NOVEMBER);
	clmonths[12]=GetString(&li, MSG_DECEMBER);

	recmenu[0].nm_Label	= GetString(&li, MSG_MENUPROJECT);
	recmenu[1].nm_Label	= GetString(&li, MSG_MENUNEW);
	recmenu[3].nm_Label	= GetString(&li, MSG_MENUOPEN);
	recmenu[4].nm_Label	= GetString(&li, MSG_MENUMERGE);
	recmenu[5].nm_Label	= GetString(&li, MSG_MENUIMPORT);
	recmenu[9].nm_Label	= GetString(&li, MSG_MENUSAVE);
	recmenu[10].nm_Label= GetString(&li, MSG_MENUSAVEAS);
	recmenu[11].nm_Label= GetString(&li, MSG_MENUEXPORT);
	recmenu[16].nm_Label= GetString(&li, MSG_TEST);
	recmenu[17].nm_Label= GetString(&li, MSG_MENUICONIFY);
	recmenu[18].nm_Label= GetString(&li, MSG_MENUABOUT);
	recmenu[20].nm_Label= GetString(&li, MSG_MENUQUIT);

	recmenu[21].nm_Label= GetString(&li, MSG_MENUEDIT);
	recmenu[22].nm_Label= GetString(&li, MSG_MENULASTSAVED);

	recmenu[23].nm_Label= GetString(&li, MSG_MENUSETTINGS);
	recmenu[24].nm_Label= GetString(&li, MSG_MENUGROUPEVENTS);
	recmenu[25].nm_Label= GetString(&li, MSG_MENUFLASHSCREEN);
	recmenu[26].nm_Label= GetString(&li, MSG_MENUACKEVENTS);
	recmenu[27].nm_Label= GetString(&li, MSG_MENUACKALERTS);
	recmenu[28].nm_Label= GetString(&li, MSG_MENU_ASK_BEFORE_EXECUTE);
	recmenu[29].nm_Label= GetString(&li, MSG_MENUPUTOFF);
	recmenu[30].nm_Label= GetString(&li, MSG_MENUUSEREQTOOLS);
	recmenu[31].nm_Label= GetString(&li, MSG_MENUCENTREREQS);

	recmenu[33].nm_Label= GetString(&li, MSG_MENUCONFIRM);
	recmenu[34].nm_Label= GetString(&li, MSG_MENUAUTOOPEN);
	recmenu[35].nm_Label= GetString(&li, MSG_MENUAUTODELETE);
	recmenu[36].nm_Label= GetString(&li, MSG_MENUSORTBY);
	recmenu[37].nm_Label= GetString(&li, MSG_MENUSORTBYNAME);
	recmenu[38].nm_Label= GetString(&li, MSG_MENUSORTBYDATE);

	app = ApplicationObject,
		MUIA_Application_Title      , PREFSNAME,
		MUIA_Application_Version    , VERSTR,
		MUIA_Application_Copyright  , COPYRIGHT " "AUTHOR,
		MUIA_Application_Author     , AUTHOR,
		MUIA_Application_Description, GetString(&li, MSG_DESCRIPTION),
		MUIA_Application_Base       , "RECBASE",

		SubWindow,editwin = WindowObject,
				MUIA_Window_Title,	 GetString(&li, MSG_SETDATETIME),
				MUIA_Window_ID, 	   'EDIT',
				MUIA_HelpFile,				RECALLGUIDE,
				MUIA_Window_LeftEdge, 640,
				MUIA_Window_TopEdge,	MUIV_Window_TopEdge_Delta(0),
				WindowContents, VGroup,

					MUIA_HelpNode, "SetDate",
					Child, HGroup,
						Child, VGroup, GroupFrameT(GetString(&li, MSG_DATE)),
							Child, whendate = KeyCycle(clwhen, 'd'),
							Child, HGroup,
								Child, ColGroup(7), MUIA_Group_SameSize, TRUE,
									GroupSpacing(0),
//									Child, KeyLabel1(aCENTRE "Mon",	NULL),
//									Child, KeyLabel1(aCENTRE "Tue",	NULL),
//									Child, KeyLabel1(aCENTRE "Wed",	NULL),
//									Child, KeyLabel1(aCENTRE "Thu",	NULL),
//									Child, KeyLabel1(aCENTRE "Fri",	NULL),
//									Child, KeyLabel1(aCENTRE "Sat",	NULL),
//									Child, KeyLabel1(aCENTRE "Sun",	NULL),

									Child, day[0]		=	CleanButton("0"),
									Child, day[1]		=	CleanButton("1"),
									Child, day[2]		=	CleanButton("2"),
									Child, day[3]		=	CleanButton("3"),
									Child, day[4]		=	CleanButton("4"),
									Child, day[5]		=	CleanButton("5"),
									Child, day[6]		=	CleanButton("6"),

									Child, day[7]		=	CleanButton("7"),
									Child, day[8]		=	CleanButton("8"),
									Child, day[9]		=	CleanButton("9"),
									Child, day[10]	=	CleanButton("10"),
									Child, day[11]	=	CleanButton("11"),
									Child, day[12]	=	CleanButton("12"),
									Child, day[13]	=	CleanButton("13"),

									Child, day[14]	=	CleanButton("14"),
									Child, day[15]	=	CleanButton("15"),
									Child, day[16]	=	CleanButton("16"),
									Child, day[17]	=	CleanButton("17"),
									Child, day[18]	=	CleanButton("18"),
									Child, day[19]	=	CleanButton("19"),
									Child, day[20]	=	CleanButton("20"),

									Child, day[21]	=	CleanButton("21"),
									Child, day[22]	=	CleanButton("22"),
									Child, day[23]	=	CleanButton("23"),
									Child, day[24]	=	CleanButton("24"),
									Child, day[25]	=	CleanButton("25"),
									Child, day[26]	=	CleanButton("26"),
									Child, day[27]	=	CleanButton("27"),

									Child, day[28]	=	CleanButton("28"),
									Child, day[29]	=	CleanButton("29"),
									Child, day[30]	=	CleanButton("30"),
									Child, day[31]	=	CleanButton("31"),
									Child, Label(""),
									Child, Label(""),
									Child, Label(""),
								End,
							End,

						Child, HGroup,
							Child, month = KeyCycle(clmonths, 'm'),
							Child, year = StringObject,
														MUIA_String_Accept , "0123456879",
														MUIA_String_MaxLen, 	5,
														MUIA_ControlChar,			'y',
														StringFrame,
							End,
						End,	
					End,

					Child, VGroup, GroupFrameT(GetString(&li, MSG_TIME)),
						MUIA_HelpNode, "SetTime",
						Child, whentime = KeyCycle(clwhen, 't'),
						Child, VGroup,
							Child, ColGroup(2),
								Child, Label(GetString(&li, MSG_HOUR)),
								Child, Label(GetString(&li, MSG_MINUTES)),
								Child, hour=PropObject, PropFrame,
									MUIA_Prop_Horiz, FALSE,
									MUIA_FixWidth , 10,
									MUIA_Prop_Entries, 25,
									MUIA_Prop_Visible, 1,
								End,
								Child, minutes=PropObject, PropFrame,
									MUIA_Prop_Horiz, FALSE,
									MUIA_FixWidth , 10,
									MUIA_Prop_Entries, 61,
									MUIA_Prop_Visible, 1,
								End,
							End,
						End,
					End,
				End,

				Child, HGroup, GroupFrameT(GetString(&li, MSG_SPECIAL)),
					Child, HGroup,
						MUIA_HelpNode, "SetDays",
						Child, KeyLabel2(GetString(&li, MSG_DAYS),
														*GetString(&li, MSG_DAYSKEY)),
						Child, days = StringObject,
													MUIA_String_Accept , "0123456879",
													MUIA_String_MaxLen, 	3,
													MUIA_ControlChar,			*GetString(&li, MSG_DAYSKEY),
													StringFrame,
						End,
					End,
					Child, HSpace(0),
					Child, HGroup,
						MUIA_HelpNode, "SetRepeat",
						Child, KeyLabel1(GetString(&li, MSG_REPEAT),
														*GetString(&li, MSG_REPEATKEY)),
						Child, repeat = StringObject,
													MUIA_String_Accept , "0123456879",
													MUIA_String_MaxLen, 	4,
													MUIA_ControlChar,			*GetString(&li, MSG_REPEATKEY),
													StringFrame,
						End,
					End,
				End,

				Child, VSpace(3),
				Child, HGroup, MUIA_Group_SameSize, TRUE,
				Child, editnow=KeyButtonH(GetString(&li, MSG_NOW),
																	*GetString(&li, MSG_NOWKEY),
																	"Now"),
				Child, editclear=KeyButtonH(GetString(&li, MSG_CLEAR),
																		*GetString(&li, MSG_CLEARKEY),
																		"Clear"),
				End,
			End,
		End,

		SubWindow, window = WindowObject,
			MUIA_Window_Title,	 	PREFSNAME,
			MUIA_Window_ID,				'REC',
			MUIA_Window_Menu,   	recmenu,
			MUIA_HelpFile,				RECALLGUIDE,
			MUIA_Window_LeftEdge, 0,
			MUIA_Window_TopEdge,	MUIV_Window_TopEdge_Delta(0),
			MUIA_Window_Width,		MUIV_Window_Width_Screen(80),
			MUIA_Window_Height,		MUIV_Window_Height_Screen(50),
			WindowContents, VGroup,
				MUIA_HelpNode, "UsingRecallPrefs",
				Child, HGroup, MUIA_Group_SameHeight, TRUE,
					Child, VGroup, GroupFrameT(GetString(&li, MSG_EVENTS)),
						MUIA_HorizWeight, 30,
						Child,
							eventlist = ListviewObject,
								MUIA_Listview_Input, TRUE,
								MUIA_Listview_List, ListObject,InputListFrame,
							End,
						End,
						GroupSpacing(0),
						Child, eventstring = StringObject, MUIA_String_MaxLen, 29,
							StringFrame,
							MUIA_HelpNode, "AddEvent",
						End,

						Child, VSpace(3),
						Child, ColGroup(3),	MUIA_Group_SameSize, TRUE,
							MUIA_HelpNode, "MoveEvent",
							Child, addevent=KeyButtonH(GetString(&li, MSG_ADD),
																				*(GetString(&li, MSG_ADDEVENTKEY)),
																				"AddEvent"),
							Child, eventup=KeyButton(GetString(&li, MSG_UP),
																			*(GetString(&li, MSG_UPKEY))),
							Child, eventtop=KeyButton(GetString(&li, MSG_TOP),
																				*(GetString(&li, MSG_TOPKEY))),
							Child, copyevent=KeyButtonH(GetString(&li, MSG_COPY),
																					*(GetString(&li, MSG_COPYKEY)),
																					"CopyEvent"),
							Child, eventdown	=	KeyButton(GetString(&li, MSG_DOWN),
																					*(GetString(&li, MSG_DOWNKEY))),
							Child, eventbottom=	KeyButton(GetString(&li, MSG_BOTTOM),
																					*(GetString(&li, MSG_BOTTOMKEY))),
							Child, deleteevent=KeyButtonH(GetString(&li, MSG_DELETE),
																						NULL,
																						"DeleteEvent"),
							Child, purgeevent=	KeyButtonH(GetString(&li, MSG_PURGE),
																						*(GetString(&li, MSG_PURGEKEY)),
																						"PurgeEvents"),
							Child, sortevent=	KeyButtonH(GetString(&li, MSG_SORT),
																					*(GetString(&li, MSG_SORTKEY)),
																					"SortEvents"),
						End,
					End,

					Child, VGroup,
						Child, HGroup, GroupFrameT(GetString(&li, MSG_DATE)),
							MUIA_HelpNode, "SetDate",
							Child, HGroup,
								Child, whenstring = TextObject,
									TextFrame,
									MUIA_Background, MUII_TextBack,
								End,
								Child, VGroup,
									MUIA_HorizWeight, 5,
									Child, edit	=	KeyButton(GetString(&li, MSG_EDIT),
																				*(GetString(&li, MSG_EDITKEY))),
								End,
							End,
						End,
						Child, VGroup, GroupFrameT(GetString(&li, MSG_TEXTS)),

							Child, textlist = ListviewObject,
								MUIA_Listview_List, ListObject,
									InputListFrame,
									MUIA_List_ConstructHook,	MUIV_List_ConstructHook_String,
									MUIA_List_DestructHook,		MUIV_List_DestructHook_String,
								End,
							End,

							GroupSpacing(0),
							Child, HGroup,
//								getfile=GetFileObject("GetFile"),
								MUIA_HelpNode, "GetFile",
								GroupSpacing(0),
								Child, getfile = ImageObject,
										MUIA_Image_Spec,			MUII_PopFile,
										MUIA_Image_FreeVert,	TRUE,
										MUIA_Weight,					0,
										MUIA_Frame,						MUIV_Frame_Button,
										MUIA_Background,			MUII_ButtonBack,
										MUIA_InputMode,				MUIV_InputMode_RelVerify,
									End,
								Child, textstring = StringObject,
									MUIA_HelpNode, "AddText",
									MUIA_String_MaxLen, 255,
									StringFrame,
								End,
							End,

							Child, VSpace(3),
							Child, HGroup,
								Child, ColGroup(5),
									MUIA_HelpNode, "MoveText",
									Child, addtext=KeyButtonH(GetString(&li, MSG_ADD),
																						*(GetString(&li, MSG_ADDTEXTKEY)),
																						"AddText"),
									Child, textup			=	CleanButton(GetString(&li, MSG_UP)),
									Child, HSpace(0),
									Child,	KeyLabel1(GetString(&li, MSG_TYPE),
																	*(GetString(&li, MSG_TYPEKEY))),
									Child, HGroup,
										Child, type	=	KeyCycle(cltype,
																					*(GetString(&li, MSG_TYPEKEY))),
										MUIA_HelpNode, "SetType",
									End,
									Child, copytext=KeyButtonH(GetString(&li, MSG_COPY),NULL,
																						"CopyText"),
									Child, textdown=CleanButton(GetString(&li, MSG_DOWN)),
									Child, HSpace(0),
									Child,	KeyLabel1(GetString(&li, MSG_SHOW),
																	*(GetString(&li, MSG_SHOWKEY))),
									Child, HGroup,
										Child, show=KeyCycle(clshow,
																				*(GetString(&li, MSG_SHOWKEY))),
										MUIA_HelpNode, "SetShow",
									End,
									Child, deletetext	=	KeyButtonH(GetString(&li, MSG_DELETE),
																									NULL, "DeleteText"),
									Child, sorttext=KeyButtonH(GetString(&li, MSG_SORT),NULL,
																							"SortText"),
									Child, HSpace(0),
									Child,	KeyLabel1(GetString(&li, MSG_COUNT),
																	*(GetString(&li, MSG_COUNTKEY))),
									Child, HGroup,
										Child, calc=KeyCycle(  clcount,	*(GetString(&li, MSG_COUNTKEY))),
										MUIA_HelpNode, "SetCalc",
									End,
								End,
							End,
						End,
					End,
				End,

				Child, VSpace(6),
				Child, HGroup, MUIA_Group_SameSize, TRUE,
					Child, save=KeyButtonH(GetString(&li, MSG_SAVE), NULL, "Save"),
					Child, HSpace(0),
					Child, test=KeyButtonH(GetString(&li, MSG_TEST), NULL, "Test"),
					Child, HSpace(0),
					Child, cancel=KeyButtonH(GetString(&li, MSG_CANCEL), NULL, "Cancel"),
				End,
			End,
		End,
	End;

	if(!app)
		fail(app,"Failed to create Application.");
	else
	{
		set(window,MUIA_Window_Open,TRUE);

		DoMethod(window,MUIM_Window_SetCycleChain,
							eventstring,edit,
							addevent,		copyevent,	deleteevent,
							eventup,		eventdown,	eventtop,	eventbottom,
							purgeevent,	sortevent,	
							textstring,
							addtext,		copytext,		deletetext,
							textup,			textdown,		sorttext,
							type,				show,				calc,
							save,				test,				cancel,
							NULL);

		DoMethod(editwin,MUIM_Window_SetCycleChain,
							whendate,
							day[0],	day[1],	day[2], day[3], day[4],	day[5],
							day[6],	day[7],	day[8], day[9], day[10],day[11],
							day[12],day[13],day[14],day[15],day[16],day[17],
							day[18],day[19],day[20],day[21],day[22],day[23],
							day[24],day[25],day[26],day[27],day[28],day[29],
							day[30],day[31],
							month,	year,		days,		repeat,
							whentime,				hour,		minutes,
							editnow,				editclear,
							NULL);

		DoMethod(window,			MUIM_Notify, MUIA_Window_CloseRequest,TRUE,app,2,MUIM_Application_ReturnID,ID_CANCEL);
		DoMethod(editwin,			MUIM_Notify, MUIA_Window_CloseRequest,TRUE,app,2,MUIM_Application_ReturnID,ID_EDITCLOSE);

		DoMethod(addevent,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_ACTIVATE_EVENTSTRING);
		DoMethod(copyevent,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_COPYEVENT);
		DoMethod(deleteevent,	MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DELETEEVENT);
		DoMethod(eventup,			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EVENTUP);
		DoMethod(eventdown,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EVENTDOWN);
		DoMethod(eventtop,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EVENTTOP);
		DoMethod(eventbottom,	MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EVENTBOTTOM);
		DoMethod(purgeevent,	MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_PURGEEVENT);
		DoMethod(sortevent,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_SORTEVENT);

		DoMethod(edit,				MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EDIT);
		DoMethod(getfile,			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_GETFILE);

		DoMethod(addtext,			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_ACTIVATE_TEXTSTRING);
		DoMethod(copytext,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_COPYTEXT);
		DoMethod(deletetext,	MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DELETETEXT);
		DoMethod(textup,			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_TEXTUP);
		DoMethod(textdown,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_TEXTDOWN);
		DoMethod(sorttext,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_SORTTEXT);

		DoMethod(type,				MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_TYPE);
		DoMethod(show,				MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_SHOW);
		DoMethod(calc,				MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_CALC);

		DoMethod(save,				MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_SAVE_QUIT);
		DoMethod(test,				MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_TEST);
		DoMethod(cancel,			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_CANCEL);

		DoMethod(eventstring,	MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_ADDEVENT);
		DoMethod(textstring,	MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_ADDTEXT);

		DoMethod(day[0],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY0);
		DoMethod(day[1],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY1);
		DoMethod(day[2],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY2);
		DoMethod(day[3],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY3);
		DoMethod(day[4],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY4);
		DoMethod(day[5],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY5);
		DoMethod(day[6],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY6);
		DoMethod(day[7],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY7);
		DoMethod(day[8],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY8);
		DoMethod(day[9],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY9);
		DoMethod(day[10],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY10);
		DoMethod(day[11],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY11);
		DoMethod(day[12],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY12);
		DoMethod(day[13],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY13);
		DoMethod(day[14],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY14);
		DoMethod(day[15],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY15);
		DoMethod(day[16],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY16);
		DoMethod(day[17],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY17);
		DoMethod(day[18],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY18);
		DoMethod(day[19],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY19);
		DoMethod(day[20],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY20);
		DoMethod(day[21],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY21);
		DoMethod(day[22],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY22);
		DoMethod(day[23],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY23);
		DoMethod(day[24],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY24);
		DoMethod(day[25],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY25);
		DoMethod(day[26],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY26);
		DoMethod(day[27],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY27);
		DoMethod(day[28],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY28);
		DoMethod(day[29],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY29);
		DoMethod(day[30],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY30);
		DoMethod(day[31],			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_DAY31);

		DoMethod(month,				MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_MONTH);
		DoMethod(year,				MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_YEAR);
		DoMethod(days,				MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_DAYS);
		DoMethod(repeat,			MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_REPEAT);
		DoMethod(whendate,		MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_WHENDATE);
		DoMethod(whentime,		MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, ID_WHENTIME);

		DoMethod(editclear,		MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EDITCLEAR);
		DoMethod(editnow,			MUIM_Notify, MUIA_Pressed,FALSE,app,2,MUIM_Application_ReturnID,ID_EDITNOW);

		/* Disable Days & Repeat when Date is equal to 'Exact' */
		DoMethod(whendate, MUIM_Notify, MUIA_Cycle_Active, 0, days, 3, MUIM_Set, MUIA_Disabled, TRUE);
		DoMethod(whendate, MUIM_Notify, MUIA_Cycle_Active, 1, days, 3, MUIM_Set, MUIA_Disabled, FALSE);
		DoMethod(whendate, MUIM_Notify, MUIA_Cycle_Active, 2, days, 3, MUIM_Set, MUIA_Disabled, FALSE);
		DoMethod(whendate, MUIM_Notify, MUIA_Cycle_Active, 0, repeat, 3, MUIM_Set, MUIA_Disabled, TRUE);
		DoMethod(whendate, MUIM_Notify, MUIA_Cycle_Active, 1, repeat, 3, MUIM_Set, MUIA_Disabled, FALSE);
		DoMethod(whendate, MUIM_Notify, MUIA_Cycle_Active, 2, repeat, 3, MUIM_Set, MUIA_Disabled, FALSE);

		set(eventstring,		MUIA_String_AttachedList, eventlist);
		set(textstring,			MUIA_String_AttachedList, textlist);
		DoMethod(eventlist, MUIM_Notify, MUIA_List_Active, MUIV_EveryTime, app,2, MUIM_Application_ReturnID,ID_EVENTLIST);
		DoMethod(textlist,  MUIM_Notify, MUIA_List_Active, MUIV_EveryTime, app,2, MUIM_Application_ReturnID,ID_TEXTLIST);

		DoMethod(hour, 		MUIM_Notify, MUIA_Prop_First, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID,ID_HOUR);
		DoMethod(minutes, MUIM_Notify, MUIA_Prop_First, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID,ID_MINUTES);

		DoMethod(year, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, window, 3, MUIM_Set, MUIA_Window_ActiveObject, days);
		DoMethod(days, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, window, 3, MUIM_Set, MUIA_Window_ActiveObject, repeat);

		set(days, MUIA_Disabled, TRUE);
		set(repeat, MUIA_Disabled, TRUE);
	}
	return app;
}

/* Disables/Enables certain menuItems's when called */
void ShowMenu(BOOL on)
{
	DoMethod(app,MUIM_Application_SetMenuState, ID_NEW, 				on);
	DoMethod(app,MUIM_Application_SetMenuState, ID_MERGE,			 	on);
	DoMethod(app,MUIM_Application_SetMenuState, ID_SAVE,				on);
	DoMethod(app,MUIM_Application_SetMenuState, ID_SAVE_AS,			on);
	DoMethod(app,MUIM_Application_SetMenuState, ID_EXPORT_ASCII,on);
	DoMethod(app,MUIM_Application_SetMenuState, ID_TEST,				on);
}

void CheckActive(Object *list, APTR up, APTR down, APTR top, APTR bottom)
{
	BOOL bup,bdown,btop,bbottom;

	bup=bdown=btop=bbottom=FALSE;

	if(Active(list)==-1)
		bup=bdown=btop=bbottom=TRUE;
	else
	{
		if(Active(list)==0)
			bup=btop=TRUE;
		if(Active(list)==Count(list)-1)
			bdown=bbottom=TRUE;
	}

	set(up,			MUIA_Disabled, bup);
	set(down,		MUIA_Disabled, bdown);
	set(top,		MUIA_Disabled, btop);
	set(bottom,	MUIA_Disabled, bbottom);
}

int ShowDays(int month)
{
	BOOL bday30,bday31;
	int maxday=31;

	if(	month==1 || month==3	|| month==5		|| month==7 ||
			month==8 || month==10 || month==12	|| month==0)
		bday30=bday31=FALSE;
	else if(month==2)
	{
		bday30=bday31=TRUE;
		maxday=29;
	}
	else
	{
		bday30=FALSE;
		bday31=TRUE;
		maxday=30;
	}

	set(day[30], MUIA_Disabled, bday30);
	set(day[31], MUIA_Disabled, bday31);

	return maxday;
}

void SetWhenString(struct EventNode *node)
{
	char tmp1[40], tmp2[40], day[3], month[3], year[5], hh[3], mm[3];

	if(node==NULL)
		return;

	if(	node->whendate!=oldwhendate | node->day!=oldday |
			node->month!=oldmonth | node->year!=oldyear |
			node->whentime!=oldwhentime | node->hour!=oldhour |
			node->minutes!=oldminutes | node->days!=olddays |
			node->repeat!=oldrepeat)
	{
		if(node->day==0 & node->month==0 & node->year==0)
			sprintf(tmp1, "%s - ", GetString(&li, MSG_WHENEVER));
		else
		{
			if(node->day==0)
				strcpy(day,"**");
			else
				sprintf(day,"%02ld",node->day);

			if(node->month==0)
				strcpy(month,"**");
			else
				sprintf(month,"%02ld",node->month);

			if(node->year==0)
			strcpy(year,"****");
			else if(node->year<10)
				sprintf(year,"***%ld",node->year);
			else if(node->year<100)
				sprintf(year,"**%ld",node->year);
			else if(node->year<1000)
				sprintf(year,"*%ld",node->year);
			else
				sprintf(year,"%ld",node->year);

			sprintf(tmp1, GetString(&li, MSG_DATEFORMAT), clwhen[node->whendate],
																										day, month, year);
		}

		if(node->hour==-1 & node->minutes==-1)
			sprintf(tmp2, "%s", GetString(&li, MSG_ANYTIME));
		else
		{
			if(node->hour==-1)
				strcpy(hh,"**");
			else
				sprintf(hh,"%02ld",node->hour);

			if(node->minutes==-1)
				strcpy(mm,"**");
			else
				sprintf(mm,"%02ld",node->minutes);

			sprintf(tmp2,"%s %s:%s", clwhen[node->whentime],hh,mm);
		}
		strcat(tmp1,tmp2);
		DoMethod(whenstring, MUIM_SetAsString, MUIA_Text_Contents, tmp1);

		oldwhendate	=node->whendate;
		oldday			=node->day;
		oldmonth		=node->month;
		oldyear			=node->year;
		oldwhentime	=node->whentime;
		oldhour			=node->hour;
		oldminutes	=node->minutes;
		olddays			=node->days;
		oldrepeat		=node->repeat;

	}
}




void  ZeroDateTime(struct EventNode *node)
{
	node->hour=node->minutes=-1;
	node->day=node->month=node->year=node->days=node->repeat=0;
}

void CurrentDateTime(struct EventNode *node)
{
	char buf[8];

	getclk(buf);
	node->day=buf[3];
	node->month=buf[2];
	node->year=buf[1]+1980;
	node->hour=buf[4];
	node->minutes=buf[5];
}

void ShowGadgets(void)
{
	BOOL	flag=FALSE;
	ULONG	eventtype;

	get(type, MUIA_Cycle_Active, &eventtype);

	CheckActive(eventlist,	eventup,	eventdown,	eventtop,	eventbottom);
//	if(Active(textlist)!=-1)
		CheckActive(textlist,	textup,		textdown,		NULL,			NULL);

	if(Active(eventlist)==-1)
	{
		DoMethod(whenstring, MUIM_SetAsString, MUIA_Text_Contents,"%s - %s",
							GetString(&li, MSG_WHENEVER), GetString(&li, MSG_ANYTIME));
		set(eventstring, MUIA_String_Contents, "");
		DoMethod(textlist,MUIM_List_Clear);
		flag=TRUE;
	}
	set(copyevent,		MUIA_Disabled, flag);
	set(deleteevent,	MUIA_Disabled, flag);
	set(addtext,			MUIA_Disabled, flag);
	set(edit,					MUIA_Disabled, flag);
	set(type,					MUIA_Disabled, flag);
	set(show,					MUIA_Disabled, flag);
	set(calc,					MUIA_Disabled, flag);
	ShowMenu(!flag);

	if(Count(eventlist)!=0)
		set(eventstring,  MUIA_Disabled, FALSE);
	else
		set(eventstring,  MUIA_Disabled, TRUE);

	if(addtextflag | Active(textlist)!=-1)
		set(textstring,  MUIA_Disabled, FALSE);
	else
		set(textstring,  MUIA_Disabled, TRUE);

	if(Count(eventlist)==0)
		flag=TRUE;
	else
		flag=FALSE;
	set(purgeevent,		MUIA_Disabled, flag);
	set(save,					MUIA_Disabled, flag);
	set(test,					MUIA_Disabled, flag);

	if(Active(textlist)==-1)
		flag=TRUE;
	else
		flag=FALSE;
	set(copytext,			MUIA_Disabled, flag);
	set(deletetext,		MUIA_Disabled, flag);

	set(sortevent,MUIA_Disabled, (Count(eventlist)<2 ? TRUE:FALSE));
	set(sorttext,	MUIA_Disabled, (Count(textlist) <2 ? TRUE:FALSE));
	if(Active(textlist)!=-1 && eventtype==2)
		set(getfile,	MUIA_Disabled, FALSE);
	else
		set(getfile,	MUIA_Disabled, TRUE);

	if(Active(eventlist)==-1)
		set(editwin, MUIA_Window_Sleep, TRUE);
	else
		set(editwin, MUIA_Window_Sleep, FALSE);
}

void UpdateData(struct EventNode *eventnode, BOOL updatetextlist)
{
	struct List *list=eventnode->textlist;
	struct Node *node;
	ULONG open;
	
	set(type,			MUIA_Cycle_Active,		eventnode->type);
	set(show,			MUIA_Cycle_Active,		eventnode->show);
	set(calc,			MUIA_Cycle_Active,		eventnode->calc);

	set(eventstring, MUIA_String_Contents, eventnode->name);
	SetWhenString(eventnode);
	get(editwin, MUIA_Window_Open, &open);
	if(open>0)
	{
		set(month,		MUIA_Cycle_Active,		eventnode->month);
		set(hour,			MUIA_Prop_First,			23-eventnode->hour);
		set(minutes,	MUIA_Prop_First,			59-eventnode->minutes);

	 	set(year, 		MUIA_String_Integer,	eventnode->year);
		set(days,			MUIA_String_Integer,	eventnode->days);
		set(repeat,		MUIA_String_Integer,	eventnode->repeat);

		set(whendate, MUIA_Cycle_Active,		eventnode->whendate);
		set(whentime, MUIA_Cycle_Active,		eventnode->whentime);

		ShowDays(eventnode->month);
		ShowBoolGadget(eventnode->day);
	}

	if(updatetextlist)
	{
		set(textlist, MUIA_List_Quiet, TRUE);
		DoMethod(textlist, MUIM_List_Clear);
		for(every_node)
			DoMethod(textlist, MUIM_List_Insert, &(node->ln_Name), 1, MUIV_List_Insert_Bottom);
		set(textlist, MUIA_List_Quiet, FALSE);
	}
}

short oldboolday;

void ShowBoolGadget(short active)
{
	set(day[oldboolday],	MUIA_Selected,	FALSE);
	set(day[active], 			MUIA_Selected,	TRUE);
	oldboolday=active;
}

#endif
