|
|
#ifndef PANEL_H #define PANEL_H #include <Xm/DrawingA.h> /** * Classe regroupant les fonctionnalit�s principales d'un paneau destin� � l'affichage graphique. * Classe m�re des classes @ref DrawArea et @ref WaveArea * @short Paneau graphique * @author Ph.Chose * @version 10/99 */ class Panel { public: /** * Widget du Panel */ Widget draw; /** * Pixmap pour l'affichage graphique */ Pixmap pixDraw; /** * Largeur de la Pixmap */ Dimension width; /** * Hauteur de la Pixmap */ Dimension height; /* store size of pixmap */ /** * Graphic context (X11) */ GC gc; /** * Variables du contexte graphique (X11) */ XGCValues gcv; /** * Table de couleurs (X11) */ Colormap cmap; /** * Display (X11) */ Display* displayDraw; /* xlib id of display */ /** * Contexte d'application (X11) */ XtAppContext app; /** * Pixel de remplissage (X11) */ long int fillPixel; protected: /** * Drapeau pour indiquer l'appui sur la touche Control pendant un clic souris */ int flagControlClick; /** * Drapeau pour indiquer l'appui sur la touche Shift pendant un click souris */ int flagShiftClick; /** * Position du clic couris */ Position x; /** * Position du clic souris */ Position y; /** * Position m�moris�e du dernier clic souris */ Position lastX; /** * Position m�moris�e du dernier clic souris */ Position lastY; /** * Information sur la police de caract�res (X11) */ XFontStruct* fontInfo; public: /** * Construit le paneau, initialise les variables internes et cr�e des callbacks * @param parent widget p�re * @param app contexte d'application, n�cessaire pour rediriger les clics souris * @param ysize hauteur requise */ Panel(Widget parent, XtAppContext app, int ysize); protected: /** * Charge une police de caract�res. Fonction non d�buggu�e -> cf X11 * @param font_info informations sur la police de caract�re */ void loadFont(XFontStruct** font_info); /** * Fonction callback appel�e lorsque le paneau est mis au premier plan. * Appelle la fonction @ref Panel::expose. Cette fonction n'a de raison * d'�tre que pour une programmation C++ avec MOTIF (cf @ref Panel::resizeCallback) * @param clientData pointeur sur une instance de la classe @ref Panel */ static void exposeCallback(Widget,XtPointer clientData,XmDrawingAreaCallbackStruct*); /** * Fonction appel�e par le callback @ref Panel::exposeCallback. Tranf�re la Pixmap vers l'�cran */ void expose(XmDrawingAreaCallbackStruct* cbk); /** * Fonction callback appel�e lors d'un changemant de taille du paneau. * Appelle la fonction @ref Panel::resize. Cette fonction est n�cessaire pour * inclure un fonction callback dans un classe C++ car le callback doit �tre * static. Un pointeur sur l'instance de la classe est contenu dans le param�tre clientData * @param pointeur sur une instance de @ref Panel */ static void resizeCallback(Widget,XtPointer clientData,XmDrawingAreaCallbackStruct*); /** * Fonction appel�e par @ref Panel::resizeCallback. Cette fonction met � jour les limites * de la fen�tre et r�affiche les donn�es */ void resize(); /** * Fonction callback appel�e lorsque un clic souris est recu. * Appelle la fonction @ref Panel::drawCbk. Cette fonction est n�cessaire pour un impl�mentation * de fonction callback en C++. Le pointeur sur un instance de * la classe @ref Panel est r�cup�r� via une astuce: le pointeur est converti en cha�ne de * caract�res et transmis dans le param�tre args. */ static void drawCallback(Widget,XButtonEvent*,String* args,int*); /** * Fonction appel�e par @ref Panel::drawCallback. Cette fonction g�re les �v�nements souris. * Elle dispatche les appels sur les fonctions: * @li @ref Panel::shiftClick * @li @ref Panel::controlClick * @li @ref Panel::controlUnClick * @li @ref Panel::selectBox * @li @ref Panel::clickSecond * @li @ref Panel::clickThird * * Elle g�re aussi l'affichage de la bo�te de s�lection lors d'une s�lection rectangulaire avec la souris */ void drawCbk(Widget,XButtonEvent*,String*,int*); public: /** * Efface le fond du paneau et appelle la fonction @ref Panel::redraw */ virtual void updateDisplay(); protected: /** * Fonction virtuelle pure. Doit �tre impl�ment�e par l'utilisateur. Elle * doit contenir les instructions d'affichage dans le paneau. */ virtual void redraw() = 0; /** * Fonction appel�e lors d'un clic gauche de la souris accompagn� de la touche Shift enfonc�e * @param x position x de la souris au moment du clic * @param y position y de la souris au moment du clic */ virtual void shiftClick(Position x, Position y); /** * Fonction appel�e lors d'un clic gauche de la souris accompagn� de la touche Control enfonc�e * @param x position x de la souris au moment du clic * @param y position y de la souris au moment du clic */ virtual 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 * @param x position x de la souris au moment du clic * @param y position y de la souris au moment du clic */ virtual void controlUnClick(Position x, Position y); /** * Fonction appel�e lors d'un clic milieu de la souris * @param x position x de la souris au moment du clic * @param y position y de la souris au moment du clic */ virtual void clickSecond(Position x, Position y); /** * Fonction appel�e lors d'un clic droit de la souris * @param x position x de la souris au moment du clic * @param y position y de la souris au moment du clic */ virtual void clickThird(Position x, Position y); /** * Fonction appel�e lors d'une s�lection rectangulaire effectu�e avec la souris * @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 */ virtual void selectBox(Position x1, Position x2, Position y1, Position y2); }; #endif
Generated by: chose@josquin on Wed Nov 10 20:57:01 199. |