Code: Select all
#include "fivewin.ch"
#include "Splitter.ch"
#include "ord.ch"
#include "xbrowse.ch"
Static oWnd
static cFwhPath := "c:\work\fwh\"
REQUEST DBFCDX
Function Main()
DEFINE WINDOW oWnd MDI
DEFINE BUTTONBAR oBar OF oWnd SIZE 60, 60 2007
DEFINE STATUSBAR oStatusBar PROMPT "Some tests" OF oWnd
ACTIVATE WINDOW oWnd ;
ON INIT customer()
//-------------------------------------------------------------------------------------------------------------------//
init procedure PrgInit
SET DATE ITALIAN
SET CENTURY ON
SET TIME FORMAT TO "HH:MM:SS"
SET EPOCH TO YEAR(DATE())-50
SET DELETED ON
SET EXCLUSIVE OFF
RDDSETDEFAULT( "DBFCDX" )
XbrNumFormat( 'E', .t. )
SetKinetic( .f. )
SetGetColorFocus()
SetBalloon( .t. )
return
//-----------------------------------------------------------------------------------------//
Function Customer()
LOCAL oWnd, oDlg, oExpBar, aPanel[3], oBrw, oCol, oSplitV, aCampos ,;
cQry, oQry, oError,oWndCli
local oFont,oTree
local nGrpClr := RGB(255,250,220)
local nTotClr := RGB(200,255,200)
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
IF oWndCli == NIL
* DbUseArea( .T., "DBFCDX", "CUSTOMER.DBF", "CUSTOMER", .T., .F.)
* dbselectarea( "CUSTOMER" )
oTree:=MakeTree()
DEFINE WINDOW oWndCli ;
TITLE " Test Drill" ;
BORDER SINGLE MDICHILD OF oWnd
oExpBar = TExplorerBar():New( 00, 00, 200, oWndCli:nHeight, oWndCli )
aPanel[1] = oExpBar:AddPanel( "CLIENTES", "Clientes32" )
aPanel[1]:lSpecial = .t.
aPanel[1]:AddLink( "Nuevo ", , "nuevo16" )
aPanel[1]:AddLink( "Modificar", , "modifi16" )
aPanel[1]:AddLink( "Eliminar ", , , "elimi16" )
aPanel[2] = oExpBar:AddPanel( "REPORTES", "print32" )
aPanel[2]:AddLink( "Report Drill", {|| oBrw:report() }, "repo1" )
aPanel[3] = oExpBar:AddPanel( "SALIDA", "salir32" )
aPanel[3]:AddLink( "Salir", {|| oWndCli:End() }, "salir16" )
oBrw := TXBrowse():New( oWndCli )
aBrowse := { { { || "" }, i18n("HireDate"), 50, } ,;
{ { || AGE }, i18n("Age"), 120, } ,;
{ { || SALARY }, i18n("Salary"), 80,NumPict ( 12, 2 ) } }
FOR i := 1 TO Len(aBrowse)
oCol := oBrw:AddCol()
oCol:bEditValue := aBrowse[ i, 1 ]
* oCol:bStrData := aBrowse[ i, 1 ]
oCol:cHeader := aBrowse[ i, 2 ]
oCol:nWidth := aBrowse[ i, 3 ]
if !Empty(aBrowse[ i, 4 ])
oCol:cEditPicture:=aBrowse[ i, 4 ]
Endif
NEXT
WITH OBJECT oBrw
:nDataType:= 1
:SetTree( oTree)
:nStretchCol := 1
:lDisplayZeros := .f.
:bChange := { || CUST->( DBGOTO( oBrw:oTreeItem:Cargo[ 4 ] ) ) }
:bLock := { || CUST->( RLOCK() ) }
:bUnLock := { || CUST->( DBUNLOCK() ) }
:bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, nGrpClr, ;
If( oBrw:oTreeItem:cPrompt == "Sub-Total", nTotClr, ;
CLR_WHITE ) ) } }
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:nColDividerStyle := LINESTYLE_BLACK
:nStretchCol := STRETCHCOL_LAST
:lColDividerComplete := .t.
:nHeaderHeight := 30
:nLeft := 203
:l2007 := .t.
:lFooter := .f.
:lRecordSelector := .t.
:bClrStd := {|| IF( RecNo() % 2 == 0, {CLR_BLACK, CLR_WHITE}, {0, RGB(203,226,254)} ) }
// Bitmaps
WITH OBJECT :aCols[ 1 ]
:cHeader := "State/City"
:AddBitmap( { FWRArrow(), FWDArrow(), cFwhPath + "bitmaps\16x16\reset.bmp" } )
:cFooter := "GRAND TOTAL"
END
// When Group is closed show totals. When open show totals at bottom
// Allow edit of columns and save data to DBF, update group and grand totals
WITH OBJECT :aCols[ 3 ]
:bEditValue := { |x| If( oBrw:oTreeItem:lOpened, 0, ;
If( x == nil, oBrw:oTreeItem:Cargo[ 2 ], ;
CUST->AGE := oBrw:oTreeItem:Cargo[ 2 ] := x ) ) }
:nTotal := oTree:Cargo[ 2 ]
//
:nEditType := EDIT_GET
:bEditWhen := { || oBrw:oTreeItem:nLevel > 1 .and. oBrw:oTreeItem:cPrompt != "Sub-Total" }
:bOnChange := { |o,nOld| oBrw:oTreeItem:Parent():Cargo[ 2 ] += ( o:Value - nOld ), oBrw:Refresh() }
END
WITH OBJECT :aCols[ 4 ]
:bEditValue := { |x| If( oBrw:oTreeItem:lOpened, 0, ;
If( x == nil, oBrw:oTreeItem:Cargo[ 3 ], ;
CUST->SALARY := oBrw:oTreeItem:Cargo[ 3 ] := x ) ) }
:nTotal := oTree:Cargo[ 3 ]
//
:nEditType := EDIT_GET
:bEditWhen := { || oBrw:oTreeItem:nLevel > 1 .and. oBrw:oTreeItem:cPrompt != "Sub-Total" }
:bOnChange := { |o,nOld| oBrw:oTreeItem:Parent():Cargo[ 3 ] += ( o:Value - nOld ), oBrw:Refresh() }
END
//
:CreateFromCode()
END
oBrw:CreateFromCode()
@ 00,201 SPLITTER oSplitV VERTICAL ;
PREVIOUS CONTROLS oExpBar ;
HINDS CONTROLS oBrw ;
SIZE 1, oWndCli:nHeight PIXEL ;
OF oWndCli ;
3DLOOK UPDATE
* oSplitV:lStatic:=.t.
SET MESSAGE OF oWndCli TO " Customer "
oBrw:SetFocus()
ACTIVATE WINDOW oWndCli MAXIMIZED ;
ON RESIZE( oExpBar:AdjLeft(), oSplitV:AdjClient(), oSplitV:AdjRight() ) ;
VALID( oWndCli := NIL, .t. )
ELSE
oWndCli:Restore()
oWndCli:SetFocus()
ENDIF
RETURN
//-----------------------------------------------------------------------------------//
static function MakeTree()
field STATE,CODE,CITY
local cPath := cFwhPath + "samples\"
local oTree, oState, oCity
USE ( cPath + "STATES" ) NEW SHARED
INDEX ON CODE TAG CODE TO STMP MEMORY
USE ( cPath + "CUSTOMER" ) NEW ALIAS CUST SHARED
INDEX ON STATE+CITY TAG STATE TO CTMP MEMORY
SET RELATION TO STATE INTO STATES
GO TOP
TREE oTree
oTree:Cargo := { "", 0, 0.00, 0 }
do while ! CUST->( eof() )
TREEITEM oState PROMPT STATES->NAME CARGO { CTOD( "" ), 0, 0.00, 0 }
TREE
do while STATES->NAME == oState:cPrompt .and. ! CUST->( eof() )
TREEITEM oCity PROMPT CUST->CITY ;
CARGO { CUST->HIREDATE, CUST->AGE, CUST->SALARY, CUST->( RECNO() ) }
oState:Cargo[ 2 ] += oCity:Cargo[ 2 ]
oState:Cargo[ 3 ] += oCity:Cargo[ 3 ]
CUST->( DbSkip( 1 ) )
enddo
TREEITEM "Sub-Total" CARGO oState:Cargo
oTree:Cargo[ 2 ] += oState:Cargo[ 2 ]
oTree:Cargo[ 3 ] += oState:Cargo[ 3 ]
ENDTREE
enddo
ENDTREE
return oTree
//-----------------------------------------------------------------------------------//
1. how create a link on metafile ? perhaps we must modify the metafile class ?