mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-14 04:38:20 +10:00
78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
# Copyright (C) 2020-2022, Dhinak G, Mykola Grymalyuk
|
|
from resources import utilities
|
|
|
|
class TUIMenu:
|
|
def __init__(self, title, prompt, options=None, return_number_instead_of_direct_call=False, add_quit=True, auto_number=False, in_between=None, top_level=False, loop=False):
|
|
self.title = title
|
|
self.prompt = prompt
|
|
self.in_between = in_between or []
|
|
self.options = options or []
|
|
self.return_number_instead_of_direct_call = return_number_instead_of_direct_call
|
|
self.auto_number = auto_number
|
|
self.add_quit = add_quit
|
|
self.top_level = top_level
|
|
self.loop = loop
|
|
self.added_quit = False
|
|
|
|
def add_menu_option(self, name, description="", function=None, key=""):
|
|
self.options.append([key, name, description, function])
|
|
|
|
def start(self):
|
|
return_option = ["Q", "Quit"] if self.top_level else ["B", "Back"]
|
|
if self.add_quit and not self.added_quit:
|
|
self.add_menu_option(return_option[1], function=None, key=return_option[0])
|
|
self.added_quit = True
|
|
|
|
while True:
|
|
utilities.cls()
|
|
utilities.header(self.title)
|
|
print()
|
|
|
|
for i in self.in_between:
|
|
print(i)
|
|
if self.in_between:
|
|
print()
|
|
|
|
for index, option in enumerate(self.options):
|
|
if self.auto_number and not (index == (len(self.options) - 1) and self.add_quit):
|
|
option[0] = str((index + 1))
|
|
print(option[0] + ". " + option[1])
|
|
for i in option[2]:
|
|
print("\t" + i)
|
|
|
|
print()
|
|
selected = input(self.prompt)
|
|
|
|
keys = [option[0].upper() for option in self.options]
|
|
if not selected or selected.upper() not in keys:
|
|
if self.loop:
|
|
continue
|
|
else:
|
|
return
|
|
if self.add_quit and selected.upper() == return_option[0]:
|
|
return -1
|
|
elif self.return_number_instead_of_direct_call:
|
|
return self.options[keys.index(selected.upper())][0]
|
|
else:
|
|
self.options[keys.index(selected.upper())][3]() if self.options[keys.index(selected.upper())][3] else None
|
|
if not self.loop:
|
|
return
|
|
|
|
|
|
class TUIOnlyPrint:
|
|
def __init__(self, title, prompt, in_between=None):
|
|
self.title = title
|
|
self.prompt = prompt
|
|
self.in_between = in_between or []
|
|
|
|
def start(self):
|
|
utilities.cls()
|
|
utilities.header(self.title)
|
|
print()
|
|
|
|
for i in self.in_between:
|
|
print(i)
|
|
if self.in_between:
|
|
print()
|
|
|
|
return input(self.prompt) |