// This may look like C code, but it is really -*- C++ -*-

// $Revision: 1.3 $
// $Author: roman $
// $Date: 90/07/20 03:24:50 $

#include "eureka.h"


#ifndef _Widget_h 
#define _Widget_h 1

class AWidget;

class AWidgetClass {
   WidgetClass wc;
   SymbolID    id;

 public:

   AWidget* CreateWidget(char* name, AWidget& parent);

   char*  name();
   WidgetClass Class() { return wc; }
   AWidgetClass(char* classname, WidgetClass wc);
   AWidgetClass(char* classname, char* systemname, WidgetClass wc);
   ~AWidgetClass();
};

class AWidget {
   AWidgetClass& awc;			// back pointer to its AWidgetClass

 protected:
   Widget        widget;

   AWidget(AWidgetClass& wc) : awc(wc)  {}

 public:
   Widget  Widget() { return widget; }
   void    Realize() { XtRealizeWidget(widget); }

   AWidget(char* name, AWidgetClass& awc, AWidget& parent);
   ~AWidget() { XtDestroyWidget(widget); }
};

#endif
