/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _PANTILTMICRO_H
#define _PANTILTMICRO_H

#include "Micro.h"
#include "PanTiltDm.h"
#include "GfSelfTest.h"


/*
CLASS 
PanTiltMicro

DESCRIPTION
Describes Pan-tilt micro, contains methods for generating GUIs

AUTHOR
Tom O'Reilly
*/
class PanTiltMicro : public Micro
{
  public:
  PanTiltMicro(const char *name, const char *dmPrefix);
  ~PanTiltMicro();
  
  virtual const char *className()
  {
    return "PanTiltMicro";
  }
  
  virtual Type type()
  {
    return PanTiltMicroType;
  }
 
  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period); 
  virtual MicroGf *gf(Widget parent, int period); 

  PanTiltDm *panTiltDm;

  protected:
};


/*
CLASS 
PanTiltH2OTemp

DESCRIPTION
Display temperature, water, humidity for PanTiltMicro

AUTHOR
Tom O'Reilly
*/
class PanTiltH2OTemp : public MicroH2OTemp
{
  public:
  PanTiltH2OTemp(const char *name, Widget parent, PanTiltMicro *micro,
		int period);
  
  ~PanTiltH2OTemp();
  
  virtual const char *className()
  {
    return "PanTiltH2OTemp";
  }

};


/*
CLASS 
PanTiltGf

DESCRIPTION
Display ground-fault status for PanTiltMicro

AUTHOR
Tom O'Reilly
*/
class PanTiltGf : public MicroGf
{
  public:
  PanTiltGf(const char *name, Widget parent, PanTiltMicro *ibc, int period);
  
  ~PanTiltGf();
  

  virtual const char *className()
  {
    return "PanTiltGf";
  }
};


/*
CLASS 
PanTiltMicroGui

DESCRIPTION
GUI for pan-tilt micro

AUTHOR
Tom O'Reilly
*/
class PanTiltMicroGui : public MbariMicroGui
{
  public:
  PanTiltMicroGui(const char *name, Widget parent, PanTiltMicro *micro, 
		 int period);

  ~PanTiltMicroGui();

  virtual const char *className()
  {
    return "PanTiltMicroGui";
  }
  
  virtual void updateGui(DM_Item handle = 0);

  protected:
  Boolean _initial;

  PanTiltMicro *_micro;
  AlarmedInt16Text *_externGf;
  AlarmedInt16Text *_localGf;
  AlarmedInt16Text *_temperature;
  AlarmedInt16Text *_stepperTemperature;
  AlarmedNat16Text *_humidity;
  AlarmText *_housingWater;
  GfSelfTest *_gfSelfTest;
  Widget _initialize[NControllers];
  Widget _reset[NControllers];
  
  DynamicLabel *_stepper[NControllers];
  DynamicLabel *_analog[NControllers];
  DynamicLabel *_cwSwitch[NControllers];
  DynamicLabel *_ccwSwitch[NControllers];
  AlarmText *_deltaAlarm[NControllers];
  AlarmText *_fault[NControllers];

  MBool _prevCwSwitch[NControllers];
  MBool _prevCcwSwitch[NControllers];
  
  Pixel _onForeground, _onBackground;
  Pixel _offForeground, _offBackground;
  
  int sendCmd(Widget w);
  
  private:
  static void cmdButtonCallback(Widget w, 
				XtPointer clientData, 
				XtPointer callData);

};



#endif
