5 de Agosto 2004

T-Gtk. Implementacion Multiplataforma bajo GTK+

T-Gtk. Implementacion Multiplataforma bajo GTK+

Dentro de la reunion que tuvo lugar en Barcelona, explique lo que era T-Gtk
y para que la gente entienda el concepto dejo en estas lineas, espero que os
saque de dudas, lo que es y lo que no es T-Gtk.

Todo aquel que quiera probarlas, ya sea bajo Win32 o GNU/Linux,
enviarme un correo con el asunto: T-Gtk y sobre que plataforma.

¿ Que es T-Gtk ?
T-Gtk es un GUI de GTK+ para usarlo desde [x]Harbour.

Sobre que sistema operativo funciona
T-Gtk correra donde haya un Harbour , gcc y gtk+ disponible, es decir,
actualmente compagino en probar tanto en GNU/Linux y Windows, pero
tambien podra correr sobre MAC, FreeBsd, etc..

Estamos hablando a nivel de COMPATIBILIDAD de codigo a nivel de GUI,
no de codigo a nivel de sistema, como por ejemplo, la gestion de INIs,
el acceso a nivel de hardware, etc... donde los sistemas son completamente
distintos.


Implementacion y uso.
El camino escogido a sido, desde mi punto de vista claro esto, ser lo mas
parecido a GTK+ a nivel de C, ¿ Que quiero decir con esto ?
Quiero decir, que para programar , se programara practicamente como se hacer
en C, a nivel de funciones, despues ya se encapsulara todo eso , y si,
haremos el mismo preprocesador DEFINE WINDOW....

¿ Tengo que saber C ?
No. Que las funciones del API de GTK+ , sera el mismo nombre de funcion a
nivel de harbour, no signifique que se vaya a programar en C, si no
que se usara EL MISMO NOMBRE de la funcion, por ejemplo:

Si para crear un boton en C es :
GtkWidget * button = gtk_button_new_with_label( "Hola" );

transformando a T-Gtk+Harbour sera:
button = gtk_button_new_with_label( "Hola" )

Ustedes se preguntaran el porque asi, y no haber creado una funcion
que se llame, createbutton( cLabel ).

EL motivo principal, es que si buscan ayuda sobre una funcion en GTK+,
la misma ayuda de C le servira, porque se comportara EXACTAMENTE IGUAL.

Asi , la trasformacion de codigo C a PRG es trivial, en cosas bastantes
sencillas.

Ahora bien, para ahorrar velocidad y facilitar un poco la historia, hay
dos excepciones de momento:

+ Conversion a traves de Macros, esto lo hace ya automaticamente desde C,
no hace falta hacerlo, por ejemplo, esta funcion en C :

GtkWidget * button= gtk_button_new() ;
GtkWidget * checkbox = gtk_check_button_new_with_label( "Check" );
gtk_container_add( GTK_CONTAINER( button ), checkbox );

en harbour quedaria:

button= gtk_button_new()
checkbox = gtk_check_button_new_with_label( "Check" )
gtk_container_add( button , checkbox )

fijese , que la macro GTK_CONTAINER a desaparecido.

+ Por comodidad de transportar el codigo de C, se ha echo el soporte
de dichas funciones, que lo unico que hace es retorna el valor pasado.

+ La function Gtk_Connect_signal permite saltar a una funcion estatica en
Harbour, porque Harbour mete en la tabla dinamica de simbolos las
funciones estaticas, y Xharbour NO!
En xHarbour solamente se puede saltar, por el momento, a funciones
publicas.

Ahora bien, como pueden ver en los ejemplos, el usar funciones, impone
el escribir mucho codigo, para ello, tambien se esta portando a la
programacion de POO, de esta manera, sera mucho mas rapido y ademas
realizar el preprocesado es trivial y aprovecharemos mejor el tiempo.


¿ Como funciona GTK+ y que es eso de los widgets ?

Los widgets son sinonimos de controles en sistema Win32 API.
GTK+ es una libreria que crea y pone a disposicion una seria de controles,
para ello se basa en otro libreria de nivel inferior, GDK, que es la
encargada de dibujarlos, a parte de otras mas.
A nivel mas bajo , se conecta con XLib o Win32, nada mas.

