Cargar Treeview desde un archivo jerarquizado

Cargar Treeview desde un archivo jerarquizado

Postby hebert_j_vargas » Wed Feb 06, 2013 6:20 pm

Saludos amigos foristas, les pido ayuda para ver como enfrentar este procedimiento, tengo un archivo con una estructura jerarquica donde tengo identificado en orden consecutivo la estructura y su profundidad (depth).
Code: Select all  Expand view
                                      NAME                                               DEPTH
========================================================================================  =====
VISUALIZAR                                                                                  0
   ESTABLECER LOS OBJETIVOS Y PROPÓSITOS DEL PROYECTO                                       1
      1. Establecer los objetivos y propósitos del proyecto                                 2
          A. Conformar el equipo de trabajo de la fase visualizar                           3
          B. Planificar fase visualizar                                                     3
          C. Preparar y convocar reunión mesa de trabajo No.1                               3
          D. Establecer productos y volúmenes de producción                                 3
          E. Establecer calidad de los productos                                            3
          F. Establecer alimentación requerida (volumen y calidad)                          3
          G. Premisas consideradas para establecer objetivos y Propósitos del proyecto      3
          H. Establecer requerimientos de prueba/ investigación adicional para verificar    3
          I. Establecer dependencias y relación con otros proyectos del plan                3
   VERIFICAR ALINEACIÓN DEL PROYECTO CON ESTRATEGIA CORPORATIVA                             1
      1. Verificar alineación del proyecto con estrategia corporativa                       2
          A. Conocer lineamientos y requerimientos del portafolio de oportunidades y/o      3
          B. Identificar oportunidades de optimización de infraestructuras                  3
          C. Documentar la identificación de alineación del proyecto con los objetivos      3
   DESARROLLO PRELIMINAR DEL PROYECTO                                                       1
      1. Elaborar alcance preliminar del proyecto:                                          2
          A. Recopilar  informaciOn requerida                                               3
          B. Identificar requerimientos de infraestructura y servicios                      3
          C. Establecer factibilidad técnica del proyecto                                  3
          D. Documentar alcance preliminar del proyecto                                     3
      2. Elaborar de costo Clase V                                                          2
          A. Recopilar información requerida                                                3
          B. Seleccionar metodologìa de estimación                                         3
          C. Elaboración de estimado de Clase V del proyecto, que incluya estimado Clase    3
      3. Elaborar PEP Clase                                                                 2
          A. Describir premisas a c0nsiderar para la programación del proyecto              3
          B. Identificar potenciales riesgos de incumplimiento                              3
          C. Establecer estrategias de ejecución                                            3
          D. Establecer cronograma para el desarrollo de los hitos principales de ejecuc    3
          E. Elaborar PEP Clase V del proyecto                                              3
          F.  Recursos requeridos para ejecutar la fase conceptualizar                      3
          G. Elaborar Plan de ejecución Clase II de la fase conceptualizar                  3
      4. Describir factibilidad del proyecto (técnica y económica)                          2
          A. Describir parámetros de prefactibilidad económica del Paquete que contiene    3
          B. Lista de riesgos mayores/ identificación preliminar de peligros SHA            3
          C. Preparar y convocar reunión mesa de trabajo No.2                               3
          D. Someter DSD1 y solicitar fondos para la fase conceptualizar                    3


