X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fedje_externals%2Felm_toolbar.c;h=6a75fc5f3dbea5ee88063663d728d34d15d27808;hb=55a7e1dcc1a9fd3dfac0a5d6e5e9caf1d0ba08a8;hp=27c6f2442ed0f8d2cc736a89f9da2ed147925f75;hpb=d91a37ba9f0768ecb9ee828e2f510831eea4f58f;p=framework%2Fuifw%2Felementary.git diff --git a/src/edje_externals/elm_toolbar.c b/src/edje_externals/elm_toolbar.c index 27c6f24..6a75fc5 100644 --- a/src/edje_externals/elm_toolbar.c +++ b/src/edje_externals/elm_toolbar.c @@ -1,17 +1,52 @@ +#include + #include "private.h" typedef struct _Elm_Params_Toolbar { + Elm_Params base; int icon_size; Eina_Bool icon_size_exists:1; double align; + const char *shrink_mode; Eina_Bool align_exists:1; + Eina_Bool always_select:1; + Eina_Bool always_select_exists:1; + Eina_Bool no_select:1; + Eina_Bool no_select_exists:1; + Eina_Bool horizontal:1; + Eina_Bool horizontal_exists:1; + Eina_Bool homogeneous:1; + Eina_Bool homogeneous_exists:1; } Elm_Params_Toolbar; +#define SHRINK_GET(CHOICES, STR) \ + unsigned int i; \ + for (i = 0; i < (sizeof(CHOICES) / sizeof(CHOICES[0])); ++i) \ + if (!strcmp(STR, CHOICES[i])) \ + return i; + +static const char *_toolbar_shrink_modes[] = +{ + "none", "hide", "scroll", "menu", NULL +}; + +static Elm_Toolbar_Shrink_Mode +_toolbar_shrink_choices_setting_get(const char *shrink_mode_str) +{ + assert(sizeof(_toolbar_shrink_modes) / + sizeof(_toolbar_shrink_modes[0]) == ELM_TOOLBAR_SHRINK_LAST + 1); + SHRINK_GET(_toolbar_shrink_modes, shrink_mode_str); + return ELM_TOOLBAR_SHRINK_LAST; +} + static void -external_toolbar_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +external_toolbar_state_set(void *data EINA_UNUSED, Evas_Object *obj, + const void *from_params, const void *to_params, + float pos EINA_UNUSED) { const Elm_Params_Toolbar *p; + Elm_Toolbar_Shrink_Mode shrink_mode; if (to_params) p = to_params; else if (from_params) p = from_params; @@ -21,26 +56,99 @@ external_toolbar_state_set(void *data __UNUSED__, Evas_Object *obj, const void * elm_toolbar_icon_size_set(obj, p->icon_size); if (p->align_exists) elm_toolbar_align_set(obj, p->align); + if (p->no_select_exists) + { + if (p->no_select) + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_NONE); + else + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + if (p->always_select_exists) + { + if (p->always_select) + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_ALWAYS); + else + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + if (p->horizontal_exists) + elm_toolbar_horizontal_set(obj, p->horizontal); + if (p->homogeneous_exists) + elm_toolbar_homogeneous_set(obj, p->homogeneous); + if (p->shrink_mode) + { + shrink_mode = _toolbar_shrink_choices_setting_get(p->shrink_mode); + elm_toolbar_shrink_mode_set(obj, shrink_mode); + } } static Eina_Bool -external_toolbar_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param) +external_toolbar_param_set(void *data EINA_UNUSED, Evas_Object *obj, + const Edje_External_Param *param) { - if (!strcmp(param->name, "icon_size")) + Elm_Toolbar_Shrink_Mode shrink_mode; + + if (!strcmp(param->name, "icon size")) { - if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) - { - elm_toolbar_icon_size_set(obj, param->i); - return EINA_TRUE; - } + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) + { + elm_toolbar_icon_size_set(obj, param->i); + return EINA_TRUE; + } } else if (!strcmp(param->name, "align")) { - if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) - { - elm_toolbar_align_set(obj, param->d); - return EINA_TRUE; - } + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + elm_toolbar_align_set(obj, param->d); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "always select")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + if (param->i) + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_ALWAYS); + else + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_DEFAULT); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "no select")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + if (param->i) + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_NONE); + else + elm_toolbar_select_mode_set (obj, ELM_OBJECT_SELECT_MODE_DEFAULT); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "horizontal")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_toolbar_horizontal_set(obj, param->i); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "homogeneous")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_toolbar_homogeneous_set(obj, param->i); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "shrink")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + shrink_mode = _toolbar_shrink_choices_setting_get(param->s); + elm_toolbar_shrink_mode_set(obj, shrink_mode); + return EINA_TRUE; + } } ERR("unknown parameter '%s' of type '%s'", @@ -50,23 +158,74 @@ external_toolbar_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_E } static Eina_Bool -external_toolbar_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param) +external_toolbar_param_get(void *data EINA_UNUSED, const Evas_Object *obj, + Edje_External_Param *param) { - if (!strcmp(param->name, "icon_size")) + if (!strcmp(param->name, "icon size")) { - if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) - { - param->i = elm_toolbar_icon_size_get(obj); - return EINA_TRUE; - } + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) + { + param->i = elm_toolbar_icon_size_get(obj); + return EINA_TRUE; + } } else if (!strcmp(param->name, "align")) { - if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) - { - param->d = elm_toolbar_align_get(obj); - return EINA_TRUE; - } + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) + { + param->d = elm_toolbar_align_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "always select")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + if (elm_toolbar_select_mode_get (obj) == + ELM_OBJECT_SELECT_MODE_ALWAYS) + param->d = EINA_TRUE; + else + param->d = EINA_FALSE; + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "no select")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + if (elm_toolbar_select_mode_get (obj) == + ELM_OBJECT_SELECT_MODE_NONE) + param->i = EINA_TRUE; + else + param->i = EINA_FALSE; + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "horizontal")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_toolbar_horizontal_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "homogeneous")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_toolbar_homogeneous_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "shrink")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + Elm_Toolbar_Shrink_Mode shrink_mode; + shrink_mode = elm_toolbar_shrink_mode_get(obj); + param->s = _toolbar_shrink_modes[shrink_mode]; + return EINA_TRUE; + } } ERR("unknown parameter '%s' of type '%s'", @@ -76,7 +235,9 @@ external_toolbar_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_E } static void * -external_toolbar_params_parse(void *data, Evas_Object *obj, const Eina_List *params) +external_toolbar_params_parse(void *data EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + const Eina_List *params) { Elm_Params_Toolbar *mem; Edje_External_Param *param; @@ -88,38 +249,70 @@ external_toolbar_params_parse(void *data, Evas_Object *obj, const Eina_List *par EINA_LIST_FOREACH(params, l, param) { - if (!strcmp(param->name, "icon_size")) - { - mem->icon_size = param->i; - mem->icon_size_exists = EINA_TRUE; - } - else if (!strcmp(param->name, "align")) - { - mem->align = param->d; - mem->align_exists = EINA_TRUE; - } + if (!strcmp(param->name, "icon size")) + { + mem->icon_size = param->i; + mem->icon_size_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "align")) + { + mem->align = param->d; + mem->align_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "always select")) + { + mem->always_select = param->i; + mem->always_select_exists = param->i; + } + else if (!strcmp(param->name, "no select")) + { + mem->no_select = param->i; + mem->no_select_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "horizontal")) + { + mem->horizontal = param->i; + mem->horizontal_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "homogeneous")) + { + mem->homogeneous = param->i; + mem->homogeneous_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "shrink")) + mem->shrink_mode = eina_stringshare_add(param->s); } return mem; } -static Evas_Object *external_toolbar_content_get(void *data __UNUSED__, - const Evas_Object *obj, const char *content) +static Evas_Object *external_toolbar_content_get(void *data EINA_UNUSED, + const Evas_Object *obj EINA_UNUSED, + const char *content EINA_UNUSED) { - ERR("so content"); - return NULL; + ERR("No content."); + return NULL; } static void external_toolbar_params_free(void *params) { Elm_Params_Toolbar *mem = params; + if (mem->shrink_mode) + eina_stringshare_del(mem->shrink_mode); free(mem); } static Edje_External_Param_Info external_toolbar_params[] = { - EDJE_EXTERNAL_PARAM_INFO_INT("icon_size"), + DEFINE_EXTERNAL_COMMON_PARAMS, + EDJE_EXTERNAL_PARAM_INFO_STRING("shrink"), + EDJE_EXTERNAL_PARAM_INFO_INT("icon size"), EDJE_EXTERNAL_PARAM_INFO_DOUBLE("align"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("always select"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("no select"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("horizontal"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("homogeneous"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL };