Subversion Repositories programming

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
394 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
 
395 ira 7
# Fix for the lame version of python on the school's computers (v2.1)
8
try:
9
	(True, False)
10
except NameError:
11
	(True, False) = (1, 0)
12
 
394 ira 13
def bfs ():
14
	print 'in bfs'
15
 
16
def dfs ():
17
	print 'in dfs'
18
 
19
def enter_data ():
20
	print 'in enter data'
21
 
22
def getstr (prompt):
23
	return raw_input (prompt + ': ')
24
 
395 ira 25
class MenuEntry:
394 ira 26
 
27
	def __init__ (self, key, prompt, callback_func, hidden=False):
28
		self.key = key
29
		self.prompt = prompt
30
		self.callback_func = callback_func
31
		self.hidden = hidden
32
 
395 ira 33
class Menu:
394 ira 34
 
35
	def __init__ (self, entries=None, autorun=False):
36
		if not entries:
37
			self.entries = []
38
		else:
39
			self.entries = entries
40
 
41
		self.autorun = autorun
42
 
43
	def __sort_entries (self):
44
		newlist = []
45
 
46
		for e in self.entries:
47
			newlist.append ((e.key, e))
48
 
49
		newlist.sort ()
50
		self.entries = [e[1] for e in newlist]
51
 
52
	def add_entry (self, key, prompt, callback_func):
53
		for e in self.entries:
54
			if e.key == str(key):
55
				raise ValueError
56
 
57
		self.entries.append (MenuEntry (str(key), prompt, callback_func))
58
		self.__sort_entries ()
59
 
60
	def hide_entry (self, key):
61
		for e in self.entries:
62
			if e.key == str(key):
63
				e.hidden = True
64
 
65
	def unhide_entry (self, key):
66
		for e in self.entries:
67
			if e.key == str(key):
68
				e.hidden = False
69
 
70
	def show_menu (self):
71
		for e in self.entries:
72
			if not e.hidden:
73
				print '%s) %s' % (e.key, e.prompt)
74
 
75
	def run_menu (self):
76
		choices = {}
77
 
78
		for e in self.entries:
79
			if not e.hidden:
80
				choices[e.key] = e.callback_func
81
 
82
		ok = False
83
		while not ok:
84
			self.show_menu ()
85
			c = getstr ('Enter Choice')
86
			print
87
 
88
			if c in choices.keys():
89
				ok = True
90
				if self.autorun:
91
					result = choices[c]()
92
					return (c, result)
93
				else:
94
					return (c, choices[c]) # (choice, callback function pointer)
95
			else:
96
				print 'Unrecognized Choice, try again!\n'
97
 
98
import sys
99
 
100
def main ():
101
	m = Menu ()
102
	m.add_entry (1, 'Run DFS', dfs)
103
	m.add_entry (2, 'Run BFS', bfs)
104
	m.add_entry (3, 'Enter Data', enter_data)
105
	m.add_entry ('Q', 'Quit', sys.exit)
106
 
107
	stat = m.run_menu ()
108
	print 'stat:', stat
109
 
110
if __name__ == '__main__':
111
	main ()