/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _ADVLOGGER_H
#define _ADVLOGGER_H

#include "DmGuiObject.h"
#include "TextField.h"

/*
CLASS 
AdvLogger

DESCRIPTION
Controls for logging Acoustic Doppler Velocimeter data

AUTHOR
Tom O'Reilly
*/
class AdvLogger : public DmGuiObject
{
  public:
  
  AdvLogger(const char *name, Widget parent, int period);
  ~AdvLogger();
  
  virtual const char *className()
  {
    return "AdvLogger";
  }
  

  virtual void updateGui(DM_Item handle = 0);
  virtual int startConsume();
  
 
  protected:

  Widget _start;
  Widget _stop;
  Widget _reset;
  TextField *_speed;
  TextField *_direction;
  TextField *_grndSpeed;
  TextField *_grndDirection;
  TextField *_elapsedTime;
  TextField *_distance;
  TextField *_totalDistance;
  Widget _waterMgr;
  Widget _grndMgr;
  Widget _logToFile;
  
  DmFlt32Object *_dmSpeed;
  DmFlt32Object *_dmDirection;
  DmBooleanObject *_dmValid;
  DmFlt32Object *_dmGrndSpeed;
  DmFlt32Object *_dmGrndDirection;
  DmBooleanObject *_dmGrndValid;

  DmFlt32Object *_dmDistance;
  DmFlt32Object *_dmTotalDistance;

  DmBooleanObject *_dmStart;
  DmBooleanObject *_dmStop;
  DmBooleanObject *_dmStopLogToFile;

  MBool _prevLogging;
  MBool _prevLoggingToFile;
  
  int start();
  int stop();
  int reset();

  // Flip value of Boolean data manager item
  int toggleItem(DmBooleanObject *dmObj, MBool value);

  // Switch file logging on and off
  void toggleFileLogging(Boolean log);

  // Check that file log is running
  int checkFileLogger();
  
  private:
  
  static void startStopCallback(Widget w, 
				XtPointer clientData,
				XtPointer callData);

  static void logToFileCallback(Widget w, 
				XtPointer clientData,
				XtPointer callData);
  
};

#endif

