#ifndef _DMTEXT_H
#define _DMTEXT_H

#include "DmGuiObject.h"
#include "TextField.h"

/* DmText displays value of a Data Manager item, and allows
user to modify it.
*/
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;
  
  protected:
  void okayCallback(VkCallbackObject *obj,
		    void *clientData,
		    void *callData);
};


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 : 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 : 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 : 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 : 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
