Page 1 of 1
cantidad de items en un TREE
Posted: Wed Sep 08, 2021 3:49 pm
by goosfancito
hola.
en un tree, si hago un len(oItem:aitems) me devulve la cantidad de item de esa rama, pero si existen ramas dentro de ese "oItem" no me las cuenta, debo hacerlo recorrindom la rama misma. Hay algun atributo o DATA que la clase tenga esa cantidad de items?
gracias.
Re: cantidad de items en un TREE
Posted: Thu Sep 09, 2021 2:02 pm
by Antonio Linares
Prueba así:
local nItems := 0
oTree:Scan( { || nItems++, .F. } ) // la forma completa sería { | oItem | nItems++, .F. } .F. significa que no ha encontrado lo que busca
MsgInfo( nItems )
Re: cantidad de items en un TREE
Posted: Thu Sep 09, 2021 3:22 pm
by goosfancito
barbaro, necesitaba eso para progresar ocn el CORTAR y PEGAR,
asi lo subo definitivo.
gracias.
Re: cantidad de items en un TREE
Posted: Fri Sep 10, 2021 9:16 am
by goosfancito
::oTree es mi arbol
::oItemCortar es la "rama" que quiero cortar, con sus item dentro, que la selecciono cando hago esto:
Code: Select all | Expand
METHOD MenuPop( nRow, nCol )
LOCAL oMenu
LOCAL oItem := ::oTree:hitTest( nRow, nCol )
IF ( oItem != NIL )
Menu oMenu POPUP
IF ( ::nHitemCortar ) == 0
IF ( oItem:hItem != ::nIdRaiz )
MenuItem "Cortar" ACTION ::accionesArbol( VK_INSERT, oItem )
ENDIF
ELSE
MenuItem "Pegar aquí..." ACTION ::accionesArbol( VK_RETURN, oItem )
ENDIF
EndMenu
ACTIVATE POPUP oMenu At nRow, nCol OF ::oTree
ENDIF
RETURN ( NIL )
//------------------------------------------------------------------------------
METHOD accionesArbol( nOpcion, oItem )
CASE nOpcion == VK_INSERT // cortar
::oItemCortar := oItem
endcase
return (nil)
Ahora bien, cuando hago esto siempre me devuelve "el total de los items" del arbol, y pretendo obtener solamente el total de item de "::oItemCortar"
Code: Select all | Expand
LOCAL oItem:= ::oItemCortar
local nTotalItems:= 0
::oTree:scan( { | oItem | nTotalItems++,.F. } )
msginfo(nTotalItems)
Que estoy haciendo mal?
Re: cantidad de items en un TREE
Posted: Sat Sep 11, 2021 5:12 am
by Antonio Linares
Gustavo,
la cantidad de items que contiene un item:
Len( oItem:aItems )
La cantidad de items que contiene el contenedor del item:
Len( oItem:oParent:aItems )
Re: cantidad de items en un TREE
Posted: Sun Sep 12, 2021 12:39 pm
by goosfancito
bien,
si me permitis voy a colgar aca el metodo que quiero hacer para saber
cuantos item posee el actual nodo, haciendo recursividad me imagino, con esos dos metodos que me pasaste ninguno me dice el total en si, solo los items que posee un nodo, pero si en ese nodo hay un "parent" no lo cuenta... y es lo que necesito para saber cuales son los item que tengo que "mover" a otra rama.
Re: cantidad de items en un TREE
Posted: Mon Sep 13, 2021 1:52 am
by goosfancito
necesito por favor que me ayuden con la recursividad porque no se como hacerla.
tengo que recorrer cada oItem que exista en una rama para saber cuantos item tiene.
gracias.
Re: cantidad de items en un TREE
Posted: Mon Sep 13, 2021 6:17 am
by Antonio Linares
Gustavo,
Tienes que añadir estos métodos:
Clase TTreeView:
METHOD Len() INLINE Len( ::aItems )
y
Code: Select all | Expand
METHOD Count() CLASS TTreeView
local nItems := 0, bAction := { | oItem | nItems++, .F. }
::Scan( bAction )
return nItems
Ahora en la Clase TTVItem añadimos estos métodos:
METHOD Len() INLINE Len( ::aItems )
y
Code: Select all | Expand
METHOD Count() CLASS TTVItem
local oItem, nItems := 1
for each oItem in ::aItems
nItems += 1 + If( ! Empty( oItem:aItems ), ( oItem:Count() - 1 ), 0 )
next
return nItems
He modificado el ejemplo FWH\samples\pim.prg para usar estos nuevos métodos y obtener lo que necesitas:
MENUITEM "Tree items" ACTION MsgInfo( oTree:Count() )
MENUITEM "Count items" ACTION If( oTree:GetSelected() != nil, MsgInfo( oTree:GetSelected():Count() ), )
Ahora puedes pulsar el botón derecho en cualquier item y saber cual es su longitud ó cuantos items y subitems tiene en total

Incluido en el próximo build de FWH
Re: cantidad de items en un TREE
Posted: Mon Sep 13, 2021 9:38 am
by goosfancito
bien! ahora si puedo hacer el CORTAR y PEGAR.
hay que agregar los encabezados en cada clase.
Re: cantidad de items en un TREE
Posted: Mon Sep 13, 2021 10:09 am
by Antonio Linares
> hay que agregar los encabezados en cada clase
a que te refieres ?
Re: cantidad de items en un TREE
Posted: Mon Sep 13, 2021 11:38 am
by goosfancito
Re: cantidad de items en un TREE
Posted: Fri Apr 22, 2022 10:57 am
by goosfancito
Antonio,
Por que puede ser que eso me de este error?
Time from start: 0 hours 0 mins 1 secs
Error occurred at: 04/22/22, 07:55:45
Error description: Error BASE/1004 No exported method: COUNT
Args:
[ 1] = U
tengo esta version:
#define FWVERSION "FWH 21.11"
#define FW_VersionNo 21110
Re: cantidad de items en un TREE
Posted: Fri Apr 22, 2022 11:34 am
by Antonio Linares
Ese error te aparece porque no hay ningún item del tree seleccionado, por eso devuelve nil
Hazlo asi:
if oTree:getselected() != nil
? oTree:getselected():count()
endif
Re: cantidad de items en un TREE
Posted: Fri Apr 22, 2022 11:45 am
by goosfancito
Hecho.
a ver si me das una mano con esto:
yo tengo un Tree que tiene ramas y la propiedad cargo me guarda en cada ADD un ID (que lo trae de una DB sino usaria el hitem)
cuando quiero agregar un item nuevo que esta identificado por un "id" (sacado de la dB) "necesito" recorrerme TODO el arbol
y donde el "id" de la rama nueva coincida con cargo["id"] de alguna de las ramas que ya contiene el arbol AHI agregarla.
Estoy dando vueltas pero no logro conseguir lo que quiero.
Re: cantidad de items en un TREE
Posted: Fri Apr 22, 2022 12:33 pm
by Antonio Linares
oItem = oTree:Scan( { | oItem | oItem:Cargo == nId } )