Onglets plus images plus evenements souris avec GTK. Résolu

Onglets plus images plus evenements souris avec GTK. Résolu - C - Programmation

Marsh Posté le 10-04-2008 à 14:17:26    

Bonjour à tous,
 
J'écris une application permettant d'ouvrir des images png, chaque image est affichée dans un onglet. Je dois pouvoir récuperer les evenements souris sur chacune de images.
 
Je met chaque image sur un EventBox et chaque EventBox sur un Hbox et ces Hbox sur les pages des onglets.
 
Les onglets sont bien créés, mais les images ne s'affichent pas.
 
En espérant avoir été assez clair.
 
Merci
 
 

Code :
  1. const gchar *filename = NULL;
  2.  while (filename = g_dir_read_name (dir))
  3.  {
  4.   gchar tmp[80] = "";
  5.   GtkWidget *pLabel;
  6.   GtkWidget *pTabLabel;
  7.   gchar *sLabel;
  8.   gchar *sTabLabel;
  9.                        
  10.                         // Recuperation du chemin complet de l'image
  11.                         strcat(tmp,chemin);
  12.                         strcat(tmp,"/" );
  13.   strcat(tmp, filename);
  14.                         nbImagesChargees = ps_Struct->i_nombre_img;
  15.                         // Creation de l'image
  16.                         pImage = gtk_image_new_from_file (tmp);
  17.                         printf("Image : %s\n", tmp);
  18.                        
  19.                        // GtkWidget *pHBox;
  20.                        // pHBox = gtk_hbox_new(FALSE, 0);
  21.                         //gtk_event_box_set_above_child(GTK_EVENT_BOX(ps_Struct->p_EventBox),TRUE);
  22.                         //                        gtk_container_add(GTK_CONTAINER(ps_Struct->p_EventBox), pImage);
  23.                         // on met l'image sous le EventBox pour recuperer les evenements souris
  24.                         gtk_box_pack_start(GTK_EVENT_BOX(ps_Struct->p_EventBox[nbImagesChargees]), pImage, TRUE, TRUE, 0);
  25.                         // on met l'event box dans le Horizontal box
  26.                         gtk_box_pack_start(GTK_BOX(ps_Struct->p_HboxImg[nbImagesChargees]), ps_Struct->p_EventBox[nbImagesChargees], TRUE, TRUE, 0);
  27.                        
  28.                         gtk_event_box_set_above_child(GTK_EVENT_BOX(ps_Struct->p_EventBox[nbImagesChargees]),TRUE);
  29.                         // Test
  30.                         gtk_widget_set_events (ps_Struct->p_EventBox[nbImagesChargees], GDK_EXPOSURE_MASK
  31.                          | GDK_LEAVE_NOTIFY_MASK
  32.                          | GDK_BUTTON_PRESS_MASK
  33.                          | GDK_POINTER_MOTION_MASK
  34.                          | GDK_POINTER_MOTION_HINT_MASK);
  35.                        
  36.                         //gtk_signal_connect (GTK_OBJECT (ps_Struct->p_EventBox), "button_press_event", (GtkSignalFunc) button_press_event, ps_Struct);
  37.                         gtk_signal_connect (GTK_OBJECT (ps_Struct->p_Notebook), "on_notebook", (GtkSignalFunc) on_notebook, NULL);
  38.                         g_signal_connect(G_OBJECT(ps_Struct->p_EventBox[nbImagesChargees]), "button_press_event", G_CALLBACK(on_image),ps_Struct->p_Window );
  39.                         // Label s'affichant dans l'onglet
  40.                         pTabLabel = gtk_label_new(filename);
  41.                         // Ajout de la page
  42.                         gtk_notebook_append_page(GTK_NOTEBOOK(ps_Struct->p_Notebook), ps_Struct->p_HboxImg[nbImagesChargees], pTabLabel);
  43.                         //gtk_notebook_append_page(GTK_NOTEBOOK(ps_Struct->p_Notebook), ps_Struct->p_EventBox, pTabLabel);
  44.                        
  45.   // Ajout du chemin de l'image dans le tableau des chemins des images
  46.                         strcpy(ps_Struct->t_nomImages[ps_Struct->i_nombre_img], tmp);
  47.   ps_Struct->i_nombre_img  =  ps_Struct->i_nombre_img  +  1;
  48.  }
  49.   g_dir_close (dir), dir = NULL;
  50. }


 
 
Solution :  
 
   

Code :
  1. while (filename = g_dir_read_name (dir))
  2.  {
  3.   gchar tmp[80] = "";
  4.   GtkWidget *pLabel;
  5.   GtkWidget *pTabLabel;
  6.   gchar *Label;
  7.   gchar *sTabLabel;
  8.  
  9.                         // Recuperation du chemin complet de l'image
  10.                         strcat(tmp,chemin);
  11.                         strcat(tmp,"/" );
  12.   strcat(tmp, filename);
  13.                         nbImagesChargees = ps_Struct->i_nombre_img;
  14.                         // Creation de l'image
  15.                         pImage = gtk_image_new_from_file (tmp);
  16.                         // on met l'image sous le EventBox pour recuperer les evenements souris
  17.                         gtk_container_add(GTK_CONTAINER(ps_Struct->p_EventBox[nbImagesChargees]), pImage);
  18.                         // on met l'event box dans le Horizontal box
  19.                         gtk_box_pack_start(GTK_BOX(ps_Struct->p_HboxImg[nbImagesChargees]), pImage, TRUE, TRUE, 0);
  20.                         gtk_box_pack_start(GTK_BOX(ps_Struct->p_HboxImg[nbImagesChargees]),GTK_WIDGET(ps_Struct->p_EventBox[nbImagesChargees]), TRUE, TRUE, 0);
  21.                         // Test
  22.                         gtk_widget_set_events (ps_Struct->p_EventBox[nbImagesChargees], GDK_EXPOSURE_MASK
  23.                          | GDK_LEAVE_NOTIFY_MASK
  24.                          | GDK_BUTTON_PRESS_MASK
  25.                          | GDK_POINTER_MOTION_MASK
  26.                          | GDK_POINTER_MOTION_HINT_MASK);
  27.                         gtk_event_box_set_above_child(GTK_EVENT_BOX(ps_Struct->p_EventBox[nbImagesChargees]),TRUE);
  28.                         gtk_signal_connect(GTK_OBJECT (ps_Struct->p_Notebook), "on_notebook", (GtkSignalFunc) on_notebook, NULL);
  29.                         gtk_signal_connect(GTK_OBJECT(ps_Struct->p_EventBox[nbImagesChargees]), "button_press_event", G_CALLBACK(button_press_event),ps_Struct );
  30.                        
  31.                        
  32.                         // Label s'affichant dans l'onglet
  33.                         pTabLabel = gtk_label_new(filename);
  34.                         // Ajout de la pagep
  35.                         Label = gtk_label_new(tmp);
  36.                         gtk_notebook_append_page(GTK_NOTEBOOK(ps_Struct->p_Notebook), ps_Struct->p_HboxImg[nbImagesChargees], pTabLabel);
  37.   // Ajout du chemin de l'image dans le tableau des chemins des images
  38.                         strcpy(ps_Struct->t_nomImages[ps_Struct->i_nombre_img], tmp);
  39.   ps_Struct->i_nombre_img  =  ps_Struct->i_nombre_img  + 1 ;
  40.  }


Message édité par jijiz le 10-04-2008 à 15:01:29
Reply

Marsh Posté le 10-04-2008 à 14:17:26   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed