'\" t .\" ResolveA.sgm /main/10 1996/09/25 10:05:27 cdedoc $ .de P! .fl \!!1 setgray .fl \\&.\" .fl \!!0 setgray .fl \" force out current output buffer \!!save /psv exch def currentpoint translate 0 0 moveto \!!/showpage{}def .fl \" prolog .sy sed -e 's/^/!/' \\$1\" bring in postscript file \!!psv restore . .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "XmResolveAllPartOffsets" 3 .SH "NAME" \fBXmResolveAllPartOffsets\fP \(em A function that allows writing of upward-compatible applications and widgets "XmResolveAllPartOffsets" .SH "SYNOPSIS" .PP .nf #include \fBvoid \fBXmResolveAllPartOffsets\fP\fR( \fBWidgetClass \fBwidget_class\fR\fR, \fBXmOffsetPtr \fB* offset\fR\fR, \fBXmOffsetPtr \fB* constraint_offset\fR\fR); .fi .SH "DESCRIPTION" .PP .RS \fBNote: .PP This routine is obsolete and exists for compatibility with previous releases\&. You should call \fBXmeResolvePartOffsets\fP instead\&. .RE .PP The use of offset records requires two extra global variables per widget class\&. The variables consist of pointers to arrays of offsets into the widget record and constraint record for each part of the widget structure\&. The \fBXmResolveAllPartOffsets\fP function allocates the offset records needed by an application to guarantee upward-compatible access to widget instance and constraint records by applications and widgets\&. These offset records are used by the widget to access all of the widget\&'s variables\&. A widget needs to take the steps described in the following paragraphs\&. .PP Instead of creating a resource list, the widget creates an offset resource list\&. To accomplish this, use the \fBXmPartResource\fR structure and the \fBXmPartOffset\fP macro\&. The \fBXmPartResource\fR data structure looks just like a resource list, but instead of having one integer for its offset, it has two shorts\&. This structure is put into the class record as if it were a normal resource list\&. Instead of using \fBXtOffset\fP for the offset, the widget uses \fBXmPartOffset\fP\&. .PP If the widget is a subclass of the Constraint class and it defines additional constraint resources, create an offset resource list for the constraint part as well\&. Instead of using \fBXtOffset\fP for the offset, the widget uses \fBXmConstraintPartOffset\fP in the constraint resource list\&. .PP .nf \f(CWXmPartResource resources[] = { { BarNxyz, BarCXyz, XmRBoolean, sizeof(Boolean), XmPartOffset(Bar,xyz), XmRImmediate, (XtPointer)False } }; XmPartResource constraints[] = { { BarNmaxWidth, BarNMaxWidth, XmRDimension, sizeof(Dimension), XmConstraintPartOffset(Bar,max_width), XmRImmediate, (XtPointer)100 } };\fR .fi .PP .PP Instead of putting the widget size in the class record, the widget puts the widget part size in the same field\&. If the widget is a subclass of the Constraint class, instead of putting the widget constraint record size in the class record, the widget puts the widget constraint part size in the same field\&. .PP Instead of putting \fBXtVersion\fP in the class record, the widget puts \fBXtVersionDontCheck\fP in the class record\&. .PP Define a variable, of type \fBXmOffsetPtr\fR, to point to the offset record\&. If the widget is a subclass of the Constraint class, define a variable of type \fBXmOffsetPtr\fR to point to the constraint offset record\&. These can be part of the widget\&'s class record or separate global variables\&. .PP In class initialization, the widget calls \fBXmResolveAllPartOffsets\fP, passing it pointers to the class record, the address of the offset record, and the address of the constraint offset record\&. If the widget not is a subclass of the Constraint class, it should pass NULL as the address of the constraint offset record\&. This does several things: .IP " \(bu" 6 Adds the superclass (which, by definition, has already been initialized) size field to the part size field .IP " \(bu" 6 If the widget is a subclass of the Constraint class, adds the superclass constraint size field to the constraint size field .IP " \(bu" 6 Allocates an array based upon the number of superclasses .IP " \(bu" 6 If the widget is a subclass of the constraint class, allocates an array for the constraint offset record .IP " \(bu" 6 Fills in the offsets of all the widget parts and constraint parts with the appropriate values, determined by examining the size fields of all superclass records .IP " \(bu" 6 Uses the part offset array to modify the offset entries in the resource list to be real offsets, in place .PP The widget defines a constant that will be the index to its part structure in the offsets array\&. The value should be 1 greater than the index of the widget\&'s superclass\&. Constants defined for all \fBXm\fP widgets can be found in \fBXmP\&.h\fP\&. .PP .nf \f(CW#define BarIndex (XmBulletinBIndex + 1)\fR .fi .PP .PP Instead of accessing fields directly, the widget must always go through the offset table\&. The \fBXmField\fP and \fBXmConstraintField\fP macros help you access these fields\&. Because the \fBXmPartOffset\fP, \fBXmConstraintPartOffset\fP, \fBXmField\fP, and \fBXmConstraintField\fP macros concatenate things, you must ensure that there is no space after the part argument\&. For example, the following macros do not work because of the space after the part (Label) argument: .PP .nf \f(CWXmField(w, offset, Label, text, char *) XmPartOffset(Label, text)\&.\fR .fi .PP .PP Therefore, you must not have any spaces after the part (Label) argument, as illustrated here: .PP .nf \f(CWXmField(w, offset, Label, text, char *)\fR .fi .PP .PP You can define macros for each field to make this easier\&. Assume an integer field \fIxyz\fP: .PP .nf \f(CW#define BarXyz(w) (*(int *)(((char *) w) + \e offset[BarIndex] + XtOffset(BarPart,xyz)))\fR .fi .PP .PP For constraint field \fImax_width\fP: .PP .nf \f(CW#define BarMaxWidth(w) \e XmConstraintField(w,constraint_offsets,Bar,max_width,Dimension)\fR .fi .PP .PP The parameters for \fBXmResolveAllPartOffsets\fP are .IP "\fIwidget_class\fP" 10 Specifies the widget class pointer for the created widget .IP "\fIoffset\fP" 10 Returns the offset record .IP "\fIconstraint_offset\fP" 10 Returns the constraint offset record .SH "RELATED INFORMATION" .PP \fBXmResolvePartOffsets\fP(3)\&. .\" created by instant / docbook-to-man, Sun 22 Dec 1996, 20:29