home *** CD-ROM | disk | FTP | other *** search
- /*
- BaseMenu.prg
-
- Copyright (c) 1991 Chris Muller and Anton van Straaten
- */
-
- #include "class(y).ch"
-
-
- create class BaseMenu
- protected:
-
- instvar items
- instvar currPos
- instvar parent
-
- export:
- method addItem
- method draw
- method setKeys deferred
- method clearKeys deferred
- method newMenuPos
- method exec
- endclass
-
-
- constructor new (aItems)
- local i
- ::items := {}
- ::currPos := 1
-
- if aItems != NIL
- for i := 1 to len(aItems)
- // note: following is a bit tricky; invokes addItem in subclass,
- // which takes fewer parameters from BaseMenu's addItem.
- ::addItem(aItems[i, 1], aItems[i, 2])
- next
- end
- return
-
-
- method procedure draw
- local i
-
- for i := 1 to len(::items)
- ::items[i]:draw()
- next i
- return
-
-
- method procedure addItem(nRow, nCol, cLabel, oAction, lActive)
- aAdd(::items, MenuItem():new(nRow, nCol, cLabel, oAction, lActive))
- return
-
-
- method procedure exec(oParent)
- local finished := .f.
-
- ::parent := oParent
-
- while !finished
- ::draw()
-
- ::setKeys()
- menu to ::currPos
- ::clearKeys()
-
- finished := (::currPos == 0)
-
- if !finished
- ::items[::currPos]:exec(self)
- end
- end
- return
-
-
- method function newMenuPos
- return ::currPos
-
-
- // eof basemenu.prg
-