/* 
 * File:   Medidor.h
 * Author: maximus
 *
 * Created on 25 November 2008, 11:02 PM
 */

#ifndef _MEDIDOR_H
#define	_MEDIDOR_H
#include "common.h"
#include "loaders.h"
#include "Component.h"
#include "Fonts.h"

//======= PADRE ==========
//! Un medidor.

/*!
  Contiene lo necesario para describir un medidor.
 */
class itfzMedidor : public itfzComponent {
protected:
    SDL_Surface* titulo; /*!< Titulo. */
    SDL_Surface* textovalor; /*!< Valor en texto. */
    SDL_Surface* fondo; /*!< Fondo. */
    SDL_Surface* frente; /*!< Frente. */
    string textotitulo; /*!< Titulo. */
public:
    virtual void paint(void) = 0; /*!< Redibuja el objeto. */
    virtual void clickhandler(int, int) = 0; /*!< Maneja un click down. */
    virtual void unclickhandler(void) = 0; /*!< Maneja un click up. */
};

//====== MEDIDOR CUADRADO =========
//! Medidor cuadrado.

/*!
  Tiene una barra que varia de color y altura segun el valor mostrado.
 */
class itfzMedS : public itfzMedidor {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param tit Titulo.
      \param valuef Valor.
      \param updtabl Actualizable?
      \param id Id del objeto.
      \param screen Ventana.
     */
    itfzMedS(int, int, string, float, bool, string, SDL_Surface*);
    void paint(void); /*!< Redibuja el objeto. */
private:
    //! Modifica el medidor.
    /*!
      Actualiza el color y forma del medidor segun el valor mostrado.
     */
    void rescale(void);

    /*!
      \todo Por implementar.
     */
    void clickhandler(int, int) {
    };

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
};

//====== MEDIDOR CIRCULAR ==========
//! Medidor circular.

/*!
  Tiene un medio circulo que varia de color y angulo segun el valor mostrado.
 */
class itfzMedC : public itfzMedidor {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param tit Titulo.
      \param valuef Valor.
      \param updtabl Actualizable?
      \param id Id del objeto.
      \param screen Ventana.
     */
    itfzMedC(int, int, string, float, bool, string, SDL_Surface*);
    void paint(void); /*!< Redibuja el objeto. */

    /*!
      \todo Por implementar.
     */
    void clickhandler(int, int) {
    };

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
private:
    //! Modifica el medidor.
    /*!
      Actualiza el color y forma del medidor segun el valor mostrado.
     */
    void rescale(void);
};

//====== MEDIDOR TEXTO ============
//! Medidor de texto.

/*!
  Muestra el numero medido.
 */
class itfzMedT : public itfzMedidor {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param tit Titulo.
      \param valuef Valor.
      \param updtabl Actualizable?
      \param id Id del objeto.
      \param screen Ventana.
     */
    itfzMedT(int, int, string, float, bool, string, SDL_Surface*);
    void paint(void); /*!< Redibuja el objeto. */

    /*!
      \todo Por implementar.
     */
    void clickhandler(int, int) {
    };

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
private:
    //! Modifica el medidor.
    /*!
      Actualiza el color y forma del medidor segun el valor mostrado.
     */
    void rescale(void);
    SDL_Surface* grados; /*!< Grados centigrados. */
};


#endif	/* _MEDIDOR_H */

