@@ -307,7 +307,7 @@ class TaskSelectMenu(QtGui.QPushButton):
307307 '''
308308 def __init__ (self , initial_text , add_default = False ):
309309 self .callback = lambda task : None
310- self .menu = QtGui .QMenu ()
310+ self .root_menu = QtGui .QMenu ()
311311 self .add_default = add_default
312312 self .default_text = initial_text
313313 super ().__init__ (initial_text )
@@ -323,29 +323,33 @@ def fxn():
323323 return fxn
324324
325325 def update_menu (self , root_folder ):
326- self .menu .clear ()
326+ self .root_menu .clear ()
327+ self .submenus_dictionary = {}
327328 if self .add_default :
328- self .menu .addAction (self .default_text ,self .create_action (self .default_text ))
329- self .menu .addSeparator ()
330- previous_menu = self .menu
331- current_menu = self .menu
329+ self .root_menu .addAction (self .default_text ,self .create_action (self .default_text ))
330+ self .root_menu .addSeparator ()
332331 for dirName , subdirList , fileList in os .walk (root_folder ):
333- subfolder = dirName .split (root_folder )[1 ][1 :]
334- if subfolder :
335- if any (".py" in filename for filename in fileList ): # only add submenu if there are .py files inside
336- sub_menu = current_menu .addMenu (subfolder .split (os .path .sep )[- 1 ])
337- for filename in fileList :
338- if filename .endswith ('.py' ):
339- menuItem = filename [:- 3 ]
340- sub_menu .addAction (menuItem ,self .create_action (os .path .join (subfolder ,menuItem )))
341- if subdirList : # continue down to next level
342- previous_menu = current_menu
343- current_menu = sub_menu
344- else : # return up to previous level
345- current_menu = previous_menu
346- else : # list top level files
347- for filename in fileList :
332+ subdirList .sort ()
333+ sub_dir = dirName .split (root_folder )[1 ][1 :]
334+ if sub_dir :
335+ parent_menu = self .get_parent_menu (sub_dir )
336+ sub_menu_name = sub_dir .split (os .path .sep )[- 1 ]
337+ sub_menu = parent_menu .addMenu (sub_menu_name )
338+ self .submenus_dictionary [sub_dir ] = sub_menu
339+ for filename in sorted (fileList ):
348340 if filename .endswith ('.py' ):
349341 menuItem = filename [:- 3 ]
350- self .menu .addAction (menuItem ,self .create_action (menuItem ))
351- self .setMenu (self .menu )
342+ sub_menu .addAction (menuItem ,self .create_action (os .path .join (sub_dir ,menuItem )))
343+ else : # add root level files
344+ for filename in sorted (fileList ):
345+ if filename .endswith ('.py' ):
346+ menuItem = filename [:- 3 ]
347+ self .root_menu .addAction (menuItem ,self .create_action (menuItem ))
348+ self .setMenu (self .root_menu )
349+
350+ def get_parent_menu (self ,sub_dir ):
351+ split_folder = sub_dir .split (os .path .sep )
352+ if len (split_folder )== 1 :
353+ return self .root_menu
354+ else :
355+ return self .submenus_dictionary [os .path .sep .join (split_folder [:- 1 ])]
0 commit comments