/* Auteur: Nicolas JANEY              */
/* nicolas.janey@univ-fcomte.fr       */
/* Septembre 2012                     */
/* Un manipulateur souris et clavier  */

#ifndef MODULEMANIPULATION
#define MODULEMANIPULATION

#include "Module.h"

void manipulateur();

int sourisManipulateur(int bouton,int etat,int x,int y) ;
int motionManipulateur(int x,int y);
void setManipulateurDistance(float d);
int keyManipulateur(unsigned char key,int x,int y);
int specialManipulateur(int k, int x, int y);
void mouseBasique(int bouton,int etat,int x,int y);
void motionBasique(int x,int y);
void keyBasique(unsigned char key,int x,int y);
void specialBasique(int k, int x, int y);
void setIdleWindow(int w);
void idleBasique(void);
void setManipulateurCleanUp(void (*func)(void));
void setTracking(int tr);

float manipulateurGetZoom(void);
void manipulateurSetZoom(float zoom);
void manipulateurGetTranslation(float *tx,float *ty);
void manipulateurSetTranslation(float tx,float ty);
void manipulateurGetRotation(float *angle,float *ax,float *ay,float *az) ;
void manipulateurSetRotation(float angle,float ax,float ay,float az) ;
void manipulateurGetRotations(float *rx,float *ry,float *rz) ;

void setManipulateurParametre0(float *param,float min,float max,float fct);
void setManipulateurParametre1(float *param,float min,float max,float fct);
void setManipulateurParametreFonction(fonctionVoid fonction);
void setManipulateurParametreFonctionIntInt(fonctionIntInt fonction);
void setManipulateurRefresh(fonctionVoid fonct);

typedef enum {
  ROTATE,
  TRANSLATE,
  SCALE } typeTransformation;

void manipulateurPush(void);
void manipulateurPop(void);
void manipulateurReset(void);
void manipulateurActivation(typeTransformation operation,int flag);

#endif
