/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _DMSTRIPCHART_H
#define _DMSTRIPCHART_H
static char DmStripchart_h_id[] = "$Header: /u/oreilly/rov/tmacs/RCS/DmStripChart.h,v 1.2 1998/12/18 21:07:21 oreilly Exp $";


#include <X11/Intrinsic.h>
#include <Xm/Xm.h>
#include <Xm/XrtGraph.h>
#undef CANCEL
#undef OK
#undef APPLY
#undef NONE
#include <Vk/VkSimpleWindow.h>
#include <Vk/VkErrorDialog.h>
#include "DmGuiObject.h"
#include "CircularQueue.h"
#include "State.h"

#define MissingValue XRT_HUGE_VAL

// Prototypes
DmObject *createDmObject(const char *itemName, char *errorBuf);
Errno readDmObject(DmObject *dmObject, Flt64 *value, DM_Time *t);

/*
CLASS 
DmStripChart

DESCRIPTION
Display time-history of specific DM Item's value

AUTHOR
Tom O'Reilly
*/
class DmStripChart : public DmGuiObject
{
  public:
  DmStripChart(const char *name, Widget parent, 
	       const char *dmItemName,     
	       unsigned historyMinutes,
	       int maxDataSets = 1);   


  ~DmStripChart();
  
  
  const char *className()
  {
    return "DmStripChart";
  }
  
  virtual void updateGui(DM_Item handle = 0);
  
  protected:

  struct Point
  {
    time_t time;
    Flt64 value;
  };

  virtual void createDataArrays();
  
  void shiftYAxis(Point *point,
		  float *axisMin, float *axisMax, float axisRange);
  
  void rescaleYAxis(unsigned newAxisRange);
  
  Widget _graph;
  
  unsigned _yAxisRange;
  DmObject *_dmObject;
  
  float _yAxisMin, _yAxisMax;
  float _yAxisShiftFactor;

  // Array of points is a circular queue
  CircularQueue<Point> *_points;  

  XrtData *_xrtData;

  char *_dataColor;
  
  static XtResource _resources[];

  void showControls();

  void autoYScale();
  
  XrtDataStyle _dataStyle;
  
  private:
  static void buttonEventHandler(Widget w, 
				 XtPointer clientData, XEvent *event);
};





#endif
