Add help window

This commit is contained in:
Digital Studium 2024-04-14 17:38:37 +03:00
parent 4532d72f92
commit 27bcefd34f
1 changed files with 16 additions and 6 deletions

22
kls
View File

@ -12,6 +12,8 @@ SELECTED_WITHOUT_SEARCH, SELECTED_WITH_SEARCH, NOT_SELECTED_WITHOUT_SEARCH, NOT_
STATE = "running" # состояние программы STATE = "running" # состояние программы
help_win = curses.newwin(3, curses.COLS, curses.LINES - 3, 0) # окно помощи
class Menu: class Menu:
def __init__(self, name, rows, begin_x, width, state): def __init__(self, name, rows, begin_x, width, state):
self.state = state # состояние меню self.state = state # состояние меню
@ -20,8 +22,8 @@ class Menu:
self.filter = "" # фильтр строк меню self.filter = "" # фильтр строк меню
self.selected_row = 0 # выбранная строка меню self.selected_row = 0 # выбранная строка меню
self.begin_x = begin_x # где начинается меню по х? self.begin_x = begin_x # где начинается меню по х?
self.win = curses.newwin(curses.LINES, width, 0, begin_x) # окно с высотой во весь экран, шириной width, и началом по х в точке begin_x self.win = curses.newwin(curses.LINES - 3, width, 0, begin_x) # окно с высотой во весь экран, шириной width, и началом по х в точке begin_x
self.rows_number = curses.LINES - 7 # максимальное число видимых строк меню, начиная с 0 self.rows_number = curses.LINES - 10 # максимальное число видимых строк меню, начиная с 0
@property @property
def filtered_rows(self): def filtered_rows(self):
return [x for x in self.rows if self.filter in x] return [x for x in self.rows if self.filter in x]
@ -76,12 +78,19 @@ def draw_rows(menu):
def draw_search_box(menu): def draw_search_box(menu):
menu.win.addstr(curses.LINES - 2, 2, f"/{menu.filter}" if menu.state in [2, 4] else "Press / for search") # рисуем контент menu.win.addstr(curses.LINES - 5, 2, f"/{menu.filter}" if menu.state in [2, 4] else "Press / for search") # рисуем контент
menu.win.clrtoeol() # очищаем остальную часть строки menu.win.clrtoeol() # очищаем остальную часть строки
menu.win.box() # рисуем рамку menu.win.box() # рисуем рамку
menu.win.refresh() # обновляем окно menu.win.refresh() # обновляем окно
def draw_help():
help = "q: exit, /: enter search mode, Esc: exit search mode, F1: get yaml, F2: describe, F3: edit, F4: pod logs"
help_win.addstr(1, 2, help)
help_win.box() # рисуем рамку
help_win.refresh() # обновляем окно
def draw_menu(menu): def draw_menu(menu):
menu.win.clear() # очищаем окно меню menu.win.clear() # очищаем окно меню
draw_header(menu) # рисуем заголовок draw_header(menu) # рисуем заголовок
@ -89,9 +98,10 @@ def draw_menu(menu):
draw_search_box(menu) # рисуем строку поиска draw_search_box(menu) # рисуем строку поиска
def draw_window(): def draw_windows():
for menu in menus: for menu in menus:
draw_menu(menu) draw_menu(menu)
draw_help()
def run_command(key_pressed): def run_command(key_pressed):
@ -109,7 +119,7 @@ def run_command(key_pressed):
curses.def_shell_mode() curses.def_shell_mode()
subprocess.call(commands[key_pressed], shell=True) subprocess.call(commands[key_pressed], shell=True)
curses.reset_shell_mode() curses.reset_shell_mode()
draw_window() draw_windows()
def navigate_horizontally(key_pressed, menu): def navigate_horizontally(key_pressed, menu):
@ -169,7 +179,7 @@ def catch_input(menu):
def main(): def main():
draw_window() # рисуем начальный экран draw_windows() # рисуем начальный экран
while STATE == "running": while STATE == "running":
for menu in menus: for menu in menus:
if menu.state in [1, 2]: catch_input(menu) # если меню выбрано, перехватываем ввод пользователя if menu.state in [1, 2]: catch_input(menu) # если меню выбрано, перехватываем ввод пользователя