teniendo estos datos ya organizados, elaboré una función que construye el tree, sin embargo la lógica que utilice no es la más idonea.
Esta es la función.
Code: Select all  Expand view
Function BuildTree( oTree, aItems, cTreeName )
         LOCAL oItem0, oItem1, oItem2, oItem3, oItem4, oItem5, oItem6, oItem7, oItem8, oItem9
         LOCAL n
         LOCAL nPrevLevel := aItems[1][2]
         Local nImg := 0
         LOCAL nItems := LEN( aItems )
         FOR n := 1 TO nItems
             DO CASE
                CASE aItems[n][2] == 0
                     IF aItems[n][2] < nPrevLevel
                        oItem0 := NIL
                     ENDIF
                     IF oItem0 == NIL
                        oItem0 := oTree:Add( aItems[n][1] )
                     ELSE
                        oItem0:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 1
                     IF aItems[n][2] < nPrevLevel
                        oItem1 := NIL
                     ENDIF
                     IF oItem1 == NIL
                        oItem1 := oItem0:Add( aItems[n][1] )
                     ELSE
                        oItem1:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 2
                     IF aItems[n][2] < nPrevLevel
                        oItem2 := NIL
                     ENDIF
                     IF oItem2 == NIL
                        oItem2 := oItem1:Add( aItems[n][1] )
                     ELSE
                        oItem2:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 3
                     IF aItems[n][2] < nPrevLevel
                        oItem3 := NIL
                     ENDIF
                     IF oItem3 == NIL
                        oItem3 := oItem2:Add( aItems[n][1] )
                     ELSE
                        oItem3:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 4
                     IF aItems[n][2] < nPrevLevel
                        oItem4 := NIL
                     ENDIF
                     IF oItem4 == NIL
                        oItem4 := oItem3:Add( aItems[n][1] )
                     ELSE
                        oItem4:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 5
                     IF aItems[n][2] < nPrevLevel
                        oItem5 := NIL
                     ENDIF
                     IF oItem5 == NIL
                        oItem5 := oItem4:Add( aItems[n][1] )
                     ELSE
                        oItem5:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 6
                     IF aItems[n][2] < nPrevLevel
                        oItem6 := NIL
                     ENDIF
                     IF oItem6 == NIL
                        oItem6 := oItem5:Add( aItems[n][1] )
                     ELSE
                        oItem6:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 7
                     MsgInfo( STR(n)+CRLF+aItems[n][1] )
                     IF aItems[n][2] < nPrevLevel
                        oItem7 := NIL
                     ENDIF
                     IF oItem7 == NIL
                        oItem7 := oItem6:Add( aItems[n][1] )
                     ELSE
                        oItem7:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 8
                     IF aItems[n][2] < nPrevLevel
                        oItem8 := NIL
                     ENDIF
                     IF oItem8 == NIL
                        oItem8 := oItem7:Add( aItems[n][1] )
                     ELSE
                        oItem7:Add( aItems[n][1] )
                     ENDIF
                CASE aItems[n][2] == 9
                     IF aItems[n][2] < nPrevLevel
                        oItem9 := NIL
                     ENDIF
                     IF oItem9 == NIL
                        oItem9 := oItem8:Add( aItems[n][1] )
                     ELSE
                        oItem9:Add( aItems[n][1] )
                     ENDIF
             ENDCASE
             nPrevLevel := aItems[n][2]
        NEXT n
 


Quien puede ayudar con una función que considere por lo menos diez subniveles en la estructura.
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
User avatar
hebert_j_vargas
 
Posts: 99
Joined: Thu Aug 02, 2012 3:21 pm

Re: Cargar Treeview desde un archivo jerarquizado

Postby hebert_j_vargas » Thu Feb 07, 2013 6:19 pm

Alguien tiene alguna idea?
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
User avatar
hebert_j_vargas
 
Posts: 99
Joined: Thu Aug 02, 2012 3:21 pm

Re: Cargar Treeview desde un archivo jerarquizado

Postby cnavarro » Thu Feb 07, 2013 6:47 pm

Buenas tardes
Si lo que buscas es únicamente a nivel de presentación visual, quizás te sirva algo parecido a:
aITems[][] := Space( 3 * nDepth )+" "+aITems[][]
Y después cargar la tabla en un browse sin necesidad de realizar un Tree
Un saludo
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6500
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Cargar Treeview desde un archivo jerarquizado

Postby Antonio Linares » Thu Feb 07, 2013 9:41 pm

Herbert,

En FWH/samples/ClassTree.prg tienes un ejemplo de como ir añadiendo ramas hijas a un tree, sin límite de subniveles
regards, saludos

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

Re: Cargar Treeview desde un archivo jerarquizado

Postby Daniel Garcia-Gil » Fri Feb 08, 2013 12:08 am

Herbert

Te dejo un ejemplo a raiz de la informacion que publicaste

Code: Select all  Expand view

#include "fivewin.ch"

