#ifndef _DMSTRIPCHART_H
#define _DMSTRIPCHART_H
static char DmStripchart_h_id[] = "$Header: /usr/tiburon/unix/gui/tmacs/RCS/DmStripChart.h,v 1.1 1997/08/12 14:40:27 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 : 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
