update format of the menu structure dict to allow for multiple separators in one menu, also rewrite the update_menus function to better reflect the spec for the menu dict
parent
cb9770f57e
commit
7d3f606304
|
@ -26,32 +26,30 @@ class Window(QtWidgets.QMainWindow):
|
|||
def set_size(self, size_x, size_y):
|
||||
self.resize(size_x, size_y)
|
||||
|
||||
def update_menus(self, menu_dict):
|
||||
menu = self.menuBar()
|
||||
def update_menus(self, menu_dict, menu=None):
|
||||
# if not a sub menu
|
||||
if menu == None:
|
||||
menu = self.menuBar()
|
||||
|
||||
#Looping through entire menu_dict
|
||||
for topmenu, submenu in menu_dict.items():
|
||||
#making top level menu
|
||||
menu_item = menu.addMenu(topmenu)
|
||||
|
||||
#adding menu items (populating menu)
|
||||
for inner, data in submenu.items():
|
||||
#Adding submenu and populating it
|
||||
if type(data) == dict:
|
||||
sub = menu_item.addMenu(inner)
|
||||
for label, func in data.items():
|
||||
sub.addAction(label)
|
||||
|
||||
if func == None:
|
||||
sub.triggered.connect(lambda x: None)
|
||||
else:
|
||||
sub.triggered.connect(func)
|
||||
#Adding separators
|
||||
elif inner == None:
|
||||
menu_item.addSeparator()
|
||||
for entry in menu_dict:
|
||||
# inactive or separator
|
||||
if menu_dict[entry] == None:
|
||||
# determine if entry is a separator or an inactive menu item
|
||||
if type(entry) == int:
|
||||
menu.addSeparator()
|
||||
else:
|
||||
item = menu_item.addAction(inner)
|
||||
item.triggered.connect(data)
|
||||
|
||||
menu_item = menu.addAction(entry)
|
||||
menu_item.setEnabled(False)
|
||||
# sub menus
|
||||
if type(menu_dict[entry]) == dict:
|
||||
submenu = menu.addMenu(entry)
|
||||
# recurse because sub menus may have sub menus
|
||||
self.update_menus(menu_dict[entry], menu=submenu)
|
||||
# ordinary menu entries
|
||||
if callable(menu_dict[entry]):
|
||||
menu_item = menu.addAction(entry)
|
||||
menu_item.triggered.connect(menu_dict[entry])
|
||||
|
||||
#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
|
||||
|
|
|
@ -8,13 +8,13 @@ def not_implemented():
|
|||
# "":{} -> menu or submenu
|
||||
# "":function -> 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
|
||||
menu_structure = {
|
||||
"IDE": {
|
||||
"Preferences...": not_implemented,
|
||||
None: None,
|
||||
0: None,
|
||||
"Quit": not_implemented
|
||||
},
|
||||
"Project": {
|
||||
|
@ -25,7 +25,7 @@ menu_structure = {
|
|||
"Close": {
|
||||
"No open projects": None
|
||||
},
|
||||
None: None,
|
||||
0: None,
|
||||
"Preferences...": not_implemented,
|
||||
"Search...": not_implemented,
|
||||
"Build": not_implemented
|
||||
|
@ -35,7 +35,7 @@ menu_structure = {
|
|||
"Open...": not_implemented,
|
||||
"Save": not_implemented,
|
||||
"Close": not_implemented,
|
||||
None: None,
|
||||
0: None,
|
||||
"Rename...": not_implemented,
|
||||
"Move...": not_implemented,
|
||||
"View in File Explorer...": not_implemented
|
||||
|
@ -45,9 +45,9 @@ menu_structure = {
|
|||
"Copy": not_implemented,
|
||||
"Paste": not_implemented,
|
||||
"Move code...": not_implemented,
|
||||
None: None,
|
||||
0: None,
|
||||
"Search and Replace...": not_implemented,
|
||||
None: None,
|
||||
1: None,
|
||||
"Format": not_implemented,
|
||||
"Indent": not_implemented,
|
||||
"Unindent": not_implemented,
|
||||
|
@ -63,6 +63,3 @@ menu_structure = {
|
|||
"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
|
||||
|
||||
|
|
Reference in New Issue