Page 1 of 1

xbrtree sample

Posted: Sun Feb 07, 2010 3:02 pm
by Silvio
seeing the xbrtree sample I want make an modify

On my tree there are 2 level

Image




THIS IS THE TEST MODIFIED

Code: Select all | Expand


#include "FiveWin.ch"
#include "xbrowse.ch"

function Main()

   local oWnd, oBrw

   USE HARDWARE
   INDEX ON Field->LABORATORY TO LABS
   SET ORDER TO "LABS"
   GO TOP

   DEFINE WINDOW oWnd TITLE "DBF shown as a tree with XBrowse"

   @ 0, 0 XBROWSE oBrw OF oWnd LINES CELL

   oBrw:SetTree( BuildTree(), {"TREE_LAB", "TREE_AULE", Hard_bmp(Field->TYPE) } )

   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 1 ] HEADER "MARCA"
   ADD TO oBrw DATA oBrw:oTreeItem:Cargo[ 2 ] HEADER "MODELLO"

   oBrw:nMarqueeStyle = MARQSTYLE_HIGHLROW

   oBrw:CreateFromCode()

   oBrw:aCols[ 1 ]:cHeader = "Laboratory & Hardware"

   oWnd:oClient = oBrw

   ACTIVATE WINDOW oWnd

return nil

static function BuildTree()

   local oTree, cState

   TREE oTree
      while ! Eof()
         if Empty( cState )
            _TreeItem( HARDWARE->LABORATORY ):Cargo := { Space( 20 ), Space( 20 ) }
            TREE
            cState = HARDWARE->LABORATORY
         else
            if cState != HARDWARE->LABORATORY
               ENDTREE
               cState = HARDWARE->LABORATORY
               _TreeItem( HARDWARE->LABORATORY ):Cargo := { Space( 20 ), Space( 20 ) }
               TREE
            endif
         endif
         if HARDWARE->LABORATORY == cState
            _TreeItem( HARDWARE->Type ):Cargo := { HARDWARE->marca, HARDWARE->modello }
         endif
         SKIP
      enddo
      ENDTREE
   ENDTREE

   GO TOP

return oTree


static function Hard_bmp(ctipo)
   Local cValoreBmp
    //"TREE_HARD","TREE_LAPTOP","TREE_PRINTER"

DO CASE
CASE alltrim(ctipo)=="COMPUTER"
         cValoreBmp:= "TREE_HARD"
CASE alltrim(ctipo)=="NOTEBOOK"
          cValoreBmp:= "TREE_LAPTOP"
CASE alltrim(ctipo)=="PRINTERS"
          cValoreBmp:= "TREE_PRINTER"
ENDCASE
       ctipo :=""
RETURN  cValoreBmP



Image


How I can make to insert different bitmaps for the four component ( LABORATORY,computer,Notebook,Printers) ?

i WISH ASSIGN TO LABORATORY TREE_HARD.BMP WHEN IS CLOSED TREE_AULE.BMP WHEN IT IS OPENED
TO COMPUTER TREE_HARD.BMP
TO NOTEBOOK TREE_LAPTOP.BMP
TO PRINTERS TREE_PRINT.BMP


i MADE THE FUNCTION

static function Hard_bmp(ctipo)
Local cValoreBmp
//"TREE_HARD","TREE_LAPTOP","TREE_PRINTER"

DO CASE
CASE alltrim(ctipo)=="COMPUTER"
cValoreBmp:= "TREE_HARD"
CASE alltrim(ctipo)=="NOTEBOOK"
cValoreBmp:= "TREE_LAPTOP"
CASE alltrim(ctipo)=="PRINTERS"
cValoreBmp:= "TREE_PRINT"
ENDCASE
ctipo :=""
RETURN cValoreBmp


Image


AND i INSERT IT ON oBrw:SetTree( BuildTree(), {"TREE_LAB", "TREE_AULE", Hard_bmp(Field->TYPE) } )

I SEE TREE_AULE AND TREE_LAB BITMAPS WHEN THE TREE IS OPENED AND CLOSED AND THIS IS RIGHT

