Inicie repositorio prueba e Tree (LO LOGRE)

User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Inicie repositorio prueba e Tree (LO LOGRE)

Post by goosfancito »

Hola.
Inicie un repositorio en git para ir poniendo el avance que tengo en el tree. El proyecto lo arme con el entorno del xMate (en el raíz existe un archivo con el nombre harbour32.env) los que quieran colaborar bienvenido sean.
La idea del Tree:
1) poder insertar ramas con los datos: Fecha, Nombre y Apellido
2) poder modificar los datos que se ingresaron
2) poder eliminar una rama
3) mantener ordenado el arbol.
4) poder guardar en un .txt el arbol
5) poder "rearmarlo" leyendo ese .txt el arbol.
Si tienen alguna idea y si Antonio lo permite me gustaría que en este hilo lo pongan y vamos discutiendo. Este repositorio es público y no lo voy a eliminar. No quiero usar xBrowse ni nada por el estilo, solo un Tree.

https://github.com/gusmavf/prueba_tree_2024
Last edited by goosfancito on Wed Aug 30, 2023 10:11 am, edited 1 time in total.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Inicie repositorio prueba e Tree

Post by goosfancito »

Antonio

Ahi subí al repositorio lo que estoy haciendo y me esta pasando lo siguiente:
en el archivo arbol_2024.prg en la linea 125 intento guardar en una variable que la declaro a nivel del metodo llamada "oRama" el ítem que se selecciona, el item es seleccionado pero no lo deja pintado, ahora si yo no hago esa asignación, o sea lo dejo simplemente asi:

Code: Select all | Expand

   oTree:blclicked := { | nRow, nCol, nKeyFlags | ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }
el item seleccionado queda pintado, porque puede estar pasando eso?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Estimado Gustavo,

No se a que te refieres exactamente

Puedes hacer un video para que se entienda lo que estas haciendo y lo que sucede ? gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Inicie repositorio prueba e Tree

Post by goosfancito »

ejecuta el programa y luego selecciona alguna de las ramas y vas a ver que no queda "pintado" en azul. PERO internamente si se ha seleccionado.

despues de eso:

si cambias la linea como lo digo en el post vas a ver que al seleccionar algun item si queda "pintado"

https://drive.google.com/file/d/1Xlj2VA ... drive_link
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Comenta esta línea:

// oTree:blclicked := { | nRow, nCol, nKeyFlags | oRama:= ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }

No puedes interferir el funcionamiento por defecto del botón izquierdo en el árbol
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

He usado estos fichero go.bat y tree.hbp para construir con hbmk2:

go.bat

Code: Select all | Expand

set path=c:\bcc7\bin
c:\harbour\bin\win\bcc\hbmk2 tree.hbp -comp=bcc
tree.hbp

Code: Select all | Expand

-I.\Include
-Ic:\fwh\include
source\arbol_2024.prg
source\TAbm.prg
source\extra\debug.prg

-Lc:\fwh\lib
-lfiveh
-lfivehc

Resource\recursos.res

hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc
hbct.hbc
xhb.hbc
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Deberias usar el código de FWH\samples\pim.prg y no reinventar la rueda :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Inicie repositorio prueba e Tree

Post by goosfancito »

Antonio Linares wrote:Comenta esta línea:

// oTree:blclicked := { | nRow, nCol, nKeyFlags | oRama:= ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }

No puedes interferir el funcionamiento por defecto del botón izquierdo en el árbol
y en este caso que necesito que al hacer un click me seleccione una rama como lo hago?
el pim.prg (hablo por mi) se me es muy dificil seguirlo con lo que tengo que hacer.

Ahora estoy avanzando y el modo que encontre mas facil para mi es ir ubicando las ramas en la posicion que necesito (fecha menor arriba de las siguientes) y no ordenar al arbol una vez que inserto la rama, ya despues subo lo que estoy logrando justamente para que el que quiera colaborar con las ideas las haga.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Usa oTree:bChanged
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Inicie repositorio prueba e Tree

