#ifndef VTransferFunction_h
#define VTransferFunction_h

#include "ptr_vector.h"
#include <GL/glew.h>
#include <GL/glut.h>
#include "VTransferFunctionNode.h"
#include "VColorChooser.h"

using namespace std;
using namespace stdx;

/*! \brief VTransferFunction: Klasse zur Repräsentation der Transfer Funktion.
 */

class VTransferFunction
{

	int x;
	int y;
	int width;
	int height;
	float * alpha;
	/*! Spezieller Pointer-Vektor, der die Knoten der Transferfunktion enthält
		\sa ptr_vector.h
	*/
	ptr_vector<VTransferFunctionNode> nodes;
	VColorChooser * chooser;
	/*! Speichert immer den ausgewählten Knoten
	*/
	VTransferFunctionNode * currentnode;
	bool dragging;
	GLuint tex;
	float * colors;
	int length;
public:
	/*! Rendert die aktuelle Transferfunktion in eine 1D Textur und löscht die vorhergehende.
	*/
	void renderTexture();


	/*! Konstruktor
		\param x x Position
		\param y y Position
		\param width Breite
		\param height Höhe
		\param alpha Pointer auf alpha-Wert (für Blending)
	*/
	VTransferFunction(int,int,int,int,float*);
	/*! Zeichnet die Transfer Funktion
	*/
	void draw();
	/*! Liefert den Pointer auf die Textur-id zurück
		\returns Pointer auf Textur-id
	*/
	GLuint * getTexture();
	
	void pressed(int,int);
	void released(int,int);
	void drag(int,int);

	bool isInside(int,int);
	~VTransferFunction(void);
};

#endif
