/////////////////////////////////////////////////////////////////////////////
// Name:        validate.h
// Purpose:     wxValidator class
// Author:      Julian Smart
// Modified by:
// Created:     29/01/98
// RCS-ID:      $Id$
// Copyright:   (c) 1998 Julian Smart
// Licence:   	wxWindows license
/////////////////////////////////////////////////////////////////////////////

#ifndef __VALIDATEH__
#define __VALIDATEH__

#ifdef __GNUG__
#pragma interface "validate.h"
#endif

#include "wx/event.h"

class WXDLLEXPORT wxWindow;

/*
 A validator has up to three purposes:

 1) To validate the data in the window that's associated
    with the validator.
 2) To transfer data to and from the window.
 3) To filter input, using its role as a wxEvtHandler
    to intercept e.g. OnChar.

 Note that wxValidator and derived classes use reference counting.
 */

class WXDLLEXPORT wxValidator: public wxEvtHandler
{
DECLARE_DYNAMIC_CLASS(wxValidator)
public:
  wxValidator(void);
  ~wxValidator();

  // Make a clone of this validator (or return NULL) - currently necessary
  // if you're passing a reference to a validator.
  // Another possibility is to always pass a pointer to a new validator
  // (so the calling code can use a copy constructor of the relevant class).
  virtual wxValidator *Clone(void) const { return NULL; }
  inline bool Copy(const wxValidator& val) { m_validatorWindow = val.m_validatorWindow; return TRUE; }

  // Called when the value in the window must be validated.
  // This function can pop up an error message.
  virtual bool Validate(wxWindow *WXUNUSED(parent)) { return FALSE; };

  // Called to transfer data to the window
  virtual bool TransferToWindow(void) { return FALSE; }

  // Called to transfer data from the window
  virtual bool TransferFromWindow(void) { return FALSE; };

  // ACCESSORS
  inline wxWindow *GetWindow(void) const { return m_validatorWindow; }
  inline void SetWindow(wxWindow *win) { m_validatorWindow = win; }

protected:
    wxWindow *m_validatorWindow;
};

WXDLLEXPORT_DATA(extern const wxValidator) wxDefaultValidator;

#endif
    // __VALIDATEH__
