From 14c19f3d695738bf7329d51a078aca54b61bb3d6 Mon Sep 17 00:00:00 2001 From: BodgeMaster <> Date: Mon, 14 Feb 2022 23:59:25 +0100 Subject: [PATCH] failed attempt at generating a menu structure from a dict --- main.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/main.py b/main.py index 00509f2..3bd893e 100644 --- a/main.py +++ b/main.py @@ -154,5 +154,103 @@ else: ################################################################################ main_window = tk.Tk() +main_window.title("IDE") main_window.geometry(get_configuration_value("window geometry")) + +def not_implemented(): + warn("Not implemented!") + +# format: +# "":{} -> menu or submenu +# "":function -> menu entry +# "":None -> disabled menu entry +# None:None -> separator +# +# Entries with ... at the end are supposed to open dialogs whereas entries without dots are supposed to take effect immediately +menu_structure = { + "IDE": { + "Preferences...": not_implemented, + "Quit": not_implemented + }, + "Project": { + "New": { + "No known project types": None + }, + "Open...": not_implemented, + "Close": { + "No open projects": None + }, + None: None, + "Preferences...": not_implemented, + "Search...": not_implemented, + "Build": not_implemented + }, + "File": { + "New...": not_implemented, + "Open...": not_implemented, + "Save": not_implemented, + "Close": not_implemented, + None: None, + "Rename...": not_implemented, + "Move...": not_implemented, + "View in File Explorer...": not_implemented + }, + "Edit": { + "Cut": not_implemented, + "Copy": not_implemented, + "Paste": not_implemented, + None: None, + "Search and Replace...": not_implemented, + None: None, + "Format": not_implemented, + "Indent": not_implemented, + "Unindent": not_implemented, + "Toggle Comment": not_implemented + }, + "View": { + "Zoom in": not_implemented, + "Zoom out": not_implemented, + "Normal Size": not_implemented + }, + "Help": { + "Manual...": not_implemented, + "About IDE...": not_implemented, + } +} + +menubar = None +def build_menu(structure_dict, menu): + for entry in structure_dict: + if structure_dict[entry]==None: + if entry==None: + info("Adding separator for " + str(entry)) + menu.add_separator() + else: + info("Adding disabled entry for " + str(entry)) + menu.add_command(label=entry) + menu.entryconfig(entry, state="disabled") + if isinstance(structure_dict[entry], dict): + info("Adding submenu for " + str(entry)) + submenu = tk.Menu(menu, tearoff=False) + build_menu(structure_dict[entry], submenu) + menu.add_cascade(label=entry, menu=submenu) + if callable(structure_dict[entry]): + info("Adding entry for "+str(entry)) + menu.add_command(label=entry, command=structure_dict[entry]) + +def rebuild_menu(): + menubar = tk.Menu(main_window) + menubar = build_menu(menu_structure, menubar) + main_window.config(menu=menubar) + +rebuild_menu() +#menubar = tk.Menu(main_window) +#menus = {} +#menus["Project"] = tk.Menu(menubar, tearoff=False) +#menus["Project"].add_command(label="Open...", command=not_implemented) +#menus["Project>Close"] = tk.Menu(menus["Project"], tearoff=False) +#menus["Project"].add_cascade(label="Close", menu=menus["Project>Close"]) +#menubar.add_cascade(label="Project", menu=menus["Project"]) +#main_window.config(menu=menubar) + main_window.mainloop()