Compare commits
	
		
			2 Commits 
		
	
	
		
			603acb60f6
			...
			7d3f606304
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  BodgeMaster | 7d3f606304 | |
|  BodgeMaster | cb9770f57e | 
|  | @ -26,32 +26,30 @@ class Window(QtWidgets.QMainWindow): | ||||||
|     def set_size(self, size_x, size_y): |     def set_size(self, size_x, size_y): | ||||||
|         self.resize(size_x, size_y) |         self.resize(size_x, size_y) | ||||||
| 
 | 
 | ||||||
|     def update_menus(self, menu_dict): |     def update_menus(self, menu_dict, menu=None): | ||||||
|         menu = self.menuBar() |         # if not a sub menu | ||||||
|  |         if menu == None: | ||||||
|  |             menu = self.menuBar() | ||||||
|  | 
 | ||||||
|         #Looping through entire menu_dict |         #Looping through entire menu_dict | ||||||
|         for topmenu, submenu in menu_dict.items(): |         for entry in menu_dict: | ||||||
|             #making top level menu |             # inactive or separator | ||||||
|             menu_item = menu.addMenu(topmenu) |             if menu_dict[entry] == None: | ||||||
| 
 |                 # determine if entry is a separator or an inactive menu item | ||||||
|             #adding menu items (populating menu) |                 if type(entry) == int: | ||||||
|             for inner, data in submenu.items(): |                     menu.addSeparator() | ||||||
|                 #Adding submenu and populating it |                 else: | ||||||
|                 if type(data) == dict: |                     menu_item = menu.addAction(entry) | ||||||
|                     sub = menu_item.addMenu(inner) |                     menu_item.setEnabled(False) | ||||||
|                     for label, func in data.items(): |             # sub menus | ||||||
|                         sub.addAction(label) |             if type(menu_dict[entry]) == dict: | ||||||
| 
 |                 submenu = menu.addMenu(entry) | ||||||
|                         if func == None: |                 # recurse because sub menus may have sub menus | ||||||
|                             sub.triggered.connect(lambda x: None) |                 self.update_menus(menu_dict[entry], menu=submenu) | ||||||
|                         else: |             # ordinary menu entries | ||||||
|                             sub.triggered.connect(func) |             if callable(menu_dict[entry]): | ||||||
|                 #Adding separators |                 menu_item = menu.addAction(entry) | ||||||
|                 elif inner == None: |                 menu_item.triggered.connect(menu_dict[entry]) | ||||||
|                     menu_item.addSeparator() |  | ||||||
|                 else:     |  | ||||||
|                     item = menu_item.addAction(inner) |  | ||||||
|                     item.triggered.connect(data) |  | ||||||
|      |  | ||||||
| 
 | 
 | ||||||
| #TODO: This needs to run in a thread but Qt really doesn't want it to. There are two ways around this: | #TODO: This needs to run in a thread but Qt really doesn't want it to. There are two ways around this: | ||||||
| #   - create the QtWidgets.QApplication inside a thread and run all QT stuff inside that thread | #   - create the QtWidgets.QApplication inside a thread and run all QT stuff inside that thread | ||||||
|  |  | ||||||
|  | @ -1,4 +1,3 @@ | ||||||
| import tkinter as tk |  | ||||||
| import util | import util | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -9,13 +8,13 @@ def not_implemented(): | ||||||
| #   "":{} -> menu or submenu | #   "":{} -> menu or submenu | ||||||
| #   "":function -> menu entry | #   "":function -> menu entry | ||||||
| #   "":None -> disabled menu entry | #   "":None -> disabled menu entry | ||||||
| #   None:None -> separator | #   int:None -> separator | ||||||
| # | # | ||||||
| # Entries with ... at the end are supposed to open dialogs whereas entries without dots are supposed to take effect immediately | # Entries with ... at the end are supposed to open dialogs whereas entries without dots are supposed to take effect immediately | ||||||
| menu_structure = { | menu_structure = { | ||||||
|     "IDE": { |     "IDE": { | ||||||
|         "Preferences...": not_implemented, |         "Preferences...": not_implemented, | ||||||
|         None: None, |         0: None, | ||||||
|         "Quit": not_implemented |         "Quit": not_implemented | ||||||
|     }, |     }, | ||||||
|     "Project": { |     "Project": { | ||||||
|  | @ -26,7 +25,7 @@ menu_structure = { | ||||||
|         "Close": { |         "Close": { | ||||||
|             "No open projects": None |             "No open projects": None | ||||||
|         }, |         }, | ||||||
|         None: None, |         0: None, | ||||||
|         "Preferences...": not_implemented, |         "Preferences...": not_implemented, | ||||||
|         "Search...": not_implemented, |         "Search...": not_implemented, | ||||||
|         "Build": not_implemented |         "Build": not_implemented | ||||||
|  | @ -36,7 +35,7 @@ menu_structure = { | ||||||
|         "Open...": not_implemented, |         "Open...": not_implemented, | ||||||
|         "Save": not_implemented, |         "Save": not_implemented, | ||||||
|         "Close": not_implemented, |         "Close": not_implemented, | ||||||
|         None: None, |         0: None, | ||||||
|         "Rename...": not_implemented, |         "Rename...": not_implemented, | ||||||
|         "Move...": not_implemented, |         "Move...": not_implemented, | ||||||
|         "View in File Explorer...": not_implemented |         "View in File Explorer...": not_implemented | ||||||
|  | @ -46,9 +45,9 @@ menu_structure = { | ||||||
|         "Copy": not_implemented, |         "Copy": not_implemented, | ||||||
|         "Paste": not_implemented, |         "Paste": not_implemented, | ||||||
|         "Move code...": not_implemented, |         "Move code...": not_implemented, | ||||||
|         None: None, |         0: None, | ||||||
|         "Search and Replace...": not_implemented, |         "Search and Replace...": not_implemented, | ||||||
|         None: None, |         1: None, | ||||||
|         "Format": not_implemented, |         "Format": not_implemented, | ||||||
|         "Indent": not_implemented, |         "Indent": not_implemented, | ||||||
|         "Unindent": not_implemented, |         "Unindent": not_implemented, | ||||||
|  | @ -64,21 +63,3 @@ menu_structure = { | ||||||
|         "About IDE...": not_implemented, |         "About IDE...": not_implemented, | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| #FIXME: come up with a way to uniquely declare separators so they don't become the same element of a dict |  | ||||||
| 
 |  | ||||||
| def build_menu(structure_dict, menu): |  | ||||||
|     for entry in structure_dict: |  | ||||||
|         if structure_dict[entry]==None: |  | ||||||
|             if entry==None: |  | ||||||
|                 menu.add_separator() |  | ||||||
|             else: |  | ||||||
|                 menu.add_command(label=entry) |  | ||||||
|                 menu.entryconfig(entry, state="disabled") |  | ||||||
|         if isinstance(structure_dict[entry], dict): |  | ||||||
|             submenu = tk.Menu(menu, tearoff=False) |  | ||||||
|             build_menu(structure_dict[entry], submenu) |  | ||||||
|             menu.add_cascade(label=entry, menu=submenu) |  | ||||||
|         if callable(structure_dict[entry]): |  | ||||||
|             menu.add_command(label=entry, command=structure_dict[entry]) |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
		Reference in New Issue