/* $Revision Header *** Header built automatically - do not edit! ***********
 *
 *	(C) Copyright 1992 by Torsten Jurgeleit
 *
 *	Name .....: window.c
 *	Created ..: Friday 02-Oct-92 10:25:09
 *	Revision .: 1
 *
 *	Date        Author                 Comment
 *	=========   ====================   ====================
 *	02-Oct-92   Michael Bjerking       New realese, better Screen/Window editor
 *	02-Oct-92   Michael Bjerking       Created this file!
 *
 * $Revision Header ********************************************************/

 /* Includes */

#include "includes.h"
#include "defines.h"
#include "imports.h"
#include "protos.h"

		 /* Data for fonts */

		 STATIC struct TextAttr window_text_attr[]=
		 {
			 {
				 (STRPTR) "topaz.font", 8, FS_NORMAL, FPF_ROMFONT
			 }
		 };
		 /* Defines and data for gadgets */

#define WINDOW_GADGET_TOPEDGE   0
#define WINDOW_GADGET_LEFTEDGE   1
#define WINDOW_GADGET_WIDTH   2
#define WINDOW_GADGET_HEIGHT   3
#define WINDOW_GADGET_DETAILPEN   4
#define WINDOW_GADGET_BLOCKPEN   5
#define WINDOW_GADGET_IDCMPFLAGS   6
#define WINDOW_GADGET_FLAGS   7
#define WINDOW_GADGET_TITLE   8
#define WINDOW_GADGET_MINWIDTH   9
#define WINDOW_GADGET_MINHEIGHT   10
#define WINDOW_GADGET_MAXWIDTH   11
#define WINDOW_GADGET_MAXHEIGHT   12
#define WINDOW_GADGET_OK   13
#define WINDOW_GADGET_CANCEL   14

		 IMPORT struct List window_gadget7_list;
		 STATIC struct Node window_gadget7_node[]=
		 {
			 {
				 &window_gadget7_node[1], (struct Node *) & window_gadget7_list.lh_Head, 0, 0,
				 " GADGETDOWN"
			 },
			 {
				 &window_gadget7_node[2], &window_gadget7_node[0], 0, 0,
				 " GADGETUP"
			 },
			 {
				 &window_gadget7_node[3], &window_gadget7_node[1], 0, 0,
				 " CLOSEWINDOW"
			 },
			 {
				 &window_gadget7_node[4], &window_gadget7_node[2], 0, 0,
				 " REQSET"
			 },
			 {
				 &window_gadget7_node[5], &window_gadget7_node[3], 0, 0,
				 " REQCLEAR"
			 },
			 {
				 &window_gadget7_node[6], &window_gadget7_node[4], 0, 0,
				 " REQVERIFY"
			 },
			 {
				 &window_gadget7_node[7], &window_gadget7_node[5], 0, 0,
				 " MENUPICK"
			 },
			 {
				 &window_gadget7_node[8], &window_gadget7_node[6], 0, 0,
				 " MENUVERIFY"
			 },
			 {
				 &window_gadget7_node[9], &window_gadget7_node[7], 0, 0,
				 " MOUSEBUTTONS"
			 },
			 {
				 &window_gadget7_node[10], &window_gadget7_node[8], 0, 0,
				 " MOUSEMOVE"
			 },
			 {
				 &window_gadget7_node[11], &window_gadget7_node[9], 0, 0,
				 " DELTAMOVE"
			 },
			 {
				 &window_gadget7_node[12], &window_gadget7_node[10], 0, 0,
				 " NEWSIZE"
			 },
			 {
				 &window_gadget7_node[13], &window_gadget7_node[11], 0, 0,
				 " SIZEVERIFY"
			 },
			 {
				 &window_gadget7_node[14], &window_gadget7_node[12], 0, 0,
				 " REFRESHWINDOW"
			 },
			 {
				 &window_gadget7_node[15], &window_gadget7_node[13], 0, 0,
				 " ACTIVEWINDOW"
			 },
			 {
				 &window_gadget7_node[16], &window_gadget7_node[14], 0, 0,
				 " INACTIVEWINDOW"
			 },
			 {
				 &window_gadget7_node[17], &window_gadget7_node[15], 0, 0,
				 " RAWKEY"
			 },
			 {
				 &window_gadget7_node[18], &window_gadget7_node[16], 0, 0,
				 " VANILLAKEY"
			 },
			 {
				 &window_gadget7_node[19], &window_gadget7_node[17], 0, 0,
				 " DISKINSERTED"
			 },
			 {
				 &window_gadget7_node[20], &window_gadget7_node[18], 0, 0,
				 " DISKREMOVED"
			 },
			 {
				 &window_gadget7_node[21], &window_gadget7_node[19], 0, 0,
				 " NEWPREFS"
			 },
			 {
				 &window_gadget7_node[22], &window_gadget7_node[20], 0, 0,
				 " INTUITICKS"
			 },
			 {
				 &window_gadget7_node[23], &window_gadget7_node[21], 0, 0,
				 " WBENCHMESSAGE"
			 },
			 {
				 (struct Node *) & window_gadget7_list.lh_Tail, &window_gadget7_node[22], 0, 0,
				 " GADGET_IDCMP_ALL"
			 }
		 };
		 /* STATIC */ struct List window_gadget7_list =
		 {
			 &window_gadget7_node[0], NULL,
			 &window_gadget7_node[22], 0, 0
		 };
		 IMPORT struct List window_gadget8_list;
		 STATIC struct Node window_gadget8_node[]=
		 {
			 {
				 &window_gadget8_node[1], (struct Node *) & window_gadget8_list.lh_Head, 0, 0,
				 " WINDOWCLOSE"
			 },
			 {
				 &window_gadget8_node[2], &window_gadget8_node[0], 0, 0,
				 " WINDOWDRAG"
			 },
			 {
				 &window_gadget8_node[3], &window_gadget8_node[1], 0, 0,
				 " WINDOWDEPTH"
			 },
			 {
				 &window_gadget8_node[4], &window_gadget8_node[2], 0, 0,
				 " WINDOWSIZING"
			 },
			 {
				 &window_gadget8_node[5], &window_gadget8_node[3], 0, 0,
				 " BACKDROP"
			 },
			 {
				 &window_gadget8_node[6], &window_gadget8_node[4], 0, 0,
				 " BORDERLESS"
			 },
			 {
				 &window_gadget8_node[7], &window_gadget8_node[5], 0, 0,
				 " GIMMEZEROZERO"
			 },
			 {
				 &window_gadget8_node[8], &window_gadget8_node[6], 0, 0,
				 " SUPER_BITMAP"
			 },
			 {
				 &window_gadget8_node[9], &window_gadget8_node[7], 0, 0,
				 " SIMPLE_REFRESH"
			 },
			 {
				 &window_gadget8_node[10], &window_gadget8_node[8], 0, 0,
				 "+SMART_REFRESH"
			 },
			 {
				 &window_gadget8_node[11], &window_gadget8_node[9], 0, 0,
				 " REPORTMOUSE"
			 },
			 {
				 &window_gadget8_node[12], &window_gadget8_node[10], 0, 0,
				 " NOCAREREFRESH"
			 },
			 {
				 &window_gadget8_node[13], &window_gadget8_node[11], 0, 0,
				 " RMBTRAP"
			 },
			 {
				 &window_gadget8_node[14], &window_gadget8_node[12], 0, 0,
				 " ACTIVATE"
			 },
			 {
				 &window_gadget8_node[15], &window_gadget8_node[13], 0, 0,
				 " FILL_BACKGROUND"
			 },
			 {
				 &window_gadget8_node[16], &window_gadget8_node[14], 0, 0,
				 " USE_RENDER_COLORS"
			 },
			 {
				 (struct Node *) & window_gadget8_list.lh_Tail, &window_gadget8_node[15], 0, 0,
				 " AVAIL_FONTS"
			 }
		 };
		 /* STATIC */ struct List window_gadget8_list =
		 {
			 &window_gadget8_node[0], NULL,
			 &window_gadget8_node[16], 0, 0
		 };
		 STATIC struct GadgetData window_gadget_data[]=
		 {
			 {
				 5, 80, 90, 26 - 10, 61, 14,
				 "_TopEdge  ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 80, 90, 11 - 10, 61, 14,
				 "_LeftEdge ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 80, 90, 41 - 10, 61, 14,
				 "_Width    ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 80, 90, 56 - 10, 61, 14,
				 "_Heigth   ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 80, 90, 71 - 10, 61, 14,
				 "_DetailPen", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 80, 90, 86 - 10, 61, 14,
				 "_BlockPen ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 10, 256, 160, 25 - 10, 150, 43,
				 "IDCMP Flags", &window_text_attr[0],
				 {0, 0, &window_gadget7_list}
			 },
			 {
				 10, 256, 320, 25 - 10, 190, 36,
				 "Window Flags", &window_text_attr[0],
				 {0, 0, &window_gadget8_list}
			 },
			 {
				 4, 80, 58, 104 - 10, 117, 14,
				 "T_itle", &window_text_attr[0],
				 {MAX_PROJECT_NAME_LEN - 1, 0, "String"}
			 },
			 {
				 5, 65, 260, 65 - 10, 61, 14,
				 "MinWidth ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 65, 260, 80 - 10, 61, 14,
				 "MinHeight", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 65, 420, 65 - 10, 61, 14,
				 "MaxWidth  ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 5, 65, 420, 80 - 10, 61, 14,
				 "MaxHeight ", &window_text_attr[0],
				 {10, 0, (VOID *) 123}
			 },
			 {
				 1, 16, 220, 100 - 10, 116, 20,
				 "_Ok", &window_text_attr[0],
				 {0, 0, (VOID *) 0}
			 },
			 {
				 1, 16, 347, 100 - 10, 116, 20,
				 "_Cancel", &window_text_attr[0],
				 {0, 0, (VOID *) 0}
			 },
			 {
				 INTUISUP_DATA_END
			 }
		 };

		 VOID
			 change_flags_list(APTR gl, USHORT flags, ULONG IDCMPflags, ULONG WINflags)
		 {

			 /* IDCMP Flags */

			 if (IDCMPflags & GADGETDOWN)
				 strcpy(window_gadget7_node[0].ln_Name, "*GADGETDOWN");
			 else
				 strcpy(window_gadget7_node[0].ln_Name, " GADGETDOWN");

			 if (IDCMPflags & GADGETUP)
				 strcpy(window_gadget7_node[1].ln_Name, "*GADGETUP");
			 else
				 strcpy(window_gadget7_node[1].ln_Name, " GADGETUP");

			 if (IDCMPflags & CLOSEWINDOW)
				 strcpy(window_gadget7_node[2].ln_Name, "*CLOSEWINDOW");
			 else
				 strcpy(window_gadget7_node[2].ln_Name, " CLOSEWINDOW");

			 if (IDCMPflags & REQSET)
				 strcpy(window_gadget7_node[3].ln_Name, "*REQSET");
			 else
				 strcpy(window_gadget7_node[3].ln_Name, " REQSET");

			 if (IDCMPflags & REQCLEAR)
				 strcpy(window_gadget7_node[4].ln_Name, "*REQCLEAR");
			 else
				 strcpy(window_gadget7_node[4].ln_Name, " REQCLEAR");

			 if (IDCMPflags & REQVERIFY)
				 strcpy(window_gadget7_node[5].ln_Name, "*REQVERIFY");
			 else
				 strcpy(window_gadget7_node[5].ln_Name, " REQVERIFY");

			 if (IDCMPflags & MENUPICK)
				 strcpy(window_gadget7_node[6].ln_Name, "*MENUPICK");
			 else
				 strcpy(window_gadget7_node[6].ln_Name, " MENUPICK");

			 if (IDCMPflags & MENUVERIFY)
				 strcpy(window_gadget7_node[7].ln_Name, "*MENUVERIFY");
			 else
				 strcpy(window_gadget7_node[7].ln_Name, " MENUVERIFY");

			 if (IDCMPflags & MOUSEBUTTONS)
				 strcpy(window_gadget7_node[8].ln_Name, "*MOUSEBUTTONS");
			 else
				 strcpy(window_gadget7_node[8].ln_Name, " MOUSEBUTTONS");

			 if (IDCMPflags & MOUSEMOVE)
				 strcpy(window_gadget7_node[9].ln_Name, "*MOUSEMOVE");
			 else
				 strcpy(window_gadget7_node[9].ln_Name, " MOUSEMOVE");

			 if (IDCMPflags & DELTAMOVE)
				 strcpy(window_gadget7_node[10].ln_Name, "*DELTAMOVE");
			 else
				 strcpy(window_gadget7_node[10].ln_Name, " DELTAMOVE");

			 if (IDCMPflags & NEWSIZE)
				 strcpy(window_gadget7_node[11].ln_Name, "*NEWSIZE");
			 else
				 strcpy(window_gadget7_node[11].ln_Name, " NEWSIZE");

			 if (IDCMPflags & SIZEVERIFY)
				 strcpy(window_gadget7_node[12].ln_Name, "*SIZEVERIFY");
			 else
				 strcpy(window_gadget7_node[12].ln_Name, " SIZEVERIFY");

			 if (IDCMPflags & REFRESHWINDOW)
				 strcpy(window_gadget7_node[13].ln_Name, "*REFRESHWINDOW");
			 else
				 strcpy(window_gadget7_node[13].ln_Name, " REFRESHWINDOW");

			 if (IDCMPflags & ACTIVEWINDOW)
				 strcpy(window_gadget7_node[14].ln_Name, "*ACTIVEWINDOW");
			 else
				 strcpy(window_gadget7_node[14].ln_Name, " ACTIVEWINDOW");

			 if (IDCMPflags & INACTIVEWINDOW)
				 strcpy(window_gadget7_node[15].ln_Name, "*INACTIVEWINDOW");
			 else
				 strcpy(window_gadget7_node[15].ln_Name, " INACTIVEWINDOW");

			 if (IDCMPflags & RAWKEY)
				 strcpy(window_gadget7_node[16].ln_Name, "*RAWKEY");
			 else
				 strcpy(window_gadget7_node[16].ln_Name, " RAWKEY");

			 if (IDCMPflags & VANILLAKEY)
				 strcpy(window_gadget7_node[17].ln_Name, "*VANILLAKEY");
			 else
				 strcpy(window_gadget7_node[17].ln_Name, " VANILLAKEY");

			 if (IDCMPflags & DISKINSERTED)
				 strcpy(window_gadget7_node[18].ln_Name, "*DISKINSERTED");
			 else
				 strcpy(window_gadget7_node[18].ln_Name, " DISKINSERTED");

			 if (IDCMPflags & DISKREMOVED)
				 strcpy(window_gadget7_node[19].ln_Name, "*DISKREMOVED");
			 else
				 strcpy(window_gadget7_node[19].ln_Name, " DISKREMOVED");

			 if (IDCMPflags & NEWPREFS)
				 strcpy(window_gadget7_node[20].ln_Name, "*NEWPREFS");
			 else
				 strcpy(window_gadget7_node[20].ln_Name, " NEWPREFS");

			 if (IDCMPflags & INTUITICKS)
				 strcpy(window_gadget7_node[21].ln_Name, "*INTUITICKS");
			 else
				 strcpy(window_gadget7_node[21].ln_Name, " INTUITICKS");

			 if (IDCMPflags & WBENCHMESSAGE)
				 strcpy(window_gadget7_node[22].ln_Name, "*WBENCHMESSAGE");
			 else
				 strcpy(window_gadget7_node[22].ln_Name, " WBENCHMESSAGE");

			 if ((IDCMPflags & GADGET_IDCMP_FLAGS_ALL) == GADGET_IDCMP_FLAGS_ALL)
				 strcpy(window_gadget7_node[23].ln_Name, "*GADGET_IDCMP_ALL");
			 else
				 strcpy(window_gadget7_node[23].ln_Name, " GADGET_IDCMP_ALL");


			 /* WINDOW Flags */

			 if (WINflags & WINDOWCLOSE)
				 strcpy(window_gadget8_node[0].ln_Name, "*WINDOWCLOSE");
			 else
				 strcpy(window_gadget8_node[0].ln_Name, " WINDOWCLOSE");

			 if (WINflags & WINDOWDRAG)
				 strcpy(window_gadget8_node[1].ln_Name, "*WINDOWDRAG");
			 else
				 strcpy(window_gadget8_node[1].ln_Name, " WINDOWDRAG");

			 if (WINflags & WINDOWDEPTH)
				 strcpy(window_gadget8_node[2].ln_Name, "*WINDOWDEPTH");
			 else
				 strcpy(window_gadget8_node[2].ln_Name, " WINDOWDEPTH");

			 if (WINflags & WINDOWSIZING)
			 {
				 strcpy(window_gadget8_node[3].ln_Name, "*WINDOWSIZING");
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MINWIDTH,
									  GADGET_DATA_FLAG_DISABLED, 0L,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MAXWIDTH,
									  GADGET_DATA_FLAG_DISABLED, 0L,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MINHEIGHT,
									  GADGET_DATA_FLAG_DISABLED, 0L,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MAXHEIGHT,
									  GADGET_DATA_FLAG_DISABLED, 0L,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
			 }
			 else
			 {
				 strcpy(window_gadget8_node[3].ln_Name, " WINDOWSIZING");
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MINWIDTH,
									  GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) 0);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MAXWIDTH,
									  GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) 0);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MINHEIGHT,
									  GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) 0);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_MAXHEIGHT,
									  GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) 0);
			 }

			 if (WINflags & BACKDROP)
				 strcpy(window_gadget8_node[4].ln_Name, "*BACKDROP");
			 else
				 strcpy(window_gadget8_node[4].ln_Name, " BACKDROP");

			 if (WINflags & BORDERLESS)
				 strcpy(window_gadget8_node[5].ln_Name, "*BORDERLESS");
			 else
				 strcpy(window_gadget8_node[5].ln_Name, " BORDERLESS");

			 if (WINflags & GIMMEZEROZERO)
				 strcpy(window_gadget8_node[6].ln_Name, "*GIMMEZEROZERO");
			 else
				 strcpy(window_gadget8_node[6].ln_Name, " GIMMEZEROZERO");

			 if (WINflags & SUPER_BITMAP)
				 strcpy(window_gadget8_node[7].ln_Name, "*SUPER_BITMAP");
			 else
				 strcpy(window_gadget8_node[7].ln_Name, " SUPER_BITMAP");

			 if (WINflags & SIMPLE_REFRESH)
				 strcpy(window_gadget8_node[8].ln_Name, "*SIMPLE_REFRESH");
			 else
				 strcpy(window_gadget8_node[8].ln_Name, " SIMPLE_REFRESH");

