| #!/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 |
| from curses import panel |
| |
| 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 = panel.new_panel(win) |
| 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(): |
| panel.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) |