2000-12-14 20:41:48 -04:00
|
|
|
#!/usr/bin/env python
|
|
|
|
#
|
|
|
|
# $Id$
|
|
|
|
#
|
|
|
|
# (n)curses exerciser in Python, an interactive test for the curses
|
|
|
|
# module. Currently, only the panel demos are ported.
|
|
|
|
|
|
|
|
import curses
|
2000-12-22 17:50:01 -04:00
|
|
|
from curses import panel
|
2000-12-14 20:41:48 -04:00
|
|
|
|
|
|
|
def wGetchar(win = None):
|
Merged revisions 62021,62029,62035-62038,62043-62044,62052-62053 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r62021 | benjamin.peterson | 2008-03-28 18:11:01 -0500 (Fri, 28 Mar 2008) | 2 lines
NIL => NULL
........
r62029 | amaury.forgeotdarc | 2008-03-28 20:42:31 -0500 (Fri, 28 Mar 2008) | 3 lines
Correctly call the base class tearDown();
otherwise running test_logging twice produce the errors we see on all buildbots
........
r62035 | raymond.hettinger | 2008-03-29 05:42:07 -0500 (Sat, 29 Mar 2008) | 1 line
Be explicit about what efficient means.
........
r62036 | georg.brandl | 2008-03-29 06:46:18 -0500 (Sat, 29 Mar 2008) | 2 lines
Fix capitalization.
........
r62037 | amaury.forgeotdarc | 2008-03-29 07:42:54 -0500 (Sat, 29 Mar 2008) | 5 lines
lib2to3 should install a logging handler only when run as a main program,
not when used as a library.
This may please the buildbots, which fail when test_lib2to3 is run before test_logging.
........
r62043 | benjamin.peterson | 2008-03-29 10:24:25 -0500 (Sat, 29 Mar 2008) | 3 lines
#2503 make singletons compared with "is" not == or !=
Thanks to Wummel for the patch
........
r62044 | gerhard.haering | 2008-03-29 14:11:52 -0500 (Sat, 29 Mar 2008) | 2 lines
Documented the lastrowid attribute.
........
r62052 | benjamin.peterson | 2008-03-30 14:35:10 -0500 (Sun, 30 Mar 2008) | 2 lines
Updated README regarding doc formats
........
r62053 | georg.brandl | 2008-03-30 14:41:39 -0500 (Sun, 30 Mar 2008) | 2 lines
The other download formats will be available for 2.6 too.
........
2008-03-30 22:51:45 -03:00
|
|
|
if win is None: win = stdscr
|
2000-12-14 20:41:48 -04:00
|
|
|
return win.getch()
|
|
|
|
|
|
|
|
def Getchar():
|
|
|
|
wGetchar()
|
|
|
|
|
|
|
|
#
|
|
|
|
# Panels tester
|
|
|
|
#
|
|
|
|
def wait_a_while():
|
|
|
|
if nap_msec == 1:
|
|
|
|
Getchar()
|
|
|
|
else:
|
|
|
|
curses.napms(nap_msec)
|
|
|
|
|
|
|
|
def saywhat(text):
|
|
|
|
stdscr.move(curses.LINES - 1, 0)
|
|
|
|
stdscr.clrtoeol()
|
|
|
|
stdscr.addstr(text)
|
|
|
|
|
|
|
|
def mkpanel(color, rows, cols, tly, tlx):
|
|
|
|
win = curses.newwin(rows, cols, tly, tlx)
|
2000-12-22 17:50:01 -04:00
|
|
|
pan = panel.new_panel(win)
|
2000-12-14 20:41:48 -04:00
|
|
|
if curses.has_colors():
|
|
|
|
if color == curses.COLOR_BLUE:
|
|
|
|
fg = curses.COLOR_WHITE
|
|
|
|
else:
|
|
|
|
fg = curses.COLOR_BLACK
|
|
|
|
bg = color
|
|
|
|
curses.init_pair(color, fg, bg)
|
|
|
|
win.bkgdset(ord(' '), curses.color_pair(color))
|
|
|
|
else:
|
|
|
|
win.bkgdset(ord(' '), curses.A_BOLD)
|
|
|
|
|
|
|
|
return pan
|
|
|
|
|
|
|
|
def pflush():
|
2000-12-22 17:50:01 -04:00
|
|
|
panel.update_panels()
|
2000-12-14 20:41:48 -04:00
|
|
|
curses.doupdate()
|
|
|
|
|
|
|
|
def fill_panel(pan):
|
|
|
|
win = pan.window()
|
|
|
|
num = pan.userptr()[1]
|
|
|
|
|
|
|
|
win.move(1, 1)
|
|
|
|
win.addstr("-pan%c-" % num)
|
|
|
|
win.clrtoeol()
|
|
|
|
win.box()
|
|
|
|
|
|
|
|
maxy, maxx = win.getmaxyx()
|
|
|
|
for y in range(2, maxy - 1):
|
|
|
|
for x in range(1, maxx - 1):
|
|
|
|
win.move(y, x)
|
|
|
|
win.addch(num)
|
|
|
|
|
|
|
|
def demo_panels(win):
|
|
|
|
global stdscr, nap_msec, mod
|
|
|
|
stdscr = win
|
|
|
|
nap_msec = 1
|
|
|
|
mod = ["test", "TEST", "(**)", "*()*", "<-->", "LAST"]
|
|
|
|
|
|
|
|
stdscr.refresh()
|
|
|
|
|
|
|
|
for y in range(0, curses.LINES - 1):
|
|
|
|
for x in range(0, curses.COLS):
|
|
|
|
stdscr.addstr("%d" % ((y + x) % 10))
|
|
|
|
for y in range(0, 1):
|
|
|
|
p1 = mkpanel(curses.COLOR_RED,
|
2007-07-24 14:57:36 -03:00
|
|
|
curses.LINES // 2 - 2,
|
|
|
|
curses.COLS // 8 + 1,
|
2000-12-14 20:41:48 -04:00
|
|
|
0,
|
|
|
|
0)
|
|
|
|
p1.set_userptr("p1")
|
|
|
|
|
|
|
|
p2 = mkpanel(curses.COLOR_GREEN,
|
2007-07-24 14:57:36 -03:00
|
|
|
curses.LINES // 2 + 1,
|
|
|
|
curses.COLS // 7,
|
|
|
|
curses.LINES // 4,
|
|
|
|
curses.COLS // 10)
|
2000-12-14 20:41:48 -04:00
|
|
|
p2.set_userptr("p2")
|
|
|
|
|
|
|
|
p3 = mkpanel(curses.COLOR_YELLOW,
|
2007-07-24 14:57:36 -03:00
|
|
|
curses.LINES // 4,
|
|
|
|
curses.COLS // 10,
|
|
|
|
curses.LINES // 2,
|
|
|
|
curses.COLS // 9)
|
2000-12-14 20:41:48 -04:00
|
|
|
p3.set_userptr("p3")
|
|
|
|
|
|
|
|
p4 = mkpanel(curses.COLOR_BLUE,
|
2007-07-24 14:57:36 -03:00
|
|
|
curses.LINES // 2 - 2,
|
|
|
|
curses.COLS // 8,
|
|
|
|
curses.LINES // 2 - 2,
|
|
|
|
curses.COLS // 3)
|
2000-12-14 20:41:48 -04:00
|
|
|
p4.set_userptr("p4")
|
|
|
|
|
|
|
|
p5 = mkpanel(curses.COLOR_MAGENTA,
|
2007-07-24 14:57:36 -03:00
|
|
|
curses.LINES // 2 - 2,
|
|
|
|
curses.COLS // 8,
|
|
|
|
curses.LINES // 2,
|
|
|
|
curses.COLS // 2 - 2)
|
2000-12-14 20:41:48 -04:00
|
|
|
p5.set_userptr("p5")
|
|
|
|
|
|
|
|
fill_panel(p1)
|
|
|
|
fill_panel(p2)
|
|
|
|
fill_panel(p3)
|
|
|
|
fill_panel(p4)
|
|
|
|
fill_panel(p5)
|
|
|
|
p4.hide()
|
|
|
|
p5.hide()
|
|
|
|
pflush()
|
|
|
|
saywhat("press any key to continue")
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("h3 s1 s2 s4 s5;press any key to continue")
|
|
|
|
p1.move(0, 0)
|
|
|
|
p3.hide()
|
|
|
|
p1.show()
|
|
|
|
p2.show()
|
|
|
|
p4.show()
|
|
|
|
p5.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("s1; press any key to continue")
|
|
|
|
p1.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("s2; press any key to continue")
|
|
|
|
p2.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("m2; press any key to continue")
|
2007-07-24 14:57:36 -03:00
|
|
|
p2.move(curses.LINES // 3 + 1, curses.COLS // 8)
|
2000-12-14 20:41:48 -04:00
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("s3; press any key to continue")
|
|
|
|
p3.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("m3; press any key to continue")
|
2007-07-24 14:57:36 -03:00
|
|
|
p3.move(curses.LINES // 4 + 1, curses.COLS // 15)
|
2000-12-14 20:41:48 -04:00
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("b3; press any key to continue")
|
|
|
|
p3.bottom()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("s4; press any key to continue")
|
|
|
|
p4.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("s5; press any key to continue")
|
|
|
|
p5.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t3; press any key to continue")
|
|
|
|
p3.top()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t1; press any key to continue")
|
|
|
|
p1.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t2; press any key to continue")
|
|
|
|
p2.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t3; press any key to continue")
|
|
|
|
p3.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t4; press any key to continue")
|
|
|
|
p4.show()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
for itmp in range(0, 6):
|
|
|
|
w4 = p4.window()
|
|
|
|
w5 = p5.window()
|
|
|
|
|
|
|
|
saywhat("m4; press any key to continue")
|
2007-07-24 14:57:36 -03:00
|
|
|
w4.move(curses.LINES // 8, 1)
|
2000-12-14 20:41:48 -04:00
|
|
|
w4.addstr(mod[itmp])
|
2007-07-24 14:57:36 -03:00
|
|
|
p4.move(curses.LINES // 6, itmp * curses.COLS // 8)
|
|
|
|
w5.move(curses.LINES // 6, 1)
|
2000-12-14 20:41:48 -04:00
|
|
|
w5.addstr(mod[itmp])
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
2004-07-18 02:56:09 -03:00
|
|
|
|
2000-12-14 20:41:48 -04:00
|
|
|
saywhat("m5; press any key to continue")
|
2007-07-24 14:57:36 -03:00
|
|
|
w4.move(curses.LINES // 6, 1)
|
2000-12-14 20:41:48 -04:00
|
|
|
w4.addstr(mod[itmp])
|
2007-07-24 14:57:36 -03:00
|
|
|
p5.move(curses.LINES // 3 - 1, itmp * 10 + 6)
|
|
|
|
w5.move(curses.LINES // 8, 1)
|
2000-12-14 20:41:48 -04:00
|
|
|
w5.addstr(mod[itmp])
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
2004-07-18 02:56:09 -03:00
|
|
|
|
2000-12-14 20:41:48 -04:00
|
|
|
saywhat("m4; press any key to continue")
|
2007-07-24 14:57:36 -03:00
|
|
|
p4.move(curses.LINES // 6, (itmp + 1) * curses.COLS // 8)
|
2000-12-14 20:41:48 -04:00
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t5; press any key to continue")
|
|
|
|
p5.top()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t2; press any key to continue")
|
|
|
|
p2.top()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("t1; press any key to continue")
|
|
|
|
p1.top()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("d2; press any key to continue")
|
|
|
|
del p2
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("h3; press any key to continue")
|
|
|
|
p3.hide()
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("d1; press any key to continue")
|
|
|
|
del p1
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("d4; press any key to continue")
|
|
|
|
del p4
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
|
|
|
|
saywhat("d5; press any key to continue")
|
|
|
|
del p5
|
|
|
|
pflush()
|
|
|
|
wait_a_while()
|
|
|
|
if nap_msec == 1:
|
|
|
|
break
|
|
|
|
nap_msec = 100
|
|
|
|
|
|
|
|
#
|
|
|
|
# one fine day there'll be the menu at this place
|
|
|
|
#
|
|
|
|
curses.wrapper(demo_panels)
|