#ifndef DRAWAREA_H
#define DRAWAREA_H
class DrawArea;
#include "CSdif.h"
#include "Peak.h"
#include "Pane.h"
#include "Panel.h"
/**
* Programme de resynthèse appelé
*/
enum resynthType { PPP, ADD };
/**
* Affichage des données SDIF. Cette classe travaille en coopération
* avec la classe @ref WaveArea au sein
* de la classe @ref Pane afin d'afficher de manière synchronisée données SDIF et données SF.
* @short Paneau d'affichage SDIF
* @author Ph.Chose
* @version 10/99
*/
class DrawArea : public Panel, public CSdif
{
private:
/**
* Position X sauvegardée de la souris
*/
Position controlX;
/**
* Position Y sauvegardée de la souris
*/
Position controlY;
/**
* Drapeau contrôlant l'affichage de la grille
*/
int gridDisplay;
/**
* Repère temporel de la trame précédente
*/
float previousTime;
/**
* Pics ou partiels de la trame courante et de la trame précédente
*/
Peak* pdata[2];
/**
* Nombre de pics ou de partiels de la trame précédente
*/
int numberPeaks0;
/**
* nombre de pics ou de partiels de la trame courante
*/
int numberPeaks1;
/**
* Limite de fréquence minimale précédente pour annuler un zoom
*/
float previousFreqMin;
/**
* Limite de fréquence maximale précédente pour annuler un zoom
*/
float previousFreqMax;
/**
* Repère temporel du début du fichier
*/
float fileBeginTime;
/**
* Repère temporel de la fin du fichier
*/
float fileEndTime;
/**
* Taille de la bande située à gauche de l'axe des y
*/
int deltaX;
/**
* Taille de la bande située en dessous de l'axe des x
*/
int deltaY;
/**
* Variable utilisée par le timer (cf @ref DrawArea::timerFunc)
*/
XtIntervalId id;
/**
* Pointeur sur la fenêtre partagée mère
*/
Pane* parent;
/**
* ID du processus d'analyse. Utilisé pour détecter la fin de l'analyse et stopper l'affichage temps-réel
*/
int pid;
public:
/**
* Instant requis pour l'affichage d'une FFT
*/
float requestedTime;
/**
* Drapeau contrôlant l'affichage des liens entre pics: utilisé pour effacer les lines lors de l'affichage
* de trames de type 1TRC alors que des 1PIC étaient désirée (conséquence de lábsence d'implémentation
* à l'heure actuelle d'une lecture de 1PIC sous Pm
*/
int noLinks;
/**
* Type de fichier lu (Pics, Partiels, FFT ou Pitch)
*/
SdifFileType fileType;
/**
* Fréquence maximale par défaut réglée par le menu Fréquence
*/
float defaultFreqMax;
/**
* Taille de base d'un carré représentant un pic, modifié par le menu Amplitude
*/
int baseAmplRectWidth;
/**
* Amplitude maximale détectée dans le fichier
*/
float maxAmpl;
/**
* Amplitude miniale à afficher
*/
float minAmpl;
/**
* Fréquence maximale affichée
*/
float freqMax;
/**
* Fréquence minimale affichée
*/
float freqMin;
/**
* Drapeau indiquant si le mode Combi est activé (affichage simutané d'un fichier SDIF PIC et d'un fichier SDIF TRC)
*/
int combiMode;
/**
* Nom du fichier principal à afficher
*/
char* mainFilename;
/**
* Nom du fichier secondaire à afficher (mode Combi uniquement)
*/
char* secondFilename;
/**
* Nom du fichier devant etre affiche
*/
char* requestedFilename;
/**
* Initialise les variables ainsi que la librairie SDIF.
* @param parentPane Fenêtre partagée mère
* @param app contexte dápplication X11 (nécessaire pour la redirection des évenements souris
*/
DrawArea(Pane* parentPane, XtAppContext app);
/**
* Libère la mémoire
*/
~DrawArea();
/**
* Affiche la Pixmap à l'écran
*/
void updateDisplay();
private:
// TIMER FUNCTIONS
/**
* Fonction timer appelée toutes les secondes lors d'une analyse
* @param clientData pointeur sur l'instance de la classe @ref DrawArea
* @param id référence du timer
*/
static void timerFunc(XtPointer clientData, XtIntervalId* id);
public:
/**
* Démarre ou stoppe le timer
*/
void timerSwitch();
// DISPLAY_FUNCTIONS
/**
* Initialise l'affichage d'un nouveau fichier SDIF
*
* @param fname nomdu fichier SDIF
*/
void initDisplay(char* fname);
/**
* Initialise l'affichage de deux nouveaux fichiers SDIF en mode Combi
*
* @param fname1 nom du fichier SDIF PIC
* @param fname2 nom du fichier SDIF TRC
*/
void initDisplay(char* fname1, char* fname2);
/**
* Démarre une visualisation temps réel des résultats d'une analyse avec partial++
* @param fname nom du fichier SDIF à afficher
* @param pid ID du processus d'analyse
*/
void realtimeDisplay(char* fname, int pid);
/**
* Démarre une visualisation temps réel des résultats d'une analyse avec hmm
* @param fname nom du fichier SDIF à afficher
* @param pid ID du processus d'analyse
*/
void realtimeDisplayHMM(char* fname, int pid);
/**
* Affiche ou efface la grille
*/
void gridSwitch();
/**
* Resitue sur la sortie sonore (uniquement sur SGI) la resynthèse de la portion de partiels sélectionnée à
* l'écran.
* @param type programme de resynthèse demandé (partial++ ou syntadd)
*/
void playResynth(resynthType type);
private:
/**
* Affiche ou efface l'aide à la visualisation des paramètres fréquentiels
* @param x position x d'affichage de l'aide
* @param y position y d'affichage de l'aide
*/
void switchCross(Position x, Position y);
/**
* Affiche le contenu du fichier SDIF à l'écran
*/
void redraw();
/**
* Recherche les amplitudes maximales et les bornes temporelles
*/
int seekLimits();
/**
* Cherche dans le fichier SDIF le pic représenté à l'écran en un point donné
* @param x coordonnée x du pic sélectionné
* @param y coordonnée y du pic sélectionné
*/
void findPeak(int x, int y, XColor);
/**
* Fonction censée changer la couleur du pic sélectionné (ne fonctionne pas)
* @param x coordonnée x du pic sélectionné
* @param y coordonnée y du pic sélectionné
*/
void getPeak(int x, int y);
/**
* Fonction censée remettre la couleur originale du pic (ne fonctionne pas)
* @param x coordonnée x du pic sélectionné
* @param y coordonnée y du pic sélectionné
*/
void freePeak(int x, int y);
/**
* Affichage des axes et des échelles
*/
void axisScaleDisplay();
/**
* Fonction appelée lors d'un clic gauche de la souris accompagné de la touche Shift enfoncée.
* Déclenche la recherche du pics sélectionné en appelant @DrawArea::shiftClick
* @param x position x de la souris au moment du clic
* @param y position y de la souris au moment du clic
*/
void shiftClick(Position x, Position y);
/**
* Fonction appelée lors d'un clic milieu de la souris
* Fait un zoom total arrière.
* @param x position x de la souris au moment du clic
* @param y position y de la souris au moment du clic
*/
void clickSecond(Position x, Position y);
/**
* Fonction appelée lors d'un clic droit de la souris
* Annule le dernier zoom.
* @param x position x de la souris au moment du clic
* @param y position y de la souris au moment du clic
*/
void clickThird(Position x, Position y);
/**
* Fonction appelée lors d'une sélection rectangulaire effectuée avec la souris
* Effectue un zoom sur la zone enclose
* @param x1 position x de la souris au début du drag
* @param y1 position y de la souris au début du drag
* @param x2 position x de la souris à la fin du drag
* @param y2 position y de la souris à la fin du drag
*/
void selectBox(Position x1, Position x2, Position y1, Position y2);
/**
* Fonction appelée lors d'un clic gauche de la souris accompagné de la touche Control enfoncée.
* Affiche l'aide à la visualisation des paramètres fréquentiels
* @param x position x de la souris au moment du clic
* @param y position y de la souris au moment du clic
*/
void controlClick(Position x, Position y);
/**
* Fonction appelée lors du relachement du bouton gauche de la souris si la touche Control a été
* préalablement enfoncée. Efface l'aide à la visualisation des paramètres fréquentiels
* @param x position x de la souris au moment du clic
* @param y position y de la souris au moment du clic
*/
void controlUnClick(Position x, Position y);
};
#endif
| Generated by: chose@josquin on Wed Nov 10 20:57:01 199. |