Cration d'un objet  partir de treeview
----------------------------------------
* rpane contient le template eventuellement modifi
* le bouton "Create & place" appelle le gg_make_obj_CB qui
  > initialise cur_obj_typ
  > all_obj = FALSE;
  > gg_set_action (MAKE_OBJ_1ST);
  >>>>>>> rajouter ge_obj_apply (-1 ,0); pour mettre  jour le template
* gg_set_action (act)
  >  case MAKE_OBJ_1ST: => curseur & prompt
  >  puis action_flag = act;

* si on clique dans le canvas: => gg_myproc
  switch (event->type) 
  case GDK_BUTTON_PRESS:
    switch (event->button.button) {
    case 1:                         /* Button1 */
      switch (action_flag) {
      case MAKE_OBJ_1ST:
      >  si Q_String on cre l'objet tout de suite, sinon
      >  gg_set_action (MAKE_OBJ_2ND);

* on doit ensuite draguer pour dfinir l'tendue de l'objet
 => gg_myproc
  switch (event->type) 
  case GDK_MOTION_NOTIFY:
    switch (action_flag) {
    case MAKE_OBJ_2ND:
      gg_select_region_or_line 

* quand on re-clique avec Button1
  switch (event->type) 
  case GDK_BUTTON_PRESS:
    switch (event->button.button) {
    case 1:                         /* Button1 */
      switch (action_flag) 
      case MAKE_OBJ_2ND:                             gg_events.c 395
>>>>>>> il faut crer le nouvel obj
> mettre  jour x1, y1 ,x2 ,y2 dans la rpane ET le template
> crer le nouvel obj:
         num = obj_t_next (cur_obj_typ ,&id); (qui recopie le template)
> retracer le graph 
	  gg_drawgraph ();
> on peut 
    soit laisser la rpane sur le template  jour et
       indiquer en message que l'objet (typ,id +num pour debug) est cr
    soit afficher dans laa rpane le nouvel objet




Gestion des "handles"
---------------------
Le dessin se fait avec gg_aux_FillRectangle dans gg_draw_handle (gg_utils.c 208)
mais le pb est qu'il s'agit d'une bascule car il utilise le  context gg_gcxor
C'est commode pour draguer le rectangle de la bounding box, 
mais pas les poignes, sauf si on fait exactement comme  pour la bb.

Dans xfig, on ne drague que la bb, les poignes sont effaces ds que l'on
slectionne l'objet (toutes les poignes).

Donc on utilise le schma suivant:

* on veut agir sur tous les objets (move dans gg.c )
----------------------------------------------------
gg_set_action_CB :  draw_all_handles (); 
		 (suppose que aucun handle n'existe au pralable)

Puis dans gg_events.c:

void gg_myproc 
  case GDK_BUTTON_PRESS:
    case 1:                         /* Button1 */
      case MOVE_OBJ_1ST:  
	  if (all_obj) {
	    clear_all_handles ();    //  gg_events.c 322
	  }  
=> on peut alors draguer l'objet sans aucun handle trac.
Deux cas se prsentent alors :

  case GDK_BUTTON_PRESS:

    case 1:                         /* Button1 */
      case MOVE_OBJ_2ND:   => on dpose l'objet et on repart pour un tour
	if (all_obj) {
	  draw_all_handles ();    /* on retrace les handles */
	}  
         break;



    case 3:      /* Button3 */

      case MOVE_OBJ_1ST:  => au lieu de repartir pour un tour, on arrte
	if (all_obj) {
	  clear_all_handles ();      //  gg_events.c 586
	}
      case MOVE_OBJ_2ND:
        comme le dplacement se fait sans handle visible, il n'y a rien  faire


Interaction avec ge_tree_CB dans ge.c
-------------------------------------
On veut
* tracer des handles sur l'objet slectionn dans tree
* le cas pcdent marche, mme si il il y a un objet slectionn 
  auparavant => il faudrait  que  draw_all_handles
 teste l'tat de chaque objet (handle_on) 
=> il est plus prudant d'avoir deux fonctions
   *   draw_all_handles
   *   clear_all_handles
   et de mme
   *   gg_draw_handle
   *   gg_clear_handle  pour agir sur un seul objet

il faut ne pas oublier  ce qui arrive quand on retrace le projet 
avec plotone / draw_objs_in_graph