home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / a / altmenu / !MakeMenu / !RunImage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1996-12-11  |  11KB  |  442 lines

  1.  MakeMenu
  2.  Carl Hetherington 1996
  3. $+" at line "+
  4.  "<MakeMenu$Dir>.Libraries.WimpLib"
  5.  "<MakeMenu$Dir>.Libraries.FileLib"
  6.  "<MakeMenu$Dir>.Libraries.MenuLib"
  7.  wimp% 8192
  8.  mess% 1024
  9. /mess%=
  10. init_mess("<MakeMenu$Dir>.Messages")
  11. task%=
  12. init_wimp
  13. *iconbaricon%=
  14. iconbaricon("!MakeMenu")
  15.  windows% 2048
  16.  "Wimp_OpenTemplate",,"<MakeMenu$Dir>.Templates"
  17. &infowin%=
  18. loadwindow(0,199,"info")
  19. *savewin%=
  20. loadwindow(200,599,"saveas")
  21. (itemwin%=
  22. loadwindow(600,999,"item")
  23. 0newmenuwin%=
  24. loadwindow(1000,1099,"newmenu")
  25.  "Wimp_CloseTemplate"
  26. writeicon(infowin%,3,
  27. m("Vsn"))
  28. 9max_menus%=32: max_items%=32: 
  29.  titles% 16*max_menus%
  30.  menu$(max_menus%,max_items%),win%(max_menus%),id$(max_menus%),items%(max_menus%)
  31.  command$(max_menus%,max_items%),ptr%(max_menus%)
  32.  idmenu% 28+(24*max_menus%)
  33. icons_size%=16*1024
  34.  icons% icons_size%: icons_p%=icons%: icons_max%=icons%+icons_size%
  35. menus%=0
  36.  null% 1: ?null%=0
  37. filetype%=&2AB
  38. menu_create("AltMenu")
  39.  menu_block% 512
  40. menu_initialise
  41. ))r%=
  42. menu_load("<MakeMenu$Dir>.Menus")
  43.  r%<>-1 
  44. complain(
  45. m("badmenu"))
  46. +Oiconbaritems%=
  47. menu_create("iconbar",menu_block%): iconbarmenu%=menu_block%
  48. ,Fd%=
  49. menu_create("edit",menu_block%+240): editmenu%=menu_block%+240
  50. finish%=
  51. action%=
  52. poll(0)
  53.  action% 
  54.  2 : 
  55.  "Wimp_OpenWindow",,wimp%
  56.  3 : 
  57.  "Wimp_CloseWindow",,wimp%
  58.  6 : 
  59. mouseclick
  60.  7 : 
  61. dragboxend
  62.  8 : 
  63.  "Wimp_ProcessKey",,wimp%!24
  64.  9 : 
  65. menuselection
  66.  17,18 : 
  67. message: 
  68. savemessages
  69.  finish%=
  70. closedown_mess
  71. closedown_wimp
  72. notmywin(w%)
  73.  l%,n%
  74.  l%=1 
  75.  menus%
  76.  w%=win%(l%) 
  77.  w%=infowin% 
  78.  w%=savewin% 
  79.  w%=itemwin% 
  80. message
  81.  wimp%!16 
  82.  0 : finish%=
  83. mouseclick
  84. x%=wimp%!0
  85. y%=wimp%!4
  86. buttons%=wimp%!8
  87. win%=wimp%!12
  88. icon%=wimp%!16
  89.  win%=-2 
  90.  icon%=iconbaricon% 
  91.  buttons% 
  92.  4 : 
  93. menu_show("AltMenu")
  94.  l%=1 
  95.  menus%: 
  96. menuenable(idmenu%,l%): 
  97. barmenu(x%,iconbarmenu%,iconbaritems%): current_menu%=1
  98.  buttons%=4 
  99.  win%=itemwin% 
  100.  icon% 
  101.  2 : 
  102. enableicon(itemwin%,3): 
  103. disableicon(itemwin%,5): 
  104. disableicon(itemwin%,6): 
  105. seticonstate(itemwin%,2,1): 
  106. seticonstate(itemwin%,4,0)
  107.  4 : 
  108. disableicon(itemwin%,3): 
  109. enableicon(itemwin%,5): 
  110. enableicon(itemwin%,6): 
  111. seticonstate(itemwin%,2,0): 
  112. seticonstate(itemwin%,4,1)
  113.  6 : 
  114. menudisable(idmenu%,
  115. n_from_win(current_win%)): 
  116. iconmenu(itemwin%,6,idmenu%): current_menu%=3
  117.  7 : 
  118.  current_state% 
  119. r:         
  120. menu_newitem(
  121. n_from_win(current_win%))
  122. sI         
  123. menu_edititem(
  124. n_from_win(current_win%),current_icon%)
  125.          
  126. u#         
  127. closewindow(itemwin%)
  128.  8 : 
  129. closewindow(itemwin%)
  130.  buttons%=4 
  131.  win%=savewin% 
  132. savewinclick
  133.  buttons%=2 
  134.  win%<>-2 
  135.  win%<>infowin% 
  136.  win%<>savewin% 
  137. };current_menu%=2: current_win%=win%: current_icon%=icon%
  138.  icon%<1 
  139. menudisable(editmenu%,2) 
  140. menuenable(editmenu%,2)
  141. windowmenu(editmenu%)
  142.  buttons%=4 
  143.  win%=newmenuwin% 
  144.  icon% 
  145. readicon(newmenuwin%,0)
  146. /l%=0: 
  147.  l%<=menus% 
  148.  id$(l%)<>t$: l%+=1: 
  149.  id$(l%)=t$ 
  150. complain("This identifier has already been used.  Please try another.")
  151. menu_create(t$)
  152. closewindow(newmenuwin%)
  153.  3 : 
  154. closewindow(newmenuwin%)
  155. menuselection
  156.  current_menu% 
  157.  wimp%!0 
  158.  2 : 
  159. writeicon(newmenuwin%,0,""): 
  160. openwindow(newmenuwin%)
  161.  3 : 
  162.  wimp%!4>-1 
  163. menu_show(id$(wimp%!4+1))
  164.  4 : 
  165. clear: 
  166. menu_create("AltMenu")
  167.  iconbaritems%-1 : finish%=
  168.  wimp%!0 
  169. writeicon(itemwin%,0,""): 
  170. writeicon(itemwin%,3,"")
  171. writeicon(itemwin%,5,""): 
  172. seticonstate(itemwin%,2,1)
  173. seticonstate(itemwin%,4,0): 
  174. disableicon(itemwin%,5)
  175. enableicon(itemwin%,3)
  176. disableicon(itemwin%,6): 
  177. openwindow(itemwin%): current_state%=1
  178. writeicon(itemwin%,0,
  179. readicon(win%,icon%))
  180. n_from_win(win%): cmd$=command$(n%,icon%): sub%=(
  181. cmd$,1)=">")
  182.  sub% 
  183. writeicon(itemwin%,3,"")
  184. writeicon(itemwin%,5,
  185. cmd$,
  186. cmd$-1))
  187. seticonstate(itemwin%,2,0): 
  188. disableicon(itemwin%,3)
  189. seticonstate(itemwin%,4,1): 
  190. enableicon(itemwin%,5): 
  191. enableicon(itemwin%,6)
  192. openwindow(itemwin%)
  193. writeicon(itemwin%,3,cmd$)
  194. writeicon(itemwin%,5,"")
  195. seticonstate(itemwin%,2,1): 
  196. enableicon(itemwin%,3)
  197. seticonstate(itemwin%,4,0): 
  198. disableicon(itemwin%,5): 
  199. disableicon(itemwin%,6)
  200. openwindow(itemwin%)
  201. current_state%=2
  202. writeicon(itemwin%,5,id$(wimp%!0+1))
  203. dosave(filename$)
  204.  "OS_Find",&8F,filename$ 
  205.  file%
  206. /$wimp%="ALTM": 
  207.  "OS_GBPB",2,file%,wimp%,4
  208.  Fill the ptr%() array with where each menu is going to end up in the file
  209.  l%=1 
  210.  menus%
  211. ptr%(l%)=p%
  212. p%=p%+28
  213. p%=p%+(items%(l%)*24)
  214.  m%=1 
  215.  items%(l%)
  216. -c$=command$(l%,m%): 
  217. c$,1)=">" 
  218.  c$="|"
  219. p%=p%+
  220. (c$)+1
  221. align(p%)
  222.  Build each menu (in wimp%) and send it to the file
  223.  l%=1 
  224.  menus%
  225. p%=wimp%
  226. B$p%=id$(l%): p%!12=&70207: p%!16=(12*16)+12: p%!20=44: p%!24=0
  227. p%+=28
  228.  m%=1 
  229.  items%(l%)
  230.  m%=items%(l%) 
  231.  p%!0=&80 
  232.  p%!0=0
  233. c$=command$(l%,m%)
  234. c$,1)=">" 
  235.  p%!4=ptr%(
  236. n_from_id(
  237. c$-1)))) 
  238.  p%!4=-1
  239. )p%!8=&07000001: $(p%+12)=menu$(l%,m%)
  240. p%+=24
  241.  m%=1 
  242.  items%(l%)
  243. c$=command$(l%,m%)
  244. c$,1)=">" 
  245.  c$="|"
  246. $p%=c$: p%=p%+
  247. (c$)+1
  248. align(p%)
  249.  "OS_GBPB",2,file%,wimp%,p%-wimp%
  250.  "OS_Find",0,file%
  251.  "OS_File",18,filename$,filetype%
  252.  "Wimp_CreateMenu",,-1
  253. writeicon(savewin%,1,filename$)
  254. n_from_win(w%)
  255.  l%<menus% 
  256.  win%(l%)<>w%
  257.     l%+=1
  258.  win%(l%)<>w% 
  259. n_from_id(i$)
  260.  l%<menus% 
  261.  id$(l%)<>i$
  262.     l%+=1
  263.  id$(l%)<>i$ 
  264. menu_makewindow(n%)
  265. menu_createwindow(n%,id$(n%))
  266.  l%=1 
  267.  items%(n%)
  268. menu_createitemicon(n%,menu$(n%,l%))
  269. menu_create(i$)
  270.  menus%=max_menus% 
  271. complain("No more menus can be defined."): 
  272. /menus%+=1: id$(menus%)=i$: items%(menus%)=0
  273. menu_createwindow(menus%,i$)
  274. make_ids_menu
  275. menu_createwindow(n%,id$)
  276.  "Wimp_OpenTemplate",,"<MakeMenu$Dir>.Templates"
  277. p%=titles%+((n%-1)*16)
  278.  "Wimp_LoadTemplate",,wimp%,p%,p%+15,-1,"menu",0
  279. width%=(12*16)+64+12
  280. +9wimp%!40=0: wimp%!44=-96: wimp%!48=width%: wimp%!52=0
  281. ,&wimp%!8=wimp%!16-wimp%!56+wimp%!48
  282. -&wimp%!12=wimp%!4+wimp%!52-wimp%!44
  283. .1wimp%?68=width% 
  284.  &FF: wimp%?69=width% 
  285.  &100
  286.  "Wimp_CreateWindow",,wimp% 
  287.  win%(n%)
  288.  "Wimp_CloseTemplate"
  289. 16wimp%!0=win%(n%): 
  290.  "Wimp_GetWindowInfo",,wimp%+1
  291. $(wimp%!76)=id$
  292. wimp%!4=wimp%!44+32
  293. wimp%!8=wimp%!56-24-44
  294. wimp%!12=wimp%!4+(12*16)+12
  295. wimp%!16=wimp%!8+44
  296. 7.wimp%!20=%00100111000000000011000100111001
  297. 8[wimp%!24=
  298. ip(id$): 
  299.  wimp%!24=0 
  300. complain("Insufficient memory for menu creation"): 
  301. wimp%!28=null%
  302. wimp%!32=16
  303.  "Wimp_CreateIcon",,wimp%
  304. ip(t$)
  305.  icons_p%+16>icons_max% 
  306. D*o%=icons_p%: $o%=t$: icons_p%+=16: =o%
  307. menu_show(i$)
  308.  l%<menus% 
  309.  id$(l%)<>i$
  310. N    l%+=1
  311.  id$(l%)<>i$ 
  312. fullsize(win%(l%))
  313. menu_newitem(n%)
  314. Y;text$=
  315. readicon(itemwin%,0): cmd$=
  316. readicon(itemwin%,3)
  317. ZKsub%=
  318. geticonstate(itemwin%,4): 
  319.  sub% 
  320.  cmd$=">"+
  321. readicon(itemwin%,5)
  322. [Kitems%(n%)+=1: menu$(n%,items%(n%))=text$: command$(n%,items%(n%))=cmd$
  323. menu_createitemicon(n%,text$)
  324. menu_createitemicon(n%,text$)
  325. cMwimp%!0=0: wimp%!4=-96-(items%(n%)*44): wimp%!8=(12*16)+64+12: wimp%!12=0
  326.  "Wimp_SetExtent",win%(n%),wimp%
  327. e5wimp%!0=win%(n%): 
  328.  "Wimp_GetWindowState",,wimp%
  329.  (wimp%!32 
  330.  1<<16)>0 
  331. fullsize(win%(n%))
  332. g6wimp%!0=win%(n%): 
  333.  "Wimp_GetWindowInfo",,wimp%+1
  334. wimp%!4=wimp%!44+32
  335. i*wimp%!8=wimp%!56-24-((wimp%!88)*44)-44
  336. wimp%!12=wimp%!4+(12*16)+12
  337. wimp%!16=wimp%!8+44
  338. l.wimp%!20=%00000111000000000011000100111001
  339. mXwimp%!24=
  340. ip(text$): 
  341.  wimp%!24=0 
  342. complain("Insufficient memory for new item"): 
  343. wimp%!28=null%
  344. wimp%!32=16
  345.  "Wimp_CreateIcon",,wimp% 
  346. qVwimp%!0=win%(n%): wimp%!4=h%: wimp%!8=0: wimp%!12=0: 
  347.  "Wimp_SetIconState",,wimp%
  348. menu_edititem(n%,x%)
  349. y;text$=
  350. readicon(itemwin%,0): cmd$=
  351. readicon(itemwin%,3)
  352. zKsub%=
  353. geticonstate(itemwin%,4): 
  354.  sub% 
  355.  cmd$=">"+
  356. readicon(itemwin%,5)
  357. {,menu$(n%,x%)=text$: command$(n%,x%)=cmd$
  358. writeicon(current_win%,x%,text$)
  359. doload(filename$,dwin%,dic%)
  360.  dwin% 
  361.  itemwin%:
  362.  "OS_Byte",121,3 
  363. writeicon(itemwin%,0,
  364. leaf(filename$))
  365.  k%=3 
  366.  k%=6 
  367. writeicon(itemwin%,3,"Edit "+filename$) 
  368. writeicon(itemwin%,3,"Filer_Run "+filename$)
  369.  "OS_File",17,filename$ 
  370.  ,,load%: ftype%=(load% 
  371.  &FFF00) 
  372.  &100
  373.  ftype%=&2AB 
  374.  "OS_Find",&4F,filename$ 
  375.  handle%: 
  376.  "OS_GBPB",4,handle%,wimp%,4
  377. )$(wimp%+4)="ALTM": 
  378.  !wimp%=wimp%!4 
  379. clear
  380.  "OS_GBPB",3,handle%,wimp%,28,p% 
  381.  ,,,not%,p%
  382.  not%=0 
  383. menus%+=1
  384. id$(menus%)=$wimp%
  385. items%=0
  386.  "OS_GBPB",3,handle%,wimp%,24,p% 
  387.  ,,,,p%
  388. )items%+=1: command$(menus%,items%)=""
  389.  wimp%!4>-1 
  390.  "OS_GBPB",3,handle%,wimp%+1024,12,(wimp%!4+4)
  391. -command$(menus%,items%)=">"+$(wimp%+1024)
  392. $menu$(menus%,items%)=$(wimp%+12)
  393.  wimp%!0=&80
  394.  l%=1 
  395.  items%
  396.  "OS_GBPB",3,handle%,wimp%,256,p%: p%=p%+
  397. ($wimp%)+1
  398.  command$(menus%,l%)="" 
  399.  command$(menus%,l%)=$wimp%
  400. items%(menus%)=items%
  401. align(p%)
  402.  not%>0
  403.  "OS_F