#include <exec/nodes.h>
#include <exec/lists.h>
#include <libraries/gadtools.h>
#include <utility/tagitem.h>
#include <proto/exec.h>
#include <proto/gadtools.h>
#include <proto/intuition.h>
#include <proto/utility.h>
#include <dialog/dialog.h>
#include <stdio.h>

struct Screen *myScreen;
APTR myVisualInfo;

VOID dialog( VOID )
{
	DialogElement root, vstack, hstack1, hstack, hspring, ok, hstack2, *termination;
	DialogElement string1, string2, string3, string4;
	UBYTE buffer1[32], buffer2[32], buffer3[32], buffer4[32];
	ULONG error = 0;

	initDialogElement( &root, NULL, dispatchRoot, &error,
		DA_Screen, myScreen,
		DA_Member, &vstack,
		WA_Activate, TRUE,
		WA_DragBar, TRUE,
		TAG_DONE );
	initDialogElement( &vstack, &root, dispatchVStack, &error,
		DA_Member, &hstack1,
		DA_Member, &hstack,
		DA_Member, &hstack2,
		TAG_DONE );
	initDialogElement( &hstack, &root, dispatchHStack, &error,
		DA_Member, &hspring,
		DA_Member, &ok,
		DA_Member, &hspring,
		TAG_DONE );
	initDialogElement( &hspring, &root, dispatchHSpring, &error, TAG_DONE );
	initDialogElement( &ok, &root, dispatchButton, &error,
		NGDA_TextAttr, myScreen->Font,
		NGDA_VisualInfo, myVisualInfo,
		NGDA_GadgetText, "_Ok",
		GT_Underscore, '_',
		DA_EquivalentKey, 'O',
		DA_Termination, TRUE,
		TAG_DONE );
	initDialogElement( &hstack1, &root, dispatchHStack, &error,
		DA_Member, &string1,
		DA_Member, &string4,
		TAG_DONE );
	initDialogElement( &hstack2, &root, dispatchHStack, &error,
		DA_Member, &string3,
		DA_Member, &string2,
		TAG_DONE );
	initDialogElement( &string1, &root, dispatchString, &error,
		NGDA_TextAttr, myScreen->Font,
		NGDA_VisualInfo, myVisualInfo,
		NGDA_GadgetText, "placement left",
/*		NGDA_Flags, PLACETEXT_LEFT,	*** default *** */
		GTST_MaxChars, 31,
		DA_Storage, buffer1,
		TAG_DONE );
	initDialogElement( &string2, &root, dispatchString, &error,
		NGDA_TextAttr, myScreen->Font,
		NGDA_VisualInfo, myVisualInfo,
		NGDA_GadgetText, "placement right",
		NGDA_Flags, PLACETEXT_RIGHT,
		GTST_MaxChars, 31,
		DA_Storage, buffer2,
		TAG_DONE );
	initDialogElement( &string3, &root, dispatchString, &error,
		NGDA_TextAttr, myScreen->Font,
		NGDA_VisualInfo, myVisualInfo,
		NGDA_GadgetText, "placement above",
		NGDA_Flags, PLACETEXT_ABOVE,
		GTST_MaxChars, 31,
		DA_Storage, buffer3,
		TAG_DONE );
	initDialogElement( &string4, &root, dispatchString, &error,
		NGDA_TextAttr, myScreen->Font,
		NGDA_VisualInfo, myVisualInfo,
		NGDA_GadgetText, "placement below",
		NGDA_Flags, PLACETEXT_BELOW,
		GTST_MaxChars, 31,
		DA_Storage, buffer4,
		TAG_DONE );

	if( error )
		goto cleanup;

	buffer1[0] = buffer2[0] = buffer3[0] = buffer4[0] = '\0';

	termination = runSimpleDialog( &root,
		WA_Title, "Example : GadTools STRING",
		WA_InnerWidth, 300,
		WA_InnerHeight, 200,
		TAG_DONE );

	printf( "buffer contents:\n%s\n%s\n%s\n%s\n", buffer1, buffer2, buffer3, buffer4 );

cleanup:
	cleanupDialogElement( &string1 );
	cleanupDialogElement( &string2 );
	cleanupDialogElement( &string3 );
	cleanupDialogElement( &string4 );
	cleanupDialogElement( &ok );
	cleanupDialogElement( &hstack );
	cleanupDialogElement( &hspring );
	cleanupDialogElement( &hstack1 );
	cleanupDialogElement( &hstack2 );
	cleanupDialogElement( &vstack );
	cleanupDialogElement( &root );
}

main( int argc, char *argv[] )
{
	myScreen = LockPubScreen( NULL );
	if( !myScreen )
		goto cleanup;

	myVisualInfo = GetVisualInfo( myScreen, TAG_DONE );
	if( !myVisualInfo )
		goto cleanup;

	dialog();

cleanup:
	if( myVisualInfo )
		FreeVisualInfo( myVisualInfo );
	if( myScreen )
		UnlockPubScreen( NULL, myScreen );
}