function main()
    local aData, oWnd, oTree

    aData = {;
{"VISUALIZAR",0},;
{"ESTABLECERLOSOBJETIVOSYPROPÓSITOSDELPROYECTO",1},;
{"1.Establecerlosobjetivosypropósitosdelproyecto",2},;
{"A.Conformarelequipodetrabajodelafasevisualizar",3},;
{"B.Planificarfasevisualizar",3},;
{"C.PrepararyconvocarreuniónmesadetrabajoNo.1",3},;
{"D.Establecerproductosyvolúmenesdeproducción",3},;
{"E.Establecercalidaddelosproductos",3},;
{"F.Estableceralimentaciónrequerida(volumenycalidad)",3},;
{"G.PremisasconsideradasparaestablecerobjetivosyPropósitosdelproyecto",3},;
{"H.Establecerrequerimientosdeprueba/investigaciónadicionalparaverificar",3},;
{"I.Establecerdependenciasyrelaciónconotrosproyectosdelplan",3},;
{"VERIFICARALINEACIÓNDELPROYECTOCONESTRATEGIACORPORATIVA",1},;
{"1.Verificaralineacióndelproyectoconestrategiacorporativa",2},;
{"A.Conocerlineamientosyrequerimientosdelportafoliodeoportunidadesy/o",3},;
{"B.Identificaroportunidadesdeoptimizacióndeinfraestructuras",3},;
{"C.Documentarlaidentificacióndealineacióndelproyectoconlosobjetivos",3},;
{"DESARROLLOPRELIMINARDELPROYECTO",1},;
{"1.Elaboraralcancepreliminardelproyecto:",2},;
{"A.RecopilarinformaciOnrequerida",3},;
{"B.Identificarrequerimientosdeinfraestructurayservicios",3},;
{"C.Establecerfactibilidadtécnicadelproyecto",3},;
{"D.Documentaralcancepreliminardelproyecto",3},;
{"2.ElaborardecostoClaseV",2},;
{"A.Recopilarinformaciónrequerida",3},;
{"B.Seleccionarmetodologìadeestimación",3},;
{"C.ElaboracióndeestimadodeClaseVdelproyecto,queincluyaestimadoClase",3},;
{"3.ElaborarPEPClase",2},;
{"A.Describirpremisasac0nsiderarparalaprogramacióndelproyecto",3},;
{"B.Identificarpotencialesriesgosdeincumplimiento",3},;
{"C.Establecerestrategiasdeejecución",3},;
{"D.Establecercronogramaparaeldesarrollodeloshitosprincipalesdeejecuc",3},;
{"E.ElaborarPEPClaseVdelproyecto",3},;
{"F.Recursosrequeridosparaejecutarlafaseconceptualizar",3},;
{"G.ElaborarPlandeejecuciónClaseIIdelafaseconceptualizar",3},;
{"4.Describirfactibilidaddelproyecto(técnicayeconómica)",2},;
{"A.DescribirparámetrosdeprefactibilidadeconómicadelPaquetequecontiene",3},;
{"B.Listaderiesgosmayores/identificaciónpreliminardepeligrosSHA",3},;
{"C.PrepararyconvocarreuniónmesadetrabajoNo.2",3},;
{"D.SometerDSD1ysolicitarfondosparalafaseconceptualizar",3};
}
   


    define window oWnd
        oTree = TTreeView():New( 0, 0, oWnd,,,,,400,400,,.t.)

        BuildTree(oTree, aData)
    activate window oWnd


return nil

function BuildTree( uObj, aData )

   local oItem := uObj
   local oSubItem, item, oParent, i
   
   for each item in aData
      if item[2] > 0
        if item[2] > oSubItem:Cargo["level"]
           oItem = oSubItem
        elseif item[2] == oSubItem:Cargo["level"]
            oItem = oSubItem:oParent
        else
           oParent = oSubItem:oParent
           for i = oSubItem:Cargo["level"] to item[2] + 1 step -1
              oParent = oParent:oParent
           next
           oItem = oParent
        endif
      endif
      oSubItem = oItem:Add(item[1])
      oSubItem:Cargo = { "level" => item[2] }
   next

return nil

 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Cargar Treeview desde un archivo jerarquizado

Postby hebert_j_vargas » Fri Feb 08, 2013 2:07 pm

Muchas gracias,

Buenas tardes
Si lo que buscas es únicamente a nivel de presentación visual, quizás te sirva algo parecido a:
aITems[][] := Space( 3 * nDepth )+" "+aITems[][]
Y después cargar la tabla en un browse sin necesidad de realizar un Tree
Un saludo
Cristobal Navarro


Si amigo Cristobal, de hecho asi lo tengo, pero necesitamos mostrar el tree para realizar la edición del mismo.

Herbert,

En FWH/samples/ClassTree.prg tienes un ejemplo de como ir añadiendo ramas hijas a un tree, sin límite de subniveles
regards, saludos

