Cambiar Tree Completo Sobre xBrowse (solucionado)

Post Reply
User avatar
leandro
Posts: 1719
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 11 times
Been thanked: 3 times
Contact:

Cambiar Tree Completo Sobre xBrowse (solucionado)

Post by leandro »

Hola buenas tardes para todos

Estoy intentando cambiar por completo el oTree que tengo montado sobre el xbrowse, intento usar la función oBrw:settree() pero lo que hace es sobre poner las columnas que se están mostrando.

Si se hace varias veces clic sobre el botón de cambio, se aumentan mas y mas columnas.

Image

Code: Select all | Expand


#include "fivewin.ch"

function Main()

local oTree, oFont2, oBtCmb
local oDlg, oFont, oBrw

Local cbCambioEstado := <|x|
    oBrw:oTreeItem:Cargo[2] := x
    oBrw:refresh()
>

Local cbCambioTree := <||
    oTree := buildtree2()
    oBrw:SetTree(oTree)
    oBrw:refresh() 
    oTree:OpenAll() 
>

oTree := buildtree1()

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-9

DEFINE DIALOG oDlg SIZE 700,500 PIXEL TRUEPIXEL FONT oFont

    @ 0, 20 BUTTONBMP oBtCmb OF oDlg PIXEL size 80, 21 PROMPT "Cambiar oTree" FONT oFont2 ACTION EVAL(cbCambioTree) 

    @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
    DATASOURCE oTree ;
    COLUMNS 2 ;
    HEADERS "ITEM", "AUTO";
    CELL LINES NOBORDER

    WITH OBJECT oBrw
    :lDisplayZeros := .f.
    :aCols[ 1 ]:AddBitmap( { FWDArrow(), FWRArrow(), GetTreeBmps()[ 2 ] } )

    :aCols[2]:bEditValue := {|| oBrw:oTreeItem:Cargo[2] }
    :aCols[2]:cDataType  := "L"
    :aCols[2]:nEditType := EDIT_GET
    :aCols[2]:SetCheck()
    :aCols[2]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }     

    :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, CLR_YELLOW, CLR_WHITE ) } }

    :CreateFromCode()
    END
    oTree:OpenAll()

ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont

return nil

//CONSTRUIMOS EL PRIMER TREE
function buildtree1()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData    := ;
{  { "Facturas", 00,.T.  } ;
,  { "Pedidos", 00,.F. } ;
,  { "Remsiones", 00,.F. } ;
,  { "Notas", 00,.F. } ;
}

aData2    := ;
{  { "Agregar ", 01,.T. } ;
,  { "Modificar ", 02,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
    TREEITEM aData[r][1] CARGO {  aData[r][2] , aData[r][3]  }     
    TREE
    FOR t:=1 TO len(aData2)
        TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3]  }
    NEXT  
    ENDTREE
NEXT   
ENDTREE

Return oTree

//CONSTRUIMOS EL SEGUNDO TREE
function buildtree2()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData    := ;
{  { "Cuentas", 00,.T.  } ;
,  { "Comprobantes", 00,.F. } ;
,  { "Centros", 00,.F. } ;
,  { "Conceptos", 00,.F. } ;
,  { "Consultas", 00,.F. } ;
}

aData2    := ;
{  { "Eliminar", 00,.T. } ;
,  { "Enviar ", 00,.T. } ;
,  { "Procesar ", 00,.T. } ;
,  { "Anular ", 00,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
    TREEITEM aData[r][1] CARGO {  aData[r][2] , aData[r][3]  }     
    TREE
    FOR t:=1 TO len(aData2)
        TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3]  }
    NEXT  
    ENDTREE
NEXT   
ENDTREE

Return oTree
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42393
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 9 times
Been thanked: 41 times
Contact:

Re: Cambiar Tree Completo Sobre xBrowse

Post by Antonio Linares »

Estimado Leandro,

Esto tiene que revisarlo Rao. Se lo comento, gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
nageswaragunupudi
Posts: 10701
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 3 times
Contact:

Re: Cambiar Tree Completo Sobre xBrowse

Post by nageswaragunupudi »

Use this code

Code: Select all | Expand

Local cbCambioTree := <||
    oTree := buildtree2()
    oBrw:oTree := oTree
    oBrw:GoTop()
    oBrw:refresh()
    oTree:OpenAll()
    oBrw:SetFocus()
    return nil
>
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 10701
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 3 times
Contact:

Re: Cambiar Tree Completo Sobre xBrowse

Post by nageswaragunupudi »

Remove this code:

