From 34514113266fdf0126665ea3c663cd9773f7cc1b Mon Sep 17 00:00:00 2001 From: Gustavo Lima Chaves Date: Mon, 29 Mar 2010 17:19:35 +0000 Subject: [PATCH] New elm widget exported to edje: bubble. SVN revision: 47559 --- .../data/edje_externals/Makefile.am | 1 + .../data/edje_externals/ico_bubble.png | Bin 0 -> 1311 bytes .../elementary/data/edje_externals/icons.edc | 1 + .../elementary/src/edje_externals/Makefile.am | 17 +- legacy/elementary/src/edje_externals/elm.c | 25 +++ .../src/edje_externals/elm_bubble.c | 160 ++++++++++++++++++ .../elementary/src/edje_externals/modules.inc | 1 + .../elementary/src/edje_externals/private.h | 1 + legacy/elementary/src/lib/Elementary.h.in | 2 + legacy/elementary/src/lib/elm_bubble.c | 23 +++ 10 files changed, 223 insertions(+), 8 deletions(-) create mode 100644 legacy/elementary/data/edje_externals/ico_bubble.png create mode 100644 legacy/elementary/src/edje_externals/elm_bubble.c diff --git a/legacy/elementary/data/edje_externals/Makefile.am b/legacy/elementary/data/edje_externals/Makefile.am index 3f05020596..1d55767005 100644 --- a/legacy/elementary/data/edje_externals/Makefile.am +++ b/legacy/elementary/data/edje_externals/Makefile.am @@ -9,6 +9,7 @@ files_DATA = icons.edj EXTRA_DIST = \ icons.edc \ +ico_bubble.png \ ico_button.png \ ico_check.png \ ico_radio.png \ diff --git a/legacy/elementary/data/edje_externals/ico_bubble.png b/legacy/elementary/data/edje_externals/ico_bubble.png new file mode 100644 index 0000000000000000000000000000000000000000..e2df401f2fa891bcf64a0152c40cb13a96f6145c GIT binary patch literal 1311 zcmV+)1>pLLP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00!&;00!&<9(6c100007bV*G`2igN2 z4j&aTyQc&I00f^&L_t(&-tAh?OCx6(e&(AmGs(u)w5;g1T2CHI53(S%muN*0x<%-r z?B1)#Tq^VrSbFSYFJ2b4XSYX9EhyA#PTdMcq^J0!V8m>KMDt@aGtM_(4}OzQ#>s9H zwrnQmg_j8-GxI**`+V>FPUex&oJo!&7oRy=)TAcQA;N8t9DwEc+)_rG1W2>l?34Zd z{jUIo0H^>00AvSv--8UCo}T8ryStyCpPz4RZf<@7;I06yv?|y}7DWNj17Ps@`1mrH z%W+-Tc_x#2vA(|k2*5o7I0%6H5v(L=*$rSQ9*=*YN~Jhsj5Ef#rfEE#PQQr90pBAb{T9 z-qFd)$(6ISvtQTN)*b@r@~Fn-4fmDmh^ww)KyoaA`vT6REVA)Ffcwd0a;d++e^`>d z?0q1i;Lae-QB0t)6>5J(8Z!z4Ga^`Ny|Bq+?c-P8hua}RW#_~s>?$F z?)3EZyoyGn<254^+2x!=Q51y3;SYv}hQ5x)ViVD5^n7Jy<)z4~;&G2!u825ky_u{u zdI0Lu($XhWQ&Zn{b#;9j2n6oG?R`Qit;(!vnoV8j>gwvOSSz6jLZjv!4Rbsgw#J6X`0qhz&6-M?%_1cvS6AfG)*h-?d{Et zjg37APzGRJ6Nq!?{*wXRnV+A3Ff%i=9u9{?oO2k40n4&lx1SLLMNuG05=x~~d3kyH z;oRKZUjSYKV1+`#k{o+e0nn37CYJ^W2fvhM8Rc@>H=|f66ar%mCnqPr3=a>_0=NWV z*IbyFG8>y?h5*whOfjS2n&Uw{XSNXCHGFdg|ks2%ETl0#a)>;ie zg7u2qP1m-~B&qj@eg)`BSIe?|O;>k+_oQn(8mVXV`nmAD>FG1FBOG)AcX#&s_iNrHa)422hS3kIASn@4~{uqlt-$Z&X!%uf~HN#R>NN_f}IiR*I#F zwJh8gD^;qiJ7}kfp5msiywyP3K$!q$SJf(wUb6ziRsrb*TT?*zx}g0ilJ}fq{skG- VtYMYjn4kav002ovPDHLkV1m0fa6JG3 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/edje_externals/icons.edc b/legacy/elementary/data/edje_externals/icons.edc index 0d9ba739e8..45d2048dd4 100644 --- a/legacy/elementary/data/edje_externals/icons.edc +++ b/legacy/elementary/data/edje_externals/icons.edc @@ -10,6 +10,7 @@ collections { group { name: "ico_"_name; \ image.normal: "ico_"_name".png"; \ }}}}} +ICON("bubble") ICON("button") ICON("check") ICON("radio") diff --git a/legacy/elementary/src/edje_externals/Makefile.am b/legacy/elementary/src/edje_externals/Makefile.am index d39f8576a0..37f37173ed 100644 --- a/legacy/elementary/src/edje_externals/Makefile.am +++ b/legacy/elementary/src/edje_externals/Makefile.am @@ -24,14 +24,15 @@ pkgdir = $(libdir)/edje pkg_LTLIBRARIES = elm.la elm_la_SOURCES = private.h \ - modules.inc \ - elm.c \ - elm_button.c \ - elm_check.c \ - elm_radio.c \ - elm_scrolled_entry.c \ - elm_slider.c \ - elm_toggle.c +modules.inc \ +elm.c \ +elm_bubble.c \ +elm_button.c \ +elm_check.c \ +elm_radio.c \ +elm_scrolled_entry.c \ +elm_slider.c \ +elm_toggle.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/legacy/elementary/src/edje_externals/elm.c b/legacy/elementary/src/edje_externals/elm.c index 608649d450..b56ed96f6f 100644 --- a/legacy/elementary/src/edje_externals/elm.c +++ b/legacy/elementary/src/edje_externals/elm.c @@ -132,6 +132,31 @@ external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Ein *icon = external_common_param_icon_get(obj, p); } +Evas_Object * +external_common_param_edje_object_get(Evas_Object *obj, const Edje_External_Param *p) +{ + Evas_Object *edje, *parent_widget, *ret; + const char *file; + + if ((!p) || (!p->s) || (p->type != EDJE_EXTERNAL_PARAM_TYPE_STRING)) + return NULL; + + edje = evas_object_smart_parent_get(obj); + edje_object_file_get(edje, &file, NULL); + + parent_widget = elm_widget_parent_widget_get(obj); + if (!parent_widget) + parent_widget = edje; + + ret = edje_object_add(evas_object_evas_get(parent_widget)); + + if (edje_object_file_set(ret, file, p->s)) + return ret; + + evas_object_del(ret); + return NULL; +} + void external_common_params_free(void *params) { diff --git a/legacy/elementary/src/edje_externals/elm_bubble.c b/legacy/elementary/src/edje_externals/elm_bubble.c new file mode 100644 index 0000000000..380e07ca94 --- /dev/null +++ b/legacy/elementary/src/edje_externals/elm_bubble.c @@ -0,0 +1,160 @@ +#include "private.h" + +typedef struct _Elm_Params_Bubble +{ + Elm_Params base; + Evas_Object *icon; + const char *info; + Evas_Object *content; /* part name whose obj is to be set as content */ +} Elm_Params_Bubble; + +static void +external_bubble_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +{ + const Elm_Params_Bubble *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + + if (p->base.label) elm_bubble_label_set(obj, p->base.label); + if (p->icon) elm_bubble_icon_set(obj, p->icon); + if (p->info) elm_bubble_info_set(obj, p->info); + if (p->content) elm_bubble_content_set(obj, p->content); +} + +static Eina_Bool +external_bubble_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_bubble_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); + if (icon) + { + elm_bubble_icon_set(obj, icon); + return EINA_TRUE; + } + } + } + else if (!strcmp(param->name, "info")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + elm_bubble_info_set(obj, param->s); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "content")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + Evas_Object *content = \ + external_common_param_edje_object_get(obj, param); + if (content) + { + elm_bubble_content_set(obj, content); + 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_bubble_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_bubble_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; + } + else if (!strcmp(param->name, "info")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + param->s = elm_bubble_info_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "content")) + { + /* not easy to get content 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; +} + +static void * +external_bubble_params_parse(void *data, Evas_Object *obj, const Eina_List *params) +{ + Elm_Params_Bubble *mem; + Edje_External_Param *param; + const Eina_List *l; + + mem = external_common_params_parse(Elm_Params_Bubble, data, obj, params); + if (!mem) + return NULL; + + external_common_icon_param_parse(&mem->icon, obj, params); + + EINA_LIST_FOREACH(params, l, param) + { + if (!strcmp(param->name, "info")) + mem->info = eina_stringshare_add(param->s); + else if (!strcmp(param->name, "content")) + mem->content = external_common_param_edje_object_get(obj, param); + } + + return mem; +} + + static void +external_bubble_params_free(void *params) +{ + Elm_Params_Bubble *mem = params; + + if (mem->icon) + evas_object_del(mem->icon); + if (mem->content) + evas_object_del(mem->content); + if (mem->info) + eina_stringshare_del(mem->info); + external_common_params_free(params); +} + +static Edje_External_Param_Info external_bubble_params[] = { + DEFINE_EXTERNAL_COMMON_PARAMS, + EDJE_EXTERNAL_PARAM_INFO_STRING("icon"), + EDJE_EXTERNAL_PARAM_INFO_STRING("info"), + EDJE_EXTERNAL_PARAM_INFO_STRING("content"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL +}; + +DEFINE_EXTERNAL_ICON_ADD(bubble, "bubble"); +DEFINE_EXTERNAL_TYPE_SIMPLE(bubble, "Bubble"); diff --git a/legacy/elementary/src/edje_externals/modules.inc b/legacy/elementary/src/edje_externals/modules.inc index 50a9f63ad6..40bd25cc80 100644 --- a/legacy/elementary/src/edje_externals/modules.inc +++ b/legacy/elementary/src/edje_externals/modules.inc @@ -1,3 +1,4 @@ +DEFINE_TYPE(bubble) DEFINE_TYPE(button) DEFINE_TYPE(check) DEFINE_TYPE(radio) diff --git a/legacy/elementary/src/edje_externals/private.h b/legacy/elementary/src/edje_externals/private.h index 4bdc26d66a..45591b18db 100644 --- a/legacy/elementary/src/edje_externals/private.h +++ b/legacy/elementary/src/edje_externals/private.h @@ -14,6 +14,7 @@ const char *external_translate(void *data, const char *orig); void external_common_params_free(void *params); void *external_common_params_parse_internal(size_t params_size, void *data, Evas_Object *obj, const Eina_List *params); Evas_Object *external_common_param_icon_get(Evas_Object *obj, const Edje_External_Param *param); +Evas_Object *external_common_param_edje_object_get(Evas_Object *obj, const Edje_External_Param *p); void external_common_icon_param_parse(Evas_Object **icon, Evas_Object *obj, const Eina_List *params); #define external_common_params_parse(type, data, obj, params) \ external_common_params_parse_internal(sizeof(type), data, obj, params) diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index 916c213d0f..352c3e2dbe 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -694,6 +694,8 @@ extern "C" { EAPI void elm_bubble_label_set(Evas_Object *obj, const char *label); EAPI const char *elm_bubble_label_get(const Evas_Object *obj); EAPI void elm_bubble_info_set(Evas_Object *obj, const char *info); + EAPI const char *elm_bubble_info_get(const Evas_Object *obj); + EAPI void elm_bubble_content_set(Evas_Object *obj, Evas_Object *content); EAPI void elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon); EAPI Evas_Object *elm_bubble_icon_get(const Evas_Object *obj); diff --git a/legacy/elementary/src/lib/elm_bubble.c b/legacy/elementary/src/lib/elm_bubble.c index e9ed0ecc78..c4386a5890 100644 --- a/legacy/elementary/src/lib/elm_bubble.c +++ b/legacy/elementary/src/lib/elm_bubble.c @@ -169,6 +169,29 @@ elm_bubble_info_set(Evas_Object *obj, const char *info) edje_object_part_text_set(wd->bbl, "elm.info", info); _sizing_eval(obj); } + +/** + * Get the info of the bubble + * + * @param obj The given evas pointer + * + * @return The "info" string of the bubble + * + * This function gets the text set to be displayed at the top right of + * the bubble. + * + * @ingroup Bubble + * + */ +EAPI const char * +elm_bubble_info_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + return wd->info; +} + /** * Set the text to be showed in the bubble *