Antonio Linares
http://www.fivetechsoft.com


Antonio, ya he revisado los samples, el detalle es que la estructura yo no la tengo predefinida, el usuario la crea y la almacena en la base de datos, utilizando el modelo de lista adyacente (Adjacency List Model) en MYSQL, cuando hago la consulta o QUERY, obtengo la estructura en el formato (nombre, nivel-subtree).

Amigo Daniel voy a probar lo que tu enviastes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
User avatar
hebert_j_vargas
 
Posts: 99
Joined: Thu Aug 02, 2012 3:21 pm

Re: Cargar Treeview desde un archivo jerarquizado

Postby hebert_j_vargas » Fri Feb 08, 2013 2:52 pm

Daniel, cuando llega al elemento número 4 del arreglo da este fallo.

Application
===========
Path and name: C:\FWH\samples\treedaniel.exe (32 bits)
Size: 1,301,504 bytes
Time from start: 0 hours 0 mins 7 secs
Error occurred at: 02/08/13, 10:19:17
Error description: Error BASE/1004 Class: 'NIL' has no exported method: ADD
Args:
[ 1] = U
[ 2] = C B.Planificarfasevisualizar

Stack Calls
===========
Called from: => ADD(0)
Called from: treedaniel.prg => BUILDTREE(81)
Called from: treedaniel.prg => MAIN(55)

System
======
CPU type: Genuine Intel(R) CPU U2500 @ 1.20GHz 1200 Mhz
Hardware memory: 1016 megs

Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %

Compiler version: xHarbour build 1.1.0 Intl. (SimpLex)
Windows version: 5.1, Build 2600 Service Pack 2

Windows total applications running: 0

Variables in use
================
Procedure Type Value
==========================
ADD
Param 1: C "B.Planificarfasevisualizar"
Local 1: A Len: 1
Local 2: U
Local 3: N 0
BUILDTREE
Param 1: O Class: TTREEVIEW
Param 2: A Len: 40
Local 1: U
Local 2: O Class: TTVITEM
Local 3: A Len: 2
Local 4: U
Local 5: U
MAIN
Local 1: A Len: 40
Local 2: O Class: TWINDOW
Local 3: O Class: TTREEVIEW

Linked RDDs
===========
DBF
DBFFPT
DBFBLOB
DBFNTX

DataBases in use
================

Classes in use:
===============
1 HASHENTRY
2 HBCLASS
3 HBOBJECT
4 TWINDOW
5 TBRUSH
6 TFONT
7 TCONTROL
8 TTREEVIEW
9 TTVITEM
10 ERROR
11 TREG32

Memory Analysis
===============
92 Static variables

Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
User avatar
hebert_j_vargas
 
Posts: 99
Joined: Thu Aug 02, 2012 3:21 pm

Re: Cargar Treeview desde un archivo jerarquizado

Postby Daniel Garcia-Gil » Fri Feb 08, 2013 3:28 pm

Herbert


a mi me funciona perfectamente

te dejo el link de descarga del zip que contiene un EXE y el PRG

http://sitasoft.net/fivewin/samples/herbert.zip
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Cargar Treeview desde un archivo jerarquizado

Postby hebert_j_vargas » Tue Feb 26, 2013 2:10 pm

Buen dia daniel, te envie un correo para ver si me puedes ayudar.


Saludos,

Hebert
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
User avatar
hebert_j_vargas
 
Posts: 99
Joined: Thu Aug 02, 2012 3:21 pm

Re: Cargar Treeview desde un archivo jerarquizado

Postby Daniel Garcia-Gil » Tue Feb 26, 2013 5:53 pm

Herbert

listo enviado los cambios necesarios para que lo puedas usar en la version de fivewin que usas
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Cargar Treeview desde un archivo jerarquizado

Postby hebert_j_vargas » Wed Feb 27, 2013 8:54 pm

Gracias hermano, ahora si funciona!!!
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20141106)
FiveWin Version: FWHX 15.01
BCC 5.8.2
User avatar
hebert_j_vargas
 
Posts: 99
Joined: Thu Aug 02, 2012 3:21 pm

Re: Cargar Treeview desde un archivo jerarquizado

Postby goosfancito » Sun May 30, 2021 12:04 pm

y partiendo desde el tree como llegas a ese array?
Estoy intentando rearmarlo pero no logro hacerlo.
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


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 28 guests