Code: Select all | Expand


    :aCols[2]:bEditValue := {|| oBrw:oTreeItem:Cargo[2] }
    :aCols[2]:cDataType  := "L"
    :aCols[2]:nEditType := EDIT_GET
    :aCols[2]:SetCheck()
    :aCols[2]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }
 

This one line of code is recommended.

Code: Select all | Expand


    :aCols[ 2 ]:SetCheck( nil, .t. )
 


XBrowse automatically creates codeblocks bEditValue and bOnPostEdit. Better not to override them.
Regards

G. N. Rao.
Hyderabad, India
User avatar
leandro
Posts: 1719
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 11 times
Been thanked: 3 times
Contact:

Re: Cambiar Tree Completo Sobre xBrowse

Post by leandro »

Excelente Mr Rao, muchas gracias. :D :D :D

Lo único es que deje bOnPostEdit, por que necesito ejecutar una acción sobre la base de datos, diferente a cambiar el setcheck.

El código quedo de la siguiente manera:

Code: Select all | Expand


#include "fivewin.ch"

function Main()

local oTree, oFont2, oBtCmb
local oDlg, oFont, oBrw

Local cbCambioEstado := <|x|
    //Aqui ejecuto mi acción personalizada, sobre la base de datos
    oBrw:oTreeItem:Cargo[2] := x
    oBrw:refresh()
>

Local cbCambioTree := <||
    oTree := buildtree2()
    oBrw:oTree := oTree
    oBrw:GoTop()
    oBrw:refresh()
    oTree:OpenAll()
    oBrw:SetFocus()
    return nil 
>

oTree := buildtree1()

DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE FONT oFont2 NAME "TAHOMA" SIZE 0,-9

DEFINE DIALOG oDlg SIZE 700,500 PIXEL TRUEPIXEL FONT oFont

    @ 0, 20 BUTTONBMP oBtCmb OF oDlg PIXEL size 80, 21 PROMPT "Cambiar oTree" FONT oFont2 ACTION EVAL(cbCambioTree) 

    @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
    DATASOURCE oTree ;
    COLUMNS 2 ;
    HEADERS "ITEM", "AUTO";
    CELL LINES NOBORDER

    WITH OBJECT oBrw
    :lDisplayZeros := .f.
    :aCols[ 1 ]:AddBitmap( { FWDArrow(), FWRArrow(), GetTreeBmps()[ 2 ] } )

    :aCols[ 2 ]:SetCheck( nil, .t. )
    :aCols[ 2 ]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }

    :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, CLR_YELLOW, CLR_WHITE ) } }

    :CreateFromCode()
    END
    oTree:OpenAll()

ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont

return nil

//CONSTRUIMOS EL PRIMER TREE
function buildtree1()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData    := ;
{  { "Facturas", 00,.T.  } ;
,  { "Pedidos", 00,.F. } ;
,  { "Remsiones", 00,.F. } ;
,  { "Notas", 00,.F. } ;
}

aData2    := ;
{  { "Agregar ", 01,.T. } ;
,  { "Modificar ", 02,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
    TREEITEM aData[r][1] CARGO {  aData[r][2] , aData[r][3]  }     
    TREE
    FOR t:=1 TO len(aData2)
        TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3]  }
    NEXT  
    ENDTREE
NEXT   
ENDTREE

Return oTree

//CONSTRUIMOS EL SEGUNDO TREE
function buildtree2()
Local oTree
Local aData := {}
Local aData2 := {}
Local t,r

aData    := ;
{  { "Cuentas", 00,.T.  } ;
,  { "Comprobantes", 00,.F. } ;
,  { "Centros", 00,.F. } ;
,  { "Conceptos", 00,.F. } ;
,  { "Consultas", 00,.F. } ;
}

aData2    := ;
{  { "Eliminar", 00,.T. } ;
,  { "Enviar ", 00,.T. } ;
,  { "Procesar ", 00,.T. } ;
,  { "Anular ", 00,.T. } ;
}

TREE oTree
FOR r:=1 TO len(aData)
    TREEITEM aData[r][1] CARGO {  aData[r][2] , aData[r][3]  }     
    TREE
    FOR t:=1 TO len(aData2)
        TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3]  }
    NEXT  
    ENDTREE
NEXT   
ENDTREE

Return oTree
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
nageswaragunupudi
Posts: 10701
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 3 times
Contact:

Re: Cambiar Tree Completo Sobre xBrowse (solucionado)

Post by nageswaragunupudi »

Lo único es que deje bOnPostEdit, por que necesito ejecutar una acción sobre la base de datos, diferente a cambiar el setcheck.

