/****************************************************************************/
/* Copyright (c) 2000 MBARI                                                 */
/* MBARI Proprietary Information. All rights reserved.                      */
/****************************************************************************/
/* Summary  :                                                               */
/* Filename : VerticalModeAttribute.cc                                      */
/* Author   :                                                               */
/* Project  :                                                               */
/* Version  : 1.0                                                           */
/* Created  : 02/07/2000                                                    */
/* Modified :                                                               */
/* Archived :                                                               */
/****************************************************************************/
/* Modification History:                                                    */
/****************************************************************************/
#include "VerticalModeAttribute.h"
#include "StringConverter.h"

#define NoneMnem "none"
#define ElevatorMnem "elevator"
#define DepthMnem "depth"
#define PitchMnem "pitch"

VerticalModeAttribute::VerticalModeAttribute(const char *name, 
					     const char *description,
					     DynamicControlIF::VerticalMode 
					     *valueAddress)
  : Attribute(name, description)
{
  _valueAddress = valueAddress;
}


VerticalModeAttribute::
VerticalModeAttribute(const char *name, const char *description,
			DynamicControlIF::VerticalMode *valueAddress,
			DynamicControlIF::VerticalMode defaultValue)
  : Attribute(name, description)
{
  _valueAddress = valueAddress;
  *_valueAddress = defaultValue;
  _hasDefault = True;
}


VerticalModeAttribute::~VerticalModeAttribute()
{
}


void VerticalModeAttribute::setValue(const char *stringRep)
{
     if( !strcmp(stringRep, NoneMnem))
	  *_valueAddress = DynamicControlIF::VmInitial;
     else if (!strcmp(stringRep, ElevatorMnem)) 
	  *_valueAddress = DynamicControlIF::Elevator;
     else if (!strcmp(stringRep, PitchMnem))
	  *_valueAddress = DynamicControlIF::Pitch;
     else if (!strcmp(stringRep, DepthMnem))
	  *_valueAddress = DynamicControlIF::Depth;
     else
	  throw StringConverter::Error("Bad vertical mode");
}


const char *VerticalModeAttribute::valueString()
{
  if (!valueHasBeenSet() && !hasDefault())
    return "";

  switch (*_valueAddress) {

  case DynamicControlIF::VmInitial:
       return NoneMnem;
       break;

  case DynamicControlIF::Elevator:
       return ElevatorMnem;
       break;
       
  case DynamicControlIF::Depth:
       return DepthMnem;
       break;
       
  case DynamicControlIF::Pitch:
       return PitchMnem;
       break;
       
  default:
       return "Unknown!";
  }
}
