Cargar un Gtk TextView con informacion de un fichero
Esta en una forma de mostrar la informacion contenido en un archivo a este tipo de widget.
Vamos al codigo.
Entre las librerias necesarias acudo a las del sistema: types.h y stat.h para comprobar el tamaño del stream de entrada.
/* standard */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* linux */ #include <sys/types.h> #include <sys/stat.h> /* gtk+ */ #include <gtk/gtk.h>
La funcion encargada de manejar el evento.
void on_button_clicked(GtkWidget *widget, gpointer data) { FILE *file; char *path = "/home/shakka/Desktop/fichero.txt"; char *buffer; struct stat f_stat; GtkTextBuffer *t_buffer; GtkWidget *view; /* * process file */ file = fopen(path, "r"); /* get file properties */ stat(path, &f_stat); /* get data amount */ buffer = (char *) malloc (f_stat.st_size * sizeof (char *)); /* get stream */ fread(buffer, 1, f_stat.st_size, file); fclose(file); /* * end process file */ /* for manipulate a private widget */ view = GTK_WIDGET(data); /* set widget data */ t_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (view)); gtk_text_buffer_set_text(t_buffer, buffer, f_stat.st_size); }
Cuerpo principal de la aplicacion.
/* * main app. */ int main(int argc, char **argv) { /* main window */ GtkWidget *window; /* widgets */ GtkWidget *c_fixed; GtkWidget *g_button; GtkWidget *s_window; GtkWidget *t_view; /* init */ gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_title(GTK_WINDOW(window), "GtkTextView >>"); /* setting */ c_fixed = gtk_fixed_new(); s_window = gtk_scrolled_window_new(0, 0); g_button = gtk_button_new_with_label("Open File"); t_view = gtk_text_view_new(); /* packing */ gtk_container_add(GTK_CONTAINER (window), c_fixed); gtk_fixed_put(GTK_FIXED(c_fixed), s_window, 0, 0); gtk_fixed_put(GTK_FIXED(c_fixed), g_button, 0, 100); gtk_widget_set_size_request(s_window, 400, 98); gtk_widget_set_size_request(g_button, 400, 42); gtk_container_add(GTK_CONTAINER (s_window), t_view); /* events */ g_signal_connect(G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), 0); g_signal_connect(G_OBJECT (g_button),"clicked", G_CALLBACK (on_button_clicked), G_OBJECT (t_view)); /* render */ gtk_widget_show_all(window); /* run */ gtk_main(); return 0; }
Mas informacion: http://library.gnome.org
Este articulo fue publicado por: shakka

2 Comments
Jump to comment form | comments rss [?] | trackback uri [?]