#ifndef CONTROLSELECCIO_H
#define CONTROLSELECCIO_H

#include<vector>
#include<QVector>
#include<QRgb>
#include <iostream>
#include <QFileDialog>
#include <QtGui>

#include <escena.h>
#include <parametres.h>

#include <cpu.h>
#include <gpu.h>

#include <gray_scale_cpu.h>
#include <x_ray_gpu.h>

#include<lut_gpu.h>
#include<lut_cpu.h>

#include<phong_blin_gpu.h>
#include<phong_blinn_cpu.h>

#include<mip_gpu.h>
#include<mip_cpu.h>

#include <mida_gpu.h>
#include<mida_cpu.h>

#include<mida2_gpu.h>

class ControlSeleccio
{
public:
    ControlSeleccio();

    void setMainWindow(QMainWindow *m); // modificar QMainWindow
    void setOpacitatGPU(float pacitat,float saturacio,float sampling,float crem);
    void setSaturacioGPU(float);
    void setSamplingGPU(int);
    void setCremGPU(float pacitat,float saturacio,float sampling,float crem);
    void onRampChanged(QVector<unsigned int>);
    void ActualitzarRC(float opacitat,float saturacio, float sampling,float cream);

    void cargarVolumen(char *, int,int,int,QString);

    Escena* getEscena();
    textureWidget* texturewidget;
    Escena* escena;
    void activaMask(bool p);
    void onlyMask(bool p);
    void setK(float);

    // Raycasting GPU
    void rcgGS(float opacitat, float saturacio, float sampling, float cream);
    void rcgLut(float opacitat, float saturacio, float sampling, float cream);
    void rcgPB(float opacitat, float saturacio, float sampling, float cream);
    void rcgMip(float opacitat, float saturacio, float sampling, float cream);
    void rcgMida(float opacitat, float saturacio, float sampling, float cream);
    void rcgMida2(float opacitat, float saturacio, float sampling, float cream);

    //Raycasting CPU
    void rccGS(float opacitat, float saturacio, float sampling, float cream);
    void rccLut(float opacitat, float saturacio, float sampling, float cream);
    void rccPB(float opacitat, float saturacio, float sampling, float cream);
    void rccMip(float opacitat, float saturacio, float sampling, float cream);
    void rccMida(float opacitat, float saturacio, float sampling, float cream);

    vec4 *colormascara;
    void setColorMascara(QColor);
    void cambibackground();

public slots:
      void currentColorChanged();

private:
   // vector <GPU*> gpu;
    //vector <CPU*> cpu;
    GPU* gpu;
    CPU* cpu;

    char* file;
    bool volum;
    bool confirmarVolum();
    Parametres* carregaParametres(int opcio,float opacitat,float saturacio, float sampling,float cream);
};

#endif // CONTROLSELECCIO_H
