De rien ... on est la pour aider alors si on peut .. ;)Citation:
Envoyé par bit_o
Version imprimable
De rien ... on est la pour aider alors si on peut .. ;)Citation:
Envoyé par bit_o
bon, bon, bon je ne comprends vraiment plus rien à rien la.. Je dois surement mal faire une chose, mais je n'arrive pas à mettre la main dessus :
J'ai fait mes allocations comme dans l'exemple de Franck.H (avant-dernier message).
Les allocations se passent bien, car quand je fais ce test le programme continue.
le code plante sur l'instruction gtk_notebook_append_page. J'ai testé tous les widgets utilisés, et qu'ils sont tous bien alloués et créés (j'ai utilisé la macro GTK_IS_NOTEBOOK pour le test de pNotebook et GTK_IS_SCROLLED_WINDOW pour le test de pScrolled[0]).Code:
1
2
3
4
5
6
7 if (pApp->pScrolled[0] != NULL){ // l'allocation est faite ! // suite du code //... gtk_notebook_append_page(GTK_NOTEBOOK(pApp->pNotebook), pApp->pScrolled[0], gtk_label_new("test")); }
Any suggestions ? :?
En fait oui, j'en ai une qui permettrait surtout de mieux organiser tes pages :PCitation:
Envoyé par bit_o
Pourquoi tu n'as pas directement fait une structure contenant les widgets à disposer sur une page d'un GtkNotebook soit pour ton cas:
Cette structure, tu peux en faire un pointeur que tu mets éventuellement dans ta structure principale de ta fenêtre soit "win" par exemple:Code:
1
2
3
4
5
6
7
8
9 typedef struct { GtkWidget * pScrolled; GtkWidget * pTextview; /* Pourquoi même d'autres infos concernant les pages ! */ ... } page;
Cela te permet d'économiser des allocations car du coup tu ne te retrouve pas avec un tableau de tableau soit si tu me permet, une fonction de création de page qui commencerais par allouer (ou reallouer) ton tableau puis créer les widgets:Code:
1
2
3
4
5
6
7
8 typedef struct { /* Les widgets de ta fenetre... */ ... /* Les pages: */ page * p; } win;
Tu pourrais même stocker chaque page dans une liste chainée style une GList par exemple donc, la structure de ta fenetre serait:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 page * page_add (page * p, size_t size) { page * tmp = NULL; page * _p = p; if (_p != NULL) { tmp = g_realloc (size * sizeof (* tmp)); if (tmp != NULL) { _p = tmp; _p[size].pScrolled = gtk_scrolled_window_new (NULL, NULL); _p[size].pTextView = gtk_text_view_new (); } } return _p; }
Cela permettrait également de pouvoir facilement retirer des pages car une liste est bien plus souple qu'un tableau, biensûr opter pour une liste comme celle-ci inclus une légère modification de la fonction que je t'au proposé ;)Code:
1
2
3
4
5
6
7
8 typedef struct { /* Les widgets de ta fenetre... */ ... /* Les pages: */ GList * pages; } win;
c'est vrai que je trouvais ma structure bien trop lourde. Je vais tester cette façon de faire
merci :)
Attention tout de même au fait que si tu utilises une liste chaînée, ce que je recommande si tu dois par exemple supprimer une page en plein milieu du GtkNotebook, la fonction de création change elle aussi car elle n'a nullement besoin alors de construire un tableau mais simplement créer une nouvelle page puis créer les widgets comme là mais à la fin insérer la page dans la liste, liste qu'il est préférable de passer en paramètre ;)Citation:
Envoyé par bit_o
j'ai donc pas mal de travail en perspective, merci pour les solutions que tu m'as suggéré ;)
je m'y mets dès ce soir, je ferais signe si besoin est.