#ifndef GUIelement_h
#define GUIelement_h

/*! \brief GUIelement: abstrakte Klasse zur Repräsentation von GUI Elementen.
	Jedes GUI Element muss seine Position, die Größe des Fensters und die aktuellen Frames-per-seconds
	(für ein/ausblenden) speichern.
	\sa VTransferFunctionElement.h
	\sa VSliceElement.h
	\sa VRenderMode.h
	\sa VAxisAlignElement.h
	\sa VMenuStarter.h
 */
class GUIelement {

protected:
    bool active;
	bool blend;
	int * wwidth;
	int * wheight;
	int width;
	int height;
	unsigned int * fps;
	float alpha;
	int x;
	int y;

public:
	/*! Konstruktor
		\param width Breite des Fensters
		\param height Höhe des Fensters
		\param fps Pointer auf fps Wert
	*/
    GUIelement(int*,int*,unsigned int*);

	/*! Maus Schnittstelle. Passive Bewegung.
		\param x x Koordinate der Maus
		\param y y Koordinate der Maus
	*/
    virtual void motion(int,int); //passive motion
	/*! Maus Schnittstelle. Drücken der linken Taste.
		\param x x Koordinate der Maus
		\param y y Koordinate der Maus
	*/
	virtual void pressed(int,int); //mouse button pressed
	/*! Maus Schnittstelle. Auslassen der linken Taste.
		\param x x Koordinate der Maus
		\param y y Koordinate der Maus
	*/
	virtual void released(int,int); //mouse button released
	/*! Maus Schnittstelle. Aktive Bewegung (mit gedrückter Maustaste).
		\param x x Koordinate der Maus
		\param y y Koordinate der Maus
	*/
	virtual void drag(int,int); //active motion
	/*! Testet ob Punkt innerhalb des GUI Elements ist.
		\param x x Koordinate
		\param y y Koordinate
		\returns true wenn innerhalb
	*/
	virtual bool isInside(int,int);
	/*! Zeichnet das GUI Element.
	*/
	virtual void render();
	/*! Testet ob das GUI Element aktiv (eingeblendet) ist.
		\returns true wenn aktiv
	*/
    bool isActive();
	/*! Setzt das GUI Element aktiv oder passiv.
	*/
    void setActive(bool);
	/*! Testet ob das GUI Element gerade eingeblendet wird.
		\returns true wenn blending aktiv
	*/
	bool isBlend();
	/*! Aktiviert / Deaktiviert das Blending.
	*/
	void setBlend(bool);
};

#endif
