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

#ifndef MODULEMANIPULATEUR
#define MODULEMANIPULATEUR

#include "Module.h"

int sourisManipulateur(int bouton,int etat,int x,int y) ;
int motionManipulateur(int x,int y) ;
void manipulateurSouris() ;
void setManipulateurDistance(float d) ;
int keyManipulateur(unsigned char key,int x,int y) ;
int specialManipulateur(int k, int x, int y) ;
void manipulateurClavier() ;
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 manipulateurGetClavierAngle(float *ax,float *ay,float *az) ;
void manipulateurSetClavierAngle(float ax,float ay,float az) ;
void manipulateurGetSourisAngle(float *angle,float *ax,float *ay,float *az) ;
void manipulateurSetSourisAngle(float angle,float ax,float ay,float az) ;
void manipulateurGetSourisRotations(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);
void setOnNoModiferClic(fonctionIntIntIntInt fct);

typedef enum {
  ROTATE,
  TRANSLATE,
  SCALE } typeTransformation;

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

#endif
