/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _VALVESELECTOR_H
#define _VALVESELECTOR_H

#include <Vk/VkOptionMenu.h>
#include "DmGuiObject.h"
#include "View.h"
#include "ValveControl.h"
#include "DmBooleanSwitch.h"

/*
CLASS 
ValveSelector

DESCRIPTION
Manage a group of ValveControl objects; user specifies which 
ValveControl is to be displayed.

AUTHOR
Tom O'Reilly
*/
class ValveSelector : public VkComponent
{
  public:
  
  ValveSelector(const char *name, Widget parent, 
		unsigned nValves,
		unsigned firstValveNo,
		const char *dmPrefix,
		Boolean hasEnable);

  ~ValveSelector();
  
  virtual const char *className()
  { 
    return "ValveSelector";
  }

  ValveControl **valve;

  unsigned nValves()
  {
    return _nValves;
  }

  ////////////////////////////////////////////////////////////////////
  // Disable selection of specified valve (0-based index)
  // Return 0 on success, -1 on error
  int disableValve(int valveNo);


  ////////////////////////////////////////////////////////////////////
  // Enable selection of specified valve (0-based index)
  // Return 0 on success, -1 on error
  int enableValve(int valveNo);

  protected:

  unsigned _nValves;
  VkOptionMenu *_menu;
  View **_valveView;
  DmBooleanSwitch *_enable;

  void displaySelectedValve(void);

  ////////////////////////////////////////////////////////////////////
  // Construct name of specified valve (0-based index)
  void valveName(int valveNo, char *name);

  private:

  static void callback(Widget w, 
		       XtPointer clientData,
		       XtPointer callData);
};



#endif
