Mejor soporte de TextView o memos, en T-Gtk
La verdad , es que el tema de TextView lo tenia un poco olvidado, puesto que una vez conseguido el funcionamiento sobre lo más primitivo, osease, poner un texto y poder editarlo, era más que suficiente.
Al intentar abordar un tema tan simple como es la insercion de un cadena de texto en el textview, me he dado cuenta de que no era posible!!.
Generalmente, desarrollo nuevos widgets o implemento nuevas funcionalidades a medida que voy realizando programas, y me encuentro en la necesidad de abordar el problema que se me plantea.
En este caso, me he encontrado en la necesidad de una insercion de un texto, y he acabado por implementar la insercion del texto, de imagenes, y la posibilidad de definir tags.
Voy a explicar el uso de la creacion y gestion de un TextView bajo T-Gtk, para que podamos observar que no cuesta, en principio, mucho trabajo.
Este ejemplo mezclará el uso de glade, POO y funciones nativas, puesto que actualmente, tengo que encapsularlo en los objetos correspondientes, pero que afectos practicos en lo mismo.
Empecemos.
Lo primero que haremos , será definir el widget TextView desde glade:
DEFINE TEXTVIEW oTextView VAR cLog_Paquete ID "textpaquete" RESOURCE cGlade
Ya tenemos el widget TextView a traves de un objeto, oTextView.
Ahora , podemos insertar texto, imagenes y creacion de Tags , sin problemas:
oTextView:Insert( "Ejemplo de uso T-Gtk y TextView" + CRLF )
Como podeis observar, el insertar un texto, es bien simple.
Ahora bien, imagina que queremos que la font sea mas grande, o que tenga un fondo de color rojo.
Lo primero que haremos , será crear los tags correspondiente.
Los tags, son como unas etiquetas que informan sobre las propiedades que queremos aplicarle a un texto que vayamos a insertar, lo vemos :
oTextView:oBuffer:CreateTag( "alert",{ "foreground", "red", "family", "monospace" } )
Cada objeto oTextView, contiene una variable de instancia, oBuffer, que es el que realmente es el que introduce el texto, mientras que TextView es el encargardo de visualizarlo.
La linea que hemos visto, determina que el tag, "alert", vamos a poner un fondo de letra roja y que sea monoespaciada.
Ahora bien, como el buffer solamente entiende cadenas UTF-8, no podemos
saber la posicion tan a la ligera, el cual usaremos un offset sobre el buffer, para
determinar el lugar en el cual estamos y en el cual queremos introducir nuestro
texto:
gtk_text_buffer_get_iter_at_offset( oTextView:oBuffer:pWidget, aStart, -1 )
Esta funcion ,gtk_text_buffer_get_iter_at_offset, es la que nos devuelve, a traves de una estructura GtkTextIter, aStart, donde estamos.
En T-Gtk aStart es un array( 14 ), lo cual es obligatorio que asi sea, para simular el uso de una estructura.
Pero, realmente, la instruccion anterior, nos muestra el final del texto, -1, sobre el cual nosotros vamos a insertar la nueva cadena, asi podemos afirmar que el inicio nuestro es el final real del buffer ;-)
Despues, podemos insertar el texto con el tag correspondient,tan simple como:
oTextView:oBuffer:Insert_Tag_Name( "ATENCION!!", "alert", aStart )
De esta forma insertamos el texto, "ATENCION!!", con las propiedades del tag, "alert", y en el lugar donde nos indica el GtkTextIter, aStart.
Bueno, como podeis observar, no es tan complicado de entender cuando alguien te lo explica, jejejeje.
Bueno, ahora lo unico que nos queda, será meterle una imagen, para que la informacion visual sea mejor:
//Obtenemos el sitio donde ubicarlo
gtk_text_buffer_get_iter_at_offset(oTextView:oBuffer:pWidget, aStart, -1 )
//Cargamos una imagen
pix := gdk_pixbuf_new_from_file( "./alert.png" )
//Y la insertamos en su lugar
gtk_text_buffer_insert_pixbuf( oTextView:oBuffer:pWidget, aStart, pix )
//Hay que desreferenciar el pixbuf
g_object_unref( pix )
Bueno, como podemos comprobar, no tiene mucho misterio ;-).
Queda mucho por hacer en el tema del TextView, ya que contiene varios widgets, pero poco a poco iremos aumentando las posibilidades.
Una imagen para que veas como queda todo lo explicado:
Rafa,
A veces me parece que los mensajes que sean simplemente un elogio por el trabajo realizado por alguien no forman parte de mi forma de relacionarme por la red.
Sin embargo quiero hacer simplemente esto, agradeceros a Quim y a ti la voluntad y el esfuerzo personal que ponéis en T-GTK, de los cuales nos aprovechamos, de momento, los que lo utilizamos i intentamos comprender su funcionamiento.
Espero poder aportar algún dia parte de mi aprendizaje --ya de anciano en estos parajes-- para compensar este esfuerzo.
Miquel
Escrito por Miquel a las 25 de Enero 2006 a las 04:56 PM