1# 2# francy: Interactive Discrete Mathematics in GAP 3# 4 5############################################################################# 6## 7#M Menu( <title> ) . . . . . . . . . . . . . . . a new menu entry 8## 9InstallMethod(Menu, 10 "a title string", 11 true, 12 [IsString, 13 IsCallback], 14 0, 15function(title, callback) 16 return Objectify(MenuObjectType, rec( 17 id := GenerateID(), 18 title := title, 19 callback := callback, 20 menus := rec() 21 )); 22end); 23 24InstallOtherMethod(Menu, 25 "a title string", 26 true, 27 [IsString], 28 0, 29function(title) 30 return Menu(title, NoopCallback()); 31end); 32 33############################################################################# 34## 35#M Add( <menu>, <menu> ) . . . . . add menu to canvas 36## 37InstallOtherMethod(Add, 38 "a menu, a menu", 39 true, 40 [IsMenu, 41 IsMenu], 42 0, 43function(menu, object) 44 menu!.menus!.(object!.id) := object; 45 return menu; 46end); 47 48InstallOtherMethod(Add, 49 "a canvas, a list of francy objects", 50 true, 51 [IsMenu, 52 IsList], 53 0, 54function(menu, objects) 55 local object; 56 for object in objects do 57 Add(menu, object); 58 od; 59 return menu; 60end); 61 62############################################################################# 63## 64#M Remove( <menu>, <menu> ) . . . . . remove menu from menu 65## 66InstallOtherMethod(Remove, 67 "a menu, a menu", 68 true, 69 [IsMenu, 70 IsMenu], 71 0, 72function(menu, object) 73 Unbind(menu!.menus!.(object!.id)); 74 return menu; 75end); 76 77InstallOtherMethod(Remove, 78 "a menu, a list of francy objects", 79 true, 80 [IsMenu, 81 IsList], 82 0, 83function(menu, objects) 84 local object; 85 for object in objects do 86 Remove(menu, object); 87 od; 88 return menu; 89end);