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.