#ifndef _XtWindow_h
#define _XtWindow_h

#include <X++/Intrinsic.h>
#include <xt++/RectObj.h>

class StateRec;
typedef StateRec *StatePtr;

class XtTMRec {
    XtTranslations  translations;	/* private to Translation Manager    */
    XtBoundActions  proc_table;		/* procedure bindings for actions    */
    StatePtr        current_state;      /* Translation Manager state ptr     */
    unsigned long   lastEventTime;
};
typedef XtTMRec *XtTM;

externalref int _XtInheritTranslations;
#define XtObjDisplay(widget)  ((widget)->win_obj.screen->display)

#define XtInheritTranslations  ((String) &_XtInheritTranslations)
#define XtInheritRealize ((XtRealizeProc) _XtInherit)
#define XtInheritResize ((XtWidgetProc) _XtInherit)
#define XtInheritExpose ((XtExposeProc) _XtInherit)
#define XtInheritSetValuesAlmost ((XtAlmostProc) _XtInherit)
#define XtInheritAcceptFocus ((XtAcceptFocusProc) _XtInherit)
#define XtInheritQueryGeometry ((XtGeometryHandler) _XtInherit)
#define XtInheritDisplayAccelerator ((XtStringProc) _XtInherit)

/**********************************************************
 * Window Object Instance Data Structures
 *
 **********************************************************/
/* these fields match CorePart and can not be changed */

class WindowObjRec : public RectObjRec {
protected:
    XtEventTable    event_table;        /* private to event dispatcher       */
    XtTMRec         tm;                 /* translation management            */
    XtTranslations  accelerators;       /* accelerator translations          */
    Pixel	    border_pixel;	/* window border pixel		     */
    Pixmap          border_pixmap;	/* window border pixmap or NULL      */
    WidgetList      popup_list;         /* list of popups                    */
    Cardinal        num_popups;         /* how many popups                   */
    String          name;               /* widget resource name              */
    Screen          *screen;            /* window's screen                   */
    Colormap        colormap;           /* colormap                          */
    Window          window;             /* window ID                         */
    Cardinal        depth;              /* number of planes in window        */
    Pixel           background_pixel;   /* window background pixel           */
    Pixmap          background_pixmap;  /* window background pixmap or NULL  */
    Boolean         visible;            /* is window mapped and not occluded?*/
    Boolean         mapped_when_managed;/* map window if it's managed?       */
};
// typedef WindowObjRec *WindowObj;

/********************************************************
 * Window Object Class Data Structures
 *
 ********************************************************/
/* these fields match CoreClassPart and can not be changed */
/* ideally these structures would only contain the fields required;
   but because the CoreClassPart cannot be changed at this late date
   extraneous fields are necessary to make the field offsets match */

class XtOffsetRec;
class WindowObjClassRec {
protected:
    WidgetClass     superclass;         /* pointer to superclass ClassRec   */
    String          class_name;         /* widget resource class name       */
    Cardinal        widget_size;        /* size in bytes of widget record   */
    XtProc          class_initialize;   /* class initialization proc        */
    XtWidgetClassProc class_part_initialize; /* dynamic initialization      */
    Boolean         class_inited;       /* has class been initialized?      */
    XtInitProc      initialize;         /* initialize subclass fields       */
    XtArgsProc      initialize_hook;    /* notify that initialize called    */
    XtRealizeProc   realize;            /* XCreateWindow for widget         */
    XtActionList    actions;            /* widget semantics name to proc map */
    Cardinal        num_actions;        /* number of entries in actions     */
    XtResourceList  resources;          /* resources for subclass fields    */
    Cardinal        num_resources;      /* number of entries in resources   */
    XrmClass        xrm_class;          /* resource class quarkified        */
    Boolean         compress_motion;    /* compress MotionNotify for widget */
    Boolean         compress_exposure;  /* compress Expose events for widget*/
    Boolean         compress_enterleave;/* compress enter and leave events  */
    Boolean         visible_interest;   /* select for VisibilityNotify      */
    XtWidgetProc    destroy;            /* free data for subclass pointers  */
    XtWidgetProc    resize;             /* geom manager changed widget size */
    XtExposeProc    expose;             /* rediplay window                  */
    XtSetValuesFunc set_values;         /* set subclass resource values     */
    XtArgsFunc      set_values_hook;    /* notify that set_values called    */
    XtAlmostProc    set_values_almost;  /* set_values got "Almost" geo reply*/
    XtArgsProc      get_values_hook;    /* notify that get_values called    */
    XtAcceptFocusProc accept_focus;     /* assign input focus to widget     */
    XtVersionType   version;            /* version of intrinsics used       */
    XtOffsetRec	    *callback_private;	/* list of callback offsets	    */
    String          tm_table;           /* state machine                    */
    XtGeometryHandler query_geometry;   /* return preferred geometry        */
    XtStringProc    display_accelerator;/* display your accelerator         */
    caddr_t         extension;          /* pointer to extension record      */
public:
    WidgetClass XtSuperclass() { return superclass; }
};
// typedef WindowObjClassRec *WindowObjClass;

externalref WindowObjClassRec windowObjClassRec;
externalref WindowObjClass windowObjClass;

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