/************************************************************************/
/* Copyright 1998 MBARI							*/
/************************************************************************/
#ifndef _TEXTFIELD_H
#define _TEXTFIELD_H

#include "Vk/VkComponent.h"

/*
CLASS 
TextField

DESCRIPTION
TextField provides a TextField widget, with "accept" and "cancel" buttons.

AUTHOR
Tom O'Reilly
*/
class TextField : public VkComponent
{
  public:

  enum
  {
    Accept, Cancel

  } Action;
  
  TextField(const char *name, Widget parent, Boolean editable = True);
  TextField(const char *name);
  
  ~TextField();
  
  virtual const char *className()
  {
    return "TextField";
  }

  // Set Text widget contents
  virtual void set(char *str);

  // Get Text widget contents
  const char *get();

  // Set number of columns in Text widget
  void setColumns(int nColumns);

  // Show accept/cancel buttons
  void showButtons();

  // Hide accept/cancel buttons
  void hideButtons();
  
  static const char *const acceptCallback;
  static const Boolean NotEditable;
  
  protected:

  void makeBackup(const char *string);

  Widget _text;
  Widget _ok;
  Widget _cancel;
  Widget _buttonMgr;

  // Keep backup of previous string, restore on 'cancel'
  char *_prevString;

  void accept();
  void cancel();
  
  static void typingCallback(Widget w,
			     XtPointer clientData, XtPointer callData);

  static void okCallback(Widget w, 
			 XtPointer clientData, XtPointer callData);

  static void cancelCallback(Widget w,
			     XtPointer clientData, XtPointer callData);
};



#endif