En GTK+ existe el concepto de 'contenedor' de widgets, y solamente puede
contener un solo widget, es decir , un hijo.
Usted se pregunta , ¿ entonces en una ventana como coloco mis botones ?
Como dice el dicho popular, HECHA LA LEY HECHA LA TRAMPA,
pues bien sencillo, un contenedor a su vez puede contener a su vez a
otros contenedores.

Para entendernos, seria equivalente a usar la clase TPanel de Fivewin,
y esta a su vez fuera mas paneles, que contienen los botones.

Hay varios tipo de contenedores, hBox, vBox, paned, table, etc...

A su vez , un boton es un contenedor que contiene una etiqueta, por ejemplo.

A principio, este concepto es muy extraño si lo comparamos con el api win32,
pero es mucho mas potente a efectos practicos, son AUTODIMENSIONABLES, no
tenemos que gestionar su ancho / alto, el solo lo hara y se adaptara segun
le hayamos especificado su comportamiento.

Que de madura esta.

Actualmente esta portado estos widgets :

+ Window
+ Get/Entry ( Partialmente )
+ Notebooks
+ Button
+ Say
+ Radiobutton
+ Checkbox
+ Table
+ Box
+ Tooglebutton
+ Frame
+ Calendar
+ Paned
+ Image
+ Expander
+ Menus ( Parcialemente, falta el checkmenu, imagemenu )
+ Fixed
+ StatusBar
+ Separador
+ ProgressBar
+ Soporte de lenguaje de Marcas.
+ hSeparator
+ vSeparator
+ VBox
+ HBox
+ ToolTips
+ ButtonColor
+ Fonts ( Parcialmente, permite poner fuente a los widgets )
+ Combobox

Prototipo de Clases y control de eventos :
+ TWidget
+ TWindow
+ TButton

Funciones para hace la vida mas simples.
+ MyStyle(). Pon un stylo determinado a un widget concreto.


Explicacion de ejemplos

1.ProgressBar
Este ejemplo sencillamente enseña las distintas maneras de las cual podemos
enseñar una barra de progreso.

2.StatusBar.
Enseña como funciona la barra de status y los comboboxs.

3.Radiobutton
Ejemplo de seleccion por defecto de de unos radiobuttons, el 2.

4.Radiobutton2.
Metiendo un widget entry en el radiobutton.

5.Fixed.
Implementacion de widgets en posiciones fijas, a la win32

6.Notebook.
Sinonimo de Folders, funcionamiento de posiciones, etc..

7.Demotable.
Funcionamiento de tablas de empaquetamiento, imagenes y botones por
defecto, separados por un paned, simil de splitter y Fonts.

8.Demo.
Distintos widgets, calendar, expand, lenguaje de marcas, menus, el mas
completo.



Escrito por Rafa Carmona a las 5 de Agosto 2004 a las 12:09 PM
Comentarios

Hola rafa podrias envarme la T-gtk por favor.


actualmente la estoy provando bajo dev-c


saludos.
fernando sandoval ruiz

Escrito por fernando sandoval ruiz a las 28 de Septiembre 2004 a las 12:54 AM

Buen dia...
En este momento estamos en busqueda de un buen lenguaje de programacion multiplataforma para migrar las applicaciones de la empresa....Una de las opciones php - gtk quisiera conocer su opinion con respecto a la "robustes" que esto nos puede ofrecer en aplicaciones de mision critica..

muchas gracias

Escrito por elkin a las 24 de Noviembre 2004 a las 02:47 PM

Soy programador y estoy interesado en la programacion multiplataforma, en estos momentos programo el vb6 pero me interesaria conocer T-gtk.
Que opinion me daria al respecto?
Una aplicacion que haga, corre sobre cualquier plataforma sin necesidad de instalar algun frame?

Gracias

Escrito por Cristian a las 1 de Febrero 2007 a las 06:30 PM

Hola muy interesante el proyecto me lo puedes mandara mi correo?


Gracias

Escrito por Miguel Angel a las 15 de Mayo 2007 a las 04:53 PM
Escribir un comentario









¿Recordar informacion personal?