home *** CD-ROM | disk | FTP | other *** search
- // Tb22.prg
- //
- // Generic 2d array browser
- //
- // Compile with /a /m /n /w /dTEST for test version
- //
- // Link with Tbutils, Dict, Tb07
-
- #include "Inkey.ch"
- #include "Tbutils.ch"
-
- #ifdef TEST
- FUNCTION Tb22
-
- LOCAL aTest
-
- USE TbDbf1
- aTest := Dbstruct()
- CLEAR SCREEN
- @ 4, 9 TO 21, 71
- ? Browse2dArray(5, 10, 20, 70, aTest)
- InKey(0)
-
- aTest := Directory()
- CLEAR SCREEN
- @ 4, 9 TO 21, 71
- ? Browse2dArray(5, 10, 20, 70, aTest)
- Inkey(0)
-
- RETURN NIL
- #endif
-
- FUNCTION Browse2dArray(nTop, nLeft, nBottom, nRight, aVar)
-
- LOCAL oTbr := TBa2dbrw(aVar)
- LOCAL i
- LOCAL lExitRequested
- LOCAL nKey
-
- oTbr:nTop := nTop
- oTbr:nLeft := nLeft
- oTbr:nBottom := nBottom
- oTbr:nRight := nRight
-
- oTbr:headSep := DEF_HSEP
- oTbr:footSep := DEF_FSEP
- oTbr:colSep := DEF_CSEP
- MyBrowse2(oTbr)
-
- RETURN oTbr:cargo
-
-
- FUNCTION TBa2dBrw(aVar)
-
- LOCAL oTbr := TBrowseNew()
- LOCAL nCols := Len(aVar[1])
- LOCAL i
- LOCAL oTbc
-
- oTbr:cargo := 1
- oTbr:goTopBlock := {|| oTbr:cargo := 1 }
- oTbr:goBottomBlock := {|| oTbr:cargo := Len(aVar) }
- oTbr:skipBlock := ARRAY_SKIPPER(oTbr:cargo, aVar)
-
- FOR i := 1 TO nCols
- oTbc := TBColumnNew(, A2DBlock(oTbr, aVar, i))
- // Find width for column here ...
- oTbc:width := A2dWidth(aVar, i)
- oTbr:addColumn(oTbc)
- NEXT
-
- RETURN oTbr
-
-
- FUNCTION A2dBlock(oTbr, aVar, nCol)
-
- RETURN {|| aVar[oTbr:cargo, nCol] }
-
-
- FUNCTION A2dwidth(aVar, nCol)
-
- LOCAL i
- LOCAL nLen := Len(aVar)
- LOCAL nLongest := 0
-
- FOR i := 1 TO nLen
- nLongest := Max(nLongest, DataLen(aVar[i, nCol]))
- NEXT
-
- RETURN nLongest
-
-
- FUNCTION DataLen(xElem)
-
- LOCAL nLen
- LOCAL cType := ValType(xElem)
-
- DO CASE
- CASE cType $ "ACM"
- nLen := Len(xElem)
-
- CASE cType == "N"
- nLen := Len(Str(xElem))
-
- CASE cType == "L"
- nLen := 1
-
- CASE cType == "D"
- nLen := 8
-
- CASE cType == "U" // Value NIL
- nLen := 3
- ENDCASE
-
- RETURN nLen