#ifndef _XtCompositeObj_h
#define _XtCompositeObj_h

#include <xt++/RectObj.h>
#include <xt++/WindowObj.h>
#include <xt++/Composite.h>

class CompositeObjRec : public RectObjRec {
protected:
    WidgetList  children;	     /* array of ALL widget children	     */
    Cardinal    num_children;	     /* total number of widget children	     */
    Cardinal    num_slots;           /* number of slots in children array    */
    XtOrderProc insert_position;     /* compute position of new child	     */
};
typedef CompositeObjRec *CompositeObj;

class CompositeObjClassRec : public WindowObjClassRec {
protected:
    XtGeometryHandler geometry_manager;	  /* geometry manager for children   */
    XtWidgetProc      change_managed;	  /* change managed state of child   */
    XtWidgetProc      insert_child;	  /* physically add child to parent  */
    XtWidgetProc      delete_child;	  /* physically remove child	     */
    caddr_t	    extension;		/* pointer to extension record      */
  
    XtGeometryResult GeometryManager(
				     Widget w,
				     XtWidgetGeometry *request,
				     XtWidgetGeometry *reply) {
	return (*geometry_manager)(w, request, reply); }
    void ChangeManaged(Widget w) { (*change_managed)(w); }
    void InsertChild(Widget w) { (*insert_child)(w); }
    void DeleteChild(Widget w) { (*delete_child)(w); }
};
typedef CompositeObjClassRec *CompositeObjClass;

externalref CompositeObjClassRec compositeObjectClassRec;
externalref WidgetClass compositeObjectClass;

#endif _XtCompositeObj_h
