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.