///
/// \file TextField.h
/// Classe mere du composant TextField.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

#ifndef ____TEXTFIELD____
#define ____TEXTFIELD____

#include <stdio.h>

#include "Controle.h"

class Couleur;

///
/// \class TextField
/// Classe mere du composant TextField.
/// 
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 01/01/10
///

class TextField : public Controle {

  protected :
    char str[1000];                   ///< La chaine de caracteres du TextField.
    char *save;                       ///< La chaine de caracteres de sauvegarde pour annulation.
    int dx;                           ///< La position en x de la zone de daisie par rapport à la position globale du TextField.
    int taille;                       ///< La taille de la zone de saisie.
    int pos;                          ///< La position du curseur.
    int ins;                          ///< Le booleen definissant l'etat mode insertion/mode ecrasement.
    char titre[512];                  ///< La chaine de caracteres titre du TextField.
    Couleur *coulTexte;               ///< La couleur de dessin du texte.
    Couleur *coulBox;                 ///< La couleur de dessin de l'encadrement.
    Couleur *coulBackGround;          ///< La couleur de dessin d'avant-plan.
    Couleur *coulForeGround;          ///< La couleur de dessin d'arriere-plan.

  public :

///
/// Constructeur basique.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    TextField(void);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du TextField.
/// @param py La position en y du TextField.
/// @param dx La position en x de la zone de daisie par rapport à la position globale du TextField.
/// @param taille La taille de la zone de saisie.
/// @param coul La couleur de base du TextField.
/// @param coulB La couleur de dessin de l'encadrement.
/// @param titre La chaine de caracteres titre du TextField.
/// @param coulT La couleur de dessin du texte.
/// @param coulBG La couleur de dessin d'avant-plan.
/// @param coulFG La couleur de dessin d'arriere-plan.
/// @param s La chaine de carateres d'initialisation de la zone de saisie.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    TextField(int px,int py,int dx,int taille,Couleur *coul,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulBG,Couleur *coulFG,char *s);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du TextField.
/// @param py La position en y du TextField.
/// @param dx La position en x de la zone de daisie par rapport à la position globale du TextField.
/// @param taille La taille de la zone de saisie.
/// @param coul La couleur de base du TextField.
/// @param coulB La couleur de dessin de l'encadrement.
/// @param titre La chaine de caracteres titre du TextField.
/// @param coulT La couleur de dessin du texte.
/// @param coulBG La couleur de dessin d'avant-plan.
/// @param coulFG La couleur de dessin d'arriere-plan.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    TextField(int px,int py,int dx,int taille,Couleur *coul,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulBG,Couleur *coulFG);

///
/// Destructeur.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    ~TextField(void);

///
/// Dessin du TextField.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual void dessiner(void);

///
/// Sauvegarde des valeurs actuelles liees au TextField.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual void sauve(void);

///
/// Restoration des valeurs sauvegardees liees au TextField.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual void annule(void);

///
/// Initialisation du TextField.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual void initialise(void);

///
/// Selection du TextField lie a la position (x,y).
///
/// @param x La coordonnee x.
/// @param y La coordonnee y.
/// @return Le booleen indiquant que la selection a bien ete geree.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual int selection(int x,int y);

///
/// Modification du TextField lie a la position (x,y) et a un vecteur (dx,dy).
///
/// @param x La coordonnee x.
/// @param y La coordonnee y.
/// @param dx La valeur dx.
/// @param dy La valeur dy.
/// @return Le booleen indiquant que la selection a bien ete geree.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual int gereModification(int x,int y,int dx,int dy);

///
/// Gestion clavier du TextField lie a la position (x,y).
///
/// @param c Le caractere frappe au clavier.
/// @param x La coordonnee x.
/// @param y La coordonnee y.
/// @return Le booleen indiquant que la clavier a bien ete gere.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual int gereKeyboard(unsigned char c,int x,int y);

///
/// Gestion du clavier special du TextField lie a la position (x,y).
///
/// @param c Le code du caractere frappe au clavier.
/// @param x La coordonnee x.
/// @param y La coordonnee y.
/// @return Le booleen indiquant que la clavier a bien ete gere.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual int gereSpecial(int c,int x,int y);

///
/// Configuration du texte du TextField.
///
/// @param text La chaine de carateres a affecter.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    void setText(char *text);

///
/// Lecture du texte du TextField.
///
/// @param text La chaine de carateres ou sauvegarder le texte lu.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    void getText(char *text);

///
/// Sauvegarde du TextField dans un fichier.
///
/// @param f Le fichier de sauvegarde.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual void sauve(FILE *f);
};

#endif
