/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _MICRO_H
#define _MICRO_H

#include <Vk/VkComponent.h>
#include "VehicleComponent.h"
#include "MicroDm.h"
#include "MicroGui.h"

/*
CLASS 
Micro

DESCRIPTION
Contains information on vehicle micro, methods to generate
GUIs 

AUTHOR
Tom O'Reilly
*/
class Micro : public VehicleComponent
{
  public:
  Micro(const char *name, const char *dmPrefix);
  ~Micro();
  
  virtual const char *className()
  {
    return "Micro";
  }

  ///////////////////////////////////////////////////////////////////
  // Return DataManager name prefix
  const char *dmPrefix()
  {
    return _dmPrefix;
  }
  
  virtual MBool isMicro()
  {
    return TRUE;
  }

  ///////////////////////////////////////////////////////////////////
  // Container for all common Micro DmObjects
  MicroDm *microDm;

  ///////////////////////////////////////////////////////////////////
  // Construct and return pointer to detailed MicroGui
  virtual MicroGui *gui(Widget parent, int period);

  ///////////////////////////////////////////////////////////////////
  // Construct and return pointer to MicroH2OTemp GUI
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period);

  ///////////////////////////////////////////////////////////////////
  // Construct and return pointer to MicroGf GUI
  virtual MicroGf *gf(Widget parent, int period);

  ///////////////////////////////////////////////////////////////////
  // Construct and return pointer to MicroGf5v GUI
  virtual MicroGf5v *gf5v(Widget parent, int period);
  
  protected:
  char *_dmPrefix;
};


/*
CLASS 
Ibc

DESCRIPTION
Contains information on vehicle IBC, methods to generate
GUIs 

AUTHOR
Tom O'Reilly
*/
class Ibc : public Micro
{
  public:
  Ibc(const char *name, const char *dmPrefix);
  ~Ibc();
  
  virtual const char *className()
  {
    return "Ibc";
  }

  virtual Type type()
  {
    return IbcType;
  }
  
  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period);
  virtual MicroGf5v *gf5v(Widget parent, int period);
  IbcDm *ibcDm;

  protected:
  char *_dmPrefix;
};


/*
CLASS 
Dcon

DESCRIPTION
Contains information on vehicle DCON, methods to generate
GUIs 

AUTHOR
Tom O'Reilly
*/
class Dcon : public Ibc
{
  public:
  Dcon(const char *name, const char *dmPrefix);
  ~Dcon();
  
  virtual const char *className()
  {
    return "Dcon";
  }

  virtual Type type()
  {
    return DconType;
  }

  virtual MicroGui *gui(Widget parent, int period);
  virtual MicroH2OTemp *h2OTemp(Widget parent, int period);
};


#endif
