/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _ROVCOMPASS_H
#define _ROVCOMPASS_H
static char RovCompass_h_id[] = "$Header: /u/oreilly/rov/tmacs/RCS/RovCompass.h,v 1.2 1998/12/18 21:07:21 oreilly Exp $";

/*
$Log: RovCompass.h,v $
Revision 1.2  1998/12/18 21:07:21  oreilly
Added documentation

Revision 1.1  1997/11/20 08:23:11  oreilly
Initial revision

*/

#include <X11/IntrinsicP.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/CoreP.h>
#include <Vk/VkPopupMenu.h>
#include "DmGuiObject.h"
#include "CompassFace.h"
#include "State.h"
#include "DynamicLabel.h"
#include "DmInputDetector.h"
#include "TetherTurns.h"

#define NoPrevHeading -99999.
#define nHistoryIntervals 120



/*
CLASS 
RovCompass

DESCRIPTION
RovCompass displays heading value, umbilical turns, auto setpoint, heading
history, etc. Contains a CompassFace object.

AUTHOR
Tom O'Reilly
*/
class RovCompass : public DmGuiObject
{
  public:
  
  RovCompass(const char *name, Widget parent, int period,
		  int historyInterval            // Seconds
		  );

  ~RovCompass() 
  {
    if (_autoOnOff)
      delete _autoOnOff;
  }
  
  virtual const char *className()
  {
    return "RovCompass";
  }
  
  virtual void updateGui(DM_Item handle = 0);
  virtual void updateFromPeer(DmGuiObject *peer, void *clientData);

  
  protected:

  void resetTurns();
  static void resetCallback(Widget w, XtPointer clientData,
			    XtPointer callData);
  
  CompassFace *_face;
  DynamicLabel *_headingText;
  Widget _turnsText;
  Flt32 _prevHeading;
  int _prevTurns;
  Flt32 _turnsSetpoint;
  DmInputDetector *_autoOnOff;
  
  DmAttitudeObject *_dmAttitude;
  DmFlt32Object *_dmAutoHeading;
  DmBooleanObject *_dmAutoOnOff;
  DmInt16Object *_dmTurns;
  DmFlt32Object *_dmTurnsSetpoint;
  
  MBool _dmInDegrees;

  Boolean _saveHistory;
  int _historySampleInterval;
  MBool _autoHeadingOn;
  static VkMenuDesc _menuPane[];
  
  time_t _sampleTime;

  TetherTurnsDialog *_turnsDialog;
  
};


#endif
