Rev 408 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/env python
__author__ = "Ira W. Snyder (devel@irasnyder.com)"
__copyright__ = "Copyright (c) 2006 Ira W. Snyder (devel@irasnyder.com)"
__license__ = "GNU GPL v2 (or, at your option, any later version)"
from PyCompat import * # fixes for school computers
def getstr (prompt):
return raw_input (prompt + ': ')
class MenuEntry (object):
def __init__ (self, key, prompt, callback_func, hidden=False):
self.key = key
self.prompt = prompt
self.callback_func = callback_func
self.hidden = hidden
class Menu (object):
def __init__ (self, entries=None, autorun=False):
if not entries:
self.entries = []
else:
self.entries = entries
self.autorun = autorun
def __sort_entries (self):
newlist = []
for e in self.entries:
newlist.append ((e.key, e))
newlist.sort ()
self.entries = [e[1] for e in newlist]
def add_entry (self, key, prompt, callback_func):
for e in self.entries:
if e.key == str(key):
raise ValueError
self.entries.append (MenuEntry (str(key), prompt, callback_func))
self.__sort_entries ()
def hide_entry (self, key):
for e in self.entries:
if e.key == str(key):
e.hidden = True
def unhide_entry (self, key):
for e in self.entries:
if e.key == str(key):
e.hidden = False
def show_menu (self):
for e in self.entries:
if not e.hidden:
print '%s) %s' % (e.key, e.prompt)
def run_menu (self):
choices = {}
for e in self.entries:
if not e.hidden:
choices[e.key] = e.callback_func
ok = False
while not ok:
self.show_menu ()
c = getstr ('Enter Choice')
if c in choices.keys():
ok = True
if self.autorun:
result = choices[c]()
return (c, result)
else:
return (c, choices[c]) # (choice, callback function pointer)
else:
print 'Unrecognized Choice, try again!\n'
import sys
def main ():
m = Menu ()
m.add_entry (1, 'Run DFS', lambda: 'in dfs')
m.add_entry (2, 'Run BFS', lambda: 'in bfs')
m.add_entry (3, 'Enter Data', lambda: 'enter data')
m.add_entry ('Q', 'Quit', sys.exit)
stat = m.run_menu ()
print 'stat:', stat
if __name__ == '__main__':
main ()