#ifndef _XtShell_h
#define _XtShell_h

#include <X++/Intrinsic.h>
#include <xt++/Composite.h>

/***********************************************************************
 *
 * Shell Widget
 *
 ***********************************************************************/
/*
 * Shell specific atoms
 */
#define XtNiconName	"iconName"
#define XtCIconName	"IconName"
#define XtNiconPixmap	"iconPixmap"
#define XtCIconPixmap	"IconPixmap"
#define XtNiconWindow	"iconWindow"
#define XtCIconWindow	"IconWindow"
#define XtNiconMask	"iconMask"
#define XtCIconMask	"IconMask"
#define XtNwindowGroup	"windowGroup"
#define XtCWindowGroup	"WindowGroup"
 
#define XtNsaveUnder		"saveUnder"
#define XtCSaveUnder		"SaveUnder"
#define XtNtransient		"transient"
#define XtCTransient		"Transient"
#define XtNoverrideRedirect	"overrideRedirect"
#define XtCOverrideRedirect	"OverrideRedirect"

#define XtNallowShellResize	"allowShellResize"
#define XtCAllowShellResize	"AllowShellResize"
#define XtNcreatePopupChildProc	"createPopupChildProc"
#define XtCCreatePopupChildProc	"CreatePopupChildProc"

#define XtNtitle	"title"
#define XtCTitle	"Title"

/* 
 * The following are only used at creation and can not be changed via 
 * SetValues.
 */

#define XtNargc		"argc"
#define XtCArgc		"Argc"
#define XtNargv		"argv"
#define XtCArgv		"Argv"
#define XtNiconX	"iconX"
#define XtCIconX	"IconX"
#define XtNiconY	"iconY"
#define XtCIconY	"IconY"
#define XtNinput	"input"
#define XtCInput	"Input"
#define XtNiconic	"iconic"
#define XtCIconic	"Iconic"
#define XtNinitialState	"initialState"
#define XtCInitialState	"InitialState"
#define XtNgeometry	"geometry"
#define XtCGeometry	"Geometry"
#define XtNminWidth	"minWidth"
#define XtCMinWidth	"MinWidth"
#define XtNminHeight	"minHeight"
#define XtCMinHeight	"MinHeight"
#define XtNmaxWidth	"maxWidth"
#define XtCMaxWidth	"MaxWidth"
#define XtNmaxHeight	"maxHeight"
#define XtCMaxHeight	"MaxHeight"
#define XtNwidthInc	"widthInc"
#define XtCWidthInc	"WidthInc"
#define XtNheightInc	"heightInc"
#define XtCHeightInc	"HeightInc"
#define XtNminAspectY	"minAspectY"
#define XtCMinAspectY	"MinAspectY"
#define XtNmaxAspectY	"maxAspectY"
#define XtCMaxAspectY	"MaxAspectY"
#define XtNminAspectX		"minAspectX"
#define XtCMinAspectX		"MinAspectX"
#define XtNmaxAspectX		"maxAspectX"
#define XtCMaxAspectX		"MaxAspectX"
#define XtNwmTimeout		"wmTimeout"
#define XtCWmTimeout		"WmTimeout"
#define XtNwaitForWm		"waitforwm"
#define XtCWaitForWm		"Waitforwm"

/* *****
 * ***** Vendor.h is included later on; it needs fields defined in the first
 * ***** part of this header file
 * *****
 */

/***********************************************************************
 *
 * Shell Widget Private Data
 *
 ***********************************************************************/

/* New fields for the Shell widget class record */

class ShellClassRec : public CompositeClassRec {
    caddr_t         extension;          /* pointer to extension record      */
};
typedef ShellClassRec *ShellClass;
typedef ShellClassRec *ShellWidgetClass;

externalref ShellClassRec shellClassRec;
externalref WidgetClass shellWidgetClass;

/* New fields for the shell widget */
class ShellRec : public CompositeRec {
	char       *geometry;
	XtCreatePopupChildProc	create_popup_child_proc;
	XtGrabKind	grab_kind;
	Boolean	    spring_loaded;
	Boolean	    popped_up;
	Boolean	    allow_shell_resize;
	Boolean	    client_specified;
	Boolean	    save_under;
	Boolean	    override_redirect;

