24 de Octubre 2005

Tree Store

Implementacion de Tree Store en POO.

Si bien, habia implementado en T-Gtk el tema de los Listore, este fin de semana
he sacado tiempo para terminar el tema de los Tree Store.

He realizado una mejora con respecto a los listore, que tengo que tocarlos para que
soporten la manera de hacer en ambos modelo de datos, y es que si una columna,
el padre , OF, no es un TreeView , lo tratará como otra columna, de esta manera,
podemos formar varias columnas, como una sola columna.

La verdad, es que el Modelo/Vista/Controlador, nos da un maravillo mundo de posibilidades.

Como muestra, una imagen:
treestore.JPG

Como siempre, aqui esta el codigo fuente:


/* Ejemplo de TreeStore */

#include "gclass.ch"

#define GtkTreeIter Array( 4 )

Function Main()

local hWnd, oScroll, oTreeView, oWnd, oLbx, oBox, oCol, oCol2, oCol4

DEFINE WINDOW oWnd TITLE "T-Gtk TreeStore power!!" SIZE 600,400
DEFINE BOX oBox VERTICAL SPACING 8 OF oWnd
DEFINE LABEL PROMPT "Planning Calendar" OF oBox

DEFINE SCROLLEDWINDOW oScroll OF oBox EXPAND FILL
oScroll:SetShadow( GTK_SHADOW_ETCHED_IN )
oScroll:SetPolicy( GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC)

/*Modelo de Datos */
oLbx := Create_Model()

DEFINE TREEVIEW oTreeView MODEL oLbx OF oScroll CONTAINER
oTreeView:SetRules( .T. )


DEFINE TREEVIEWCOLUMN oCol COLUMN 1 TITLE "Holiday" TYPE "text" OF oTreeView
oCol:SetResizable( .T. )
// Esta columna, formará parte de "Holiday"
DEFINE TREEVIEWCOLUMN COLUMN 4 TYPE "progress" OF oCol

DEFINE TREEVIEWCOLUMN oCol COLUMN 2 TITLE "Check + FIESTA!!" TYPE "active" OF oTreeView
oCol:Set_Valist( oCol:pRenderer ,{ "cell-background", "Yellow", ;
"cell-background-set", .t. } )

// Fijaos, como podemos FORMAR en una misma columna , un grafico , por ejemplo.
// Ademas, alineamos el pixbuf a la derecha, xAlign, y mantememos el mismo color de fondo
DEFINE TREEVIEWCOLUMN oCol2 COLUMN 3 TYPE "pixbuf" OF oCol EXPAND
oCol2:Set_Valist( oCol2:pRenderer ,{ "cell-background", "Yellow", ;
"cell-background-set", .t.,;
"xalign", 0.0 } )

oTreeView:SetFocus()

ACTIVATE WINDOW oWnd CENTER

RETURN NIL

STATIC FUNCTION Create_Model()
local oLbx
local aParent, aChild , aIter
local nMonth, nDay, pixbuf
local nToday := 0
local aDays := { "Lunes", "Martes", "Miercoles", "Jueves", ;
"Viernes", "Sabado", "Domingo" }
local aMonths := { "Ene", "Feb", "Mar", "Abr", "May", "Jun", ;
"Jul", "Ago", "Sep", "Oct", "Nov", "Dic" }

DEFINE TREE_STORE oLbx TYPES G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF , G_TYPE_INT

pixbuf := gdk_pixbuf_new_from_file( "../../images/gnome-gsame.png" )

for nMonth := 1 to len( aMonths )

APPEND TREE_STORE oLbx ITER aParent VALUES aMonths[nMonth]
SET TREE_STORE oLbx ITER aParent POS 4 VALUE 50

for nDay := 1 to 30
if nToday == 7
SET TREE_STORE oLbx ITER aParent POS 2 VALUE .T.
nToday = 1
else
nToday += 1
endif
SET TREE_STORE oLbx ITER aParent POS 2 VALUE .T.