/*
		if(WINflags & SMART_REFRESH)
				strcpy(window_gadget8_node[9].ln_Name,"*SMART_REFRESH");
		else
				strcpy(window_gadget8_node[9].ln_Name," SMART_REFRESH");
*/

			 if (flags & TEMPLATE_LIST_FLAG_REPORTMOUSE)
				 strcpy(window_gadget8_node[10].ln_Name, "*REPORTMOUSE");
			 else
				 strcpy(window_gadget8_node[10].ln_Name, " REPORTMOUSE");

			 if (WINflags & NOCAREREFRESH)
				 strcpy(window_gadget8_node[11].ln_Name, "*NOCAREREFRESH");
			 else
				 strcpy(window_gadget8_node[11].ln_Name, " NOCAREREFRESH");

			 if (WINflags & RMBTRAP)
				 strcpy(window_gadget8_node[12].ln_Name, "*RMBTRAP");
			 else
				 strcpy(window_gadget8_node[12].ln_Name, " RMBTRAP");

			 if (WINflags & ACTIVATE)
				 strcpy(window_gadget8_node[13].ln_Name, "*ACTIVATE");
			 else
				 strcpy(window_gadget8_node[13].ln_Name, " ACTIVATE");

			 if (flags & TEMPLATE_LIST_FLAG_BACK_FILL)
				 strcpy(window_gadget8_node[14].ln_Name, "*FILL_BACKGROUND");
			 else
				 strcpy(window_gadget8_node[14].ln_Name, " FILL_BACKGROUND");

			 if (flags & TEMPLATE_LIST_FLAG_RENDER_COLORS)
			 {
				 strcpy(window_gadget8_node[15].ln_Name, "*USE_RENDER_COLORS");
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_DETAILPEN,
									  GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) 0);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_BLOCKPEN,
									  GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) 1);
			 }
			 else
			 {
				 strcpy(window_gadget8_node[15].ln_Name, " USE_RENDER_COLORS");
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_DETAILPEN,
									  GADGET_DATA_FLAG_DISABLED, 0L,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
				 ISetGadgetAttributes(gl,
									  WINDOW_GADGET_BLOCKPEN,
									  GADGET_DATA_FLAG_DISABLED, 0L,
									  USE_CURRENT_VALUE, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
			 }

			 if (flags & TEMPLATE_LIST_FLAG_AVAIL_FONTS)
				 strcpy(window_gadget8_node[16].ln_Name, "*AVAIL_FONTS");
			 else
				 strcpy(window_gadget8_node[16].ln_Name, " AVAIL_FONTS");
		 }

		 SHORT
			 change_project_window(VOID)
		 {
			 struct TemplateList *tl = &template_list;
			 struct GadgetData *gd = &window_gadget_data[0];
			 APTR gl;
			 USHORT flags = tl->tl_Flags;
			 ULONG IDCMPflags = tl->tl_IDCMPFlags, WINflags = pwin->Flags;
			 SHORT status;

			 /* Init gadgets with current values */
			 (gd + WINDOW_GADGET_LEFTEDGE)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->LeftEdge;
			 (gd + WINDOW_GADGET_TOPEDGE)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->TopEdge;
			 (gd + WINDOW_GADGET_WIDTH)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->Width;
			 (gd + WINDOW_GADGET_HEIGHT)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->Height;
			 (gd + WINDOW_GADGET_DETAILPEN)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->DetailPen;
			 (gd + WINDOW_GADGET_BLOCKPEN)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->BlockPen;
			 (gd + WINDOW_GADGET_TITLE)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) tl->tl_ProjectName;

			 (gd + WINDOW_GADGET_MINWIDTH)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->MinWidth;
			 (gd + WINDOW_GADGET_MINHEIGHT)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->MinHeight;
			 (gd + WINDOW_GADGET_MAXWIDTH)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->MaxWidth;
			 (gd + WINDOW_GADGET_MAXHEIGHT)->gd_SpecialData.gd_InputData.gd_InputDefault = (BYTE *) pwin->MaxHeight;


			 /* Print title and display gadgets */
			 IClearWindow(eri, ewin, 0, 0, EDITOR_WINDOW_WIDTH, EDITOR_WINDOW_HEIGHT, 0);

			 if (!(gl = ICreateGadgets(eri, &window_gadget_data[0], 0, 0, NULL)))
				 status = EDITOR_ERROR_OUT_OF_MEM;
			 else
			 {
				 /* Init IDCMPFlag and Flag list */
				 change_flags_list(gl, flags, IDCMPflags, WINflags);

				 IDisplayGadgets(ewin, gl);
				 status = change_project_window_action(gl);
				 IRemoveGadgets(gl);
				 IFreeGadgets(gl);
			 }

			 return (status);
		 }

		 /* Perform action for change project window settings */

		 STATIC SHORT
		  change_project_window_action(APTR gl)
		 {
			 struct TemplateList *tl = &template_list;
			 struct NewWindow *nwin = &project_new_window;
			 struct MsgPort *up = ewin->UserPort;
			 SHORT left_edge = pwin->LeftEdge, top_edge = pwin->TopEdge, width = pwin->Width, height = pwin->Height, max_width = wb_screen.Width, max_height = wb_screen.Height, MinWidth = pwin->MinWidth, MinHeight = pwin->MinHeight, MaxWidth = pwin->MaxWidth,
			 		MaxHeight = pwin->MaxHeight;
			 UBYTE dpen = pwin->DetailPen, bpen = pwin->BlockPen;
			 BYTE title[MAX_PROJECT_NAME_LEN];
			 USHORT flags = tl->tl_Flags;
			 ULONG WINflags = pwin->Flags, IDCMPflags = tl->tl_IDCMPFlags;
			 BOOL keepon = TRUE;
			 SHORT status = EDITOR_STATUS_NORMAL;

			 sprintf(title, "%s", tl->tl_ProjectName);

			 do
			 {
				 struct IntuiMessage *msg;

				 WaitPort(up);
				 while (msg = IGetMsg(up))
				 {
					 ULONG Class = msg->Class;
					 USHORT Code = msg->Code;
					 LONG IAddress = (LONG)msg->IAddress;

					 switch (Class)
					 {
					 case CLOSEWINDOW:
						 status = EDITOR_STATUS_QUIT;
						 keepon = FALSE;
						 break;

					 case ISUP_ID:
						 switch (Code)
						 {
						 case WINDOW_GADGET_TOPEDGE:
							 if (((SHORT) IAddress + height) > max_height)
							 {
								 DisplayBeep(NULL);
								 ISetGadgetAttributes(gl, WINDOW_GADGET_TOPEDGE, 0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE, (BYTE *) top_edge);
							 }
							 else
							 {
								 top_edge = (SHORT) IAddress;
								 flags |= TEMPLATE_LIST_FLAG_CHANGED;
							 }
							 break;

						 case WINDOW_GADGET_LEFTEDGE:
							 if (((SHORT) IAddress + width) > max_width)
							 {
								 DisplayBeep(NULL);
								 ISetGadgetAttributes(gl, WINDOW_GADGET_LEFTEDGE, 0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE, (BYTE *) left_edge);
							 }
							 else
							 {
								 left_edge = (SHORT) IAddress;
								 flags |= TEMPLATE_LIST_FLAG_CHANGED;
							 }
							 break;

						 case WINDOW_GADGET_WIDTH:
							 if (((SHORT) IAddress + left_edge) > max_width)
							 {
								 DisplayBeep(NULL);
								 ISetGadgetAttributes(gl, WINDOW_GADGET_WIDTH, 0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE, (BYTE *) width);
							 }
							 else
							 {
								 width = (SHORT) IAddress;
								 flags |= TEMPLATE_LIST_FLAG_CHANGED;
							 }
							 break;

						 case WINDOW_GADGET_HEIGHT:
							 if (((SHORT) IAddress + top_edge) > max_height)
							 {
								 DisplayBeep(NULL);
								 ISetGadgetAttributes(gl, WINDOW_GADGET_HEIGHT, 0L, 0L, USE_CURRENT_VALUE, USE_CURRENT_VALUE, (BYTE *) height);
							 }
							 else
							 {
								 height = (SHORT) IAddress;
								 flags |= TEMPLATE_LIST_FLAG_CHANGED;
							 }
							 break;

						 case WINDOW_GADGET_DETAILPEN:
							 dpen = (UBYTE) IAddress;
							 break;

						 case WINDOW_GADGET_BLOCKPEN:
							 printf("WINDOW_GADGET_BLOCKPEN: %ld\n", IAddress);
							 bpen = (UBYTE) IAddress;
							 break;

						 case WINDOW_GADGET_IDCMPFLAGS:
							 switch ((ULONG) IAddress)
							 {
							 case 0:
								 if (IDCMPflags & GADGETDOWN)
									 IDCMPflags &= ~GADGETDOWN;
								 else
									 IDCMPflags |= GADGETDOWN;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 1:
								 if (IDCMPflags & GADGETUP)
									 IDCMPflags &= ~GADGETUP;
								 else
									 IDCMPflags |= GADGETUP;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 2:
								 if (IDCMPflags & CLOSEWINDOW)
								 {
									 IDCMPflags &= ~CLOSEWINDOW;
									 WINflags &= ~WINDOWCLOSE;
								 }
								 else
								 {
									 IDCMPflags |= CLOSEWINDOW;
									 WINflags |= WINDOWCLOSE;
								 }
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 3:
								 if (IDCMPflags & REQSET)
									 IDCMPflags &= ~REQSET;
								 else
									 IDCMPflags |= REQSET;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 4:
								 if (IDCMPflags & REQCLEAR)
									 IDCMPflags &= ~REQCLEAR;
								 else
									 IDCMPflags |= REQCLEAR;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 5:
								 if (IDCMPflags & REQVERIFY)
									 IDCMPflags &= ~REQVERIFY;
								 else
									 IDCMPflags |= REQVERIFY;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 6:
								 if (IDCMPflags & MENUPICK)
									 IDCMPflags &= ~MENUPICK;
								 else
									 IDCMPflags |= MENUPICK;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 7:
								 if (IDCMPflags & MENUVERIFY)
									 IDCMPflags &= ~MENUVERIFY;
								 else
									 IDCMPflags |= MENUVERIFY;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 8:
								 if (IDCMPflags & MOUSEBUTTONS)
									 IDCMPflags &= ~MOUSEBUTTONS;
								 else
									 IDCMPflags |= MOUSEBUTTONS;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 9:
								 if (IDCMPflags & MOUSEMOVE)
									 IDCMPflags &= ~MOUSEMOVE;
								 else
									 IDCMPflags |= MOUSEMOVE;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 10:
								 if (IDCMPflags & DELTAMOVE)
									 IDCMPflags &= ~DELTAMOVE;
								 else
									 IDCMPflags |= DELTAMOVE;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 11:
								 if (IDCMPflags & NEWSIZE)
									 IDCMPflags &= ~NEWSIZE;
								 else
									 IDCMPflags |= NEWSIZE;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 12:
								 if (IDCMPflags & SIZEVERIFY)
									 IDCMPflags &= ~SIZEVERIFY;
								 else
									 IDCMPflags |= SIZEVERIFY;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 13:
								 if (IDCMPflags & REFRESHWINDOW)
									 IDCMPflags &= ~REFRESHWINDOW;
								 else
									 IDCMPflags |= REFRESHWINDOW;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 14:
								 if (IDCMPflags & ACTIVEWINDOW)
									 IDCMPflags &= ~ACTIVEWINDOW;
								 else
									 IDCMPflags |= ACTIVEWINDOW;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 15:
								 if (IDCMPflags & INACTIVEWINDOW)
									 IDCMPflags &= ~INACTIVEWINDOW;
								 else
									 IDCMPflags |= INACTIVEWINDOW;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 16:
								 if (IDCMPflags & RAWKEY)
									 IDCMPflags &= ~RAWKEY;
								 else
									 IDCMPflags |= RAWKEY;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 17:
								 if (IDCMPflags & VANILLAKEY)
									 IDCMPflags &= ~VANILLAKEY;
								 else
									 IDCMPflags |= VANILLAKEY;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 18:
								 if (IDCMPflags & DISKINSERTED)
									 IDCMPflags &= ~DISKINSERTED;
								 else
									 IDCMPflags |= DISKINSERTED;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 19:
								 if (IDCMPflags & DISKREMOVED)
									 IDCMPflags &= ~DISKREMOVED;
								 else
									 IDCMPflags |= DISKREMOVED;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 20:
								 if (IDCMPflags & NEWPREFS)
									 IDCMPflags &= ~NEWPREFS;
								 else
									 IDCMPflags |= NEWPREFS;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 21:
								 if (IDCMPflags & INTUITICKS)
									 IDCMPflags &= ~INTUITICKS;
								 else
									 IDCMPflags |= INTUITICKS;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 22:
								 if (IDCMPflags & WBENCHMESSAGE)
									 IDCMPflags &= ~WBENCHMESSAGE;
								 else
									 IDCMPflags |= WBENCHMESSAGE;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 23:
								 if ((IDCMPflags & GADGET_IDCMP_FLAGS_ALL) == GADGET_IDCMP_FLAGS_ALL)
									 IDCMPflags &= ~GADGET_IDCMP_FLAGS_ALL;
								 else
									 IDCMPflags |= GADGET_IDCMP_FLAGS_ALL;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;
							 }
							 IRefreshGadgets(gl);
							 break;

						 case WINDOW_GADGET_FLAGS:
							 switch ((ULONG) IAddress)
							 {
							 case 0:
								 if (WINflags & WINDOWCLOSE)
								 {
									 WINflags &= ~WINDOWCLOSE;
									 IDCMPflags &= ~CLOSEWINDOW;
								 }
								 else
								 {
									 WINflags |= WINDOWCLOSE;
									 IDCMPflags |= CLOSEWINDOW;
								 }
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 1:
								 if (WINflags & WINDOWDRAG)
									 WINflags &= ~WINDOWDRAG;
								 else
									 WINflags |= WINDOWDRAG;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 2:
								 if (WINflags & WINDOWDEPTH)
									 WINflags &= ~WINDOWDEPTH;
								 else
									 WINflags |= WINDOWDEPTH;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 3:
								 if (WINflags & WINDOWSIZING)
								 {
									 WINflags &= ~WINDOWSIZING;
									 MinWidth = 0;
									 MinHeight = 0;
									 MaxWidth = 0;
									 MaxHeight = 0;
								 }
								 else
									 WINflags |= WINDOWSIZING;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 4:
								 if (WINflags & BACKDROP)
									 WINflags &= ~BACKDROP;
								 else
									 WINflags |= BACKDROP;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 5:
								 if (WINflags & BORDERLESS)
									 WINflags &= ~BORDERLESS;
								 else
									 WINflags |= BORDERLESS;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 6:
								 if (WINflags & GIMMEZEROZERO)
									 WINflags &= ~GIMMEZEROZERO;
								 else
									 WINflags |= GIMMEZEROZERO;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 7:
								 if (WINflags & SUPER_BITMAP)
									 WINflags &= ~SUPER_BITMAP;
								 else
									 WINflags |= SUPER_BITMAP;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 8:
								 if (WINflags & SIMPLE_REFRESH)
									 WINflags &= ~SIMPLE_REFRESH;
								 else
									 WINflags |= SIMPLE_REFRESH;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 9:
/*
																		if(WINflags & SMART_REFRESH)
																				WINflags &= ~SMART_REFRESH;
																		else
																				WINflags |= SMART_REFRESH;
																		change_flags_list(gl,flags,IDCMPflags,WINflags);
*/
								 break;

							 case 10:
								 if (flags & TEMPLATE_LIST_FLAG_REPORTMOUSE)
									 flags &= ~TEMPLATE_LIST_FLAG_REPORTMOUSE;
								 else
									 flags |= TEMPLATE_LIST_FLAG_REPORTMOUSE;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 11:
								 if (WINflags & NOCAREREFRESH)
									 WINflags &= ~NOCAREREFRESH;
								 else
									 WINflags |= NOCAREREFRESH;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 12:
								 if (WINflags & RMBTRAP)
									 WINflags &= ~RMBTRAP;
								 else
									 WINflags |= RMBTRAP;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 13:
								 if (WINflags & ACTIVATE)
									 WINflags &= ~ACTIVATE;
								 else
									 WINflags |= ACTIVATE;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 14:
								 if (flags & TEMPLATE_LIST_FLAG_BACK_FILL)
									 flags &= ~TEMPLATE_LIST_FLAG_BACK_FILL;
								 else
									 flags |= TEMPLATE_LIST_FLAG_BACK_FILL;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 15:
								 if (flags & TEMPLATE_LIST_FLAG_RENDER_COLORS)
									 flags &= ~TEMPLATE_LIST_FLAG_RENDER_COLORS;
								 else
								 {
									 flags |= TEMPLATE_LIST_FLAG_RENDER_COLORS;
									 dpen = 0;
									 bpen = 1;
								 }
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;

							 case 16:
								 if (flags & TEMPLATE_LIST_FLAG_AVAIL_FONTS)
									 flags &= ~TEMPLATE_LIST_FLAG_AVAIL_FONTS;
								 else
									 flags |= TEMPLATE_LIST_FLAG_AVAIL_FONTS;
								 change_flags_list(gl, flags, IDCMPflags, WINflags);
								 break;
							 }
							 IRefreshGadgets(gl);
							 break;

						 case WINDOW_GADGET_TITLE:
							 sprintf(title, "%s", IAddress);
							 break;

						 case WINDOW_GADGET_MINWIDTH:
							 if ((SHORT) IAddress < 0)
								 MinWidth = 1;
							 else
								 MinWidth = (SHORT) IAddress;
							 break;

						 case WINDOW_GADGET_MINHEIGHT:
							 if ((SHORT) IAddress < 0)
								 MinHeight = 1;
							 else
								 MinHeight = (SHORT) IAddress;
							 break;

						 case WINDOW_GADGET_MAXWIDTH:
							 if ((SHORT) IAddress < 0)
								 MaxWidth = 65535;
							 else
								 MaxWidth = (SHORT) IAddress;
							 break;

						 case WINDOW_GADGET_MAXHEIGHT:
							 if ((SHORT) IAddress < 0)
								 MaxHeight = 65535;
							 else
								 MaxHeight = (SHORT) IAddress;
							 break;

						 case WINDOW_GADGET_OK:
							 /* Change project window */
							 nwin->LeftEdge = left_edge;
							 nwin->TopEdge = top_edge;
							 nwin->Width = width;
							 nwin->Height = height;
							 nwin->Flags = WINflags;
							 nwin->DetailPen = dpen;
							 nwin->BlockPen = bpen;
							 nwin->MinWidth = MinWidth;
							 nwin->MinHeight = MinHeight;
							 nwin->MaxWidth = MaxWidth;
							 nwin->MaxHeight = MaxHeight;
							 strcpy(tl->tl_ProjectWinName, title);
							 tl->tl_IDCMPFlags = IDCMPflags;
							 tl->tl_Flags = flags;
							 if ((status = new_project_window(tl, flags)) == EDITOR_STATUS_NORMAL)
								 refresh_all_templates();

							 keepon = FALSE;
							 break;

						 case WINDOW_GADGET_CANCEL:
							 keepon = FALSE;
							 break;

						 }
					 }

					 IReplyMsg(msg);
				 }
			 }
			 while (keepon == TRUE);

			 return status;
		 }
