In this example and the next, we implement a "button with a menu" widget(not a menu button!). In the first implementation, it is achieved via callbacks; in the second implementation, it is done using event handlers.
/************************** Example 4 ***********************/
#include "EZ.h" /* the header file */
static char *colors[] = { "red", "green", "blue", "yellow",
"cyan", "magenta", "white", NULL};
void buttonCallBack(EZ_Widget *widget, void *data)
{ /* callback for button */
if(widget && data)
{
EZ_Widget *menu = (EZ_Widget *)data;
EZ_DoPopup(menu, EZ_BOTTOM);
}
}
void menuCallBack(EZ_Widget *widget, void *data)
{
if(widget)
{
int i = EZ_GetWidgetReturnedData(widget);
if( i >= 0 && i <= 6) /* to make sure */
{
EZ_Widget *tmp = (EZ_Widget *)data;
if(tmp)
{
char str[64];
sprintf(str,"A %s Button", colors[i]);
EZ_ConfigureWidget(tmp, EZ_LABEL_STRING, str,
EZ_FOREGROUND, colors[i],0);
}
}
}
}
main(int argc, char **argv)
{
EZ_Widget *menu, *button, *tmp;
EZ_Initialize(argc, argv, 0);
button = EZ_CreateWidget(EZ_WIDGET_NORMAL_BUTTON, NULL,
EZ_LABEL_STRING,"An Optional Button",
0); /* a button */
menu = EZ_CreateWidget(EZ_WIDGET_POPUP_MENU, NULL, 0);
EZ_AddWidgetCallBack(button, EZ_CALLBACK, buttonCallBack, menu, 0);
EZ_AddWidgetCallBack(menu, EZ_CALLBACK,
menuCallBack, button, 0);
{
char **ptr = colors;
int i = 0;
while(*ptr)
{
tmp = EZ_CreateWidget(EZ_WIDGET_MENU_NORMAL_BUTTON, menu,
EZ_LABEL_STRING, *ptr,
EZ_RETURN_VALUE, i++,
0);
ptr++;
}
}
EZ_DisplayWidget(button);
EZ_EventMainLoop();
}
/************************** Example 4 ***********************/