/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */
/*-----------------------------------------*/
/*																		*/
/* Name:		FrameShellTest.c										*/
/* Description:	Test for XfeFrameShell widget.							*/
/* Author:		Ramiro Estrugo <ramiro@netscape.com>					*/
/*																		*/
/*----------------------------------------------------------------------*/



#include <Xfe/XfeTest.h>

static Widget	create_control		(String);
static Widget	create_dummy		(String);

static void		first_map_cb		(Widget,XtPointer,XtPointer);
static void		map_cb				(Widget,XtPointer,XtPointer);
static void		unmap_cb			(Widget,XtPointer,XtPointer);

static void		track_cb			(Widget,XtPointer,XtPointer);
static void		operation_cb		(Widget,XtPointer,XtPointer);

static void		message_output		(String);
static String	message_create		(Widget,String);

/*----------------------------------------------------------------------*/
static XfeMenuItemRec file_items[] =
{
	{ "Open",		XfeMENU_PUSH },
	{ "Save",		XfeMENU_PUSH },
	{ "Sep",		XfeMENU_SEP	},
	{ "Exit",		XfeMENU_PUSH,	XfeExitCallback	},
	{ NULL }
};
/*----------------------------------------------------------------------*/
static XfeMenuItemRec track_items[] =
{
	{ "Editres",		XfeMENU_TOGGLE,		track_cb		},
	{ "DeleteWindow",	XfeMENU_TOGGLE,		track_cb		},
	{ "SaveYourself",	XfeMENU_TOGGLE,		track_cb		},
	{ "Mapping",		XfeMENU_TOGGLE,		track_cb		},
	{ "Position",		XfeMENU_TOGGLE,		track_cb		},
	{ "Size",			XfeMENU_TOGGLE,		track_cb		},
	{ NULL }
};
/*----------------------------------------------------------------------*/
static XfeMenuItemRec operations_items[] =
{
	{ "Popup",		XfeMENU_PUSH, operation_cb		},
	{ "Popdown",	XfeMENU_PUSH, operation_cb		},
	{ "Sep",		XfeMENU_SEP	},
	{ "Map",		XfeMENU_PUSH, operation_cb		},
	{ "Unmap",		XfeMENU_PUSH, operation_cb		},
	{ "Realize",		XfeMENU_PUSH, operation_cb		},
	{ "Sep",		XfeMENU_SEP	},
	{ "Raise",		XfeMENU_PUSH, operation_cb		},
	{ "Lower",		XfeMENU_PUSH, operation_cb		},
	{ "Sep",		XfeMENU_SEP	},
	{ "Destroy",	XfeMENU_PUSH, operation_cb		},
	{ "Create",		XfeMENU_PUSH, operation_cb		},
	{ NULL }
};
/*----------------------------------------------------------------------*/
static XfeMenuPaneRec pane_items[] =
{
	{ "File",		file_items			},
	{ "Track",		track_items			},
	{ "Operations",	operations_items	},
	{ NULL }
};
/*----------------------------------------------------------------------*/

static Widget _control = NULL;
static Widget _dummy = NULL;
static Widget _tool_bar = NULL;
static Widget _log_list = NULL;

