Radically revamp disk/partition selection process

Co-authored-by: Michael Eckhoff <mreckhof@gmail.com>
This commit is contained in:
Dhinak G
2021-01-31 13:22:37 -05:00
parent 5bfa2afc38
commit 8917368988
4 changed files with 147 additions and 73 deletions
+36 -27
View File
@@ -46,7 +46,7 @@ def cls():
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):
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 []
@@ -55,44 +55,53 @@ class TUIMenu():
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:
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
cls()
header(self.title)
print()
for i in self.in_between:
print(i)
if self.in_between:
while True:
cls()
header(self.title)
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)
for i in self.in_between:
print(i)
if self.in_between:
print()
print()
selected = input(self.prompt)
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)
keys = [option[0].upper() for option in self.options]
if not selected or selected.upper() not in keys:
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
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():
@@ -111,4 +120,4 @@ class TUIOnlyPrint():
if self.in_between:
print()
input(self.prompt)
return input(self.prompt)