added graphical TUI

pull/11/head
Paco Hope 2022-06-14 23:04:01 -04:00
parent 5358fb09b7
commit 47b9d50e9e
2 changed files with 101 additions and 1 deletions

100
menu.py Normal file
View File

@ -0,0 +1,100 @@
from picotui.widgets import *
from picotui.menu import *
from picotui.context import Context
import os
import re
import cli
fileToDo = None
# case insensitive search for files ending in yaml or yml.
def yamlFilter(filename):
return( re.search(".ya?ml$", filename, flags=re.IGNORECASE) != None)
# Dialog on the screen
d = None
# This routine is called to redraw screen "in menu's background"
def screen_redraw(s, allow_cursor=False):
s.attr_color(C_WHITE, C_BLUE)
s.cls()
s.attr_reset()
d.redraw()
# We have two independent widgets on screen: dialog and main menu,
# so can't call their individual loops, and instead should have
# "main loop" to route events to currently active widget, and
# switch the active one based on special events.
def main_loop():
while 1:
key = m.get_input()
if isinstance(key, list):
# Mouse click
x, y = key
if m.inside(x, y):
m.focus = True
if m.focus:
# If menu is focused, it gets events. If menu is cancelled,
# it loses focus. Otherwise, if menu selection is made, we
# quit with with menu result.
res = m.handle_input(key)
if res == ACTION_CANCEL:
m.focus = False
elif res is not None and res is not True:
return res
else:
# If menu isn't focused, it can be focused by pressing F9.
if key == KEY_F9:
m.focus = True
m.redraw()
continue
# Otherwise, dialog gets input
res = d.handle_input(key)
if res is not None and res is not True:
return res
with Context():
d = Dialog(10, 5, 80, 24)
d.add(2, 21, WLabel("Press F9 for menu"))
d.add(2, 22, WLabel("Press Esc to Exit"))
# Get all files in the current directory that are YAML files
d.add(4, 2, WLabel("Available YAML Files:"))
# dir_list = list(filter(yamlFilter, os.listdir('.')))
dir_list = os.listdir('.')
print( dir_list )
# Draw a list box with all those files in it
filelist = WListBox(26, 10, dir_list )
d.add(4, 3, filelist )
b = WButton(8, "OK")
d.add(10, 19, b)
b.finish_dialog = ACTION_OK
b = WButton(8, "Cancel")
d.add(23, 19, b)
b.finish_dialog = ACTION_CANCEL
screen_redraw(Screen)
Screen.set_screen_redraw(screen_redraw)
menu_file = WMenuBox([("Open...", "Open"), ("Save", "S"), ("Save as...", "Sa"), ("Exit", "ex")])
menu_edit = WMenuBox([("Copy", "copy"), ("Paste", "paste")])
m = WMenuBar([("File", menu_file), ("Edit", menu_edit), ("About", "About")])
m.permanent = True
m.redraw()
res = main_loop()
# We get here when the user finishes.
if( res != ACTION_CANCEL ):
fileToDo = filelist.content[filelist.choice]
if( fileToDo != None ):
configfile = open( fileToDo, 'r', encoding='utf8')
cli.parseFile(configfile)
else:
print( "Cancelled" )

View File

@ -1,2 +1,2 @@
pyyaml
argparse
argparse