/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _PDUMICRO_H
#define _PDUMICRO_H

#include "Micro.h"
#include "PduDm.h"
#include "GfSelfTest.h"

/*
CLASS 
PduMicro

DESCRIPTION
Describes PDU micro, has methods for generating GUIs

AUTHOR
Tom O'Reilly
*/
class PduMicro : public Micro
{
  public:
  PduMicro(const char *name, const char *dmPrefix);
  ~PduMicro();
  
  virtual const char *className()
  {
    return "PduMicro";
  }
  
  virtual Type type()
  {
    return PduMicroType;
  }
 
  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period); 
  virtual MicroGf *gf(Widget parent, int period); 

  PduDm *pduDm;

  protected:
};


class PduH2OTemp : public MicroH2OTemp
{
  public:
  PduH2OTemp(const char *name, Widget parent, PduMicro *micro,
		int period);
  
  ~PduH2OTemp();
  
  virtual const char *className()
  {
    return "PduH2OTemp";
  }
};


class PduGf : public MicroGf
{
  public:
  PduGf(const char *name, Widget parent, PduMicro *micro, int period);
  
  ~PduGf();
  

  virtual const char *className()
  {
    return "PduGf";
  }
};


class PduMicroGui : public MbariMicroGui
{
  public:
  PduMicroGui(const char *name, Widget parent, PduMicro *micro, 
		 int period);

  ~PduMicroGui();

  virtual const char *className()
  {
    return "PduMicroGui";
  }
  
  virtual void updateGui(DM_Item handle = 0);

  protected:
  AlarmedInt16Text *_temp;
  AlarmedInt16Text *_externGf;
  AlarmedFlt32Text *_wattage;
  AlarmedInt16Text *_voltage;
  AlarmedInt16Text *_transformerTemp;
  AlarmedInt16Text *_phase[3];
  AlarmText *_lowVoltage;
  AlarmText *_phaseShift;
  GfSelfTest *_gfSelfTest;
};



#endif
