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

#ifndef ____POTENTIOMETREVERTICAL____
#define ____POTENTIOMETREVERTICAL____

#include <stdio.h>

#include "Controle.h"

class Couleur;

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

class PotentiometreVertical : public Controle {
  protected :
    int taille;                       ///< Taille d'affichage.
    float min;                        ///< Valeur minimale.
    float max;                        ///< Valeur maximale.
    float *v;                         ///< Variable geree si variable de type float.
    float savev;                      ///< Sauvegarde de la variable geree (pour annulation) si variable de type float.
    int *d;                           ///< Variable geree si variable de type int.
    int saved;                        ///< Sauvegarde de la variable geree (pour annulation) si variable de type int.
    int type;                         ///< Type de la variable gere (0: inconnu, 1: float, 2: int).
	  int aff;                          ///< Non documente.
    char titre[512];                  ///< Titre.
    Couleur *coulTexte;               ///< Couleur du texte.
    Couleur *coulTexteBouton;         ///< Couleur du texte du bouton.
    Couleur *coulBouton;              ///< Couleur du bouton.
    float delta;                      ///< Valeur d'increment.

  public :

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

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param v La valeur geree par le PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,float *v);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param d La valeur geree par le PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,int *d);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param v La valeur geree par le PotentiometreVertical.
/// @param delta Le delta du PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,float *v,float delta);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param d La valeur geree par le PotentiometreVertical.
/// @param delta Le delta du PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,int *d,int delta);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param aff Non documente.
/// @param v La valeur geree par le PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,int aff,float *v);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param aff Non documente.
/// @param d La valeur geree par le PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,int aff,int *d);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param aff Non documente.
/// @param v La valeur geree par le PotentiometreVertical.
/// @param delta Le delta du PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,int aff,float *v,float delta);

///
/// Constructeur avec parametres d'initialisation.
///
/// @param px La position en x du PotentiometreVertical.
/// @param py La position en y du PotentiometreVertical.
/// @param taille La taille du PotentiometreVertical.
/// @param coul La couleur de base du PotentiometreVertical.
/// @param min La valeur minimale du PotentiometreVertical.
/// @param max La valeur maximale du PotentiometreVertical.
/// @param coulB La couleur de dessin.
/// @param titre La chaine de caracteres du PotentiometreVertical.
/// @param coulT La couleur de dessin du texte.
/// @param coulTB La couleur de dessin du PotentiometreVertical.
/// @param aff Non documente.
/// @param d La valeur geree par le PotentiometreVertical.
/// @param delta Le delta du PotentiometreVertical.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    PotentiometreVertical(int px,int py,int taille,Couleur *coul,float min,float max,Couleur *coulB,const char *titre,Couleur *coulT,Couleur *coulTB,int aff,int *d,int delta);

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

///
/// Affectation d'une valeur.
///
/// @param val La valeur a affecter.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    void setValue(int val);

///
/// Affectation d'une valeur.
///
/// @param val La valeur a affecter.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    void setValue(float val);

///
/// Lecture de la position de l'ascenceur.
///
/// @return La position de l'ascenceur.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    int getPositionAscenceur(void);

///
/// Affectation d'une variable a gerer.
///
/// @param var La variable a affecter.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    void setAdresseVariable(float *var);

///
/// Affectation d'une variable a gerer.
///
/// @param var La variable a affecter.
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    void setAdresseVariable(int *var);

///
/// Dessin du PotentiometreVertical.
///
/// @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 PotentiometreVertical.
///
/// @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 PotentiometreVertical.
///
/// @author Nicolas Janey
/// @author nicolas.janey@univ-fcomte.fr
/// @version 1.0, 25/02/10
///
    virtual void annule(void);

///
/// Selection du PotentiometreVertical 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 PotentiometreVertical 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);

///
/// Sauvegarde du PotentiometreVertical 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
