Go to most recent revision | 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 computersdef getstr (prompt):return raw_input (prompt + ': ')class MenuEntry (object):def __init__ (self, key, prompt, callback_func, hidden=False):self.key = keyself.prompt = promptself.callback_func = callback_funcself.hidden = hiddenclass Menu (object):def __init__ (self, entries=None, autorun=False):if not entries:self.entries = []else:self.entries = entriesself.autorun = autorundef __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 ValueErrorself.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 = Truedef unhide_entry (self, key):for e in self.entries:if e.key == str(key):e.hidden = Falsedef 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_funcok = Falsewhile not ok:self.show_menu ()c = getstr ('Enter Choice')if c in choices.keys():ok = Trueif 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 sysdef 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:', statif __name__ == '__main__':main ()