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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| /* travail sur les scrolled barres et les implémentations dynamiques de v box */
#include <stdlib.h>
#include <gtk/gtk.h>
#include <string.h>
GtkWidget* vbox; /* v box princale */
GtkWidget* vbox2;
GtkAdjustment *verticalAdjust;
GtkWidget* barre; /* scrolled windows */
int main(int argc,char **argv)
{
GtkWidget* pWindow;
GtkWidget* pLabel[20];
GtkWidget* boutton;
int i;
char tempo[20];
void suite(GtkWidget *widget, gpointer pData); /* fonction call back si boutton clicked */
gtk_init(&argc,&argv);
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "scrolled barre et construction de vbox");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
/* Creation des labels */
for (i=0; i<20;i++)
{
pLabel[i]=gtk_label_new(NULL);
(void)sprintf(tempo,"label %2d",i);
gtk_label_set_text (pLabel[i], tempo);
}
/* on les mets dans une v box */
vbox2=gtk_vbox_new(FALSE, 0);
for (i=0; i<20;i++)
gtk_box_pack_start(GTK_BOX(vbox2), pLabel[i], TRUE, TRUE, 0);
/* creation d'une autre v box (principale) */
vbox=gtk_vbox_new(FALSE, 0);
/* creation du widget avec barre de défilement */
barre=gtk_scrolled_window_new(NULL, NULL);
/* on ne veux que la barre verticale - if needed */
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(barre), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
/* on ne veux pas de bord autour */
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(barre), GTK_SHADOW_NONE);
/* on met la barre à droite */
gtk_scrolled_window_set_placement(GTK_SCROLLED_WINDOW(barre), GTK_CORNER_BOTTOM_RIGHT);
/* on déroule tout en bas */
verticalAdjust=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(barre));
gtk_adjustment_set_value(verticalAdjust, verticalAdjust->upper);
gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(barre), verticalAdjust);
/* creation d'un bouton et on le met dans la v box principale */
boutton=gtk_button_new_with_label("ajout d'un label");
gtk_box_pack_start(GTK_BOX(vbox), boutton, FALSE, FALSE, 0);
/* on met la v box dans le widget avec barre de défilement*/
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(barre), vbox2);
/* On ajoute le widget avec barre de défilement a l'intérieur de la v box principale */
gtk_box_pack_start(GTK_BOX(vbox), barre, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(pWindow), vbox);
/* Connexion des signaux */
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect(G_OBJECT(boutton), "clicked", G_CALLBACK(suite), NULL);
/* Affichage de la fenêtré et de tout ce qu'il contient */
gtk_widget_show_all(pWindow);
gtk_main();
return EXIT_SUCCESS;
}
void suite(GtkWidget *window, gpointer data)
{
GtkWidget* label=NULL;
label=gtk_label_new("un autre label");
/* on rajoute un élément à la v box */
gtk_box_pack_start(GTK_BOX(vbox2),label, TRUE, TRUE, 0);
/* et on déroule tout en bas */
verticalAdjust = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(barre));
gtk_adjustment_set_value(verticalAdjust, verticalAdjust->upper);
gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(barre), verticalAdjust);
} |
Partager