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

//====== Padre ==============
//! Describe otro tipo de componentes.

class itfzOther : public itfzComponent {
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. */
protected:
    SDL_Surface* titulo;/*!< Titulo. */
    string textotitulo;/*!< Texto del titulo. */
};
//====== PANIC BUTTON ========
//!  Boton de panico.

class itfzPanicB : public itfzOther {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param tit Titulo.
      \param screen Ventana.
     */
    itfzPanicB(int, int, string, SDL_Surface *);
    void clickhandler(int, int); /*!< Maneja un click down. */

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
    void paint(void); /*!< Redibuja el objeto. */
protected:
    bool value; /*!< Valor. */
    SDL_Surface* boton; /*!< Boton. */
    SDL_Surface* bg; /*!< Fondo. */

};

//====== ACEL ========
//!  Acelerador

class itfzAcel : public itfzOther {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param tit Titulo.
      \param screen Ventana.
     */
    itfzAcel(int, int, string, SDL_Surface *);
    void clickhandler(int, int); /*!< Maneja un click down. */
    void unclickhandler(void); /*!< Maneja un click up. */
    void paint(void); /*!< Redibuja el objeto. */
    void rescale(void); /*!< Repocisiona la palanca segun el valor. */
    SDL_Rect abotmas; /*!< Texturas. */
    SDL_Rect abotmenos; /*!< Texturas. */
    SDL_Rect apal; /*!< Texturas. */
protected:
    int value; /*!< Valor. */
    int posYtmp; /*!< Poscion en Y. */
    SDL_Surface* palanca; /*!< Palanca. */
    SDL_Surface* bg; /*!< Fondo. */
    SDL_Surface* textovalor; /*!< Texto. */
    SDL_Surface* marca; /*!< Marca de ignicion. */

};

//====== TXT BOX =============
//! Caja de texto

class itfzTxtBox : public itfzOther {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param tit Titulo.
      \param values Valor.
      \param updtabl Actualizable?
      \param id Id del objeto.
      \param screen Ventana.
     */
    itfzTxtBox(int, int, string, string, bool, string, SDL_Surface *);
    //! Setea el valor del campo de texto.
    /*!
      \todo Por implementar.
     */
    void setValue(string);
    //! Obtiene el valor del campo de texto.
    /*!
      \todo Por implementar.
     */
    string getValue(void);
    void paint(void); /*!< Redibuja el objeto. */

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

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
protected:
    string value; /*!< Valor. */
    SDL_Surface* box; /*!< Caja. */
    SDL_Surface* textovalor; /*!< Texto a mostrar. */
};
//===== BG ====
//! Fondo

/*!
  \todo La descripcion debe ser mas general.
 */
class itfzBG : public itfzOther {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param screen Ventana.
     */
    itfzBG(int, int, SDL_Surface *);
    void paint(void); /*!< Redibuja el objeto. */

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

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
private:
    SDL_Surface * bg; /*!< Fondo. */
    SDL_Surface * bgx3; /*!< Fondo. */
    SDL_Surface * bgx4; /*!< Fondo. */
    SDL_Surface * logo; /*!< Fondo. */
    SDL_Surface * lng; /*!< Fondo. */
    SDL_Surface * identificacion; /*!< Fondo. */
    SDL_Surface * presion; /*!< Fondo. */
    SDL_Surface * temperatura; /*!< Fondo. */
    SDL_Surface * rendimiento; /*!< Fondo. */
    SDL_Surface * historico; /*!< Fondo. */
    SDL_Surface * graficos; /*!< Fondo. */
};

//===== Texto ====
//! Texto

class itfzTXT : public itfzOther {
public:
    //! Constructor.
    /*!
      \param hor Coordenada horizontal.
      \param ver Coordenada vertical.
      \param screen Ventana.
     */
    itfzTXT(int, int, SDL_Surface *);
    //! Setea el valor del texto.
    /*!
      \todo Por implementar.
     */
    void setText(string);
    //! Obtiene el valor del texto.
    /*!
      \todo Por implementar.
     */
    string getText(void);
    void paint(void); /*!< Redibuja el objeto. */

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

    /*!
      \todo Por implementar.
     */
    void unclickhandler(void) {
    };
protected:
    string text; /*!< Texto. */
};

#endif	/* _OTHER_H */

