/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _BENTHICBIOGUI_H
#define _BENTHICBIOGUI_H
#include <Vk/VkOptionMenu.h>
#include "DmGuiObject.h"
#include "DynamicLabel.h"
#include "PowerSwitchGui.h"
#include "MomentaryPowerSwitch.h"
#include "ValveControl.h"
#include "ValveSwitchMap.h"
#include "ValveSelector.h"
#include "BenthicBioDm.h"
#include "ValveSwitchMap.h"
#include "SwitchDm.h"
#include "HydraulicSelect.h"
#include "SuctionSampler.h"


/*
CLASS 
ValveFunctions

DESCRIPTION
Manages ValveSelector for BenthicBioGui.

AUTHOR
Tom O'Reilly
*/
class ValveFunctions : public DmGuiObject
{
  public:

  ValveFunctions(const char *name, Widget parent, BenthicBioDm *dmItems);
  ~ValveFunctions();
  
  virtual const char *className()
  {
    return "ValveFunctions";
  }
  
  virtual void updateGui(DM_Item handle = NULL);

  ValveSelector *valves;

  int nValves() {
    return _nValves;
  }

 protected:
  int _nValves;

};


class BenthicBioGui;


/*
CLASS 
BenthicBioPower

DESCRIPTION
Contains BenthicBiology toolsled PowerSwitchGui objects

AUTHOR
Tom O'Reilly
*/
class BenthicBioPower : public VkComponent
{
  public:

  BenthicBioPower(const char *name, Widget parent, 
		  BenthicBioGui *benthicBioGui);

  ~BenthicBioPower();
  
  virtual const char *className()
  {
    return "BenthicBioPower";
  }

  PowerSwitchGui *pump;
  PowerSwitchGui *incandLight;
  PowerSwitchGui *manipulator;
  PowerSwitchGui *indexSensor;
  PowerSwitchGui *pencilCamera;
  PowerSwitchGui *valvePack;

  protected:
  
  // Called when power switch status changes
  void statusCallback(VkCallbackObject *obj,
		      void *clientData,
		      void *callData);

  BenthicBioGui *_benthicBioGui;
};


/*
CLASS 
BenthicBioGui

DESCRIPTION
Controls/display for BenthicBiology toolsled

AUTHOR
Tom O'Reilly
*/
class BenthicBioGui : public VkComponent
{
  public:

  BenthicBioGui(const char *name, Widget parent);
  ~BenthicBioGui();

  virtual const char *className()
  {
    return "BenthicBioGui";
  }

  BenthicBioPower *power;
  ValveFunctions *valveFunctions;
  SuctionSampler *suctionSampler;
  HydraulicSelect *hydraulicSelect;
  
  protected:

  ValveControl **_valveControl;
  ValveSwitchMap *_switchMap;
  BenthicBioDm *_dmItems;
};



#endif
