SYNOPSIS
#include <agar/core.h> #include <agar/gui.h>
DESCRIPTION
The
AG_Combo widget packs a
AG_Textbox(3) widget next to a
AG_Button(3) which triggers the expansion of a drop-down menu (a window containing an
AG_Tlist(3)) when pressed.
The drop-down menu collapses if the user selects an item, or clicks outside
of the
AG_Combo area.
AG_Combo provides the same functionality as AG_UCombo(3), but also adds support for text search and arbitrary text input.
AG_Combo provides the same functionality as AG_UCombo(3), but also adds support for text search and arbitrary text input.
INHERITANCE HIERARCHY ↑
AG_Object(3)-> AG_Widget(3)-> AG_Combo.
INITIALIZATION ↑
AG_Combo * AG_ComboNew (AG_Widget *parent, Uint flags, const char *format, ...)
AG_Combo * AG_ComboNewS (AG_Widget *parent, Uint flags, const char *label)
AG_Combo * AG_ComboNewFn (AG_Widget *parent, Uint flags, const char *label, AG_EventFn fn, const char *fnArgs, ...)
void AG_ComboSizeHint (AG_Combo *combo, const char *text, int nitems)
void AG_ComboSizeHintPixels (AG_Combo *combo, int w, int nitems)
The AG_ComboNew() function allocates, initializes, and attaches a new AG_Combo widget. The string argument specifies an optional text label to be displayed at the left of the textbox. The AG_ComboNewFn() variant sets the "combo-expanded" event handler to fn with optional arguments fnArgs.
Acceptable flags include:
AG_COMBO_POLL | List contents are dynamic (pass the AG_TLIST_POLL flag to the tlist). |
AG_COMBO_ANY_TEXT | Allow user to enter text that does not match any item in the list. |
AG_COMBO_SCROLLTOSEL | Scroll to initial selection if it is not visible. |
AG_COMBO_HFILL | Expand horizontally in parent container. |
AG_COMBO_VFILL | Expand vertically in parent container. |
AG_COMBO_EXPAND | Shorthand for AG_COMBO_HFILL AG_COMBO_VFILL|. |
The AG_ComboSizeHint() function arranges for the AG_Tlist(3) widget displayed on popup to request a size large enough to display the given number of items. The AG_ComboSizeHintPixels() variant specifies the width in number of pixels.
ITEM SELECTION ↑
void AG_ComboSelect (AG_Combo *combo, AG_TlistItem *item)
AG_TlistItem * AG_ComboSelectPointer (AG_Combo *combo, void *ptr)
AG_TlistItem * AG_ComboSelectText (AG_Combo *combo, const char *text)
The AG_ComboSelect() function sets the selection flag on the given item.
The AG_ComboSelectPointer() function selects the first item with a user pointer value matching ptr. Similarly, AG_ComboSelectText() selects the first item with a text string equal to text.
If the AG_COMBO_POLL option is set, both AG_ComboSelectPointer() and AG_ComboSelectText() will raise a tlist-poll event prior to making the selection.
EVENTS ↑
The
AG_Combo widget generates the following events:
combo-selected (AG_TlistItem *item) | An item was selected. |
combo-expanded (void) | The drop-down menu is now visible. May be used to populate list. |
combo-collapsed (void) | The drop-down menu is now hidden. |
combo-text-entry (const char *text) | The AG_COMBO_ANY_TEXT option is set and the user has entered a string text which does not match any item in the list. |
combo-text-unknown (const char *text) | The AG_COMBO_ANY_TEXT flag is not set and the user has entered a string text which does not match any item in the list. |
STRUCTURE DATA ↑
For the
AG_Combo object:
AG_Tlist *list | The AG_Tlist(3) displayed by AG_Combo when expanded, or NULL if collapsed (RO). |
AG_Textbox *tbox | The input AG_Textbox(3) (RO). |
AG_Button *button | The AG_Button(3) which triggers expansion (RO). |
int nVisItems | Initial number of items to show in expanded list. |
EXAMPLES ↑
The following code fragment generates a drop-down menu and reacts to
a selection event by displaying a text dialog:
The following code fragment generates a drop-down menu displaying a tree:
static void ExpandItems(AG_Event *event) { AG_Combo *com = AG_COMBO_SELF(); AG_Tlist *tl = com->list; AG_TlistAdd(tl, NULL, "Foo"); AG_TlistAdd(tl, NULL, "Bar"); } static void SelectItem(AG_Event *event) { AG_TlistItem *item = AG_TLISTITEM_PTR(1); AG_TextMsg(AG_MSG_INFO, "Selected item: %s", item->text); } AG_Combo *com; com = AG_ComboNew(NULL, 0, "My combo: "); AG_SetEvent(com, "combo-expanded", ExpandItems, NULL); AG_SetEvent(com, "combo-selected", SelectItem, NULL);
The following code fragment generates a drop-down menu displaying a tree:
static void ExpandTreeItems(AG_Event *event) { AG_Combo *com = AG_COMBO_SELF(); AG_Tlist *tl = com->list; AG_TlistItem *it; it = AG_TlistAdd(tl, NULL, "Foo"); it->depth = 1; it->flags |= AG_TLIST_HAS_CHILDREN; { it = AG_TlistAdd(tl, NULL, "Bar"); it->depth = 2; it = AG_TlistAdd(tl, NULL, "Baz"); it->depth = 2; { it = AG_TlistAdd(tl, NULL, "Bezo"); it->depth = 3; } } } AG_ComboNewFn(NULL, 0, "My tree: ", ExpandTreeItems, NULL);
SEE ALSO ↑
HISTORY ↑
The
AG_Combo widget first appeared in
Agar 1.0.
As of
Agar 1.6.0,
AG_COMBO_TREE is a deprecated no-op.
"combo-expanded" and "combo-selected" appeared in
Agar 1.7.0.
AG_ComboNewFn() appeared in
Agar 1.7.1.