Instead we recommend using

Code: Select all | Expand


oCol:bOnChange := { |oCol,uOldVal| <OtherChanges>( oCol,uOldVal ) }
 

To the extent possible, please avoid coding bOnPostEdit. It is deprecated.
Regards

G. N. Rao.
Hyderabad, India
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Cambiar Tree Completo Sobre xBrowse (solucionado)

Post by goosfancito »

Estimado,
El campo que tengo en mysql es del tipo
"N" de 1.

este campo lo quiero mostrar en el browser con la capacidad del checkbox, pero al momento no logro hacerlo.
la unica forma que, al menos me mostró la tilde, fue esta:

Code: Select all | Expand

  WITH OBJECT :acols[ 7 ]
         :bEditValue    := { | x | IIf( ::oQry:FieldGet( "c13" ) > 0, .T., .F. ) }
         :SetCheck(, .T. )
      ENDWITH
pero sola me la muestra con o sin tilde, lo. que necesito es que cambie el estado de la tilde, por lo que necesito ir y actualizar la tabla, pero cuando quiero usar la tabla pero no se con que metodo. podes ayudarme?
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
nageswaragunupudi
Posts: 10701
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 3 times
Contact:

Re: Cambiar Tree Completo Sobre xBrowse (solucionado)

Post by nageswaragunupudi »

Code: Select all | Expand

WITH OBJECT :acols[ 7 ]
   :bEditValue := { | x | If( x == nil, ::oQry:FieldGet( "c13" ) > 0, ::oQry:FieldPut( "c13", If( x, 1, 0 ) ) }
   :SetCheck(, .T. )
ENDWITH
 
OR

Code: Select all | Expand

WITH OBJECT :acols[ 7 ]
   :bEditValue := { | x | If( x == nil, ::oQry:c13 != 0, ::oQry:c13 := If( x, 1, 0 ) ) }
   :SetCheck(, .T. )
ENDWITH
 

If field "c13" type is TinyInt,
Set

Code: Select all | Expand

MYSQL_TINYINTASLOGICAL( .T. )
 
and then

Code: Select all | Expand

WITH OBJECT :acols[ 7 ]
   :bEditValue := { | x | If( x == nil, ::oQry:c13, ::oQry:c13 := x ) }
   :SetCheck(, .T. )
ENDWITH
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
goosfancito
Posts: 1955
Joined: Fri Oct 07, 2005 7:08 pm

Re: Cambiar Tree Completo Sobre xBrowse (solucionado)

Post by goosfancito »

Rao,
Buen dia, la unica manera de que funcione en mi caso es hacerlo asi

Code: Select all | Expand

      WITH OBJECT :c13
         :setcheck(, .T. )
         :bLDClickData := { || ::actualizarTag()  }
      ENDWITH
PERO ni este ni ningun browser. me esta actualizando los datos, tengo que salir del dialogo y volver a entrar. y ya probe con :oqry:requery
las consultas las hago por procedimientos almacenados

Code: Select all | Expand

METHOD actualizarTag( x )  CLASS TCliente

   DO CASE
   CASE  ::oBrw:nColSel = 7

      ::oCnx:update( "tbinfissi", ;
                     { ;
                       { "inf_p", !::oQry:FieldGet( "c13" ) } ;
                     }, NIL, ;
                     { { "id", ::oQry:FieldGet( "id" ) } } ;
                   )


   END CASE
   ::oqry:refresh()       <-------------- no funciona
   ::obrw:refresh()
   RETURN ( NIL )
 
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
Silvio.Falconi
Posts: 7110
Joined: Thu Oct 18, 2012 7:17 pm

Re: Cambiar Tree Completo Sobre xBrowse (solucionado)

Post by Silvio.Falconi »

Dear Rao,
a question
if I have an xbrowse with customer.dbf (with a combobox to select the indexes and a get to search for customers - see the example diagram below)

Code: Select all | Expand

USE CUSTOMER....

 DEFINE DIALOG oDlg 


@ 10, 165 GET oGet VAR cSeek SIZE 200,19 PIXEL OF oDlg PICTURE "@!"


   @ 103,10 XBROWSE oBrw SIZE -10,-10 PIXEL OF oDlg

 WITH OBJECT oBrw
          :oSeek := oGet
            :CreateFromCode()
         END

  @ 10, 550 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder

How can I switch to a tree view in the same xbrowse and viceversa?

And when I'm in the tree view how can I use a combobox to select the tree indexes and use the customer search get?
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
Post Reply