Post by goosfancito »

Estoy intentando hacer con el scan del tree y ascan para recorrerlo pero no me da.
tengo un tree con ramas, necesito saber el hitem de cada rama para compararlo con otro hitem

el primer paso que hice fue

Code: Select all | Expand

oTree:scan({ |o| ... })
diganme si me equivoco porque es todo nuevo esto para mi.
en esa linea lo que hago es tomar "Cada rama" ?

Code: Select all | Expand

oTree:scan( { |o| ascan(o:aItems, ...) })
 
y en esa linea lo que hago es recorrerme los "aItems" de cada rama?

Code: Select all | Expand

oTree:scan( { |o| aScan(o:aItems, { | a | a:hitem == nOtroHitem }) })
 
y yo pienso que con esa ultima linea haria lo que necesito pero no, no funciona.
Error description: Error BASE/1066 Argument error: conditional
Args:
[ 1] = N 0
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Prueba esto:

oTree:Scan( { | o | MsgInfo( o:cPrompt ), .F. } )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Inicie repositorio prueba e Tree

Post by goosfancito »

Antonio,
Necesito una vez que creo una rama moverla una rama mas arriba (solo una posicion) he intentado hacer esto pero no me sale, como se hace?

Code: Select all | Expand

            oItem := oTree:scan( { | o | o:hitem == oRama:aItems[ 1 ]:hitem } )
            oItem := oTree:insertAfter( oItem, cPrompt )
            oItem:cargo := { ;
                             "fecha" => vGets[ 1 ], ;
                             "hitem_parent" => IIf( oItem:oParent != NIL, oItem:oParent:hitem, 0 ) ;
                     }

            oTree:SwapUp()
 
Solo me estaría faltando eso para poder terminar con esto.
La técnica que usé fue cada vez que se inserta una rama comprobar cual es la inmediata superior (con respecto a la fecha) y crearla arriba de esa rama. el problema que tenía es que si estoy en la posicion 1 de aItems no puedo generar una rama sobre ella, entonces la quiero generar abajo y moverla una posición hacia arriba.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Estimado Gustavo,

Prueba así:

Code: Select all | Expand

           oItem := oTree:scan( { | o | o:hitem == oRama:aItems[ 1 ]:hitem } )
            oItem := oTree:insertAfter( oItem, cPrompt )
            oItem:cargo := { ;
                             "fecha" => vGets[ 1 ], ;
                             "hitem_parent" => IIf( oItem:oParent != NIL, oItem:oParent:hitem, 0 ) ;
                     }

            oTree:Select( oItem )
            oTree:SwapUp()
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Inicie repositorio prueba e Tree

Post by goosfancito »

Code: Select all | Expand

   Error occurred at: 28/08/2023, 10:52:13
   Error description: Error BASE/1004  No exported method: HITEM
   Args:
     [   1] = U   

Stack Calls
===========
   Called from:  => HITEM( 0 )
   Called from: Source\tree_fw\ttreevie.prg => TTREEVIEW:INSERTAFTER( 323 )
   Called from: Source\tree_fw\ttreevie.prg => TTREEVIEW:SWAPUP( 563 )
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Antonio Linares
Site Admin
Posts: 42268
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Inicie repositorio prueba e Tree

Post by Antonio Linares »

Mira el código de los métodos:

Code: Select all | Expand

METHOD SwapDown() CLASS TTreeView

   local oSelItem := ::GetSelected(), cPrompt := oSelItem:cPrompt

   ::GoNext()
   oSelItem:End()
   ::Select( ::InsertAfter( ::GetSelected(), cPrompt ) )
   
return nil

//----------------------------------------------------------------------------//

METHOD SwapUp() CLASS TTreeView

   local oSelItem := ::GetSelected(), cPrompt := oSelItem:cPrompt

   ::GoPrev()
   ::GoPrev()
   oSelItem:End()
   ::Select( ::InsertAfter( ::GetSelected(), cPrompt ) )
   
return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply