Subversion Repositories programming

Rev

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