From 5f686476b5918292e3480c8e500cc4d1e269be0c Mon Sep 17 00:00:00 2001 From: Gustavo Lima Chaves Date: Tue, 30 Mar 2010 17:21:47 +0000 Subject: [PATCH] Anchorview exported to edje. Just text exported, for now. TODO: make editje pass *unescaped* text down to this property. SVN revision: 47604 --- .../data/edje_externals/Makefile.am | 1 + .../data/edje_externals/ico_anchorview.png | Bin 0 -> 306 bytes .../elementary/data/edje_externals/icons.edc | 1 + .../elementary/src/edje_externals/Makefile.am | 1 + .../src/edje_externals/elm_anchorview.c | 95 ++++++++++++++++++ .../elementary/src/edje_externals/modules.inc | 1 + legacy/elementary/src/lib/elc_anchorview.c | 31 +++++- 7 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 legacy/elementary/data/edje_externals/ico_anchorview.png create mode 100644 legacy/elementary/src/edje_externals/elm_anchorview.c diff --git a/legacy/elementary/data/edje_externals/Makefile.am b/legacy/elementary/data/edje_externals/Makefile.am index bc4fb23316..bc54ae27c0 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_anchorview.png \ ico_bubble.png \ ico_button.png \ ico_check.png \ diff --git a/legacy/elementary/data/edje_externals/ico_anchorview.png b/legacy/elementary/data/edje_externals/ico_anchorview.png new file mode 100644 index 0000000000000000000000000000000000000000..a62138e97a6e21fcf36355165994682270663f2f GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg4W?4}_&6v6^OhBPco-U3d7N?UF z76>Nr@bmj8CnU`9Of9}FdFb%r|H0BN?d|{57lj6FND!W5oX!_^wD_#Lk-?w#4gU@Q zH*b(s{Bz}TE03n8<_})Cum+`b6Pj*!-l~Y{Ilc4<(;U5HPlLJ+SG?F|kZ#hHqBm#=l_g<#(&cP uoZq1NU7=O)*i4bomy_>ggqvOjhKbD9-m`7nxBmvZp25@A&t;ucLK6VQwR4vM literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/edje_externals/icons.edc b/legacy/elementary/data/edje_externals/icons.edc index 9120ea6813..fbf1998f06 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("anchorview") ICON("bubble") ICON("button") ICON("check") diff --git a/legacy/elementary/src/edje_externals/Makefile.am b/legacy/elementary/src/edje_externals/Makefile.am index 92d593a87f..979fb0e02b 100644 --- a/legacy/elementary/src/edje_externals/Makefile.am +++ b/legacy/elementary/src/edje_externals/Makefile.am @@ -26,6 +26,7 @@ pkg_LTLIBRARIES = elm.la elm_la_SOURCES = private.h \ modules.inc \ elm.c \ +elm_anchorview.c \ elm_bubble.c \ elm_button.c \ elm_check.c \ diff --git a/legacy/elementary/src/edje_externals/elm_anchorview.c b/legacy/elementary/src/edje_externals/elm_anchorview.c new file mode 100644 index 0000000000..88ebdff1ce --- /dev/null +++ b/legacy/elementary/src/edje_externals/elm_anchorview.c @@ -0,0 +1,95 @@ +#include "private.h" + +typedef struct _Elm_Params_Anchorview +{ + const char *text; +} Elm_Params_Anchorview; + +static void +external_anchorview_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +{ + const Elm_Params_Anchorview *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + + if (p->text) + { + elm_anchorview_text_set(obj, p->text); + } +} + +static Eina_Bool +external_anchorview_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param) +{ + if (!strcmp(param->name, "text")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + elm_anchorview_text_set(obj, param->s); + 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_anchorview_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param) +{ + if (!strcmp(param->name, "text")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) + { + param->s = elm_anchorview_text_get(obj); + 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_anchorview_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) +{ + Elm_Params_Anchorview *mem; + Edje_External_Param *param; + const Eina_List *l; + + mem = calloc(1, sizeof(Elm_Params_Anchorview)); + if (!mem) + return NULL; + + EINA_LIST_FOREACH(params, l, param) + { + if (!strcmp(param->name, "text")) + mem->text = eina_stringshare_add(param->s); + } + + return mem; +} + +static void +external_anchorview_params_free(void *params) +{ + Elm_Params_Anchorview *mem = params; + + if (mem->text) + eina_stringshare_del(mem->text); + free(mem); +} + +static Edje_External_Param_Info external_anchorview_params[] = { + EDJE_EXTERNAL_PARAM_INFO_STRING_DEFAULT("text", "some text"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL +}; + +DEFINE_EXTERNAL_ICON_ADD(anchorview, "anchorview") +DEFINE_EXTERNAL_TYPE_SIMPLE(anchorview, "Anchorview"); diff --git a/legacy/elementary/src/edje_externals/modules.inc b/legacy/elementary/src/edje_externals/modules.inc index b582a138d3..0d304413e8 100644 --- a/legacy/elementary/src/edje_externals/modules.inc +++ b/legacy/elementary/src/edje_externals/modules.inc @@ -1,3 +1,4 @@ +DEFINE_TYPE(anchorview) DEFINE_TYPE(bubble) DEFINE_TYPE(button) DEFINE_TYPE(check) diff --git a/legacy/elementary/src/lib/elc_anchorview.c b/legacy/elementary/src/lib/elc_anchorview.c index d026176057..959d46b6ad 100644 --- a/legacy/elementary/src/lib/elc_anchorview.c +++ b/legacy/elementary/src/lib/elc_anchorview.c @@ -23,6 +23,15 @@ struct _Widget_Data }; static const char *widtype = NULL; + +static const char SIG_ANCHOR_CLICKED[] = "anchor,clicked"; +static const Evas_Smart_Cb_Description _signals[] = { + {SIG_ANCHOR_CLICKED, ""}, /* TODO: declare the type properly, as data is + * being passed + */ + {NULL, NULL} +}; + static void _del_pre_hook(Evas_Object *obj); static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); @@ -107,7 +116,7 @@ _anchor_clicked(void *data, Evas_Object *obj, void *event_info) if (py < (y + (h / 3))) ei.hover_top = 0; ei.hover_bottom = 1; if (py > (y + ((h * 2) / 3))) ei.hover_bottom = 0; - evas_object_smart_callback_call(data, "anchor,clicked", &ei); + evas_object_smart_callback_call(data, SIG_ANCHOR_CLICKED, &ei); evas_object_smart_callback_add(wd->hover, "clicked", _hover_clicked, data); evas_object_show(wd->hover); } @@ -192,6 +201,26 @@ elm_anchorview_text_set(Evas_Object *obj, const char *text) _sizing_eval(obj); } +/** + * Get the markup text set for the anchorview + * + * This retrieves back the string set by @c elm_anchorview_text_set(). + * + * @param obj The anchorview object + * @return text The markup text set or @c NULL, either if it was not set + * or an error ocurred + * + * @ingroup Anchorview + */ +EAPI const char* +elm_anchorview_text_get(Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + return elm_entry_entry_get(wd->entry); +} + /** * Set the parent of the hover popup *