home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SOURCE / CLASSES / LINKLIST.PRG < prev    next >
Text File  |  1994-04-23  |  2KB  |  92 lines

  1. // LinkLists in Clipper !!!
  2.  
  3. #include "FiveWin.ch"
  4.  
  5. //----------------------------------------------------------------------------//
  6.  
  7. CLASS TLinkList
  8.  
  9.    DATA   oFirst, oLast
  10.  
  11.    METHOD Add( cLabel, nLevel, hBmpOpen, hBmpClose )
  12.    METHOD OpenAll()
  13.    METHOD GetLast()
  14.    METHOD nCount()
  15.  
  16.    METHOD Draw( cPrevDraw )
  17.  
  18. ENDCLASS
  19.  
  20. //----------------------------------------------------------------------------//
  21.  
  22. METHOD Add( cLabel, nLevel, hBmpOpen, hBmpClose ) CLASS TLinkList
  23.  
  24.    local oItem := TTreeItem():New( cLabel, nLevel, hBmpOpen, hBmpClose )
  25.  
  26.    if ::oFirst == nil
  27.       ::oFirst = oItem
  28.       ::oLast  = oItem
  29.    else
  30.       ::oLast:SetNext( oItem )
  31.       oItem:oPrev   = ::oLast
  32.       ::oLast       = oItem
  33.    endif
  34.  
  35. return oItem
  36.  
  37. //----------------------------------------------------------------------------//
  38.  
  39. METHOD OpenAll() CLASS TLinkList
  40.  
  41.    local oItem := ::oFirst
  42.  
  43.    while oItem != nil
  44.       oItem:Open()
  45.       oItem = oItem:GetNext()
  46.    end
  47.  
  48. return nil
  49.  
  50. //----------------------------------------------------------------------------//
  51.  
  52. METHOD GetLast() CLASS TLinkList
  53.  
  54.    if ::oLast:lOpened
  55.       return ::oLast:oTree:GetLast()
  56.    else
  57.       return ::oLast
  58.    endif
  59.  
  60. return nil
  61.  
  62. //----------------------------------------------------------------------------//
  63.  
  64. METHOD Draw( cPrevDraw ) CLASS TLinkList
  65.  
  66.    local oItem := ::oFirst
  67.  
  68.    while oItem != nil
  69.       oItem:Draw( cPrevDraw )
  70.       oItem = If( oItem:oNext != nil .and. ;    // Don't use GetNext()
  71.                   oItem:oNext:nLevel == oItem:nLevel,;
  72.                   oItem:oNext, nil )
  73.    end
  74.  
  75. return nil
  76.  
  77. //----------------------------------------------------------------------------//
  78.  
  79. METHOD nCount() CLASS TLinkList
  80.  
  81.    local oItem  := ::oFirst
  82.    local nItems := 0
  83.  
  84.    while oItem != nil
  85.       nItems++
  86.       oItem = oItem:GetNext()
  87.    end
  88.  
  89. return nItems
  90.  
  91. //----------------------------------------------------------------------------//
  92.