Add better error reporting for MemoryErrors caused by str->float conversions.
[python.git] / Demo / curses / ncurses.py
blob0bdc1a97e62abdb9509d456e6b22eb817b39f581
1 #!/usr/bin/env python
3 # $Id$
5 # (n)curses exerciser in Python, an interactive test for the curses
6 # module. Currently, only the panel demos are ported.
8 import curses
9 from curses import panel
11 def wGetchar(win = None):
12 if win is None: win = stdscr
13 return win.getch()
15 def Getchar():
16 wGetchar()
19 # Panels tester
21 def wait_a_while():
22 if nap_msec == 1:
23 Getchar()
24 else:
25 curses.napms(nap_msec)
27 def saywhat(text):
28 stdscr.move(curses.LINES - 1, 0)
29 stdscr.clrtoeol()
30 stdscr.addstr(text)
32 def mkpanel(color, rows, cols, tly, tlx):
33 win = curses.newwin(rows, cols, tly, tlx)
34 pan = panel.new_panel(win)
35 if curses.has_colors():
36 if color == curses.COLOR_BLUE:
37 fg = curses.COLOR_WHITE
38 else:
39 fg = curses.COLOR_BLACK
40 bg = color
41 curses.init_pair(color, fg, bg)
42 win.bkgdset(ord(' '), curses.color_pair(color))
43 else:
44 win.bkgdset(ord(' '), curses.A_BOLD)
46 return pan
48 def pflush():
49 panel.update_panels()
50 curses.doupdate()
52 def fill_panel(pan):
53 win = pan.window()
54 num = pan.userptr()[1]
56 win.move(1, 1)
57 win.addstr("-pan%c-" % num)
58 win.clrtoeol()
59 win.box()
61 maxy, maxx = win.getmaxyx()
62 for y in range(2, maxy - 1):
63 for x in range(1, maxx - 1):
64 win.move(y, x)
65 win.addch(num)
67 def demo_panels(win):
68 global stdscr, nap_msec, mod
69 stdscr = win
70 nap_msec = 1
71 mod = ["test", "TEST", "(**)", "*()*", "<-->", "LAST"]
73 stdscr.refresh()
75 for y in range(0, curses.LINES - 1):
76 for x in range(0, curses.COLS):
77 stdscr.addstr("%d" % ((y + x) % 10))
78 for y in range(0, 1):
79 p1 = mkpanel(curses.COLOR_RED,
80 curses.LINES // 2 - 2,
81 curses.COLS // 8 + 1,
84 p1.set_userptr("p1")
86 p2 = mkpanel(curses.COLOR_GREEN,
87 curses.LINES // 2 + 1,
88 curses.COLS // 7,
89 curses.LINES // 4,
90 curses.COLS // 10)
91 p2.set_userptr("p2")
93 p3 = mkpanel(curses.COLOR_YELLOW,
94 curses.LINES // 4,
95 curses.COLS // 10,
96 curses.LINES // 2,
97 curses.COLS // 9)
98 p3.set_userptr("p3")
100 p4 = mkpanel(curses.COLOR_BLUE,
101 curses.LINES // 2 - 2,
102 curses.COLS // 8,
103 curses.LINES // 2 - 2,
104 curses.COLS // 3)
105 p4.set_userptr("p4")
107 p5 = mkpanel(curses.COLOR_MAGENTA,
108 curses.LINES // 2 - 2,
109 curses.COLS // 8,
110 curses.LINES // 2,
111 curses.COLS // 2 - 2)
112 p5.set_userptr("p5")
114 fill_panel(p1)
115 fill_panel(p2)
116 fill_panel(p3)
117 fill_panel(p4)
118 fill_panel(p5)
119 p4.hide()
120 p5.hide()
121 pflush()
122 saywhat("press any key to continue")
123 wait_a_while()
125 saywhat("h3 s1 s2 s4 s5;press any key to continue")
126 p1.move(0, 0)
127 p3.hide()
128 p1.show()
129 p2.show()
130 p4.show()
131 p5.show()
132 pflush()
133 wait_a_while()
135 saywhat("s1; press any key to continue")
136 p1.show()
137 pflush()
138 wait_a_while()
140 saywhat("s2; press any key to continue")
141 p2.show()
142 pflush()
143 wait_a_while()
145 saywhat("m2; press any key to continue")
146 p2.move(curses.LINES // 3 + 1, curses.COLS // 8)
147 pflush()
148 wait_a_while()
150 saywhat("s3; press any key to continue")
151 p3.show()
152 pflush()
153 wait_a_while()
155 saywhat("m3; press any key to continue")
156 p3.move(curses.LINES // 4 + 1, curses.COLS // 15)
157 pflush()
158 wait_a_while()
160 saywhat("b3; press any key to continue")
161 p3.bottom()
162 pflush()
163 wait_a_while()
165 saywhat("s4; press any key to continue")
166 p4.show()
167 pflush()
168 wait_a_while()
170 saywhat("s5; press any key to continue")
171 p5.show()
172 pflush()
173 wait_a_while()
175 saywhat("t3; press any key to continue")
176 p3.top()
177 pflush()
178 wait_a_while()
180 saywhat("t1; press any key to continue")
181 p1.show()
182 pflush()
183 wait_a_while()
185 saywhat("t2; press any key to continue")
186 p2.show()
187 pflush()
188 wait_a_while()
190 saywhat("t3; press any key to continue")
191 p3.show()
192 pflush()
193 wait_a_while()
195 saywhat("t4; press any key to continue")
196 p4.show()
197 pflush()
198 wait_a_while()
200 for itmp in range(0, 6):
201 w4 = p4.window()
202 w5 = p5.window()
204 saywhat("m4; press any key to continue")
205 w4.move(curses.LINES // 8, 1)
206 w4.addstr(mod[itmp])
207 p4.move(curses.LINES // 6, itmp * curses.COLS // 8)
208 w5.move(curses.LINES // 6, 1)
209 w5.addstr(mod[itmp])
210 pflush()
211 wait_a_while()
213 saywhat("m5; press any key to continue")
214 w4.move(curses.LINES // 6, 1)
215 w4.addstr(mod[itmp])
216 p5.move(curses.LINES // 3 - 1, itmp * 10 + 6)
217 w5.move(curses.LINES // 8, 1)
218 w5.addstr(mod[itmp])
219 pflush()
220 wait_a_while()
222 saywhat("m4; press any key to continue")
223 p4.move(curses.LINES // 6, (itmp + 1) * curses.COLS // 8)
224 pflush()
225 wait_a_while()
227 saywhat("t5; press any key to continue")
228 p5.top()
229 pflush()
230 wait_a_while()
232 saywhat("t2; press any key to continue")
233 p2.top()
234 pflush()
235 wait_a_while()
237 saywhat("t1; press any key to continue")
238 p1.top()
239 pflush()
240 wait_a_while()
242 saywhat("d2; press any key to continue")
243 del p2
244 pflush()
245 wait_a_while()
247 saywhat("h3; press any key to continue")
248 p3.hide()
249 pflush()
250 wait_a_while()
252 saywhat("d1; press any key to continue")
253 del p1
254 pflush()
255 wait_a_while()
257 saywhat("d4; press any key to continue")
258 del p4
259 pflush()
260 wait_a_while()
262 saywhat("d5; press any key to continue")
263 del p5
264 pflush()
265 wait_a_while()
266 if nap_msec == 1:
267 break
268 nap_msec = 100
271 # one fine day there'll be the menu at this place
273 curses.wrapper(demo_panels)