|
|
#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. |