/* AlertPanel class
 *
 * Copyright (C)  1994  The Board of Trustees of  
 * The Leland Stanford Junior University.  All Rights Reserved.
 *
 * Author: Michael Gravina
 *
 * This file is part of an Objective-C class library for a window system
 *
 */
#include "Panel.h"
#include "Application.h"
#include "Button.h"
#include "TextField.h"
#include <stdarg.h>

@interface AlertPanel : Panel
- init :(const char *)title :(const char *)msg :(const char *)defaultText 	
	:(const char *)alternateText :(const char *)otherText;
- default:sender;
- alternate:sender;
- other:sender;
@end

extern int 
NXRunAlertPanel(const char *title, const char *msg, const char *defaultText, 
	const char *alternateText, const char *otherText, ...)
{
    id 		alertPanel;
    int		irc;
    char 	msgString[200];
    va_list	ap;

    va_start (ap, otherText);
    vsprintf (msgString, msg, ap);
    va_end (ap);

    alertPanel = [AlertPanel alloc];
    [alertPanel init :title :msgString :defaultText :alternateText :otherText];
    [alertPanel makeKeyAndOrderFront:alertPanel];
    irc = [NXApp runModalFor:alertPanel];
    [alertPanel close];
    return irc;
}

@implementation AlertPanel

- init :(const char *)myTitle :(const char *)msg :(const char *)defaultText 	
	:(const char *)alternateText :(const char *)otherText
{
    id	defaultButton;
    id	alternateButton;
    id	otherButton;
    id 	myText1;
    id 	myText2;
    NXRect myFrame;
    NXRect contentFrame;

    myFrame.size.width  = 400;
    myFrame.size.height = 164;
    myFrame.origin.x = 349;
    myFrame.origin.y = 422;

    [super initContent:&myFrame style:0 backing:0 buttonMask:0
		defer:YES];

    [contentView getFrame:&contentFrame];
	
    [self setTitle:"Alert Panel"];

    defaultButton = [[Button alloc] init];
    myFrame.size.width  = 72;
    myFrame.size.height = 24;
    myFrame.origin.x = 280;
    myFrame.origin.y = 8;
    [defaultButton setFrame:&myFrame];
    if (defaultText == NULL) 	[defaultButton setTitle:"OK"];
    else 			[defaultButton setTitle:defaultText];
    [defaultButton setTarget:self];
    [defaultButton setAction:@selector(default:)];
    [contentView addSubview:defaultButton];

    if (alternateText != NULL) { 
	alternateButton = [[Button alloc] init];
	myFrame.origin.x = 199;
	[alternateButton setFrame:&myFrame];
	[alternateButton setTitle:alternateText];
	[alternateButton setTarget:self]; 
	[alternateButton setAction:@selector(alternate:)];
	[contentView addSubview:alternateButton];
    }

    if (otherText != NULL) { 
	otherButton = [[Button alloc] init];
	myFrame.origin.x = 120;
	if (alternateText == NULL) myFrame.origin.x = 199; 
	[otherButton setFrame:&myFrame];
	[otherButton setTitle:otherText];
	[otherButton setTarget:self];
	[otherButton setAction:@selector(other:)];
	[contentView addSubview:otherButton];
    }

    myText1 = [[TextField alloc] _initAsLabel];
    myFrame.size.width  = 289;
    myFrame.size.height = 21;
    myFrame.origin.x = 64;
    myFrame.origin.y = 120;
    [myText1 setFrame:&myFrame];
    if (myTitle == NULL) [myText1 setStringValue:"ALERT"];
    else 		 [myText1 setStringValue:myTitle];
    [contentView addSubview:myText1];

    if (msg != NULL) { 
	myText2 = [[TextField alloc] _initAsLabel];
	myFrame.size.width  = 395;
	myFrame.size.height = 36;
	myFrame.origin.x = 8;
	myFrame.origin.y = 45;
	[myText2 setFrame:&myFrame];
	[myText2 setStringValue:msg];
	[contentView addSubview:myText2];
    }

    return self;
}

- default:sender
{
    [NXApp stopModal:1];
    return self;
}

- alternate:sender
{
    [NXApp stopModal:0];
    return self;
}

- other:sender
{
    [NXApp stopModal:-1];
    return self;
}

@end

