Subversion Repositories programming

Rev

Rev 408 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
408 ira 1
#!/usr/bin/env python
2
 
3
__author__    = "Ira W. Snyder (devel@irasnyder.com)"
4
__copyright__ = "Copyright (c) 2006 Ira W. Snyder (devel@irasnyder.com)"
5
__license__   = "GNU GPL v2 (or, at your option, any later version)"
6
 
7
from PyCompat import * # fixes for school computers
8
 
9
def getstr (prompt):
10
	return raw_input (prompt + ': ')
11
 
12
class MenuEntry (object):
13
 
14
	def __init__ (self, key, prompt, callback_func, hidden=False):
15
		self.key = key
16
		self.prompt = prompt
17
		self.callback_func = callback_func
18
		self.hidden = hidden
19
 
20
class Menu (object):
21
 
22
	def __init__ (self, entries=None, autorun=False):
23
		if not entries:
24
			self.entries = []
25
		else:
26
			self.entries = entries
27
 
28
		self.autorun = autorun
29
 
30
	def __sort_entries (self):
31
		newlist = []
32
 
33
		for e in self.entries:
34
			newlist.append ((e.key, e))
35
 
36
		newlist.sort ()
37
		self.entries = [e[1] for e in newlist]
38
 
39
	def add_entry (self, key, prompt, callback_func):
40
		for e in self.entries:
41
			if e.key == str(key):
42
				raise ValueError
43
 
44
		self.entries.append (MenuEntry (str(key), prompt, callback_func))
45
		self.__sort_entries ()
46
 
47
	def hide_entry (self, key):
48
		for e in self.entries:
49
			if e.key == str(key):
50
				e.hidden = True
51
 
52
	def unhide_entry (self, key):
53
		for e in self.entries:
54
			if e.key == str(key):
55
				e.hidden = False
56
 
57
	def show_menu (self):
58
		for e in self.entries:
59
			if not e.hidden:
60
				print '%s) %s' % (e.key, e.prompt)
61
 
62
	def run_menu (self):
63
		choices = {}
64
 
65
		for e in self.entries:
66
			if not e.hidden:
67
				choices[e.key] = e.callback_func
68
 
69
		ok = False
70
		while not ok:
71
			self.show_menu ()
72
			c = getstr ('Enter Choice')
73
			print
74
 
75
			if c in choices.keys():
76
				ok = True
77
				if self.autorun:
78
					result = choices[c]()
79
					return (c, result)
80
				else:
81
					return (c, choices[c]) # (choice, callback function pointer)
82
			else:
83
				print 'Unrecognized Choice, try again!\n'
84
 
85
import sys
86
 
87
def main ():
88
	m = Menu ()
89
	m.add_entry (1, 'Run DFS', lambda: 'in dfs')
90
	m.add_entry (2, 'Run BFS', lambda: 'in bfs')
91
	m.add_entry (3, 'Enter Data', lambda: 'enter data')
92
	m.add_entry ('Q', 'Quit', sys.exit)
93
 
94
	stat = m.run_menu ()
95
	print 'stat:', stat
96
 
97
if __name__ == '__main__':
98
	main ()
99