skip78 | Bonjour les gens, Je n'arrive pas à gérer les GList sur GTK (en C) et je ne trouve vraiment pas de bon exemple sur le net.
Je me tourne donc vers vous !!
En regardant la doc, je me dis : CHOUETTE, il existe une librairie qui me simplifie la vie.
En effet les fonctions ont l'air simples à souhait, je me lance donc avec les GList (doublement chainées) ...
Bah c'est raté pour la facilité, ca fait 3 heures que je me casse la tête la dessus
Pour être précis, je veux faire une liste chainée de structures, que je passe dans mes callbacks pour modifier mes widgets.
Bref plutot qu'un grand discours, voici de quoi je parle :
Code :
- typedef struct page{
- gint index;
- GtkWidget *HugeHbox;
- GtkWidget *FiltresVbox, *PicVbox, *ResultVbox;
- GtkWidget *OriginalPic, *ResultPic;
- GtkWidget *TabLabel;
- }page;
- GList *pages = NULL;
- // Fonction de création de nouvel onglet :
- void cb_new (GtkWidget *p_widget, gpointer user_data)
- {
- // Déclaration des variables :
- page *newp = NULL;
- apli *app = NULL;
- // On récupére l'application :
- app = (apli*)malloc(sizeof(apli));
- app = user_data;
- // On crée une nouvelle page :
- newp = (page*)malloc(sizeof(page));
- newp->index = 0;
- newp->HugeHbox = gtk_hbox_new(TRUE,0);
- newp->FiltresVbox = gtk_vbox_new(TRUE,0);
- newp->PicVbox = gtk_vbox_new(TRUE,0);
- newp->ResultVbox = gtk_vbox_new(TRUE,0);
- newp->OriginalPic = gtk_image_new_from_file("Pics/test_image13.jpg" );
- newp->ResultPic = gtk_image_new_from_file("Pics/test_image13.jpg" );;
- newp->TabLabel = create_label(g_strdup_printf("Doc %d", app->index));
- app->index ++;
- // On place les éléments dans les box correspondantes :
- gtk_box_pack_start(GTK_BOX(newp->PicVbox), newp->OriginalPic, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(newp->ResultVbox), newp->ResultPic, FALSE, FALSE, 0);
- // On empile les boxs :
- gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->FiltresVbox, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->PicVbox, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->ResultVbox, FALSE, FALSE, 0);
- // On met la hugeHbox dans l'onglet :
- newp->index = gtk_notebook_append_page(GTK_NOTEBOOK(app->notebook), newp->HugeHbox, newp->TabLabel);
- // On affiche le tout :
- gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), newp->index - 1);
- gtk_widget_show_all(GTK_WIDGET(app->notebook));
- // Ajout de la page au document :
- g_list_append(app->pages, newp);
- printf("page : %d\n", newp->index);
- free(newp);
- newp = NULL;
- Pause(2);
- newp = g_list_nth_data(app->pages, 0);
- // C'est la que ca plante (erreur acces memoire)
- printf("page : %d\n", newp->index);
- }
|
Message édité par skip78 le 05-03-2009 à 18:10:59
|