Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2594 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Gestion des GLibs en GTK+

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion des GLibs en GTK+

n°1858153
skip78
Posté le 05-03-2009 à 18:08:39  profilanswer
 

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 :
  1. typedef struct page{
  2. gint index;
  3. GtkWidget *HugeHbox;
  4. GtkWidget *FiltresVbox, *PicVbox, *ResultVbox;
  5. GtkWidget *OriginalPic, *ResultPic;
  6. GtkWidget *TabLabel;
  7. }page;
  8. GList *pages = NULL;
  9. // Fonction de création de nouvel onglet :
  10. void cb_new (GtkWidget *p_widget, gpointer user_data)
  11. {
  12. // Déclaration des variables :
  13. page *newp = NULL;
  14. apli *app = NULL;
  15. // On récupére l'application :
  16. app = (apli*)malloc(sizeof(apli));
  17. app = user_data;
  18. // On crée une nouvelle page :
  19. newp = (page*)malloc(sizeof(page));
  20. newp->index = 0;
  21. newp->HugeHbox = gtk_hbox_new(TRUE,0);
  22. newp->FiltresVbox = gtk_vbox_new(TRUE,0);
  23. newp->PicVbox = gtk_vbox_new(TRUE,0);
  24. newp->ResultVbox = gtk_vbox_new(TRUE,0);
  25. newp->OriginalPic = gtk_image_new_from_file("Pics/test_image13.jpg" );
  26. newp->ResultPic = gtk_image_new_from_file("Pics/test_image13.jpg" );;
  27. newp->TabLabel = create_label(g_strdup_printf("Doc %d", app->index));
  28. app->index ++;
  29. // On place les éléments dans les box correspondantes :
  30. gtk_box_pack_start(GTK_BOX(newp->PicVbox), newp->OriginalPic, FALSE, FALSE, 0);
  31. gtk_box_pack_start(GTK_BOX(newp->ResultVbox), newp->ResultPic, FALSE, FALSE, 0);
  32. // On empile les boxs :
  33. gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->FiltresVbox, FALSE, FALSE, 0);
  34. gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->PicVbox, FALSE, FALSE, 0);
  35. gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->ResultVbox, FALSE, FALSE, 0);
  36. // On met la hugeHbox dans l'onglet :
  37. newp->index = gtk_notebook_append_page(GTK_NOTEBOOK(app->notebook), newp->HugeHbox, newp->TabLabel);
  38. // On affiche le tout :
  39. gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), newp->index - 1);
  40. gtk_widget_show_all(GTK_WIDGET(app->notebook));
  41. // Ajout de la page au document :
  42. g_list_append(app->pages, newp);
  43. printf("page : %d\n", newp->index);
  44. free(newp);
  45. newp = NULL;
  46. Pause(2);
  47. newp = g_list_nth_data(app->pages, 0);
  48. // C'est la que ca plante (erreur acces memoire)
  49. printf("page : %d\n", newp->index);
  50. }


Message édité par skip78 le 05-03-2009 à 18:10:59
mood
Publicité
Posté le 05-03-2009 à 18:08:39  profilanswer
 

n°1858177
skip78
Posté le 05-03-2009 à 18:51:21  profilanswer
 

Bon bah à tout hasard si qqun a le meme probleme, voici ce a coté de quoi je suis passé (fatigué moi hein :D)
Ca se résoud en une ligne ...  :lol:  
 

Code :
  1. app->pages = g_list_append(app->pages, newp);

n°1858232
Taz
bisounours-codeur
Posté le 05-03-2009 à 22:32:35  profilanswer
 

évite de mixer les malloc/free et g_malloc/g_free. Les variantes g_ sont mieux.
 
Sinon c'est quoi ton intérêt de stocker des widgets dans une liste ? je vois pas. Tu prends un notebook et voilà, ça te fait tout ?

n°1858372
skip78
Posté le 06-03-2009 à 09:50:09  profilanswer
 

Taz a écrit :

évite de mixer les malloc/free et g_malloc/g_free. Les variantes g_ sont mieux.
 
Sinon c'est quoi ton intérêt de stocker des widgets dans une liste ? je vois pas. Tu prends un notebook et voilà, ça te fait tout ?


 
Tu veux dire transmettre juste ma box principale dans les callbacks, puis me servir de l'arborescence des widgets pour acceder à tous les éléments contenus dedans ?
Je sais que ca serait plus propre mais :
1/ Je m'y perd
2/ Je vois comment gérer ca avec des containers et des contenus, mais avec les box, c'est du gtk_box_pack_start, je sais pas si ca se traite de la même facon.
 
Si tu connais un peu, tu es ok pour me montrer à quoi ca ressemblerait ?  
 
Merci d'avance,
Skip


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Gestion des GLibs en GTK+

 

Sujets relatifs
gestion de fichiers excel à l'aide d'une macro spécifiqueProjet : C ou Java ? Comment modéliser avec GTK ?
Problèmes en C et en GTKBehavior problème gestion souris molette + deplacement
Gestion du RTS sur un port sérieGestion des sessions de façon efficace ?
gestion de parc matérielGestion des textes sur Nintendo DS
Quel est le meilleur moyen de réaliser une grille de sudoku avec GTK ?Stopper public void (pour gestion d'événements)
Plus de sujets relatifs à : Gestion des GLibs en GTK+


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)