APPEND TREE_STORE oLbx PARENT aParent ;
ITER aChild ;
VALUES aDays[nToday] + " " +;
str(nDay,2) + " de " + aMonths[nMonth] + " de 2.005"
if aDays[nToday] == "Sabado" .OR. aDays[nToday] == "Domingo"
SET TREE_STORE oLbx ITER aChild POS 2 VALUE .T.
SET TREE_STORE oLbx ITER aChild POS 3 VALUE pixbuf
SET TREE_STORE oLbx ITER aChild POS 4 VALUE 100
else
SET TREE_STORE oLbx ITER aChild POS 4 VALUE nDay
endif
next
next

gdk_pixbuf_unref( pixbuf )

/* Ejemplo de INSERTAR un padre y un par de hijos en la primera posicion */
INSERT TREE_STORE oLbx ROW 1 ITER aParent // Padre

SET TREE_STORE oLbx ITER aParent POS 1 VALUE "Hola" // Valor Padre

SET TREE_STORE oLbx ITER aParent POS 4 VALUE 75 // Valor de Progress

INSERT TREE_STORE oLbx ROW 1 ;
ITER aChild PARENT aParent ;
VALUES "Hijo",.T.,pixbuf,100 // Hijo con valores directamente

INSERT TREE_STORE oLbx ROW 1 ;
ITER aIter PARENT aChild ;
VALUES "SubHijo",.F.,,50 // Hijo con valores directamente

Return oLbx

Saludos.

Escrito por Rafa Carmona a las 3:42 PM | Comentarios (1)

13 de Octubre 2005

T-Gtk 1.0 Alpha

Por fin liberamos la version 1.0 de T-Gtk
Disponible en el grupo : http://es.groups.yahoo.com/group/t-gtk/

T-Gtk es una GUI para los compiladores Harbour y xHarbour, multiplataforma,
usando como toolkit grafico a GTK 2.6.X

Entre las mejoras entre la release 0.5 y la 1.0, por dichas mejoras,
bastantes, pasamos de la fase 'experimental' a un estado alpha.

+ Browse nativos para Dbf/Arrays
* Clases para soportar con o sin *gClass
+ DbfGrid ( * gDbfGrid )
El browse es columnar, soportando fonts, colores y redimensionado
de las columnas.
+ DbfGridColumn ( * gDbfGridColumn )
+ TScrollBar ( * mismo nombre )

------------------------------------------------------------------------------
Nuevos y mejoras de Widgets en POO:
------------------------------------------------------------------------------
+ N gTextView
+ N gTreeView
+ N gTreeViewColumn
+ N gListore
+ N gMisc
+ gImage
+ gSpinButton
+ gWindow
+ gWidget
+ gDialog
+ gArrow
+ gLabel
+ gEntry
+ gStatusBar

------------------------------------------------------------------------------
Ejemplos nuevos:
------------------------------------------------------------------------------
+ OnFly, creacion y destruccion de widgets on fly
+ Browse, RECUPERAR LA FOTO del M/V/C en una ventana!!!
+ Splash, enseñamos como hacer una splash screen con T-Gtk
+ Browse de T-Gtk, ejemplos de browses con el widget gtkbrowse de
T-Gtk, usando dbfs y/o arrays.
+ Dialogos, NUEVO EJEMPLO de dialogos, clausula ACTIVATE...RUN
+ menupopups, Como crear Menupopups nativamente.
+ Pixbuf!, El ejemplo espectacular que hay en C, PERO CON HARBOUR!!!

------------------------------------------------------------------------------
Nuevos comados:
------------------------------------------------------------------------------
+ DEFINE LIST_STORE
+ DEFINE TREEVIEW
+ DEFINE TREEVIEWCOLUMN
+ Clausulas HALIGN, VALIGN para Arrow, Image, y Label
+ Clausula JUSTITY para gLabel


------------------------------------------------------------------------------
+ Muchas mas funciones en C:
------------------------------------------------------------------------------
+ MsgBox(..., cTitle ), permite especificar un nuevo titulo
+ Mas señales portadas del sistema
+ Mas y mas funciones gtk_etc.. portadas desde GTK para Harbour.
+ Mas funciones de gdk_pixbuf...

+ Documentacion de Listore y mas guia basica.

Mas cosas lo vereis vosotros mismo a traves del ChangeLog de la version 1.

Espero que esta nueva release sea de vuestro agrado.

Saludos
Rafa Carmona

Escrito por Rafa Carmona a las 3:31 PM | Comentarios (0)