From 0f4120738fcec4f1e459305aca15d65148061519 Mon Sep 17 00:00:00 2001 From: Jonathan Atton Date: Sun, 11 Jul 2010 21:19:27 +0000 Subject: [PATCH] Add the elm notify external object SVN revision: 50180 --- src/edje_externals/Makefile.am | 3 +- src/edje_externals/elm_notify.c | 206 ++++++++++++++++++++++++++++++++ src/edje_externals/modules.inc | 1 + src/lib/Elementary.h.in | 6 +- src/lib/elm_notify.c | 39 ++++++ 5 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 src/edje_externals/elm_notify.c diff --git a/src/edje_externals/Makefile.am b/src/edje_externals/Makefile.am index 44b277a7f..6b94540c7 100644 --- a/src/edje_externals/Makefile.am +++ b/src/edje_externals/Makefile.am @@ -49,7 +49,8 @@ elm_slideshow.c \ elm_spinner.c \ elm_thumb.c \ elm_toggle.c \ -elm_toolbar.c +elm_toolbar.c \ +elm_notify.c elm_la_LIBADD = $(top_builddir)/src/lib/libelementary.la elm_la_LDFLAGS = $(all_libraries) -no-undefined @lt_enable_auto_import@ -module -avoid-version -shared -fPIC diff --git a/src/edje_externals/elm_notify.c b/src/edje_externals/elm_notify.c new file mode 100644 index 000000000..54db41591 --- /dev/null +++ b/src/edje_externals/elm_notify.c @@ -0,0 +1,206 @@ +#include "private.h" +#include + + +typedef struct _Elm_Params_Notify Elm_Params_Notify; + +struct _Elm_Params_Notify { + Elm_Params base; + Evas_Object *content; /* part name whose obj is to be set as content */ + Eina_Bool repeat_events_exists; + Eina_Bool repeat_events; + Eina_Bool timer_init; + Eina_Bool timeout_exists; + int timeout; + + const char *orient; +}; + + +static const char *orients[] = { + "top", + "center", + "bottom", + "left", + "right", + "top_left", + "top_right", + "bottom_left", + "bottom_right", + NULL +}; + +static Elm_Notify_Orient _orient_get(const char *orient) +{ + unsigned int i; + + assert(sizeof(orients)/sizeof(orients[0]) == + ELM_NOTIFY_ORIENT_LAST + 1); + + for (i = 0; i < sizeof(orients); i++) + if (strcmp(orient, orients[i]) == 0) return i; + + return ELM_NOTIFY_ORIENT_LAST; +} + +static void external_notify_state_set(void *data __UNUSED__, + Evas_Object *obj, const void *from_params, + const void *to_params, float pos __UNUSED__) +{ + const Elm_Params_Notify *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + + if (p->content) { + elm_notify_content_set(obj, p->content); + } + if(p->repeat_events_exists) + elm_notify_repeat_events_set(obj, p->repeat_events); + if(p->timeout_exists) + elm_notify_timeout_set(obj, p->timeout); + if(p->timer_init) + elm_notify_timer_init(obj); + + if (p->orient) + { + Elm_Notify_Orient set = _orient_get(p->orient); + if (set == ELM_NOTIFY_ORIENT_LAST) return; + elm_notify_orient_set(obj, set); + } +} + +static Eina_Bool external_notify_param_set(void *data __UNUSED__, + Evas_Object *obj, const Edje_External_Param *param) +{ + if (!strcmp(param->name, "content") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + Evas_Object *content = external_common_param_edje_object_get(obj, param); + if ((strcmp(param->s, "")) && (!content)) + return EINA_FALSE; + elm_notify_content_set(obj, content); + return EINA_TRUE; + } + else if (!strcmp(param->name, "repeat_events") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_notify_repeat_events_set(obj, param->i); + return EINA_TRUE; + } + else if (!strcmp(param->name, "timer_init") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_notify_timer_init(obj); + return EINA_TRUE; + } + else if (!strcmp(param->name, "timeout") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) + { + elm_notify_timeout_set(obj, param->i); + return EINA_TRUE; + } + else if (!strcmp(param->name, "orient") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE) + { + Elm_Notify_Orient set = _orient_get(param->s); + if (set == ELM_NOTIFY_ORIENT_LAST) return; + elm_notify_orient_set(obj, set); + return EINA_TRUE; + } + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static Eina_Bool external_notify_param_get(void *data __UNUSED__, + const Evas_Object *obj, Edje_External_Param *param) +{ + if (!strcmp(param->name, "content")) + { + /* not easy to get content name back from live object */ + return EINA_FALSE; + } + else if (!strcmp(param->name, "repeat_events") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_notify_repeat_events_get(obj); + return EINA_TRUE; + } + else if (!strcmp(param->name, "timeout") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) + { + param->i = elm_notify_timeout_get(obj); + return EINA_TRUE; + } + else if (!strcmp(param->name, "orient") + && param->type == EDJE_EXTERNAL_PARAM_TYPE_CHOICE) + { + Elm_Notify_Orient set = elm_notify_orient_get(obj); + if (set == ELM_NOTIFY_ORIENT_LAST) return EINA_FALSE; + param->s = orients[set]; + return EINA_TRUE; + } + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static void * external_notify_params_parse(void *data, Evas_Object *obj, + const Eina_List *params) { + Elm_Params_Notify *mem; + Edje_External_Param *param; + const Eina_List *l; + + mem = external_common_params_parse(Elm_Params_Notify, data, obj, params); + if (!mem) + return NULL; + + EINA_LIST_FOREACH(params, l, param) + { + if (!strcmp(param->name, "content")) + mem->content = external_common_param_edje_object_get(obj, param); + else if (!strcmp(param->name, "timeout")) + { + mem->timeout = param->i; + mem->timeout_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "timer_init") && param->i > 0) + { + mem->timer_init = EINA_TRUE; + } + else if (!strcmp(param->name, "repeat_events")) + { + mem->repeat_events = param->i; + mem->repeat_events_exists = EINA_TRUE; + } + else if (!strcmp(param->name, "orient")) + mem->orient = eina_stringshare_add(param->s); + } + + return mem; +} + +static void external_notify_params_free(void *params) { + Elm_Params_Notify *mem = params; + + external_common_params_free(params); +} + +static Edje_External_Param_Info external_notify_params[] = { + DEFINE_EXTERNAL_COMMON_PARAMS, + EDJE_EXTERNAL_PARAM_INFO_STRING("content"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("repeat_events"), + EDJE_EXTERNAL_PARAM_INFO_INT("timeout"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("timer_init"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL +}; + +DEFINE_EXTERNAL_ICON_ADD(notify, "notify"); +DEFINE_EXTERNAL_TYPE_SIMPLE(notify, "Notify") +; diff --git a/src/edje_externals/modules.inc b/src/edje_externals/modules.inc index ec2950839..3dfa71dae 100644 --- a/src/edje_externals/modules.inc +++ b/src/edje_externals/modules.inc @@ -21,3 +21,4 @@ DEFINE_TYPE(spinner) DEFINE_TYPE(thumb) DEFINE_TYPE(toggle) DEFINE_TYPE(toolbar) +DEFINE_TYPE(notify) diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index b3c8791f5..bfe21d34c 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -672,16 +672,20 @@ extern "C" { ELM_NOTIFY_ORIENT_TOP_LEFT, ELM_NOTIFY_ORIENT_TOP_RIGHT, ELM_NOTIFY_ORIENT_BOTTOM_LEFT, - ELM_NOTIFY_ORIENT_BOTTOM_RIGHT + ELM_NOTIFY_ORIENT_BOTTOM_RIGHT, + ELM_NOTIFY_ORIENT_LAST } Elm_Notify_Orient; EAPI Evas_Object *elm_notify_add(Evas_Object *parent); EAPI void elm_notify_content_set(Evas_Object *obj, Evas_Object *content); EAPI Evas_Object *elm_notify_content_unset(Evas_Object *obj); EAPI void elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent); EAPI void elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient); + EAPI Elm_Notify_Orient elm_notify_orient_get(const Evas_Object *obj); EAPI void elm_notify_timeout_set(Evas_Object *obj, int timeout); + EAPI int elm_notify_timeout_get(const Evas_Object *obj); EAPI void elm_notify_timer_init(Evas_Object *obj); EAPI void elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat); + EAPI Eina_Bool elm_notify_repeat_events_get(const Evas_Object *obj); /* smart callbacks called: */ diff --git a/src/lib/elm_notify.c b/src/lib/elm_notify.c index 385c41099..5351d29a4 100644 --- a/src/lib/elm_notify.c +++ b/src/lib/elm_notify.c @@ -442,6 +442,19 @@ elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient) _resize(obj, NULL, obj, NULL); } +/** + * Return the orientation + * @param obj the notify objects + */ +EAPI Elm_Notify_Orient +elm_notify_orient_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + return wd->orient; +} + /** * Set the time before the notify window is hidden.
* Set a value < 0 to disable the timer @@ -459,6 +472,19 @@ elm_notify_timeout_set(Evas_Object *obj, int timeout) elm_notify_timer_init(obj); } +/** + * Return the timeout value (in seconds) + * @param obj the notify object + */ +EAPI int +elm_notify_timeout_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + return wd->timeout; +} + /** * Re-init the timer * @param obj The notify object @@ -504,3 +530,16 @@ elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat) evas_object_del(wd->block_events); } +/** + * Return true if events are repeat below the notify object + * @param obj the notify object + */ +EAPI Eina_Bool +elm_notify_repeat_events_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + return wd->repeat_events; +} + -- 2.34.1