#ifndef _ROVNAV_H
#define _ROVNAV_H

#include "DmGuiObject.h"

extern "C" {
#include "rovnav.h"
#include "rovnavDM.h"
};

class RovNav : public DmGuiObject {

public:

  RovNav(const char *name, Widget parent);
  ~RovNav();

  virtual const char *className() {
    return "RovNav";
  }

  virtual void updateGui(DM_Item handle = 0);

protected:

  DmEmptyObject *_dmTestCmd;
  DmBooleanObject *_dmTestResult;
  MBool _prevTestResult;
  Widget _testResult;

  DmBooleanObject *_dmVbFloodArm;
  MBool _prevVbFloodArm;
  Widget _armButton;

  DmEmptyObject *_dmVbFloodCmd;
  DmBooleanObject *_dmVbFloodStatus;
  MBool _prevVbFloodStatus;
  Widget _vbFloodButton;
  Widget _vbFloodStatus;

  DmEmptyObject *_dmGetVbLevel;
  DmFlt32Object *_dmVbLevel;
  Flt32 _prevVbLevel;
  Widget _vbLevel;

  DmEmptyObject *_dmGetBattery;
  DmFlt32Object *_dmBattery;
  Flt32 _prevBattery;
  Widget _battery;

  DmEmptyObject *_dmGetDepth;
  DmFlt64Object *_dmDepth;
  Flt64 _prevDepth;
  Widget _depth;

  DmStringObject *_dmCommand;
  char _prevCommand[ROVNAV_BUF_LEN];
  Widget _command;

  DmStringObject *_dmReply;
  char _prevReply[ROVNAV_BUF_LEN];
  Widget _reply;


private:

  static void vbFloodButtonCallback(Widget w, 
				    XtPointer clientData,
				    XtPointer callData);

  static void testButtonCallback(Widget w, 
				 XtPointer clientData,
				 XtPointer callData);

  static void vbButtonCallback(Widget w, 
			       XtPointer clientData,
			       XtPointer callData);

  static void batteryButtonCallback(Widget w, 
				    XtPointer clientData,
				    XtPointer callData);

  static void depthButtonCallback(Widget w, 
				  XtPointer clientData,
				  XtPointer callData);

  static void vbFloodArmCallback(Widget w,
				 XtPointer clientData,
				 XtPointer callData);

};

#endif
