Render.ru

menuMan, отражение файловой структуры в виде меню

ASK'R

Активный участник
Рейтинг
5
#1
Список файлов в нужной папке и вложенных получить могу, обрезать лишнее тоже, но неясно как это вывести при произвольном количестве вложенности и файлов.
Вручную вложенные меню успешно делаются:
Код:
------------------ deleting previous menu
if ((menuMan.findMenu "MyScripts") != undefined) then 
(
	menuMan.unRegisterMenu (menuMan.findMenu "MyScripts")
	menuMan.updateMenuBar()
)

--------------------creating menu
mainMenuBar = menuMan.getMainMenuBar()
subMenu = menuMan.createMenu "MyScripts"

	str = "macroscript smartmenu" + "51" /*(ii as string)*/ + " category:\"smartmenu\" buttontext:\"" + "(getFilenameFile i)" + "\" (execute (print \"hello\" /*openFile \"" + "i" + "\"*/))"
	execute str	
--					menuMan.createActionItem "macroScriptName" "macroScriptCategory"
	testItem = menuMan.createActionItem ("smartmenu51"/* + "(ii as string)"*/) "smartmenu"
	subMenu.addItem testItem -1	

	separator = menuMan.createSeparatorItem()
	subMenu.addItem separator -1

	subSubMenu = menuMan.createMenu "test submenu"
	testSubItem = menuMan.createSubMenuItem "name" subSubMenu
	subMenu.addItem testSubItem -1

	subSubSubMenu = menuMan.createMenu "test subsubmenu"
	testSubSubItem = menuMan.createSubMenuItem "subname" subSubSubMenu
	subSubMenu.addItem testSubSubItem -1
	
	testItem = menuMan.createActionItem ("smartmenu51"/* + "(ii as string)"*/) "smartmenu"
	subSubSubMenu.addItem testItem -1	
	
-----------------------updating menu
subMenuItem = menuMan.createSubMenuItem "Test Menu" subMenu
subMenuIndex = mainMenuBar.numItems() - 1
mainMenuBar.addItem subMenuItem subMenuIndex

menuMan.updateMenuBar()
(взято из SmartMenu http://www.scriptspot.com/3ds-max/scripts/smart-menu и хелпа)
Список файла в виде массива, разобрать filterString'ом можно.
 

igorznag

Мастер
Рейтинг
103
#2
Код:
(
fn recursive_menu subMenu subPath =
(
files=getFiles (subPath+"/*.ms"); sort files
-------------------- creating run-maroscripts and populating menu
for i in files do 
(
	ii = ii + 1
	str = "macroscript smartmenu" + (ii as string) + " category:\"smartmenu\" buttontext:\"" + (getFilenameFile i) + "\" (execute (openFile \"" + i + "\"))"
	execute str	

	testItem = menuMan.createActionItem ("smartmenu" + (ii as string)) "smartmenu"
	subMenu.addItem testItem -1	
)
--get dirs
dirArr = GetDirectories (subPath+"/*"); sort dirArr
if(dirArr.count>0)then
(
if(files.count>0)then
(
separator = menuMan.createSeparatorItem() 
subMenu.addItem separator -1 
)--if(files.count>0)then
--creating subMenu
for i in dirArr do
(
subSubPath=substring i 1 (i.count-1)
subSubMenu = menuMan.createMenu (getFilenameFile subSubPath) 
subSubItem = menuMan.createSubMenuItem "name" subSubMenu 
subMenu.addItem subSubItem -1
recursive_menu subSubMenu subSubPath
)--for i in dirArr do
)--if(dirArr.count>0)then
)--fn recursive_menu my_menu
-----------------------------------------------------
------------------ deleting previous menu
if ((menuMan.findMenu "MyScripts") != undefined) then 
(
	menuMan.unRegisterMenu (menuMan.findMenu "MyScripts")
	menuMan.updateMenuBar()
)
-----------
global ii=0
--------------------creating menu
subMenu = menuMan.createMenu "MyScripts"
subPath=(GetDir #scripts)+"/myscripts"
recursive_menu subMenu subPath
-----------------------updating menu
mainMenuBar = menuMan.getMainMenuBar()
subMenuItem = menuMan.createSubMenuItem "Test Menu" subMenu
subMenuIndex = mainMenuBar.numItems() - 1
mainMenuBar.addItem subMenuItem subMenuIndex
menuMan.updateMenuBar()
---------------------
print ii
)
 

ASK'R

Активный участник
Рейтинг
5
#4
Спасибо, работает, так как надо! буду теперь читать внимательно и разбираться как работает, ведь чтобы понять рекурсию надо понять рекурсию ;)
 
Сверху