cantidad de items en un TREE

cantidad de items en un TREE

Postby goosfancito » Wed Sep 08, 2021 3:49 pm

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby Antonio Linares » Thu Sep 09, 2021 2:02 pm

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 )
regards, saludos

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

Re: cantidad de items en un TREE

Postby goosfancito » Thu Sep 09, 2021 3:22 pm

barbaro, necesitaba eso para progresar ocn el CORTAR y PEGAR,
asi lo subo definitivo.

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby goosfancito » Fri Sep 10, 2021 9:16 am

::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 view  RUN
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 view  RUN
 LOCAL oItem:= ::oItemCortar
   local nTotalItems:= 0

   ::oTree:scan( { | oItem | nTotalItems++,.F. } )

    msginfo(nTotalItems)


Que estoy haciendo mal?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby Antonio Linares » Sat Sep 11, 2021 5:12 am

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 )
regards, saludos

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

Re: cantidad de items en un TREE

Postby goosfancito » Sun Sep 12, 2021 12:39 pm

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby goosfancito » Mon Sep 13, 2021 1:52 am

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby Antonio Linares » Mon Sep 13, 2021 6:17 am

Gustavo,

Tienes que añadir estos métodos:

Clase TTreeView:

METHOD Len() INLINE Len( ::aItems )

y

Code: Select all  Expand view  RUN
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 view  RUN
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
regards, saludos

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

Re: cantidad de items en un TREE

Postby goosfancito » Mon Sep 13, 2021 9:38 am

bien! ahora si puedo hacer el CORTAR y PEGAR.
hay que agregar los encabezados en cada clase.

Code: Select all  Expand view  RUN
method count()...
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby Antonio Linares » Mon Sep 13, 2021 10:09 am

> hay que agregar los encabezados en cada clase

a que te refieres ?
regards, saludos

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

Re: cantidad de items en un TREE

Postby goosfancito » Mon Sep 13, 2021 11:38 am

Code: Select all  Expand view  RUN
classs TTVItem
   METHOD Count() CLASS TTVItem

 
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby goosfancito » Fri Apr 22, 2022 10:57 am

Antonio,

Code: Select all  Expand view  RUN
? oTree:getselected():count()


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
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby Antonio Linares » Fri Apr 22, 2022 11:34 am

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
regards, saludos

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

Re: cantidad de items en un TREE

Postby goosfancito » Fri Apr 22, 2022 11:45 am

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.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: cantidad de items en un TREE

Postby Antonio Linares » Fri Apr 22, 2022 12:33 pm

oItem = oTree:Scan( { | oItem | oItem:Cargo == nId } )
regards, saludos

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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 20 guests

cron