diff options
Diffstat (limited to 'libXaw/spec/Template')
-rw-r--r-- | libXaw/spec/Template | 426 |
1 files changed, 0 insertions, 426 deletions
diff --git a/libXaw/spec/Template b/libXaw/spec/Template deleted file mode 100644 index b5dc050b2..000000000 --- a/libXaw/spec/Template +++ /dev/null @@ -1,426 +0,0 @@ -.\" $Xorg: Template,v 1.3 2000/08/17 19:42:28 cpqbld Exp $ -All Athena widgets have three separate files associated with them: -.LP -.IP \(bu 3 -A \*Qpublic\*U header file containing declarations needed by -applications programmers -.IP \(bu 3 -A \*Qprivate\*U header file containing additional declarations needed by the -widget and any subclasses -.IP \(bu 3 -A source code file containing the implementation of the widget -.LP -This separation of functions into three files is suggested for all -widgets, but nothing in the Toolkit actually requires this format. In -particular, a private widget created for a single application may easily -combine the \*Qpublic\*U and \*Qprivate\*U header files into a single file, or -merge the contents into another application header file. Similarly, the -widget implementation can be merged into other application code. -.LP -.sp -In the following example, the public header file -.Pn < X11/Xaw/Template.h >, -the private header file -.Pn < X11/Xaw/TemplateP.h > -and the source code file -.Pn < X11/Xaw/Template.c > -will be modified to produce the \*QWindowWidget\*U described above. -In each case, the files have been designed so that a global string -replacement of ``Template'' and ``template'' -with the name of your new widget, using -the appropriate case, can be done. -.NH 2 -Public Header File -.LP -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 -.PN XtSetValues -operation, or to call a public routine implemented by the widget class. -.LP -The contents of the Template public header file, -.Pn < X11/Xaw/Template.h >, -are: -.de CB -.sp -.Ds 0 -.SM -.vs 10 -.in +.25i -.TA .25i 1.4i 2.4i 2.75i 3.5i -.ta .25i 1.4i 2.4i 2.75i 3.5i -.. -.de CE -.NL -.vs 13 -.De -.\".in -.25i -.. -.CB -.\".so ../../lib/Xaw/Template.h -/* XConsortium: Template.h,v 1.2 88/10/25 17:22:09 swick Exp $ */ -/* 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 */ -.CE -.LP -.sp -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. -.LP -For the \*QWindowWidget\*U, we want 2 drawing colors, a callback list for -user input and an -\fBexposeCallback\fP callback list, and we will declare three -convenience procedures, so we need to add -.LP -.sp -.CB -/* 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 */\|); -.CE -.LP -Note that we have chosen to call the input callback list by the generic -name, \fBcallback\fP, 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. -.NH 2 -Private Header File -.LP -The private header file contains the complete declaration of the class -and instance structures for the widget and any additional private data -that will be required by anticipated subclasses of the widget. -Information in the private header file is normally hidden from the -application and is designed to be accessed only through other public -procedures; e.g. -.PN XtSetValues . -.LP -The contents of the Template private header file, -.Pn < X11/Xaw/TemplateP.h >, -are: -.CB -.\".so ../../lib/Xaw/TemplateP.h -/* XConsortium: TemplateP.h,v 1.2 88/10/25 17:31:47 swick Exp $ */ - -/* Copyright (c) X Consortium 1987, 1988 - */ - -#ifndef _TemplateP_h -#define _TemplateP_h - -#include <X11/Xaw/Template.h> -/* include superclass private header file */ -#include <X11/CoreP.h> - -/* define unique representation types not found in <X11/StringDefs.h> */ - -#define XtRTemplateResource "TemplateResource" - -typedef struct { - int empty; -} TemplateClassPart; - -typedef struct _TemplateClassRec { - CoreClassPart core_class; - TemplateClassPart template_class; -} TemplateClassRec; - -extern TemplateClassRec templateClassRec; - -typedef struct { - /* resources */ - char* resource; - /* private state */ -} TemplatePart; - -typedef struct _TemplateRec { - CorePart core; - TemplatePart template; -} TemplateRec; - -#endif /* _TemplateP_h */ -.CE -.LP -.sp -The private header file includes the private header file of its -superclass, thereby exposing the entire internal structure of the widget. -It may not always be advantageous to do this; your own project -development style will dictate the appropriate level of detail to expose -in each module. -.LP -The \*QWindowWidget\*U needs to declare two fields in its instance structure to -hold the drawing colors, a resource field for the font and a field for the -expose and user input callback lists: -.CB -typedef struct { - /* resources */ - Pixel color_1; - Pixel color_2; - XFontStruct* font; - XtCallbackList expose_callback; - XtCallbackList input_callback; - /* private state */ - /* (none) */ -} WindowPart; -.CE -.NH 2 -Widget Source File -.LP -The source code file implements the widget class itself. The unique -part of this file is the declaration and initialization of the -widget class record structure and the declaration of all resources and -action routines added by the widget class. -.LP -The contents of the Template implementation file, -.Pn < X11/Xaw/Template.c >, -are: -.CB -.\".so ../../lib/Xaw/Template.c -/* XConsortium: Template.c,v 1.2 88/10/25 17:40:25 swick Exp $ */ - -/* Copyright (c) X Consortium 1987, 1988 - */ - -#include <X11/IntrinsicP.h> -#include <X11/StringDefs.h> -#include "TemplateP.h" - -static XtResource resources[] = { -#define offset(field) XtOffsetOf(TemplateRec, template.field) - /* {name, class, type, size, offset, default_type, default_addr}, */ - { XtNtemplateResource, XtCTemplateResource, XtRTemplateResource, - sizeof(char*), offset(resource), XtRString, (XtPointer) "default" }, -#undef offset -}; - -static void TemplateAction(/* Widget, XEvent*, String*, Cardinal* */); - -static XtActionsRec actions[] = -{ - /* {name, procedure}, */ - {"template", TemplateAction}, -}; - -static char translations[] = -" <Key>: template(\|) \\n\\ -"; - -TemplateClassRec templateClassRec = { - { /* core fields */ - /* superclass */ (WidgetClass) &widgetClassRec, - /* class_name */ "Template", - /* widget_size */ sizeof(TemplateRec), - /* class_initialize */ NULL, - /* class_part_initialize */ NULL, - /* class_inited */ FALSE, - /* initialize */ NULL, - /* initialize_hook */ NULL, - /* realize */ XtInheritRealize, - /* actions */ actions, - /* num_actions */ XtNumber(actions), - /* resources */ resources, - /* num_resources */ XtNumber(resources), - /* xrm_class */ NULLQUARK, - /* compress_motion */ TRUE, - /* compress_exposure */ TRUE, - /* compress_enterleave */ TRUE, - /* visible_interest */ FALSE, - /* destroy */ NULL, - /* resize */ NULL, - /* expose */ NULL, - /* set_values */ NULL, - /* set_values_hook */ NULL, - /* set_values_almost */ XtInheritSetValuesAlmost, - /* get_values_hook */ NULL, - /* accept_focus */ NULL, - /* version */ XtVersion, - /* callback_private */ NULL, - /* tm_table */ translations, - /* query_geometry */ XtInheritQueryGeometry, - /* display_accelerator */ XtInheritDisplayAccelerator, - /* extension */ NULL - }, - { /* template fields */ - /* empty */ 0 - } -}; - -WidgetClass templateWidgetClass = (WidgetClass)&templateClassRec; - -.CE -The resource list for the \*QWindowWidget\*U might look like the following: -.CB -static XtResource resources[] = { -#define offset(field) XtOffsetOf(WindowWidgetRec, window.field) - /* {name, class, type, size, offset, default_type, default_addr}, */ - { XtNdrawingColor1, XtCColor, XtRPixel, sizeof(Pixel), - offset(color_1), XtRString, XtDefaultForeground }, - { XtNdrawingColor2, XtCColor, XtRPixel, sizeof(Pixel), - offset(color_2), XtRString, XtDefaultForeground }, - { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct*), - offset(font), XtRString, XtDefaultFont }, - { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - offset(expose_callback), XtRCallback, NULL }, - { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList), - offset(input_callback), XtRCallback, NULL }, -#undef offset -}; -.CE -.LP -The user input callback will be implemented by an action procedure which -passes the event pointer as call_data. The action procedure -is declared as: -.CB -/* ARGSUSED */ -static void InputAction(w, event, params, num_params) - Widget w; - XEvent *event; - String *params; /* unused */ - Cardinal *num_params; /* unused */ -{ - XtCallCallbacks(w, XtNcallback, (XtPointer)event); -} - -static XtActionsRec actions[] = -{ - /* {name, procedure}, */ - {"input", InputAction}, -}; -.CE -.LP -and the default input binding will be to execute the input callbacks on -.PN KeyPress -and -.PN ButtonPress : -.LP -.CB -static char translations[] = -" <Key>: input(\|) \\n\\ - <BtnDown>: input(\|) \\ -"; -.CE -.LP -In the class record declaration and initialization, the only field that -is different from the Template is the expose procedure: -.CB -/* ARGSUSED */ -static void Redisplay(w, event, region) - Widget w; - XEvent *event; /* unused */ - Region region; -{ - XtCallCallbacks(w, XtNexposeCallback, (XtPointer)region); -} - -WindowClassRec windowClassRec = { - - ... - - /* expose */ Redisplay, -.CE -.LP -.sp -The \*QWindowWidget\*U will also declare three public procedures to return the -drawing colors and the font id, saving the application the effort of -constructing an argument list for a call to -.PN XtGetValues : -.LP -.CB -Pixel WindowColor1(w) - Widget w; -{ - return ((WindowWidget)w)->window.color_1; -} - -Pixel WindowColor2(w) - Widget w; -{ - return ((WindowWidget)w)->window.color_2; -} - -Font WindowFont(w) - Widget w; -{ - return ((WindowWidget)w)->window.font->fid; -} -.CE -.LP -The \*QWindowWidget\*U is now complete. The application can retrieve the two -drawing colors from the widget instance by calling either -.PN XtGetValues , -or the \fBWindowColor\fP functions. The actual window created for the -\*QWindowWidget\*U is available by calling the -.PN XtWindow -function. -.ds LH -.ds CH -.ds RH -.nr PN +1 -.XS -Index -.XE -.tm .pn \n(PN -.nr PN -1 -.\" print Table of Contents -.if o .bp \" blank page to make count even -.bp 3 -.af PN i -.PX |