86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
import curses
|
|
from time import sleep
|
|
from fallout_functions import slowWrite, centeredWrite, NEWLINE, SPACE, addSound
|
|
|
|
###################### Functions ############################
|
|
|
|
|
|
def makeSelection(scr, SELECTIONS, MSGS):
|
|
"""
|
|
ALlow the user to select an option
|
|
Returns the line number of the users selection starting at 0
|
|
"""
|
|
inchar = 0
|
|
selection = 0
|
|
selection_count = len(SELECTIONS)
|
|
selection_start_y = scr.getyx()[0]
|
|
width = scr.getmaxyx()[1]
|
|
|
|
while inchar not in [NEWLINE, SPACE]:
|
|
# move to start of selections and hightlight current selection
|
|
scr.move(selection_start_y, 0)
|
|
line = 0
|
|
for sel in SELECTIONS:
|
|
whole_line = "> " + SELECTIONS[line]
|
|
space = width - len(whole_line) % width
|
|
whole_line += " " * space
|
|
|
|
if line == selection:
|
|
scr.addstr(whole_line, curses.A_REVERSE)
|
|
else:
|
|
scr.addstr(whole_line)
|
|
line += 1
|
|
scr.refresh()
|
|
|
|
inchar = scr.getch()
|
|
|
|
# move up and down
|
|
if inchar == curses.KEY_UP and selection > 0:
|
|
selection -= 1
|
|
addSound("keyenter")
|
|
elif inchar == curses.KEY_DOWN and selection < selection_count - 1:
|
|
selection += 1
|
|
addSound("keyenter")
|
|
addSound("keyenter")
|
|
if MSGS and MSGS[selection]:
|
|
whole_line = "> " + MSGS[selection]
|
|
space = width - len(whole_line) % width
|
|
whole_line += " " * space
|
|
scr.addstr(" " * width)
|
|
scr.addstr(whole_line)
|
|
scr.refresh()
|
|
sleep(2)
|
|
return selection
|
|
|
|
|
|
def runSelection(scr, CENTERED_HEADERS, OTHER_HEADERS, OPTIONS, MESSAGES):
|
|
"""
|
|
Print the selections and allow the user to select one
|
|
"""
|
|
curses.use_default_colors()
|
|
scr.erase()
|
|
scr.move(0, 0)
|
|
curses.curs_set(0)
|
|
curses.noecho()
|
|
|
|
width = scr.getmaxyx()[1]
|
|
|
|
for header in CENTERED_HEADERS:
|
|
centeredWrite(scr, header + "\n")
|
|
|
|
for header in OTHER_HEADERS:
|
|
slowWrite(scr, header + "\n")
|
|
|
|
for i in range(width):
|
|
scr.addch(curses.ACS_BSBS)
|
|
scr.refresh()
|
|
|
|
return makeSelection(scr, OPTIONS, MESSAGES)
|
|
|
|
|
|
def beginSelection(center, other, options, messages=[]):
|
|
"""
|
|
Initialize curses and start the boot process
|
|
"""
|
|
res = curses.wrapper(runSelection, center, other, options, messages)
|
|
return res
|