Home Man
Today's Posts

Linux & Unix Commands - Search Man Pages

RedHat 9 (Linux i386) - man page for xmresolvepartoffsets (redhat section 3)

XmResolvePartOffsets(library call)			       XmResolvePartOffsets(library call)

       XmResolvePartOffsets  --  A function that allows writing of upward-compatible applications
       and widgets

       #include <Xm/Xm.h>
       void XmResolvePartOffsets(
       WidgetClass widget_class,
       XmOffsetPtr * offset);

       The use of offset records requires one extra global variable per widget class.  The  vari-
       able  consists of a pointer to an array of offsets into the widget record for each part of
       the widget structure.  The XmResolvePartOffsets	function  allocates  the  offset  records
       needed  by an application to guarantee upward-compatible access to widget instance 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 para-

       Instead of creating a resource list, the widget	creates  an  offset  resource  list.   To
       accomplish  this,  use  the  XmPartResource  structure  and  the  XmPartOffset macro.  The
       XmPartResource 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 XtOffset for the  offset,  the  widget
       uses XmPartOffset.

       XmPartResource resources[] = {
	 { BarNxyz, BarCXyz, XmRBoolean,
	   sizeof(Boolean), XmPartOffset(Bar,xyz),
	   XmRImmediate, (XtPointer)False }

       Instead	of  putting  the widget size in the class record, the widget puts the widget part
       size in the same field.

       Instead of putting XtVersion in the class record, the widget  puts  XtVersionDontCheck  in
       the class record.

       The  widget  defines a variable, of type XmOffsetPtr, to point to the offset record.  This
       can be part of the widget's class record or a separate global variable.

       In class initialization, the widget calls XmResolvePartOffsets, passing it  a  pointer  to
       contain the address of the offset record and the class record.  This does several things:

	  o  Adds  the superclass (which, by definition, has already been initialized) size field
	     to the part size field

	  o  Allocates an array based upon the number of superclasses

	  o  Fills in the offsets of all the widget parts with the appropriate values, determined
	     by examining the size fields of all superclass records

	  o  Uses  the	part offset array to modify the offset entries in the resource list to be
	     real offsets, in place

       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.  Con-
       stants defined for all Xm widgets can be found in XmP.h.

       #define BarIndex (XmBulletinBIndex + 1)

       Instead of accessing fields directly, the widget must always go through the offset  table.
       The  XmField  macro  helps  you access these fields.  Because the XmPartOffset and XmField
       macros concatenate things together, 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:

       XmField(w, offset, Label, text, char *)
       XmPartOffset(Label, text)

       Therefore, you must not have any spaces after the part (Label)  argument,  as  illustrated

       XmField(w, offset, Label, text, char *)

       You can define macros for each field to make this easier.  Assume an integer field xyz:

       #define BarXyz(w) (*(int *)(((char *) w) + \
	       offset[BarIndex] + XtOffset(BarPart,xyz)))

       The parameters for XmResolvePartOffsets are

		 Specifies the widget class pointer for the created widget

       offset	 Returns the offset record


							       XmResolvePartOffsets(library call)

All times are GMT -4. The time now is 09:22 PM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
Show Password