home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a065 / 1.img / TBPRGS.EXE / TB22.PRG < prev    next >
Encoding:
Text File  |  1992-03-05  |  2.3 KB  |  116 lines

  1.     // Tb22.prg
  2.     //
  3.     // Generic 2d array browser
  4.     //
  5.     // Compile with /a /m /n /w /dTEST for test version
  6.     //
  7.     // Link with Tbutils, Dict, Tb07
  8.  
  9.     #include "Inkey.ch"
  10.     #include "Tbutils.ch"
  11.  
  12.     #ifdef TEST
  13.       FUNCTION Tb22
  14.  
  15.       LOCAL aTest
  16.  
  17.         USE TbDbf1
  18.         aTest := Dbstruct()
  19.         CLEAR SCREEN
  20.         @ 4, 9 TO 21, 71
  21.         ? Browse2dArray(5, 10, 20, 70, aTest)
  22.         InKey(0)
  23.  
  24.         aTest := Directory()
  25.         CLEAR SCREEN
  26.         @ 4, 9 TO 21, 71
  27.         ? Browse2dArray(5, 10, 20, 70, aTest)
  28.         Inkey(0)
  29.  
  30.       RETURN NIL
  31.     #endif
  32.  
  33.     FUNCTION Browse2dArray(nTop, nLeft, nBottom, nRight, aVar)
  34.  
  35.     LOCAL oTbr := TBa2dbrw(aVar)
  36.     LOCAL i
  37.     LOCAL lExitRequested
  38.     LOCAL nKey
  39.  
  40.       oTbr:nTop    := nTop
  41.       oTbr:nLeft   := nLeft
  42.       oTbr:nBottom := nBottom
  43.       oTbr:nRight  := nRight
  44.  
  45.       oTbr:headSep := DEF_HSEP
  46.       oTbr:footSep := DEF_FSEP
  47.       oTbr:colSep  := DEF_CSEP
  48.       MyBrowse2(oTbr)
  49.  
  50.     RETURN oTbr:cargo
  51.  
  52.  
  53.     FUNCTION TBa2dBrw(aVar)
  54.  
  55.     LOCAL oTbr  := TBrowseNew()
  56.     LOCAL nCols := Len(aVar[1])
  57.     LOCAL i
  58.     LOCAL oTbc
  59.  
  60.       oTbr:cargo := 1
  61.       oTbr:goTopBlock    := {||  oTbr:cargo := 1 }
  62.       oTbr:goBottomBlock := {||  oTbr:cargo := Len(aVar) }
  63.       oTbr:skipBlock     := ARRAY_SKIPPER(oTbr:cargo, aVar)
  64.  
  65.       FOR i := 1 TO nCols
  66.         oTbc := TBColumnNew(, A2DBlock(oTbr, aVar, i))
  67.         // Find width for column here ...
  68.         oTbc:width := A2dWidth(aVar, i)
  69.         oTbr:addColumn(oTbc)
  70.       NEXT
  71.  
  72.     RETURN oTbr
  73.  
  74.  
  75.     FUNCTION A2dBlock(oTbr, aVar, nCol)
  76.  
  77.     RETURN {|| aVar[oTbr:cargo, nCol] }
  78.  
  79.  
  80.     FUNCTION A2dwidth(aVar, nCol)
  81.  
  82.     LOCAL i
  83.     LOCAL nLen := Len(aVar)
  84.     LOCAL nLongest := 0
  85.  
  86.       FOR i := 1 TO nLen
  87.         nLongest := Max(nLongest, DataLen(aVar[i, nCol]))
  88.       NEXT
  89.  
  90.     RETURN nLongest
  91.  
  92.  
  93.     FUNCTION DataLen(xElem)
  94.  
  95.     LOCAL nLen
  96.     LOCAL cType := ValType(xElem)
  97.  
  98.       DO CASE
  99.         CASE cType $ "ACM"
  100.           nLen := Len(xElem)
  101.  
  102.         CASE cType == "N"
  103.           nLen := Len(Str(xElem))
  104.  
  105.         CASE cType == "L"
  106.           nLen := 1
  107.  
  108.         CASE cType == "D"
  109.           nLen := 8
  110.  
  111.         CASE cType == "U"   // Value NIL
  112.           nLen := 3
  113.       ENDCASE
  114.     
  115.     RETURN nLen
  116.