Page 1 of 2

Inicie repositorio prueba e Tree (LO LOGRE)

PostPosted: Mon Aug 21, 2023 6:02 am
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

Re: Inicie repositorio prueba e Tree

PostPosted: Mon Aug 21, 2023 7:59 pm
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 view
  oTree:blclicked := { | nRow, nCol, nKeyFlags | ::seleccionarRama( oTree, nRow, nCol, nKeyFlags ) }

el item seleccionado queda pintado, porque puede estar pasando eso?

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 5:27 am
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

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 5:46 am
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/1Xlj2VAufPUCxxEylyqvcgyzuseaSK_CD/view?usp=drive_link

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 11:18 am
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

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 11:21 am
by Antonio Linares
He usado estos fichero go.bat y tree.hbp para construir con hbmk2:

go.bat
Code: Select all  Expand view
set path=c:\bcc7\bin
c:\harbour\bin\win\bcc\hbmk2 tree.hbp -comp=bcc

tree.hbp
Code: Select all  Expand view
-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

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 11:23 am
by Antonio Linares
Deberias usar el código de FWH\samples\pim.prg y no reinventar la rueda :-)

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 1:00 pm
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.

Re: Inicie repositorio prueba e Tree

PostPosted: Tue Aug 22, 2023 6:37 pm
by Antonio Linares
Usa oTree:bChanged

Re: Inicie repositorio prueba e Tree

PostPosted: Thu Aug 24, 2023 5:30 pm
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 view
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 view
oTree:scan( { |o| ascan(o:aItems, ...) })
 

y en esa linea lo que hago es recorrerme los "aItems" de cada rama?

Code: Select all  Expand view
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

Re: Inicie repositorio prueba e Tree

PostPosted: Thu Aug 24, 2023 8:28 pm
by Antonio Linares
Prueba esto:

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

Re: Inicie repositorio prueba e Tree

PostPosted: Mon Aug 28, 2023 6:50 am
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 view
           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.

Re: Inicie repositorio prueba e Tree

PostPosted: Mon Aug 28, 2023 8:42 am
by Antonio Linares
Estimado Gustavo,

Prueba así:
Code: Select all  Expand view
          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()

Re: Inicie repositorio prueba e Tree

PostPosted: Mon Aug 28, 2023 8:52 am
by goosfancito
Code: Select all  Expand view
  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 )

Re: Inicie repositorio prueba e Tree

PostPosted: Mon Aug 28, 2023 9:00 am
by Antonio Linares
Mira el código de los métodos:
Code: Select all  Expand view
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