#!/usr/bin/env python import curses.wrapper #-- Define the appearance of some interface elements hotkey_attr = curses.A_BOLD | curses.A_UNDERLINE menu_attr = curses.A_NORMAL #-- Define additional constants EXIT = 0 CONTINUE = 1 #-- Define default conversion dictionary cfg_dict = {'target': 'DEFAULT.HTML', 'source': 'txt2html.txt', 'type': 'INFER', 'proxy': 'NONE' } counter = 0 #-- Give screen module scope screen = None #-- Create the topbar menu def topbar_menu(menus): left = 2 for menu in menus: menu_name = menu[0] menu_hotkey = menu_name[0] menu_no_hot = menu_name[1:] screen.addstr(1, left, menu_hotkey, hotkey_attr) screen.addstr(1, left+1, menu_no_hot, menu_attr) left = left + len(menu_name) + 3 # Add key handlers for this hotkey topbar_key_handler((menu_hotkey.upper(), menu[1])) topbar_key_handler((menu_hotkey.lower(), menu[1])) # Little aesthetic thing to display application title screen.addstr(1, left-1, "SaberNet DCS".center(79-left), curses.A_STANDOUT) screen.refresh() #-- Magic key handler both loads and processes keys strokes def topbar_key_handler(key_assign=None, key_dict={}): if key_assign: key_dict[ord(key_assign[0])] = key_assign[1] else: c = screen.getch() if c in (curses.KEY_END, ord('!')): return 0 elif c == ord('s'): y,x = screen.getyx() screen.move(y+1, x) elif c not in key_dict.keys(): curses.beep() curses.flash() return 1 else: return eval(key_dict[c]) #-- Display the currently selected options def draw_dict(): screen.addstr(5,33, " "*43, curses.A_NORMAL) screen.addstr(8,33, " "*43, curses.A_NORMAL) screen.addstr(11,33, " "*43, curses.A_NORMAL) screen.addstr(14,33, " "*43, curses.A_NORMAL) screen.addstr(5, 33, cfg_dict['source'], curses.A_STANDOUT) screen.addstr(8, 33, cfg_dict['target'], curses.A_STANDOUT) screen.addstr(11,33, cfg_dict['type'], curses.A_STANDOUT) screen.addstr(14,33, cfg_dict['proxy'], curses.A_STANDOUT) screen.addstr(17,33, str(counter), curses.A_STANDOUT) screen.refresh() def main(stdscr): # Frame the interface area at fixed VT100 size global screen screen = stdscr.subwin(23, 79, 0, 0) screen.box() screen.hline(2, 1, curses.ACS_HLINE, 77) screen.refresh() # Define the topbar menus file_menu = ("File", "file_func()") proxy_menu = ("Proxy Mode", "proxy_func()") doit_menu = ("Do It!", "doit_func()") help_menu = ("Help", "help_func()") exit_menu = ("Exit", "EXIT") # Add the topbar menus to screen object topbar_menu((file_menu, proxy_menu, doit_menu, help_menu, exit_menu)) # Enter the topbar menu loop while topbar_key_handler(): draw_dict() if __name__ == "__main__": curses.wrapper(main)