BUT THEN I SEE THE TREE_HARD.BMP FOR THE HARDWARE PRINTERS AND LAPTOP

HOW i CAN TO SHOW THE OTHER BMPS ?



HERE THE RC FILE

TREE_AULE BITMAP "AULE.BMP"
TREE_LAB BITMAP "LAB.BMP"
TREE_PRINT BITMAP "PRINT.BMP"
TREE_HARD BITMAP "HARD.BMP"

Re: xbrtree sample

Posted: Mon Feb 08, 2010 3:56 pm
by nageswaragunupudi
Please try:

Code: Select all | Expand

  oBrw:SetTree( BuildTree(), {"TREE_LAB", "TREE_AULE", 'TREE_HARD' } )
   
   WITH OBJECT oBrw:aCols[ 1 ]
      :AddResource( 'TREE_LAPTOP' )
      :AddResource( 'TREE_PRINT' )
      :bBmpData := { ||  If( oBrw:oTreeItem:oTree == nil, ;
             HB_DeCode( field->Type, 'NOTEBOOK', 4, 'PRINTERS', 5, 3 ), ;
             If( oBrw:oTreeItem:lOpened, 1, 2 ) ) }
   END
 

Please check spellings

Re: xbrtree sample

Posted: Mon Feb 08, 2010 4:41 pm
by Silvio
make error

Application
===========
Path and name: C:\work\prg\TESTTREE\xbrwtree.Exe (32 bits)
Size: 1,885,696 bytes
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 02/08/10, 17:40:53
Error description: Error BASE/1003 Variable does not exist: SELF
Args:

Stack Calls
===========
Called from: xbrwtree.prg => (b)MAIN(24)
Called from: .\source\classes\XBROWSE.PRG => TXBRWCOLUMN:PAINTDATA(8211)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1334)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(991)
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT(1423)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:HANDLEEVENT(9921)
Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
Called from: => DIALOGBOXINDIRECT(0)
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE(273)
Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG(343)
Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS(27)
Called from: xbrwtree.prg => (b)MAIN(24)
Called from: .\source\classes\XBROWSE.PRG => TXBRWCOLUMN:PAINTDATA(8211)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:PAINT(1334)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:DISPLAY(991)
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT(1423)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:HANDLEEVENT(9921)
Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
Called from: => UPDATEWINDOW(0)
Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE(936)
Called from: xbrwtree.prg => MAIN(65)

Re: xbrtree sample

Posted: Mon Feb 08, 2010 10:11 pm
by nageswaragunupudi
I edited the above code.
Please check again.

Re: xbrtree sample

Posted: Tue Feb 09, 2010 7:47 am
by Silvio
Nages ,
not run ok
I see all items ( level 2) with Tree_hard.bmp
I sent you the test and the res to your email to test it

Re: xbrtree sample

Posted: Wed Feb 10, 2010 10:03 am
by Silvio
Any news for it please ?
here not run ok

Re: xbrtree sample

Posted: Wed Feb 10, 2010 6:21 pm
by Silvio
MR RAO ,
DO YOU HAVE FOUND A SOLUTION ?

ANTONIO SAD ME "Rao is the master using trees on the xbrowse. He is the expert on that issue...."

AND THERE IS ANOTHER QUESTION NOW

WHEN i MAKE


oApp():oGrid:bChange :={ || (RefreshCont(oApp:oCont,oDHardware),) }

STAT FUNCTION RefreshCont(oCont,cdbf)
oApp():oCont:cTitle:="Hardware "+tran((cdbf)->(OrdKeyNo()),'@E 999999')+" di "+tran((cdbf)->(OrdKeyCount()),'@E 999999')
oApp():oCont:refresh()
return NIL


NOT REFRESH THE CAPTION

i'M AFRAID THE TREE ON XBROWSE NOT RUN OK

Re: xbrtree sample

Posted: Wed Feb 10, 2010 6:24 pm
by nageswaragunupudi
Same logic.
Variables and spellings should be adopted to your program.

Here is the corrected parts of the code and RC file

