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 XtSetValues 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.