Source: Panel.h


Annotated List
Files
Globals
Hierarchy
Index
#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.