# Public Header File

The public header file contains declarations that will be required by any application module that needs to refer to the widget; whether to create an instance of the class, to perform an operation, or to call a public routine implemented by the widget class.

The contents of the Template public header file, `< X11/Xaw/Template.h >,` are:

    ..

    /* Copyright (c) X Consortium 1987, 1988 */

    #ifndef _Template_h
    #define _Template_h

    /****************************************************************
     *
     * Template widget
     *
     ****************************************************************/

    /* Resources:

     Name	Class		RepType	Default Value
     ----		-----		-------	-------------
     background	Background		Pixel	XtDefaultBackground
     border	BorderColor		Pixel	XtDefaultForeground
     borderWidth	BorderWidth		Dimension	1
     destroyCallback	Callback		Pointer	NULL
     height	Height		Dimension	0
     mappedWhenManaged	MappedWhenManaged	Boolean	True
     sensitive	Sensitive		Boolean	True
     width	Width		Dimension	0
     x		Position		Position	0
     y		Position		Position	0

    */

    /* define any special resource names here that are not in <X11/StringDefs.h> */

    #define XtNtemplateResource "templateResource"

    #define XtCTemplateResource "TemplateResource"

    /* declare specific TemplateWidget class and instance datatypes */

    typedef struct _TemplateClassRec*	TemplateWidgetClass;
    typedef struct _TemplateRec*	TemplateWidget;

    /* declare the class constant */

    extern WidgetClass templateWidgetClass;

    #endif /* _Template_h */

You will notice that most of this file is documentation. The crucial parts are the last 8 lines where macros for any private resource names and classes are defined and where the widget class datatypes and class record pointer are declared.

For the "WindowWidget", we want 2 drawing colors, a callback list for user input and an `exposeCallback` callback list, and we will declare three convenience procedures, so we need to add

    /* Resources:
    	...
     callback	Callback	Callback	NULL
     drawingColor1	Color	Pixel		XtDefaultForeground
     drawingColor2	Color	Pixel		XtDefaultForeground
     exposeCallback	Callback	Callback	NULL
     font		Font	XFontStruct*	XtDefaultFont
    	...
     */

    #define XtNdrawingColor1 "drawingColor1"
    #define XtNdrawingColor2 "drawingColor2"
    #define XtNexposeCallback "exposeCallback"

    extern Pixel WindowColor1(\|/* Widget */\|);
    extern Pixel WindowColor2(\|/* Widget */\|);
    extern Font\ \ WindowFont(\|/* Widget */\|);

Note that we have chosen to call the input callback list by the generic name, `callback`, rather than a specific name. If widgets that define a single user-input action all choose the same resource name then there is greater possibility for an application to switch between widgets of different types.