1 | #!/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 |
|
---|
8 | import curses
|
---|
9 | from curses import panel
|
---|
10 |
|
---|
11 | def wGetchar(win = None):
|
---|
12 | if win is None: win = stdscr
|
---|
13 | return win.getch()
|
---|
14 |
|
---|
15 | def Getchar():
|
---|
16 | wGetchar()
|
---|
17 |
|
---|
18 | #
|
---|
19 | # Panels tester
|
---|
20 | #
|
---|
21 | def wait_a_while():
|
---|
22 | if nap_msec == 1:
|
---|
23 | Getchar()
|
---|
24 | else:
|
---|
25 | curses.napms(nap_msec)
|
---|
26 |
|
---|
27 | def saywhat(text):
|
---|
28 | stdscr.move(curses.LINES - 1, 0)
|
---|
29 | stdscr.clrtoeol()
|
---|
30 | stdscr.addstr(text)
|
---|
31 |
|
---|
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)
|
---|
45 |
|
---|
46 | return pan
|
---|
47 |
|
---|
48 | def pflush():
|
---|
49 | panel.update_panels()
|
---|
50 | curses.doupdate()
|
---|
51 |
|
---|
52 | def 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 |
|
---|
67 | def 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 | #
|
---|
273 | curses.wrapper(demo_panels)
|
---|