home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a066 / 1.img / BASEMENU.PRG < prev    next >
Encoding:
Text File  |  1992-03-20  |  1.5 KB  |  82 lines

  1. /*
  2.     BaseMenu.prg
  3.  
  4.     Copyright (c) 1991 Chris Muller and Anton van Straaten
  5. */
  6.  
  7. #include "class(y).ch"
  8.  
  9.  
  10. create class BaseMenu
  11.     protected:
  12.  
  13.         instvar items
  14.         instvar currPos
  15.         instvar parent
  16.  
  17.     export:
  18.         method  addItem
  19.         method  draw
  20.         method  setKeys     deferred
  21.         method  clearKeys   deferred
  22.         method  newMenuPos
  23.         method  exec
  24. endclass
  25.  
  26.  
  27. constructor new (aItems)
  28.     local i
  29.     ::items   := {}
  30.     ::currPos := 1
  31.  
  32.     if aItems != NIL
  33.         for i := 1 to len(aItems)
  34.             // note: following is a bit tricky; invokes addItem in subclass,
  35.             // which takes fewer parameters from BaseMenu's addItem.
  36.             ::addItem(aItems[i, 1], aItems[i, 2])
  37.         next
  38.     end
  39. return
  40.  
  41.  
  42. method procedure draw
  43.     local i
  44.  
  45.     for i := 1 to len(::items)
  46.         ::items[i]:draw()
  47.     next i
  48. return
  49.  
  50.  
  51. method procedure addItem(nRow, nCol, cLabel, oAction, lActive)
  52.     aAdd(::items, MenuItem():new(nRow, nCol, cLabel, oAction, lActive))
  53. return
  54.  
  55.  
  56. method procedure exec(oParent)
  57.     local finished := .f.
  58.  
  59.     ::parent := oParent
  60.  
  61.     while !finished
  62.         ::draw()
  63.  
  64.         ::setKeys()
  65.         menu to ::currPos
  66.         ::clearKeys()
  67.  
  68.         finished := (::currPos == 0)
  69.  
  70.         if !finished
  71.             ::items[::currPos]:exec(self)
  72.         end
  73.     end
  74. return
  75.  
  76.  
  77. method function newMenuPos
  78. return ::currPos
  79.  
  80.  
  81. // eof basemenu.prg
  82.