/////////////////////////////////////////////////////////////////////////////
// Name:        textctrl.h
// Purpose:
// Author:      Robert Roebling
// Created:     01/02/97
// Id:
// Copyright:   (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
// Licence:   	wxWindows licence
/////////////////////////////////////////////////////////////////////////////


#ifndef __GTKTEXTCTRLH__
#define __GTKTEXTCTRLH__

#ifdef __GNUG__
#pragma interface
#endif

#include "wx/defs.h"
#include "wx/object.h"
#include "wx/string.h"
#include "wx/control.h"

#if USE_IOSTREAMH
#include <iostream.h>
#else
#include <iostream>
#endif

//-----------------------------------------------------------------------------
// classes
//-----------------------------------------------------------------------------

class wxTextCtrl;

//-----------------------------------------------------------------------------
// global data
//-----------------------------------------------------------------------------

extern const char *wxTextCtrlNameStr;

//-----------------------------------------------------------------------------
//  wxTextCtrl
//-----------------------------------------------------------------------------

class wxTextCtrl: public wxControl, public streambuf
{
  DECLARE_DYNAMIC_CLASS(wxTextCtrl);

  public:
  
    wxTextCtrl(void);
    wxTextCtrl( wxWindow *parent, wxWindowID id, const wxString &value = "", 
      const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
      int style = 0, const wxString &name = wxTextCtrlNameStr );
    bool Create( wxWindow *parent, wxWindowID id, const wxString &value = "",
      const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize,
      int style = 0, const wxString &name = wxTextCtrlNameStr );
    wxString GetValue(void) const;
    void SetValue( const wxString &value );
    void WriteText( const wxString &text );
    
    bool LoadFile( const wxString &file );
    bool SaveFile( const wxString &file );
    bool IsModified(void);
    void DiscardEdits(void);
/*
    wxString GetLineText( long lineNo ) const;
    void OnDropFiles( wxDropFilesEvent &event );
    long PositionToXY( long pos, long *x, long *y ) const;
    long XYToPosition( long x, long y );
    int GetNumberOfLines(void);
*/
    virtual void SetInsertionPoint( long pos );
    virtual void SetInsertionPointEnd(void);
    virtual void SetEditable( bool editable );
    virtual void SetSelection( long from, long to );
    void ShowPosition( long pos );
    virtual long GetInsertionPoint(void) const;
    virtual long GetLastPosition(void) const;
    virtual void Remove( long from, long to );
    virtual void Replace( long from, long to, const wxString &value );
    void Cut(void);
    void Copy(void);
    void Paste(void);
    void Delete(void);
    
    void OnChar( wxKeyEvent &event );
    
    int overflow(int i);
    int sync(void);
    int underflow(void);

    wxTextCtrl& operator<<(const wxString& s);
    wxTextCtrl& operator<<(int i);
    wxTextCtrl& operator<<(long i);
    wxTextCtrl& operator<<(float f);
    wxTextCtrl& operator<<(double d);
    wxTextCtrl& operator<<(const char c);
    
  public:
  
    bool  m_modified;

  DECLARE_EVENT_TABLE()
    
};

#endif // __GTKTEXTCTRLH__


