FreeBSD Manual Pages
AG_MENU(3) BSD Library Functions Manual AG_MENU(3) NAME AG_Menu -- agar menu system SYNOPSIS #include <agar/core.h> #include <agar/gui.h> DESCRIPTION The AG_Menu widget displays a hierarchical menu composed of items of the following types: Action items Selecting the item causes a specified function to be in- voked, with the specified arguments. See AG_MenuAction(). Boolean items A menu item tied to a variable describing a boolean value (either an integer, or specific bits in an integer). Se- lecting an active boolean item will toggle the value. See AG_MenuBool(). Separators A cosmetic separator, displayed as a horizontal or verti- cal bar depending on the display mode. See AG_MenuSeparator(). Dynamic items A dynamically updated menu item. The item itself (possi- bly including child items) are expected to be generated by a specified callback routine. An example of a dynamic item would be a submenu displaying the current contents of a folder. See AG_MenuDynamicItem(). Menu elements can be displayed in text format with the AG_MenuView wid- get, or in icon format using AG_Toolbar(3). Note: Many functions of AG_Menu accept fn and fnArgs arguments; see AG_Event(3) for details on event handler functions in Agar. INHERITANCE HIERARCHY AG_Object(3) -> AG_Widget(3) -> AG_Menu. INITIALIZATION AG_Menu * AG_MenuNew(AG_Widget *parent, Uint flags) AG_Menu * AG_MenuNewGlobal(Uint flags) void AG_MenuExpand(AG_Widget *parentWidget, AG_MenuItem *item, int x, int y) void AG_MenuCollapse(AG_MenuItem *item) void AG_MenuCollapseAll(AG_Menu *m) void AG_MenuSetPadding(AG_Menu *menu, int left, int right, int top, int bottom) void AG_MenuSetLabelPadding(AG_Menu *menu, int left, int right, int top, int bottom) The AG_MenuNew() function allocates, initializes, and attaches a new AG_Menu widget. Acceptable flags include: AG_MENU_HFILL Expand horizontally in parent (equivalent to invoking AG_ExpandHoriz(3)). This option is recommended. AG_MENU_VFILL Expand vertically in parent (equivalent to invoking AG_ExpandVert(3)). AG_MENU_EXPAND Shorthand for AG_MENU_HFILL|AG_MENU_VFILL. The AG_MenuNewGlobal() constructor creates a global "application menu". The manner in which application menus are displayed is dependent on the underlying platform and graphics system. If there is insufficient mem- ory, or an application menu is already defined, AG_MenuNewGlobal() may fail returning NULL. The AG_MenuExpand() function creates a new window containing an AG_MenuView widget displaying the menu items under item. The optional parentWidget argument should point to some parent widget or window. The new window is created at coordinates x, y relative to parentWidget. The newly created window is also attached to the parent window of parentWidget. AG_MenuCollapse() closes the window previously created by AG_MenuExpand() for the given menu item. AG_MenuCollapseAll() closes all windows gener- ated by AG_MenuExpand() for the whole menu m. AG_MenuSetPadding() sets the global padding around all menu items, in pixels. AG_MenuSetLabelPadding() sets the padding around the text label of items. If a parameter is -1, its current value is preserved. MENU ITEMS AG_MenuItem * AG_MenuNode(AG_MenuItem *parent, const char *text, const AG_Surface *icon) AG_MenuItem * AG_MenuAction(AG_MenuItem *parent, const char *text, const AG_Surface *icon, void (*fn)(AG_Event *), const char *fnArgs, ...) AG_MenuItem * AG_MenuActionKb(AG_MenuItem *parent, const char *text, const AG_Surface *icon, AG_KeySym keysym, AG_KeyMod keymod, void (*fn)(AG_Event *), const char *fnArgs, ...) AG_MenuItem * AG_MenuDynamicItem(AG_MenuItem *parent, const char *text, const AG_Surface *icon, void (*fn)(AG_Event *), const char *fnArgs, ...) AG_MenuItem * AG_MenuDynamicItemKb(AG_MenuItem *parent, const char *text, const AG_Surface *icon, AG_KeySym key, AG_KeyMod kmod, void (*fn)(AG_Event *), const char *fnArgs, ...) AG_MenuItem * AG_MenuTool(AG_MenuItem *parent, AG_Toolbar *toolbar, const char *text, const AG_Surface *icon, AG_KeySym keysym, AG_KeyMod keymod, void (*fn)(AG_Event *), const char *fnArgs, ...) void AG_MenuSetIcon(AG_MenuItem *item, const AG_Surface *su) void AG_MenuSetLabel(AG_MenuItem *item, const char *format, ...) void AG_MenuSetLabelS(AG_MenuItem *item, const char *label) void AG_MenuSetPollFn(AG_MenuItem *item, void (*fn)(AG_Event *), const char *fnArgs, ...) void AG_MenuDel(AG_MenuItem *menu) void AG_MenuState(AG_MenuItem *item, int state) void AG_MenuEnable(AG_MenuItem *item) void AG_MenuDisable(AG_MenuItem *item) The AG_MenuNode() function inserts a new node (no-op) item displaying the given text and icon (or NULL if none). Node items are typically only used to attach subitems. The AG_MenuAction() function inserts a new action item displaying the given text and icon (or NULL if none). When selected, the item will in- voke the specified event handler function fn. The AG_MenuActionKb() variant also associates the action with the given AG_KeySym(3) and modifier. The AG_MenuTool() variant also inserts an item into the specified AG_Toolbar(3) widget. The AG_MenuSetIcon() function sets the icon associated with a menu item. If an argument of NULL is given, any existing icon is removed. AG_MenuSetLabel() changes the text associated with an existing menu item. AG_MenuSetPollFn() changes the callback function associated with a given item (previously created with AG_MenuDynamicItem()). The AG_MenuDynamicItem() function creates a dynamic menu item. The spec- ified callback routine fn will be invoked repeatedly to update the menu item. The AG_Menu object is passed as AG_SELF(), and pointer to the AG_MenuItem structure can be retrieved using AG_SENDER() (see AG_Event(3)). The callback routine is allowed to directly modify the state member of the AG_MenuItem. This variable defines the boolean state for the specified menu item (0 = disabled, 1 = enabled). If state is -1, the boolean state is determined from any boolean/flag binding associated with the item. The callback can also change the text label and icon us- ing AG_MenuSetLabel() and AG_MenuSetIcon(). The AG_MenuDel() routine deletes the specified menu item and its sub- items. The AG_MenuState() (or its variants AG_MenuEnable() and AG_MenuDisable()) request that all subsequently created menu items are assigned the given state. BOOLEAN AND BITMASK ITEMS AG_MenuItem * AG_MenuBool(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int invert) AG_MenuItem * AG_MenuBoolMp(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuIntBool(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int invert) AG_MenuItem * AG_MenuIntBoolMp(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuInt8Bool(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint8 *value, int invert) AG_MenuItem * AG_MenuInt8BoolMp(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint8 *value, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuFlags(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int flags, int invert) AG_MenuItem * AG_MenuFlagsMp(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int flags, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuIntFlags(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int flags, int invert) AG_MenuItem * AG_MenuIntFlagsMp(AG_MenuItem *, const char *text, const AG_Surface *icon, int *value, int flags, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuInt8Flags(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint8 *value, Uint8 flags, int invert) AG_MenuItem * AG_MenuInt8FlagsMp(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint8 *value, Uint8 flags, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuInt16Flags(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint16 *value, Uint16 flags, int invert) AG_MenuItem * AG_MenuInt16FlagsMp(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint16 *value, Uint16 flags, int invert, AG_Mutex *mutex) AG_MenuItem * AG_MenuInt32Flags(AG_MenuItem *, const char *text, const AG_Surface *icon, Uint32 *value, Uint32 flags, int invert) The AG_Menu*Bool() functions create a new item that binds to the given boolean variable. If the invert parameter is non-zero, the actual value is inverted. The AG_Menu*Flags() functions create a new item controlling one or more bits inside an integer value. The flags argument specifies the bitmask. If invert is non-zero, the bits are inverted. The AG_Menu*BoolMp() and AG_Menu*FlagsMp() variants accept a AG_Mutex * argument specifying a mutex to acquire prior to reading or writing the data. OTHER ITEMS void AG_MenuSeparator(AG_MenuItem *item) void AG_MenuSection(AG_MenuItem *item, const char *format, ...) void AG_MenuSectionS(AG_MenuItem *item, const char *text) The AG_MenuSeparator() function inserts a horizontal menu separator. AG_MenuSection() creates a non-selectable item displaying the given text. POPUP MENUS AG_PopupMenu * AG_PopupNew(AG_Widget *widget) void AG_PopupShow(AG_PopupMenu *pm) void AG_PopupShowAt(AG_PopupMenu *pm, int x, int y) void AG_PopupHide(AG_PopupMenu *pm) void AG_PopupDestroy(AG_Widget *widget, AG_PopupMenu *pm) The AG_PopupNew() function creates a new popup menu and associates it with the specified widget. This association will cause the popup menu to be automatically freed when the given widget is destroyed. Once a popup menu is created, new items can be inserted using the root member of the AG_PopupMenu structure as parent. AG_PopupShow() displays the popup menu at the current mouse coordinates. AG_PopupShowAt() accepts global (view) coordinates. AG_PopupHide() hides the popup menu from the user. AG_PopupDestroy() detaches the specified popup menu from its associated widget, and releases its allocated resources. This function is automati- cally invoked whenever a widget is destroyed. EVENTS The AG_Menu widget does not generate any event. BINDINGS The AG_Menu widget does not provide any binding. STRUCTURE DATA For the AG_Menu object: AG_MenuItem *root The root menu item (read-only). AG_MenuItem *itemSel The currently selected top-level item (read-only). Top-level items are attached directly to root. int selecting Selection is in progress if set to 1 (read-only). For the AG_MenuItem structure: char *text Displayed text for the menu item (read-only, set by AG_MenuSetLabel()). AG_Surface *iconSrc The AG_Surface(3) of the menu icon, or NULL (read-only, set by AG_MenuSetIcon()). int value The boolean state of the item, used by de- fault. If the boolean state was bound to an- other variable (e.g., using AG_MenuBool() or AG_MenuSetIntBool()), this value is ignored. int state Make item clickable (1) or disabled (0). int (*stateFn)(AG_Event *) Evaluate function to determine if item is ac- tive. Overrides the state flag. AG_Menu *pmenu Back pointer to the parent AG_Menu (read- only). EXAMPLES The following code fragment creates a popup menu with a disabled item: AG_PopupMenu *pm; AG_MenuItem *mi; pm = AG_PopupNew(myParentWidget); AG_MenuAction(pm->root, "Copy", NULL, DoCopy, NULL); mi = AG_MenuAction(pm->root, "Paste", NULL, DoPaste, NULL); mi->state = (myClipboard->contents > 0); The following code fragment creates a popup menu with a dynamically de- termined "disabled" state: static int PasteActive(AG_Event *event) { Clipboard *C = AG_PTR(1); return (C->contents > 0); } AG_PopupMenu *pm; AG_MenuItem *mi; pm = AG_PopupNew(myParentWidget); AG_MenuAction(pm->root, "Copy", NULL, DoCopy, NULL); mi = AG_MenuAction(pm->root, "Paste", NULL, DoPaste, NULL); mi->stateFn = AG_SetIntFn(pm->menu, PasteActive, "%p", myClipboard); The following code fragment associates a menu with an AG_Toolbar(3). Buttons and menu entries are created for the same actions. AG_Toolbar *toolbar; AG_Menu *menu; AG_MenuItem *item; toolbar = AG_ToolbarNew(win, AG_TOOLBAR_HORIZ, 1, 0); menu = AG_MenuNew(win, 0); item = AG_MenuNode(menu->root, "File", NULL); { AG_MenuToolbar(item, toolbar); AG_MenuAction(item, "Load", NULL, LoadFile, NULL); AG_MenuAction(item, "Save", NULL, SaveFile, NULL); AG_MenuToolbar(item, NULL); } The following code fragment creates a menu with an action item, a boolean item and two bitmask items. Uint16 flags = 0; #define FOO_FLAG 0x01 #define BAR_FLAG 0x02 void SayHello(AG_Event *event) { char *s = AG_STRING(1); AG_TextMsg(AG_MSG_INFO, "Hello, %s!", s); } void QuitApplication(AG_Event *event) { AG_Quit(); } ... AG_Menu *menu = AG_MenuNew(win); AG_MenuItem *item = AG_MenuNode(menu->root, "File", NULL); { AG_MenuInt16Flags(item, "Foo", NULL, &flags, FOO_FLAG, 0); AG_MenuInt16Flags(item, "Bar", NULL, &flags, BAR_FLAG, 0); AG_MenuAction(item, "Say hello", NULL, SayHello, "%s", "world"); AG_MenuAction(item, "Quit", NULL, QuitApplication, NULL); } SEE ALSO AG_Button(3), AG_Event(3), AG_Intro(3), AG_KeySym(3), AG_Surface(3), AG_Tlist(3), AG_Toolbar(3), AG_Widget(3), AG_Window(3) HISTORY The AG_Menu widget first appeared in Agar 1.0. BSD May 30, 2005 BSD
NAME | SYNOPSIS | DESCRIPTION | INHERITANCE HIERARCHY | INITIALIZATION | MENU ITEMS | BOOLEAN AND BITMASK ITEMS | OTHER ITEMS | POPUP MENUS | EVENTS | BINDINGS | STRUCTURE DATA | EXAMPLES | SEE ALSO | HISTORY
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=AG_Menu&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>