Re: Advise
- From: John Cupitt <jcupitt gmail com>
 
- To: Benoît Touron <b touron citb bull net>
 
- Cc: gtk-list gnome org
 
- Subject: Re: Advise
 
- Date: Thu, 20 Jan 2005 10:58:11 +0000
 
On Thu, 20 Jan 2005 11:47:35 +0100, Benoît Touron
<b touron citb bull net> wrote:
> If I could update the TextBuffer each time an event occurs, and actually
> display the TextView, say every second, it would be fine for me.
> How can I update a TextBuffer without updating the TextView ?
It's automatic: just update the buffer and everything will work.
Make the textview inside a scrolled window like this:
        swin = gtk_scrolled_window_new( NULL, NULL );
        gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ),
                GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
        gtk_box_pack_start( GTK_BOX( vbox ), swin, TRUE, TRUE, 0 );
        gtk_widget_show( swin );
        /* Not editable, no visible cursor, monospaced font.
         */
        trace->view = gtk_text_view_new();
        gtk_text_view_set_editable( GTK_TEXT_VIEW( trace->view ), FALSE );
        gtk_text_view_set_cursor_visible( GTK_TEXT_VIEW( trace->view ),
                FALSE );
        font_desc = pango_font_description_from_string( "Mono" );
        gtk_widget_modify_font( trace->view, font_desc );
        pango_font_description_free( font_desc );
        gtk_container_add( GTK_CONTAINER( swin ), trace->view );
        gtk_widget_show( trace->view );
Add text and make the view scroll to the end like this:
                GtkTextView *text_view = GTK_TEXT_VIEW( trace->view );
                GtkTextBuffer *text_buffer =
                        gtk_text_view_get_buffer( text_view );
                GtkTextMark *mark = gtk_text_buffer_get_insert( text_buffer );
                GtkTextIter iter;
                /* Move insert point to end of buffer, insert text, scroll to 
                 * make insert point visible.
                 */
                gtk_text_buffer_get_end_iter( text_buffer, &iter );
                gtk_text_buffer_move_mark( text_buffer, mark, &iter );
                gtk_text_buffer_insert_at_cursor( text_buffer, buf, -1 );
                gtk_text_view_scroll_to_mark( text_view, mark,
                        0.0, TRUE, 0.5, 1 );
The screen update will occur automatically when your computer has some
spare time.
Of course the buffer will get very big :-( you'll need a "clear
buffer" button, or maybe just keep the last 1000 lines or something.
John
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]