2009-12-05 17:22:54 -08:00
|
|
|
#include "private.h"
|
|
|
|
|
|
|
|
typedef struct _Elm_Params_Button
|
|
|
|
{
|
|
|
|
Elm_Params base;
|
|
|
|
Evas_Object *icon;
|
|
|
|
} Elm_Params_Button;
|
|
|
|
|
|
|
|
static void
|
Port to new Edje EXTERNAL API goodies!
Now it is possible to change labels and lots of other parameters
directly through Edje's API.
BIG FAT NOTE: this is a convenience that comes with a reasonable
price. If you have hot paths, like loops, then avoid calling this
and use the object directly. This functions add a cost to check
edje, then find the part, then get the type, then get the
param_set/param_get methods, then calling it, then finding the
parameters using strcmp(), then checking the type and just then it
will call the actual method. So whenever possible, just call the
method directly.
Due the reasoning of the "big fat note" I'm adding this inside edje
externals only. The code would be almost the same to expose it in
Elementary.h as elm_widget_property_set/get, but then I know people
would misuse it... actually this kind of stuff could be easily ported
to Evas smart object, but then abuse and slowness will hunt us
foreveeeeer...
SVN revision: 47457
2010-03-25 11:10:25 -07:00
|
|
|
external_button_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
|
2009-12-05 17:22:54 -08:00
|
|
|
{
|
2010-03-25 13:17:34 -07:00
|
|
|
const Elm_Params_Button *p;
|
2009-12-05 17:22:54 -08:00
|
|
|
|
2010-03-25 13:17:34 -07:00
|
|
|
if (to_params) p = to_params;
|
|
|
|
else if (from_params) p = from_params;
|
|
|
|
else return;
|
2009-12-05 17:22:54 -08:00
|
|
|
|
2010-03-25 13:17:34 -07:00
|
|
|
if (p->base.label)
|
|
|
|
elm_button_label_set(obj, p->base.label);
|
|
|
|
if (p->icon)
|
|
|
|
elm_button_icon_set(obj, p->icon);
|
2009-12-05 17:22:54 -08:00
|
|
|
}
|
|
|
|
|
Port to new Edje EXTERNAL API goodies!
Now it is possible to change labels and lots of other parameters
directly through Edje's API.
BIG FAT NOTE: this is a convenience that comes with a reasonable
price. If you have hot paths, like loops, then avoid calling this
and use the object directly. This functions add a cost to check
edje, then find the part, then get the type, then get the
param_set/param_get methods, then calling it, then finding the
parameters using strcmp(), then checking the type and just then it
will call the actual method. So whenever possible, just call the
method directly.
Due the reasoning of the "big fat note" I'm adding this inside edje
externals only. The code would be almost the same to expose it in
Elementary.h as elm_widget_property_set/get, but then I know people
would misuse it... actually this kind of stuff could be easily ported
to Evas smart object, but then abuse and slowness will hunt us
foreveeeeer...
SVN revision: 47457
2010-03-25 11:10:25 -07:00
|
|
|
static Eina_Bool
|
|
|
|
external_button_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
|
|
|
|
{
|
|
|
|
if (!strcmp(param->name, "label"))
|
|
|
|
{
|
|
|
|
if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
|
|
|
|
{
|
|
|
|
elm_button_label_set(obj, param->s);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!strcmp(param->name, "icon"))
|
|
|
|
{
|
|
|
|
if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
|
|
|
|
{
|
|
|
|
Evas_Object *icon = external_common_param_icon_get(obj, param);
|
2010-06-16 13:58:01 -07:00
|
|
|
if ((strcmp(param->s, "")) && (!icon)) return EINA_FALSE;
|
|
|
|
elm_button_icon_set(obj, icon);
|
|
|
|
return EINA_TRUE;
|
Port to new Edje EXTERNAL API goodies!
Now it is possible to change labels and lots of other parameters
directly through Edje's API.
BIG FAT NOTE: this is a convenience that comes with a reasonable
price. If you have hot paths, like loops, then avoid calling this
and use the object directly. This functions add a cost to check
edje, then find the part, then get the type, then get the
param_set/param_get methods, then calling it, then finding the
parameters using strcmp(), then checking the type and just then it
will call the actual method. So whenever possible, just call the
method directly.
Due the reasoning of the "big fat note" I'm adding this inside edje
externals only. The code would be almost the same to expose it in
Elementary.h as elm_widget_property_set/get, but then I know people
would misuse it... actually this kind of stuff could be easily ported
to Evas smart object, but then abuse and slowness will hunt us
foreveeeeer...
SVN revision: 47457
2010-03-25 11:10:25 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ERR("unknown parameter '%s' of type '%s'",
|
|
|
|
param->name, edje_external_param_type_str(param->type));
|
|
|
|
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
external_button_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
|
|
|
|
{
|
|
|
|
if (!strcmp(param->name, "label"))
|
|
|
|
{
|
|
|
|
if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
|
|
|
|
{
|
|
|
|
param->s = elm_button_label_get(obj);
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!strcmp(param->name, "icon"))
|
|
|
|
{
|
|
|
|
/* not easy to get icon name back from live object */
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
ERR("unknown parameter '%s' of type '%s'",
|
|
|
|
param->name, edje_external_param_type_str(param->type));
|
|
|
|
|
|
|
|
return EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
2009-12-05 17:22:54 -08:00
|
|
|
static void *
|
|
|
|
external_button_params_parse(void *data, Evas_Object *obj, const Eina_List *params)
|
|
|
|
{
|
|
|
|
Elm_Params_Button *mem;
|
|
|
|
|
|
|
|
mem = external_common_params_parse(Elm_Params_Button, data, obj, params);
|
|
|
|
if (!mem)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
external_common_icon_param_parse(&mem->icon, obj, params);
|
|
|
|
|
|
|
|
return mem;
|
|
|
|
}
|
|
|
|
|
2010-08-01 10:29:20 -07:00
|
|
|
static Evas_Object *external_button_content_get(void *data __UNUSED__,
|
2010-10-19 11:25:57 -07:00
|
|
|
const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
|
2010-08-01 10:29:20 -07:00
|
|
|
{
|
2010-10-20 05:40:36 -07:00
|
|
|
ERR("No content.");
|
2010-08-01 10:29:20 -07:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2010-06-16 13:57:33 -07:00
|
|
|
static void
|
2009-12-05 17:22:54 -08:00
|
|
|
external_button_params_free(void *params)
|
|
|
|
{
|
|
|
|
external_common_params_free(params);
|
|
|
|
}
|
|
|
|
|
|
|
|
static Edje_External_Param_Info external_button_params[] = {
|
|
|
|
DEFINE_EXTERNAL_COMMON_PARAMS,
|
|
|
|
EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
|
|
|
|
EDJE_EXTERNAL_PARAM_INFO_SENTINEL
|
|
|
|
};
|
|
|
|
|
2010-01-22 12:07:47 -08:00
|
|
|
DEFINE_EXTERNAL_ICON_ADD(button, "button");
|
2009-12-05 17:22:54 -08:00
|
|
|
DEFINE_EXTERNAL_TYPE_SIMPLE(button, "Button");
|