/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _MIDWATERGUI_H
#define _MIDWATERGUI_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 "MidwaterDm.h"
#include "ValveSwitchMap.h"
#include "SwitchDm.h"
#include "HydraulicSelect.h"
#include "SuctionSampler.h"

// Valves per swingarm
#define NValvesPerSwingArm 4


/*
CLASS 
SwingArm

DESCRIPTION
GUI for MidwaterGui swing-arm

AUTHOR
Tom O'Reilly
*/
class SwingArm : public DmGuiObject
{
  public:

  enum Side
  {
    PortSide, StbdSide
  };
  
  SwingArm(const char *name, Widget parent, Side side, MidwaterDm *dmItems,
	   const char *platformName);

  ~SwingArm();
  
  virtual const char *className()
  {
    return "SwingArm";
  }
  
  virtual void updateGui(DM_Item handle = NULL);

  ValveSelector *valves;


  protected:

  DynamicLabel *_position;
  MomentaryPowerSwitch *_deploy;
  MomentaryPowerSwitch *_stow;

  DmFlt32Object *_dmPosition;
  
};


/*
CLASS 
SwingArms

DESCRIPTION
Manages MidwaterGUI SwingArm objects

AUTHOR
Tom O'Reilly
*/
class SwingArms : public VkComponent
{
  public:
  
  SwingArms(const char *name, Widget parent, MidwaterDm *dmItems,
	    const char *platformName);

  ~SwingArms();
  
  virtual const char *className()
  {
    return "SwingArms";
  }
  
  SwingArm *portSwingArm;
  SwingArm *stbdSwingArm;
};

class MidwaterGui;

/*
CLASS 
MidwaterPower

DESCRIPTION
Manages PowerSwitchGui ojects for Midwater sled; used by MidwaterGui

AUTHOR
Tom O'Reilly
*/

class MidwaterPower : public VkComponent
{
  public:

  MidwaterPower(const char *name, Widget parent, MidwaterGui *midwaterGui,
		const char *platformName);

  ~MidwaterPower();
  
  virtual const char *className()
  {
    return "MidwaterPower";
  }

  PowerSwitchGui *pump;
  PowerSwitchGui *incandLight;
  PowerSwitchGui *arm;
  PowerSwitchGui *armPositionSensor;
  PowerSwitchGui *indexSensor;
  PowerSwitchGui *pencilCamera;
  PowerSwitchGui *acm;

  protected:
  
  // Called when power switch status changes
  void statusCallback(VkCallbackObject *obj,
		      void *clientData,
		      void *callData);

  MidwaterGui *_midwaterGui;
};


/*
CLASS 
MidwaterGui

DESCRIPTION
GUI for Midwater Biology Toolsled

AUTHOR
Tom O'Reilly
*/
class MidwaterGui : public VkComponent
{
  public:

  MidwaterGui(const char *name, Widget parent, const char *platformName);
  ~MidwaterGui();

  virtual const char *className()
  {
    return "MidwaterGui";
  }

  MidwaterPower *power;
  SwingArms *swingArms;
  SuctionSampler *suctionSampler;
  HydraulicSelect *hydraulicSelect;
  
  protected:

  ValveControl **_valveControl;
  ValveSwitchMap *_switchMap;
  MidwaterDm *_dmItems;
};



#endif
