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 77 78 79 80 81
|
/** File scrolled_text.c
* Essai pour rendre visible la fin du texte
* dans une scrolled window
*/
#include <gtk/gtk.h>
static gint width = 450 ,height = 150;
static GtkWidget *w_text = NULL;
/* Le callback pour "scroller" la fenetre */
static void scroll_CB (GtkTextBuffer *t_buf ,gpointer p)
{
GtkTextMark *mark = gtk_text_buffer_get_insert (t_buf);
/*
* NE MARCHE PAS avec gtk_scrolled_window_add_with_viewport(). Voir:
* http://mail.gnome.org/archives/gtk-app-devel-list/2006-December/msg00151.html
*/
gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW(w_text) ,mark);
printf ("scroll: mark = %p \n" ,mark);
}
int main( int argc ,char *argv[] )
{
GtkWidget *w_main ,*w_box ,*w_label ,*w_sw;
GtkTextBuffer *t_buf;
GtkTextIter start ,end;
char msg[64];
int i;
GtkObject *hadjust ,*vadjust;
/* Fenetre principale */
gtk_init (&argc, &argv);
w_main = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (w_main, 300, 200);
/* Boite VBox contenant la scrolled_window */
w_box = gtk_vbox_new (FALSE, 2);
w_label = gtk_label_new_with_mnemonic ("Essai pour voir la fin du text");
gtk_box_pack_start (GTK_BOX (w_box) ,w_label, FALSE, FALSE, 1);
/* La scrolled_window */
w_sw = gtk_scrolled_window_new (NULL,NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(w_sw)
,GTK_POLICY_AUTOMATIC
,GTK_POLICY_AUTOMATIC);
gtk_widget_set_size_request (w_sw ,width ,height);
/* Le gtk_buffer et la gtk_textview */
w_text = gtk_text_view_new ();
t_buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (w_text));
gtk_widget_show (w_text);
/* gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(w_sw) ,w_text);
* est INCOMPATIBLE avec gtk_text_view_scroll_mark_onscreen().
*/
hadjust = gtk_adjustment_new (0.0 ,0.0 ,200.0 ,1.0 ,10.0 ,100.);
vadjust = gtk_adjustment_new (0.0 ,0.0 ,100.0 ,1.0 ,10.0 ,50.);
w_sw = gtk_scrolled_window_new ( (GtkAdjustment *)hadjust ,(GtkAdjustment *)vadjust);
gtk_container_add (GTK_CONTAINER (w_sw) ,w_text);
gtk_box_pack_start (GTK_BOX (w_box) ,w_sw ,TRUE , TRUE, 1);
gtk_container_add (GTK_CONTAINER (w_main) ,w_box);
g_signal_connect (w_main ,"delete_event" ,G_CALLBACK (gtk_main_quit) ,NULL);
g_signal_connect (t_buf ,"changed" ,G_CALLBACK (scroll_CB) ,NULL);
gtk_widget_show_all (w_main);
/* On remplit la fenetre */
for (i = 0; i < 30; i++) {
sprintf (msg ,"Ligne \t %d\n" ,i);
gtk_text_buffer_get_bounds (t_buf ,&start ,&end);
gtk_text_buffer_insert (t_buf ,&end ,msg ,-1);
}
gtk_main ();
return 0;
} |
Partager