menu: make rebface [ tip: { USAGE: menu data ["Item-1" ["Choice 1" [print "1"] "Choice 2" [print "2"]] "Item-2" []] DESCRIPTION: Simple one-level text-only menu system. } size: 100x5 pane: [] color: colors/outline-light rebind: make function! [] [color: colors/outline-light] init: make function! [/local item item-offset] [ item-offset: 2x0 foreach [label block] data [ insert tail pane make subface [ offset: item-offset size: as-pair 1 sizes/line text: label data: block font: make default-font [align: 'center] para: default-para feel: make default-feel [ over: make function! [face act pos] [ either act [select-face face] [deselect-face face] ] engage: make function! [face act event] [ if act = 'up [ ; evaluate block associated with choice do select face/data choose face/parent-face face/options face/parent-face/offset + face/offset + as-pair 0 face/size/y extract face/data 2 deselect-face face ] ] ] ] item: last pane item/options: item/size/x: sizes/line + first size-text item ; set item label width item-offset/x: item-offset/x + item/size/x ; set offset for next item label ; get max sub-menu size foreach i extract item/data 2 [ default-text/text: i item/options: max item/options sizes/cell + first size-text default-text ] ] data: first pane ] ]