Code: Select all | Expand

  WITH OBJECT oBrw:aCols[ 1 ]
      :AddResource( 'TREE_LAPTOP' )
      :AddResource( 'TREE_PRINTERS' )
      :bBmpData := { ||  If( oBrw:oTreeItem:oTree == nil, ;
             HB_DeCode( Trim( oBrw:oTreeItem:cPrompt ), 'NOTEBOOK', 4, 'PRINTERS', 5, 3 ), ;
             If( oBrw:oTreeItem:lOpened, 1, 2 ) ) }

   END
 


rc file

Code: Select all | Expand

TREE_AULE     BITMAP "AULE.BMP"
TREE_LAB      BITMAP "LAB.BMP"
TREE_PRINTERS BITMAP "PRINT.BMP"
TREE_HARD     BITMAP "HARD.BMP"
TREE_LAPTOP   BITMAP "LAPTOP.BMP"
 

You did not include all bitmaps

With these changes it is working correctly here

Re: xbrtree sample

Posted: Wed Feb 10, 2010 6:37 pm
by Silvio
THANK NOW RUN CORRECTLY HOW YOU CAN SEE HERE

Image


AND FOR THE SECOND QUESTION ?

i USE
oApp():oGrid:bChange :={ || (RefreshCont(oApp:oCont,oDHardware),) }

STAT FUNCTION RefreshCont(oCont,cdbf)
oApp():oCont:cTitle:="Hardware "+tran((cdbf)->(OrdKeyNo()),'@E 999999')+" di "+tran((cdbf)->(OrdKeyCount()),'@E 999999')
oApp():oCont:refresh()
return NIL



TO SHOW ON oApp():oCont:cTitle THE NUMBER OF RECORD SAMPLE : Hardware 5678 of 6700

it not run ok

Re: xbrtree sample

Posted: Wed Feb 10, 2010 7:25 pm
by nageswaragunupudi
The tree is in memory. While navigating the tree, the actual dbf is not traversed.
So, you should keep the OrdkeyNo() or RecNo() of the record in 3rd element of the array in Cargo
and use that value to refresh the title.

Re: xbrtree sample

Posted: Wed Feb 10, 2010 7:51 pm
by Silvio
ok

I made
----------------------------------------------------------------------------------------------------------------------------------------
static function BuildTree()

local oTree, cState

TREE oTree
while ! (oDHardware)->(Eof())
if Empty( cState )
_TreeItem( (oDHardware)->LABORATORY ):Cargo := { Space( 20 ), Space( 20 ),Space( 20 ) }
TREE
cState = (oDHardware)->LABORATORY
else
if cState != (oDHardware)->LABORATORY
ENDTREE
cState =(oDHardware)->LABORATORY
_TreeItem( (oDHardware)->LABORATORY ):Cargo := { Space( 20 ), Space( 20 ),Space( 20 ) }
TREE
endif
endif
if (oDHardware)->LABORATORY == cState
nrecord:="Hardware "+tran((oDHardware)->(OrdKeyNo()),'@E 999999')+" di "+tran((oDHardware)->(OrdKeyCount()),'@E 999999')
_TreeItem( (oDHardware)->Type ):Cargo := { (oDHardware)->marca, (oDHardware)->modello , nrecord }
endif
(oDHardware)->(DBSKIP())
enddo
ENDTREE
ENDTREE


return oTree



STAT FUNCTION RefreshCont(oCont,cdbf)
oApp():oCont:cTitle:=((oDHardware)->Type ):Cargo[3]
oApp():oCont:refresh()
return NIL


it make error

Application
===========
Path and name: C:\work\PRG\GMI\main.Exe (32 bits)
Size: 2,903,552 bytes
Time from start: 0 hours 0 mins 8 secs
Error occurred at: 10-02-2010, 20:51:11
Error description: Error BASE/1004 Class: 'CHARACTER' has no exported method: CARGO
Args:
[ 1] = C

Stack Calls
===========
Called from: => CARGO(0)
Called from: source\pHardware.prg => REFRESHCONT(221)
Called from: source\pHardware.prg => (b)GMI110(91)
Called from: .\source\classes\XBROWSE.PRG => TXBROWSE:CHANGE(909)