#ifndef _ROVAPP_H
#define _ROVAPP_H
static char RovApp_h_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/RovApp.h,v 1.4 1997/03/20 12:36:32 oreilly Exp $";

/*
$Log: RovApp.h,v $
Revision 1.4  1997/03/20 12:36:32  oreilly
*** empty log message ***

 * Revision 1.3  96/10/28  09:14:01  09:14:01  oreilly (Thomas C. O'Reilly)
 * *** empty log message ***
 * 
*/

#include <Vk/VkApp.h>
#include "PeriodicHandler.h"
#include "AperiodicHandler.h"
#include "SystemAlarms.h"

#define rovEnvVar "ROV_DIR"
#define defaultAlarmDefFile "alarmDef.dat"

/*
RovApp has several responsibilities, including

  Manage display of multiple GUI "views". 

  Create DmGuiObjects at start up.

  Create and contain Aperiodic and Periodic handlers. Provide interface 
  for registration with Aperiodic and Periodic handlers.
*/

class RovApp : public VkApp 
{
  public:

  RovApp(
	 char *appClassName,
	 int *argc,
	 char **argv,
	 XrmOptionDescRec *optionList = NULL,
	 int sizeOfOptionList = 0
	 );

  ~RovApp();  

  /* Register DmGuiObject with appropriate telemetry handler */
  int registerConsumer(DmGuiObject *obj, int period);

  /* Remove DmGuiObject from telemetry handler lists */
  void unregisterConsumer(DmGuiObject *obj);
  
  /* Start telemetry handlers prior to entering event loop */
  void startTelemetryHandlers();
  
  AperiodicHandler *aperiodicHandler();

  SystemAlarms *systemAlarms;

  MBool debug()
  {
    return _debug;
  }

  // Gracefully exit 
  void exit(int stat);  
  
  
  protected:
  PeriodicHandler *_periodicHandler;
  AperiodicHandler *_aperiodicHandler;  
  char _systemAlarmFile[256]; 
  MBool _debug;
  
  int defaultInputs(char *errorBuf);
  void getOptions(int argc, char **argv);
  void setSignalHandlers();
  void clearSignalHandlers();
  
  // signalHandler() is called as soon as signal is received.
  // Followup processing of signal is deferred to workproc 
  static void signalHandler(int sigNo);

  // followupSignalHandler() does additional processing of signal, as a 
  // workproc
  static Boolean followupSignalHandler(XtPointer clientData);
};




#endif
