diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2000-12-15 00:41:48 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2000-12-15 00:41:48 (GMT) |
commit | 15c3c2bdf84aa333e213d8f5ac2b4b30a2595231 (patch) | |
tree | 7c2d45ae1febeb48cf10b68c7da96e816e283221 /Demo/curses/ncurses.py | |
parent | 61c64c9de0f9b9a8355b4c365537cdfe15489eab (diff) | |
download | cpython-15c3c2bdf84aa333e213d8f5ac2b4b30a2595231.zip cpython-15c3c2bdf84aa333e213d8f5ac2b4b30a2595231.tar.gz cpython-15c3c2bdf84aa333e213d8f5ac2b4b30a2595231.tar.bz2 |
Curses demos contributed by Thomas Gellekum <tg@FreeBSD.org>.
ncurses.py requires panel support, and therefore doesn't work yet.
Diffstat (limited to 'Demo/curses/ncurses.py')
-rw-r--r-- | Demo/curses/ncurses.py | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/Demo/curses/ncurses.py b/Demo/curses/ncurses.py new file mode 100644 index 0000000..782d17f --- /dev/null +++ b/Demo/curses/ncurses.py @@ -0,0 +1,272 @@ +#!/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 + +def wGetchar(win = None): + if win == None: win = stdscr + 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) + pan = win.new_panel() + 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(): + curses.update_panels() + 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, + curses.LINES / 2 - 2, + curses.COLS / 8 + 1, + 0, + 0) + p1.set_userptr("p1") + + p2 = mkpanel(curses.COLOR_GREEN, + curses.LINES / 2 + 1, + curses.COLS / 7, + curses.LINES / 4, + curses.COLS / 10) + p2.set_userptr("p2") + + p3 = mkpanel(curses.COLOR_YELLOW, + curses.LINES / 4, + curses.COLS / 10, + curses.LINES / 2, + curses.COLS / 9) + p3.set_userptr("p3") + + p4 = mkpanel(curses.COLOR_BLUE, + curses.LINES / 2 - 2, + curses.COLS / 8, + curses.LINES / 2 - 2, + curses.COLS / 3) + p4.set_userptr("p4") + + p5 = mkpanel(curses.COLOR_MAGENTA, + curses.LINES / 2 - 2, + curses.COLS / 8, + curses.LINES / 2, + curses.COLS / 2 - 2) + 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") + p2.move(curses.LINES / 3 + 1, curses.COLS / 8) + pflush() + wait_a_while() + + saywhat("s3; press any key to continue") + p3.show() + pflush() + wait_a_while() + + saywhat("m3; press any key to continue") + p3.move(curses.LINES / 4 + 1, curses.COLS / 15) + 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") + w4.move(curses.LINES / 8, 1) + w4.addstr(mod[itmp]) + p4.move(curses.LINES / 6, itmp * curses.COLS / 8) + w5.move(curses.LINES / 6, 1) + w5.addstr(mod[itmp]) + pflush() + wait_a_while() + + saywhat("m5; press any key to continue") + w4.move(curses.LINES / 6, 1) + w4.addstr(mod[itmp]) + p5.move(curses.LINES / 3 - 1, itmp * 10 + 6) + w5.move(curses.LINES / 8, 1) + w5.addstr(mod[itmp]) + pflush() + wait_a_while() + + saywhat("m4; press any key to continue") + p4.move(curses.LINES / 6, (itmp + 1) * curses.COLS / 8) + 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) |