APORTE - Arbol

Post Reply
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

APORTE - Arbol

Post by goosfancito »

Luego de bastante tiempo logre lo que necesitaba,
les dejo el codigo para que lo usen modifiquen y aporten.

Para probar solamente use un array pero la idea es que ese "array" luego se lo tome desde un mysql.

Code: Select all

METHOD inicializar()
   LOCAL aDatos := { }

   /*
   Transfiero un array, que tiene 4 posiciones,
   la primera es el texto que se va a mostrar en el arbol
   la segunda le paso un numero cualquiera que despues va a ser reemplazado por el hitem()
   la tercera es el INDICE, necesario para luego usarlo al momento de crear las ramas
   la cuarta le indica en que "rama" debe insertarse el item y tiene que estar ORDENADO
   */

   aDatos := { ;
               { "Raiz",   1, 1, 0 }, ;
               { "uno",    1, 2, 1 }, ;
               { "dos",    1, 3, 1 }, ;
               { "tres",   1, 4,  1 }, ;
               { "cuatro", 1, 5,  1 }, ;
               { "cinco",  1, 6, 2 }, ;
               { "seis",   1, 7, 3 }, ;
               { "siete",  1, 8, 3 }, ;
               { "ocho",   1, 9, 3 }, ;
               { "nueve",  1, 10,  5 }, ;
               { "diez",   1, 11,  5 }, ;
               { "once",   1, 12,  10 }, ;
               { "doce",   1, 13,  12 }, ;
               { "trece",  1, 14,  13 } ;
             }

   AAdd( ::aItems, ::oTree:ADD( aDatos[ 1 ][ 1 ] ) )

   aDatos[ 1 ][ 2 ] := ::aItems[ Len( ::aItems ) ]:hitem()
   ::recursivo( ::aItems[ 1 ], aDatos, 2, 1 )

   ::otree:expandall()

   RETURN ( NIL )

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

METHOD recursivo( oItem, aDatos, nInicio, nIdNodo)
   LOCAL nPosicion

   DO WHILE nInicio <= Len( aDatos )
      IF ( nIdNodo == aDatos[ nInicio ][ 4 ] )    // A
         AAdd( ::aItems, oItem:ADD( aDatos[ nInicio ][ 1 ] ) )
         aDatos[ nInicio ][ 2 ] := ::aItems[ Len( ::aItems ) ]:hitem()
      ELSE
         nPosicion := AScan( aDatos, { | x | x[ 3 ] == aDatos[ nInicio ][ 4 ] } ) //B
         ::recursivo( ::aItems[ nPosicion ], aDatos, @nInicio, aDatos[ nInicio ][ 4 ] ) //C
      ENDIF
      nInicio ++
   ENDDO

   RETURN ( NIL )

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

 
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: APORTE - Arbol

Post by Antonio Linares »

regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply