Subversion Repositories programming

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
424 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, name=None):
23
		if not entries:
24
			self.entries = []
25
		else:
26
			self.entries = entries
27
 
28
		self.autorun = autorun
29
		self.name = name
30
 
31
	def __sort_entries (self):
32
		newlist = []
33
 
34
		for e in self.entries:
35
			newlist.append ((e.key, e))
36
 
37
		newlist.sort ()
38
		self.entries = [e[1] for e in newlist]
39
 
40
	def add_entry (self, key, prompt, callback_func):
41
		for e in self.entries:
42
			if e.key == str(key):
43
				raise ValueError
44
 
45
		self.entries.append (MenuEntry (str(key), prompt, callback_func))
46
		self.__sort_entries ()
47
 
48
	def hide_entry (self, key):
49
		for e in self.entries:
50
			if e.key == str(key):
51
				e.hidden = True
52
 
53
	def unhide_entry (self, key):
54
		for e in self.entries:
55
			if e.key == str(key):
56
				e.hidden = False
57
 
58
	def show_menu (self):
59
		if self.name:
60
			print self.name
61
			print '========================================'
62
 
63
		for e in self.entries:
64
			if not e.hidden:
65
				print '%s) %s' % (e.key, e.prompt)
66
 
67
	def run_menu (self):
68
		choices = {}
69
 
70
		for e in self.entries:
71
			if not e.hidden:
72
				choices[e.key] = e.callback_func
73
 
74
		ok = False
75
		while not ok:
76
			self.show_menu ()
77
			c = getstr ('Enter Choice')
78
			print
79
 
80
			if c in choices.keys():
81
				ok = True
82
				if self.autorun:
83
					result = choices[c]()
84
					return (c, result)
85
				else:
86
					return (c, choices[c]) # (choice, callback function pointer)
87
			else:
88
				print 'Unrecognized Choice, try again!\n'
89
 
90
import sys
91
 
92
def main ():
93
	m = Menu ()
94
	m.add_entry (1, 'Run DFS', lambda: 'in dfs')
95
	m.add_entry (2, 'Run BFS', lambda: 'in bfs')
96
	m.add_entry (3, 'Enter Data', lambda: 'enter data')
97
	m.add_entry ('Q', 'Quit', sys.exit)
98
 
99
	stat = m.run_menu ()
100
	print 'stat:', stat
101
 
102
if __name__ == '__main__':
103
	main ()
104