mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			273 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/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)
 |