/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _DMTEXT_H
#define _DMTEXT_H

#include "DmGuiObject.h"
#include "TextField.h"

/*
CLASS 
DmText

DESCRIPTION
Displays value of a DmObject, and allows user to modify it.

AUTHOR
Tom O'Reilly
*/
class DmText : public DmGuiObject
{
  public:
  DmText(const char *name, Widget parent);
  ~DmText();  

  virtual const char *className()
  {
    return "DmText";
  }

  virtual Errno writeValue() = 0;
  virtual Boolean validInput(char *errorMsg) = 0;

  TextField *text;
  
  void okayCallback();

  protected:

};


/*
CLASS 
DmStringText

DESCRIPTION
Displays value of a DmStringObject, and allows user to modify it.

AUTHOR
Tom O'Reilly
*/
class DmStringText : public DmText
{
  public:
  DmStringText(const char *name, Widget parent, 
	       const char *dmItemName, 
	       unsigned length,                 // String length in bytes
	       int period);

  ~DmStringText();
  
  virtual const char *className()
  {
    return "DmStringText";
  }

  virtual void updateGui(DM_Item handle = 0);
  virtual Errno writeValue();
  virtual Boolean validInput(char *errorMsg);
  
  protected:

  char *_valueBuf;
  
  DmStringObject *_dmObject;
};


/*
CLASS 
DmInt16Text

DESCRIPTION
Displays value of a DmInt16Object, and allows user to modify it.

AUTHOR
Tom O'Reilly
*/
class DmInt16Text : public DmText
{
  public:
  DmInt16Text(const char *name, Widget parent, 
	      const char *dmItemName, 
	      int period);

  ~DmInt16Text();
  
  virtual const char *className()
  {
    return "DmInt16Text";
  }

  virtual void updateGui(DM_Item handle = 0);
  virtual Errno writeValue();
  virtual Boolean validInput(char *errorMsg);

  protected:
  DmInt16Object *_dmObject;
  Int16 _prevValue;
  
};


/*
CLASS 
DmNat16Text

DESCRIPTION
Displays value of a DmNat16Object, and allows user to modify it.

AUTHOR
Tom O'Reilly
*/
class DmNat16Text : public DmText
{
  public:
  DmNat16Text(const char *name, Widget parent, 
	      const char *dmItemName, 
	      int period);

  ~DmNat16Text();
  
  virtual const char *className()
  {
    return "DmNat16Text";
  }

  virtual void updateGui(DM_Item handle = 0);
  virtual Errno writeValue();
  virtual Boolean validInput(char *errorMsg);

  protected:
  DmNat16Object *_dmObject;
  Nat16 _prevValue;
  
};


/*
CLASS 
DmFlt32Text

DESCRIPTION
Displays value of a DmFlt32Object, and allows user to modify it.

AUTHOR
Tom O'Reilly
*/
class DmFlt32Text : public DmText
{
  public:
  DmFlt32Text(const char *name, Widget parent, 
	      const char *dmItemName, 
	      int period);

  ~DmFlt32Text();
  
  virtual const char *className()
  {
    return "DmFlt32Text";
  }

  virtual void updateGui(DM_Item handle = 0);
  virtual Errno writeValue();
  virtual Boolean validInput(char *errorMsg);

  protected:
  DmFlt32Object *_dmObject;
  Flt32 _prevValue;
  
};


/*
CLASS 
DmFlt64Text

DESCRIPTION
Displays value of a DmFlt64Object, and allows user to modify it.

AUTHOR
Tom O'Reilly
*/
class DmFlt64Text : public DmText
{
  public:
  DmFlt64Text(const char *name, Widget parent, 
	      const char *dmItemName, 
	      int period);

  ~DmFlt64Text();
  
  virtual const char *className()
  {
    return "DmFlt64Text";
  }

  virtual void updateGui(DM_Item handle = 0);
  virtual Errno writeValue();
  virtual Boolean validInput(char *errorMsg);

  protected:
  DmFlt64Object *_dmObject;
  Flt64 _prevValue;
};




#endif