	XtCallbackList popup_callback;
	XtCallbackList popdown_callback;
};
typedef ShellRec *ShellWidget;

/***********************************************************************
 *
 * OverrideShell Widget Private Data
 *
 ***********************************************************************/

/* New fields for the OverrideShell widget class record */

class OverrideShellClassRec : public ShellClassRec {
protected:
    caddr_t         extension;          /* pointer to extension record      */
};
typedef OverrideShellClassRec *OverrideShellClass;
typedef OverrideShellClassRec *OverrideShellWidgetClass;

externalref OverrideShellClassRec overrideShellClassRec;
externalref WidgetClass overrideShellWidgetClass;

/* No new fields for the override shell widget */

class OverrideShellRec : public ShellRec {int frabjous;};
typedef OverrideShellRec *OverrideShellWidget;

/***********************************************************************
 *
 * WMShell Widget Private Data
 *
 ***********************************************************************/

/* New fields for the WMShell widget class record */

class WMShellClassRec : public ShellClassRec {
    caddr_t         extension;          /* pointer to extension record      */
};
typedef WMShellClassRec *WMShellClass;
typedef WMShellClassRec *WMShellWidgetClass;

externalref WMShellClassRec wmShellClassRec;
externalref WidgetClass wmShellWidgetClass;

/* New fields for the WM shell widget */
class WMShellRec : public ShellRec {
	char	   *title;
	int 	    wm_timeout;
	Boolean	    wait_for_wm;
	Boolean	    transient;
	Atom	    wm_configure_denied,  wm_moved;
	XSizeHints  size_hints;
	XWMHints    wm_hints;
};
typedef WMShellRec *WMShellWidget;

#include <xt++/Vendor.h>

/***********************************************************************
 *
 * TransientShell Widget Private Data
 *
 ***********************************************************************/

/* New fields for the TransientShell widget class record */
class TransientShellClassRec : public VendorShellClassRec {
    caddr_t         extension;          /* pointer to extension record      */
};
typedef TransientShellClassRec *TransientShellClass;
typedef TransientShellClassRec *TransientShellWidgetClass;

externalref TransientShellClassRec transientShellClassRec;
externalref WidgetClass transientShellWidgetClass;

/* New fields for the transient shell widget */
class TransientShellRec : public VendorShellRec {int brillig;};
typedef TransientShellRec *TransientShellWidget;

/***********************************************************************
 *
 * TopLevelShell Widget Private Data
 *
 ***********************************************************************/

/* New fields for the TopLevelShell widget class record */
class TopLevelShellClassRec : public VendorShellClassRec {
    caddr_t         extension;          /* pointer to extension record      */
};
typedef TopLevelShellClassRec *TopLevelShellClass;
typedef TopLevelShellClassRec *TopLevelShellWidgetClass;

externalref TopLevelShellClassRec topLevelShellClassRec;
externalref WidgetClass topLevelShellWidgetClass;

/* New fields for the top level shell widget */
class TopLevelShellRec : public VendorShellRec {
	char	   *icon_name;
	Boolean	    iconic;
};
typedef TopLevelShellRec *TopLevelShellWidget;

/***********************************************************************
 *
 * ApplicationShell Widget Private Data
 *
 ***********************************************************************/


/* New fields for the ApplicationShell widget class record */

class ApplicationShellClassRec : public TopLevelShellClassRec {
    caddr_t         extension;          /* pointer to extension record      */
};
typedef ApplicationShellClassRec *ApplicationShellClass;
typedef ApplicationShellClassRec *ApplicationShellWidgetClass;

externalref ApplicationShellClassRec applicationShellClassRec;
externalref WidgetClass applicationShellWidgetClass;

/* New fields for the application shell widget */
class ApplicationShellRec : public TopLevelShellRec {
	char *appshell_class;
	XrmClass xrm_class;
	int argc;
	char **argv;
};
typedef ApplicationShellRec *ApplicationWidget;

#endif _XtShell_h
/* DON'T ADD STUFF AFTER THIS #endif */
