Bonjour,
Je débute avec GTK et j'aurais voulu, pour mon application, construire un pedigree.
Première idée
Dans un premier temps, j'ai fait ça à l'aide de GtkBox et GtkTextView comme ceci :
Le résultat est satisfaisant même si le fait de ne pouvoir centrer le texte verticallement dans les GtkTextview m'embête un peu. Peut-être bidouiller quelque chose avec gtk_text_view_get_visible_rect ( ) et gtk_text_view_set_pixels_above_lines ( ) ? Le résultat peut-il être correct pour ce que je veux faire et cela ne va-t-il pas poser des problèmes en cas de redimensionnement de la fenêtre ? (avec toutes les valeurs à recalculer ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 void init_pedigree(GtkBuilder *p_builder) { GtkWidget *p_scrolled_win = (GtkWidget *) gtk_builder_get_object (p_builder, "scrolledwindow_ped"); GtkWidget *p_hbox = gtk_hbox_new (TRUE, 5); GtkWidget *p_vbox[5]; GtkWidget *p_textview[62]; gint i, j, k, exp; const GdkColor colors[] = { {0, 62976, 52480, 56064}, {0, 38144, 46848, 63488}}; gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(p_scrolled_win), p_hbox); for(i=1;i<6;i++) { p_vbox[i] = gtk_vbox_new (TRUE, 5); gtk_box_pack_start(GTK_BOX(p_hbox), GTK_WIDGET(p_vbox[i]), TRUE, TRUE, 0); exp = 1; for(k=0;k<i;k++) exp = exp*2; for(j=0;j<exp;j++) { p_textview[j] = gtk_text_view_new(); gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (p_textview[j]), GTK_WRAP_WORD_CHAR); gtk_text_view_set_justification (GTK_TEXT_VIEW (p_textview[j]), GTK_JUSTIFY_CENTER); if (j & 1) gtk_widget_modify_base (p_textview[j], GTK_STATE_NORMAL, &colors[1]); else gtk_widget_modify_base (p_textview[j], GTK_STATE_NORMAL, &colors[0]); gtk_box_pack_start(GTK_BOX(p_vbox[i]), GTK_WIDGET(p_textview[j]), TRUE, TRUE, 0); } } gtk_widget_show_all(p_hbox); }
Deuxième idée
J'avais aussi pensé réaliser un custom widget sur le modèle de GtkLed, y détecter un click de souris, afficher alors une gtkdialog contenant un gtktextview, recueillir le texte saisi et l'afficher dans mon rectangle. Le tout avec des GtkDrawingArea (et GtkEventBox pour détecter le click ?) + des appels à la bibliothèque cairo. Visuellement, le résultat sera meilleur je pense et ressemblera plus à ce qui est fait dans Gramps (http://gramps-project.org/wiki/image...en5-gramps.jpg) par exemple. Faut-il nécessairement créer de toute pièce un custom widget ou peut-on se contenter de plusieurs GtkDrawingArea contenues dans plusieurs GtkBox comme celles utilisées dans la première idée ? Le réaffichage de nombreuses GtkDrawingArea ne va-t-il pas faire clignoter l'affichage dans tous les sens ?
Merci pour votre aide sur ces deux "idées" ou pour en proposer une meilleure
Partager