You can add private widget resources to one widget or to all widgets of a given type, e.g frames. For this you need
typedef struct {
int option; /* referenced in configure, must >1024 */
char *iname; /* instance name */
char *cname; /* class name, may be NULL */
char *vtypes; /* value type, e.g "float, float" */
} EZ_ResourceSpec;
A list of resources looks like the next example.
#define COUNTER_INIT_VALUE 1025
#define COUNTER_INCREMENT 1026
#define COUNTER_TEST 1027
EZ_ResourceSpec counterResources[] =
{
{COUNTER_INIT_VALUE, "initValue", "InitValue", "int"},
{COUNTER_INCREMENT, "increment", "Increment", "int"},
{COUNTER_TEST, "test", "Test", "int,float,string,pointer,int"},
};
The configuration procedure has the prototype
int (*configure)(EZ_Widget *widget,int opt, EZ_Value *values);
and here is a sample procedure.
int counterConfigure(EZ_Widget *widget, int opt, EZ_Value *values)
{
switch(opt)
{
case COUNTER_INIT_VALUE:
{
int i = values[0].value.i;
ez_SetCounter(widget, i);
}
break;
case COUNTER_INCREMENT:
{
int i = values[0].value.i;
ez_counter *ptr = (ez_counter *)EZ_GetWidgetPtrData(widget);
ptr->increment1 = i;
}
break;
case COUNTER_TEST:
{
int i = values[0].value.i;
char c = values[1].value.c;
float f = values[2].value.f;
char *str = value[3].value.p; /* have to copy in real applications */
fprintf(stderr, "%d, %c,%f, %s\n", i, c, f, str);
}
break;
default:
break;
}
}
The command responsible for registering resources to all widgets of
a given type is
void EZ_RegisterResourcesAll(int widget_type, int nresrc, EZ_ResourceSpec *resources,
int (*configure)(EZ_Widget *widget, int opt, EZ_Value *values) );
To register resources for a single widget, use the configuration
option
counter = EZ_CreateWidget(Counter_TYPE,
EZ_RESOURCES_HANDLE, 3, counterResources, counterConfigure,
COUNTER_INIT_VALUE, 10,
0);
EZ_RESOURCES_HANDLE
in EZ_CreateWidget
. For
example,