/ClassMyCanvas [ClassPieMenuCanvas ClassTextCanvas] [] classbegin /Str null def /preferredsize {100 100} def /dragstr { % str => - /setstr self send self { createevent begin /Canvas exch def /Name MenuButton def % /Interest self def /ClientData self def currentdict end null blockinputqueue /trigger self send } /DragInterest ClassSelectUI send send } def /TrackStart { % event => bool /?Cancel self send dup CheckForSecondary dup begin Name Interest dup null eq { pop ClientData } if Canvas end % ev but int cv /CurrentSelectable exch store % ev but int /TrackStopName 2 index store % ev but int /ClientData get exch get self send % bool } /installmethod ClassSelectUI send ClassSelectUI /DragInterest get /ClientData get MenuButton /DragPoint put /setstr { % str => - /Str exch def } def /str { % - => str Str } def /MaxChars 20 def /NewSelection { % event rank => sel pop pop Str /new ClassStringSelection send } def /SelectableType /DragOnly def /SelectionContext { % event selection|null => name pop pop /SelectedObject } def classend def /pie framebuffer /new ClassPieMenu send def [ (Today) (Sunday) (Monday) (Tuesday) (Wednesday) (Thursday) (Friday) (Saturday) ] /setitemlist pie send 90 /setinitialangle pie send false /setclockwise pie send { % item pie { Distance ItemRadius gt { /CancelNotify PieMenuService send dup /item self send 0 get /dragstr can send } if } exch send pop } /setpreviewer pie send /can framebuffer /new ClassMyCanvas send def pie /setpiemenu can send /win can framebuffer /new ClassBaseWindow send def /new ClassEventMgr send /activate win send /place win send /map win send