From a1228094fdf000496aca79131abec83c3e488f4e Mon Sep 17 00:00:00 2001 From: Gustavo Lima Chaves Date: Wed, 31 Mar 2010 20:19:55 +0000 Subject: [PATCH] Elm_fileselector as edje external. SVN revision: 47634 --- .../data/edje_externals/Makefile.am | 1 + .../data/edje_externals/ico_fileselector.png | Bin 0 -> 265 bytes .../elementary/data/edje_externals/icons.edc | 1 + .../elementary/src/edje_externals/Makefile.am | 1 + .../src/edje_externals/elm_fileselector.c | 176 ++++++++++++++++++ .../elementary/src/edje_externals/modules.inc | 1 + legacy/elementary/src/lib/Elementary.h.in | 1 + legacy/elementary/src/lib/elc_fileselector.c | 27 ++- 8 files changed, 199 insertions(+), 9 deletions(-) create mode 100644 legacy/elementary/data/edje_externals/ico_fileselector.png create mode 100644 legacy/elementary/src/edje_externals/elm_fileselector.c diff --git a/legacy/elementary/data/edje_externals/Makefile.am b/legacy/elementary/data/edje_externals/Makefile.am index aa538edc4e..ec3d74ca6b 100644 --- a/legacy/elementary/data/edje_externals/Makefile.am +++ b/legacy/elementary/data/edje_externals/Makefile.am @@ -14,6 +14,7 @@ ico_anchorview.png \ ico_bubble.png \ ico_button.png \ ico_check.png \ +ico_fileselector.png \ ico_hoversel.png \ ico_notepad.png \ ico_radio.png \ diff --git a/legacy/elementary/data/edje_externals/ico_fileselector.png b/legacy/elementary/data/edje_externals/ico_fileselector.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf06dcbcf42a85e9dc3f90b2ec698607c7cb31a GIT binary patch literal 265 zcmV+k0rvihP)7w1cM*IXZYxg>p{7cq;OX*P5K?JR4Xh{a~ZGmudIb2?V zM3a@e*a%P;6MDt8B?0QHs*0MnZQG6jU>rvb!w?0U=lMg0*7}yhF#$l+G*O{-T|=a5 z1-%~nzK8dI6-X%sDdl&t_a4TWRbXpv7_5|nwRUylpb9DF+pGWOI9NAk1~bP|F(2m~ zm>JGF0KnOvKJFaMaXEONI0RV)ex{6~;wO5XYzbwhE_MQRiTpL~Qw7Ey+>1sz=_xq* P00000NkvXXu0mjfg-UM6 literal 0 HcmV?d00001 diff --git a/legacy/elementary/data/edje_externals/icons.edc b/legacy/elementary/data/edje_externals/icons.edc index 5bef62cf8b..ddcd27896a 100644 --- a/legacy/elementary/data/edje_externals/icons.edc +++ b/legacy/elementary/data/edje_externals/icons.edc @@ -15,6 +15,7 @@ ICON("anchorview") ICON("bubble") ICON("button") ICON("check") +ICON("fileselector") ICON("hoversel") ICON("notepad") ICON("radio") diff --git a/legacy/elementary/src/edje_externals/Makefile.am b/legacy/elementary/src/edje_externals/Makefile.am index e7e98a20fd..db3ae52ebb 100644 --- a/legacy/elementary/src/edje_externals/Makefile.am +++ b/legacy/elementary/src/edje_externals/Makefile.am @@ -31,6 +31,7 @@ elm_anchorview.c \ elm_bubble.c \ elm_button.c \ elm_check.c \ +elm_fileselector.c \ elm_hoversel.c \ elm_notepad.c \ elm_radio.c \ diff --git a/legacy/elementary/src/edje_externals/elm_fileselector.c b/legacy/elementary/src/edje_externals/elm_fileselector.c new file mode 100644 index 0000000000..b1b88a4e01 --- /dev/null +++ b/legacy/elementary/src/edje_externals/elm_fileselector.c @@ -0,0 +1,176 @@ +#include + +#include "private.h" + +typedef struct _Elm_Params_Fileselector +{ + Eina_Bool is_save:1; + Eina_Bool is_save_set:1; + Eina_Bool folder_only:1; + Eina_Bool folder_only_set:1; + Eina_Bool show_buttons:1; + Eina_Bool show_buttons_set:1; + Eina_Bool expandable:1; + Eina_Bool expandable_set:1; +} Elm_Params_Fileselector; + +static void +external_fileselector_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +{ + const Elm_Params_Fileselector *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + + if (p->is_save_set && p->is_save) + elm_fileselector_is_save_set(obj, p->is_save); + if (p->folder_only_set && p->folder_only) + elm_fileselector_folder_only_set(obj, p->folder_only); + if (p->show_buttons_set && p->show_buttons) + elm_fileselector_buttons_ok_cancel_set(obj, p->show_buttons); + if (p->expandable_set && p->expandable) + elm_fileselector_expandable_set(obj, p->expandable); +} + +static Eina_Bool +external_fileselector_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param) +{ + if (!strcmp(param->name, "save")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_fileselector_is_save_set(obj, param->i); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "folder only")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_fileselector_folder_only_set(obj, param->i); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "show buttons")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_fileselector_buttons_ok_cancel_set(obj, param->i); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "expandable")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + elm_fileselector_expandable_set(obj, param->i); + 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_fileselector_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param) +{ + if (!strcmp(param->name, "save")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_fileselector_is_save_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "folder only")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_fileselector_folder_only_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "show buttons")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_fileselector_buttons_ok_cancel_get(obj); + return EINA_TRUE; + } + } + else if (!strcmp(param->name, "expandable")) + { + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) + { + param->i = elm_fileselector_expandable_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_fileselector_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) +{ + Elm_Params_Fileselector *mem; + Edje_External_Param *param; + const Eina_List *l; + + mem = calloc(1, sizeof(Elm_Params_Fileselector)); + if (!mem) + return NULL; + + EINA_LIST_FOREACH(params, l, param) + { + if (!strcmp(param->name, "save")) + { + mem->is_save = !!param->i; + mem->is_save_set = EINA_TRUE; + } + else if (!strcmp(param->name, "folder only")) + { + mem->folder_only = !!param->i; + mem->folder_only_set = EINA_TRUE; + } + else if (!strcmp(param->name, "show buttons")) + { + mem->show_buttons = !!param->i; + mem->show_buttons_set = EINA_TRUE; + } + else if (!strcmp(param->name, "expandable")) + { + mem->expandable = !!param->i; + mem->expandable_set = EINA_TRUE; + } + } + + return mem; +} + +static void +external_fileselector_params_free(void *params) +{ + Elm_Params_Fileselector *mem = params; + free(mem); +} + +static Edje_External_Param_Info external_fileselector_params[] = + { + EDJE_EXTERNAL_PARAM_INFO_BOOL("save"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("folder only"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("show buttons"), + EDJE_EXTERNAL_PARAM_INFO_BOOL("expandable"), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL + }; + +DEFINE_EXTERNAL_ICON_ADD(fileselector, "fileselector") +DEFINE_EXTERNAL_TYPE_SIMPLE(fileselector, "File Selector") + diff --git a/legacy/elementary/src/edje_externals/modules.inc b/legacy/elementary/src/edje_externals/modules.inc index bef8a21ead..90e68d8c5d 100644 --- a/legacy/elementary/src/edje_externals/modules.inc +++ b/legacy/elementary/src/edje_externals/modules.inc @@ -3,6 +3,7 @@ DEFINE_TYPE(anchorview) DEFINE_TYPE(bubble) DEFINE_TYPE(button) DEFINE_TYPE(check) +DEFINE_TYPE(fileselector) DEFINE_TYPE(hoversel) DEFINE_TYPE(notepad) DEFINE_TYPE(radio) diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index edcc4d630b..3fb2492dbd 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -1041,6 +1041,7 @@ extern "C" { EAPI Eina_Bool elm_fileselector_folder_only_get(const Evas_Object *obj); EAPI void elm_fileselector_buttons_ok_cancel_set(Evas_Object *obj, Eina_Bool buttons); EAPI Eina_Bool elm_fileselector_buttons_ok_cancel_get(const Evas_Object *obj); + EAPI Eina_Bool elm_fileselector_expandable_get(const Evas_Object *obj); EAPI void elm_fileselector_expandable_set(Evas_Object *obj, Eina_Bool expand); EAPI void elm_fileselector_path_set(Evas_Object *obj, const char *path); EAPI const char *elm_fileselector_path_get(const Evas_Object *obj); diff --git a/legacy/elementary/src/lib/elc_fileselector.c b/legacy/elementary/src/lib/elc_fileselector.c index 4838995ddb..1def5819ad 100644 --- a/legacy/elementary/src/lib/elc_fileselector.c +++ b/legacy/elementary/src/lib/elc_fileselector.c @@ -22,7 +22,7 @@ struct _Widget_Data Eina_Bool only_folder; Eina_Bool expand; - struct + struct { Evas_Object *bx; Evas_Object *ok; @@ -163,7 +163,7 @@ _sel(void *data, Evas_Object *obj __UNUSED__, void *event_info) if (wd->entry2) elm_entry_entry_set(wd->entry2, ecore_file_file_get(path)); } - + evas_object_smart_callback_call(fs, "selected", (void*)path); } @@ -412,7 +412,7 @@ elm_fileselector_add(Evas_Object *parent) evas_object_show(wd->scr2); elm_fileselector_buttons_ok_cancel_set(obj, 1); - + // Is this the right way to show sub-objs ?? or use the show/hide cbs ?? //~ evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _show, obj); //~ evas_object_event_callback_add(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, @@ -466,7 +466,7 @@ elm_fileselector_folder_only_set(Evas_Object *obj, Eina_Bool only) } EAPI Eina_Bool -elm_fileselector_only_folder_get(const Evas_Object *obj) +elm_fileselector_folder_only_get(const Evas_Object *obj) { ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; Widget_Data *wd = elm_widget_data_get(obj); @@ -500,7 +500,7 @@ elm_fileselector_buttons_ok_cancel_set(Evas_Object *obj, Eina_Bool only) elm_box_pack_end(box, bt); evas_object_smart_callback_add(bt, "clicked", _canc, obj); evas_object_show(bt); - + // ok btn bt = elm_button_add(obj); wd->buttons.ok = bt; @@ -520,7 +520,7 @@ elm_fileselector_buttons_ok_cancel_set(Evas_Object *obj, Eina_Bool only) } EAPI Eina_Bool -elm_fileselector_ok_cancel_get(const Evas_Object *obj) +elm_fileselector_buttons_ok_cancel_get(const Evas_Object *obj) { ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; Widget_Data *wd = elm_widget_data_get(obj); @@ -537,6 +537,15 @@ elm_fileselector_expandable_set(Evas_Object *obj, Eina_Bool expand) wd->expand = expand; } +EAPI Eina_Bool +elm_fileselector_expandable_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return EINA_FALSE; + return wd->expand; +} + EAPI void elm_fileselector_path_set(Evas_Object *obj, const char *path) { @@ -563,16 +572,16 @@ elm_fileselector_selected_get(const Evas_Object *obj) { const char *name; char buf[PATH_MAX]; - + name = elm_entry_entry_get(wd->entry2); //TODO remove
snprintf(buf, sizeof(buf), "%s/%s", wd->path, name); eina_stringshare_replace(&wd->selection, buf); return wd->selection; } - + it = elm_genlist_selected_item_get(wd->list); if (it) return elm_genlist_item_data_get(it); - + return wd->path; }