blob: 96aa142a6131eadb0b0accc352be7559bedcd695 [file] [log] [blame]
Andrew M. Kuchling15c3c2b2000-12-15 00:41:48 +00001#!/usr/bin/env python
2#
3# $Id$
4#
5# (n)curses exerciser in Python, an interactive test for the curses
6# module. Currently, only the panel demos are ported.
7
8import curses
Andrew M. Kuchling72a18a62000-12-22 21:50:01 +00009from curses import panel
Andrew M. Kuchling15c3c2b2000-12-15 00:41:48 +000010
11def wGetchar(win = None):
12 if win == None: win = stdscr
13 return win.getch()
14
15def Getchar():
16 wGetchar()
17
18#
19# Panels tester
20#
21def wait_a_while():
22 if nap_msec == 1:
23 Getchar()
24 else:
25 curses.napms(nap_msec)
26
27def saywhat(text):
28 stdscr.move(curses.LINES - 1, 0)
29 stdscr.clrtoeol()
30 stdscr.addstr(text)
31
32def mkpanel(color, rows, cols, tly, tlx):
33 win = curses.newwin(rows, cols, tly, tlx)
Andrew M. Kuchling72a18a62000-12-22 21:50:01 +000034 pan = panel.new_panel(win)
Andrew M. Kuchling15c3c2b2000-12-15 00:41:48 +000035 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)
45
46 return pan
47
48def pflush():
Andrew M. Kuchling72a18a62000-12-22 21:50:01 +000049 panel.update_panels()
Andrew M. Kuchling15c3c2b2000-12-15 00:41:48 +000050 curses.doupdate()
51
52def fill_panel(pan):
53 win = pan.window()
54 num = pan.userptr()[1]
55
56 win.move(1, 1)
57 win.addstr("-pan%c-" % num)
58 win.clrtoeol()
59 win.box()
60
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)
66
67def demo_panels(win):
68 global stdscr, nap_msec, mod
69 stdscr = win
70 nap_msec = 1
71 mod = ["test", "TEST", "(**)", "*()*", "<-->", "LAST"]
72
73 stdscr.refresh()
74
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,
82 0,
83 0)
84 p1.set_userptr("p1")
85
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")
92
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")
99
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")
106
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")
113
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()
124
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()
134
135 saywhat("s1; press any key to continue")
136 p1.show()
137 pflush()
138 wait_a_while()
139
140 saywhat("s2; press any key to continue")
141 p2.show()
142 pflush()
143 wait_a_while()
144
145 saywhat("m2; press any key to continue")
146 p2.move(curses.LINES / 3 + 1, curses.COLS / 8)
147 pflush()
148 wait_a_while()
149
150 saywhat("s3; press any key to continue")
151 p3.show()
152 pflush()
153 wait_a_while()
154
155 saywhat("m3; press any key to continue")
156 p3.move(curses.LINES / 4 + 1, curses.COLS / 15)
157 pflush()
158 wait_a_while()
159
160 saywhat("b3; press any key to continue")
161 p3.bottom()
162 pflush()
163 wait_a_while()
164
165 saywhat("s4; press any key to continue")
166 p4.show()
167 pflush()
168 wait_a_while()
169
170 saywhat("s5; press any key to continue")
171 p5.show()
172 pflush()
173 wait_a_while()
174
175 saywhat("t3; press any key to continue")
176 p3.top()
177 pflush()
178 wait_a_while()
179
180 saywhat("t1; press any key to continue")
181 p1.show()
182 pflush()
183 wait_a_while()
184
185 saywhat("t2; press any key to continue")
186 p2.show()
187 pflush()
188 wait_a_while()
189
190 saywhat("t3; press any key to continue")
191 p3.show()
192 pflush()
193 wait_a_while()
194
195 saywhat("t4; press any key to continue")
196 p4.show()
197 pflush()
198 wait_a_while()
199
200 for itmp in range(0, 6):
201 w4 = p4.window()
202 w5 = p5.window()
203
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()
212
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()
221
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()
226
227 saywhat("t5; press any key to continue")
228 p5.top()
229 pflush()
230 wait_a_while()
231
232 saywhat("t2; press any key to continue")
233 p2.top()
234 pflush()
235 wait_a_while()
236
237 saywhat("t1; press any key to continue")
238 p1.top()
239 pflush()
240 wait_a_while()
241
242 saywhat("d2; press any key to continue")
243 del p2
244 pflush()
245 wait_a_while()
246
247 saywhat("h3; press any key to continue")
248 p3.hide()
249 pflush()
250 wait_a_while()
251
252 saywhat("d1; press any key to continue")
253 del p1
254 pflush()
255 wait_a_while()
256
257 saywhat("d4; press any key to continue")
258 del p4
259 pflush()
260 wait_a_while()
261
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
269
270#
271# one fine day there'll be the menu at this place
272#
273curses.wrapper(demo_panels)