69 lines
1.4 KiB
Python
69 lines
1.4 KiB
Python
# Create hierarchical menus for some volumes.
|
|
|
|
import os
|
|
from Menu import *
|
|
import macfs
|
|
import sys
|
|
|
|
def main():
|
|
global oldbar
|
|
my_volumes = []
|
|
while 1:
|
|
fss, ok = macfs.GetDirectory()
|
|
if not ok:
|
|
break
|
|
my_volumes.append(fss.as_pathname())
|
|
if not my_volumes:
|
|
return
|
|
oldbar = GetMenuBar()
|
|
ClearMenuBar()
|
|
makevolmenus(my_volumes)
|
|
DrawMenuBar()
|
|
|
|
def reset():
|
|
oldbar.SetMenuBar()
|
|
DrawMenuBar()
|
|
|
|
id = 1
|
|
def nextid():
|
|
global id
|
|
nid = id
|
|
id = id+1
|
|
return nid
|
|
|
|
def makevolmenus(volumes):
|
|
for vol in volumes:
|
|
makevolmenu(vol)
|
|
|
|
def makevolmenu(vol):
|
|
menu = NewMenu(nextid(), vol)
|
|
adddirectory(menu, vol)
|
|
menu.InsertMenu(0)
|
|
|
|
def adddirectory(menu, dir, maxdepth = 1):
|
|
print "adddirectory:", `dir`, maxdepth
|
|
files = os.listdir(dir)
|
|
item = 0
|
|
for file in files:
|
|
item = item+1
|
|
menu.AppendMenu('x') # add a dummy string
|
|
menu.SetMenuItemText(item, file) # set the actual text
|
|
fullname = os.path.join(dir, file)
|
|
if os.path.isdir(fullname):
|
|
menu.SetMenuItemText(item, ':' + file + ':') # append colons
|
|
if maxdepth > 0:
|
|
id = nextid()
|
|
submenu = NewMenu(id, fullname)
|
|
adddirectory(submenu, fullname, maxdepth-1)
|
|
submenu.InsertMenu(-1)
|
|
# If the 'Cmd' is 0x1B, then the 'Mark' is the submenu id
|
|
menu.SetItemMark(item, id)
|
|
menu.SetItemCmd(item, 0x1B)
|
|
if not files:
|
|
menu.AppendMenu(':') # dummy item to make it selectable
|
|
return menu
|
|
|
|
if __name__ == '__main__':
|
|
main()
|
|
sys.exit(1) # To allow the user to interact...
|