/*----------------------------------------------------------------------*/
int
main(int argc,char *argv[])
{
	XfeAppCreate("FrameShellTest",&argc,argv);

	_control = create_control("Control");

	_dummy = create_dummy("Dummy");

	_tool_bar = XfeDescendantFindByName(_control,"ToolBar",XfeFIND_ANY,False);

	_log_list = XfeDescendantFindByName(_control,"List",XfeFIND_ANY,False);

/* 	XtPopup(_dummy,XtGrabNone); */
    
	XtPopup(_control,XtGrabNone);

    XfeAppMainLoop();

	return 0;
}
/*----------------------------------------------------------------------*/
static Widget
create_control(String name)
{
	Widget		frame = NULL;
	Widget		form = NULL;
	Widget		tool_bar;
	Widget		list;
	Arg			av[20];
	Cardinal	ac = 0;

	
	XtSetArg(av[ac],XmNtrackEditres,False); ac++;

	frame = XfeFrameCreate(name,av,ac);
	
	form = XfeDescendantFindByName(frame,"MainForm",XfeFIND_ANY,False);

	tool_bar = XfeToolBarCreate(form,"ToolBar",pane_items,NULL);

	list = XmCreateScrolledList(form,"List",NULL,0);

	XtManageChild(list);

	return frame;
}
/*----------------------------------------------------------------------*/
static Widget
create_dummy(String name)
{
	Widget frame = NULL;
	Widget form = NULL;

	frame = XfeFrameCreate(name,NULL,0);
	
	form = XfeDescendantFindByName(frame,"MainForm",XfeFIND_ANY,False);

	XtAddCallback(frame,XmNfirstMapCallback,first_map_cb,NULL);
	XtAddCallback(frame,XmNmapCallback,map_cb,NULL);
	XtAddCallback(frame,XmNunmapCallback,unmap_cb,NULL);

	return frame;
}
/*----------------------------------------------------------------------*/
static void
first_map_cb(Widget w,XtPointer client_data,XtPointer call_data)
{
	message_output(message_create(w,"FirstMap"));
}
/*----------------------------------------------------------------------*/
static void
map_cb(Widget w,XtPointer client_data,XtPointer call_data)
{
	message_output(message_create(w,"Map"));
}
/*----------------------------------------------------------------------*/
static void
unmap_cb(Widget w,XtPointer client_data,XtPointer call_data)
{
	message_output(message_create(w,"Unmap"));
}
/*----------------------------------------------------------------------*/
static void
track_cb(Widget w,XtPointer client_data,XtPointer call_data)
{
	String name = XtName(w);

	if (!XfeIsAlive(_dummy))
	{
		return;
	}

	if (strcmp(name,"Editres") == 0)
	{
		XfeResourceToggleBoolean(_dummy,XmNtrackEditres);
	}
	else if (strcmp(name,"DeleteWindow") == 0)
	{
		XfeResourceToggleBoolean(_dummy,XmNtrackDeleteWindow);
	}
	else if (strcmp(name,"Mapping") == 0)
	{
		XfeResourceToggleBoolean(_dummy,XmNtrackMapping);
	}
}
/*----------------------------------------------------------------------*/
static void
operation_cb(Widget w,XtPointer client_data,XtPointer call_data)
{
	String name = XtName(w);

	if (!XfeIsAlive(_dummy))
	{
		return;
	}

	if (strcmp(name,"Popup") == 0)
	{
		XtPopup(_dummy,XtGrabNone);
	}
	else if (strcmp(name,"Popdown") == 0)
	{
		XtPopdown(_dummy);
	}
	else if (strcmp(name,"Map") == 0)
	{
		XtMapWidget(_dummy);
	}
	else if (strcmp(name,"Unmap") == 0)
	{
		XtUnmapWidget(_dummy);
	}
	else if (strcmp(name,"Realize") == 0)
	{
		XtRealizeWidget(_dummy);
	}
}
/*----------------------------------------------------------------------*/
static void
message_output(String message)
{
	XmString item;

	assert( XfeIsAlive(_log_list) );

	if (!message)
	{
		message = "NULL";
	}

	item = XmStringCreate(message,XmFONTLIST_DEFAULT_TAG);

	XmListAddItem(_log_list,item,0);

	XmStringFree(item);
}
/*----------------------------------------------------------------------*/
static String
message_create(Widget w,String message)
{
	String name;

	static char buf[4096];
	static int count = 1;

	if (XfeIsAlive(w))
	{
		name = XtName(w);
	}
	else
	{
		name = "NULL";
	}

	sprintf(buf,"%3d. %s(%s)",count,message,name);

	count++;

	return buf;
}
/*----------------------------------------------------------------------*/
