//////////////////////////////////////////////////////////////////////////////
// Application.hh
//////////////////////////////////////////////////////////////////////////////
#ifndef APPLICATION_HH
#define APPLICATION_HH
#include "BasicComponent.hh"

class Application : public BasicComponent {
    
  friend void main ( int, char ** );
  friend class MainWindow;  // MainWindow needs to call 
  
private:    
    
  void registerWindow ( MainWindow * );
  void unregisterWindow ( MainWindow * );
  
protected:
  
  Display     *_display;
  XtAppContext _appContext;

  virtual void initialize ( int *, char ** );  
  
  virtual void handleEvents();
    
  char   *_applicationClass;    
  MainWindow  **_windows;       
  int           _numWindows;
  
public:
  
  Application ( char * );
  virtual ~Application();     
  
  void manage();
  void unmanage();
  void iconify();
  
  Display      *display()     { return _display; }
  XtAppContext  appContext()  { return _appContext; }
  const char   *applicationClass()  { return _applicationClass; }
  
  virtual const char *const className() { return "Application"; }
};

extern Application *theApplication; 

#endif
