Cargar un Gtk TextView con informacion de un fichero

gtk text view

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

 -----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d? s: a-- C++ UL++++ P+ L++ 
E- W++ N++ o-- K- w-- 
O- M- V- PS PE-- Y-- PGP++ t+++ 
5++ X++ R !tv b++ DI+++ D+ 
G++ e++ h+ !r y** 
------END GEEK CODE BLOCK------
Ver artículos del autor (73)


About this entry