#ifndef _XtComposite_h
#define _XtComposite_h

#include <xt++/Core.h>

class CompositeClassRec : public WidgetClassRec {
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      */
};
typedef CompositeClassRec *CompositeClass;
typedef CompositeClassRec *CompositeWidgetClass;

externalref CompositeClassRec compositeClassRec;
externalref WidgetClass compositeWidgetClass;

typedef Cardinal (*XtOrderProc)(Widget);

class CompositeRec : public WidgetRec {
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	     */
public:
    CompositeRec() {};
    CompositeRec(
        String name, 
        Widget parent, 
        WidgetClass wc = compositeWidgetClass,
        ArgList args = NULL, 
        Cardinal numArgs = 0) 
        : (name, parent, wc, args, numArgs) {};
    void ManageAllChildren() {XtManageChildren(children, num_children);}
};
typedef CompositeRec *CompositePtr;

#define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit)
#define XtInheritChangeManaged ((XtWidgetProc) _XtInherit)
#define XtInheritInsertChild ((XtWidgetProc) _XtInherit)
#define XtInheritDeleteChild ((XtWidgetProc) _XtInherit)

#endif _XtComposite_h
/* DON'T ADD STUFF AFTER THIS #endif */
