4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
19 #include "setting-storage-utils.h"
20 #include "setting-storage-async-worker.h"
21 #include "setting-storage-miscellaneous.h"
24 #include <media_content.h>
25 #include <efl_extension.h>
27 #define STR_DELETE_ITEMS "IDS_ST_HEADER_DELETE_ITEMS_ABB2"
32 Setting_GenGroupItem_Data *data;
37 static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj, void *event_info);
38 static inline void storageUg_misces_gl_append_select_all_item(SettingStorageUG *ad);
39 static inline void storageUg_misces_gl_remove_select_all_item(SettingStorageUG *ad);
41 static setting_view setting_view_storage_misc;
45 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
46 static Evas_Object* ctxpopup;
49 ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info)
52 evas_object_del(ctxpopup);
57 move_more_ctxpopup(Evas_Object *ctxpopup)
64 /* We convince the top widget is a window */
65 win = elm_object_top_widget_get(ctxpopup);
66 elm_win_screen_size_get(win, NULL, NULL, &w, &h);
67 pos = elm_win_rotation_get(win);
72 evas_object_move(ctxpopup, (w / 2), h);
75 evas_object_move(ctxpopup, (h / 2), w);
78 evas_object_move(ctxpopup, (h / 2), w);
84 naviframe_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
87 Evas_Object *ctxpopup = data;
88 move_more_ctxpopup(ctxpopup);
92 more_ctxpopup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
95 Evas_Object *nf = data;
96 evas_object_event_callback_del_full(nf, EVAS_CALLBACK_RESIZE, naviframe_resize_cb, ctxpopup);
100 win_rotation_changed_cb(void *data, Evas_Object *obj, void *event_info)
103 Evas_Object *ctxpopup = data;
104 move_more_ctxpopup(ctxpopup);
107 //static inline void storageUg_misces_gl_remove_select_all_item(SettingStorageUG *ad);
108 static void _genlist_check_hide(SettingStorageUG *ad, bool hide)
112 Evas_Object *gl = ad->gl_misces;
113 Elm_Object_Item *it = elm_genlist_first_item_get(gl);
116 Setting_GenGroupItem_Data *sel = (Setting_GenGroupItem_Data *)elm_object_item_data_get(it);
117 //sel->isItemHideFlag = 0;
118 sel->isItemHideFlag = hide;
120 // reset if check boxs get hidden
124 SETTING_TRACE(" item_update %d ", count++);
125 elm_genlist_item_fields_update(it, "elm.swallow.end", ELM_GENLIST_ITEM_FIELD_CONTENT);
126 it = elm_genlist_item_next_get(it);
131 * [UI-CALLBACK] 'Delete' button handler on ctxpopup
134 setting_storage_ctx_click_softkey_cb(void *data,
140 retm_if(data == NULL, "Data parameter is NULL");
142 SettingStorageUG *ad = (SettingStorageUG*) data;
144 //-------------------------------------------------------------------------------------------
145 // check genlist check box show/hide
146 //-------------------------------------------------------------------------------------------
147 ad->misces_ctx_popup_selected = true;
151 Eina_List *l = elm_genlist_realized_items_get(ad->gl_misces);
153 EINA_LIST_FREE(l, it)
155 Setting_GenGroupItem_Data *sel = (Setting_GenGroupItem_Data *)elm_object_item_data_get(it);
157 sel->isItemHideFlag = 0;
159 SETTING_TRACE(" item_update %d ", count++);
160 elm_genlist_item_fields_update(it, "elm.swallow.end", ELM_GENLIST_ITEM_FIELD_CONTENT);
164 storageUg_misces_gl_append_select_all_item(ad);
165 _genlist_check_hide(ad, false);
168 if (ctxpopup != NULL) {
169 evas_object_del(ctxpopup);
176 /* Icon + Text (More button style : Naviframe Toolbar) */
177 static void create_ctxpopup_more_button_cb(void *data, Evas_Object *obj, void *event_info)
180 SettingStorageUG *ad = (SettingStorageUG*) data;
182 Evas_Object *nf = ad->navi;
186 if (ctxpopup != NULL) {
187 evas_object_del(ctxpopup);
190 ctxpopup = elm_ctxpopup_add(nf);
191 elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
192 elm_object_style_set(ctxpopup, "more/default");
193 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK, eext_ctxpopup_back_cb, NULL);
194 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE, eext_ctxpopup_back_cb, NULL);
195 evas_object_smart_callback_add(ctxpopup, "dismissed", ctxpopup_dismissed_cb, NULL);
196 evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, more_ctxpopup_del_cb, nf);
197 evas_object_event_callback_add(nf, EVAS_CALLBACK_RESIZE, naviframe_resize_cb, ctxpopup);
199 /* We convince the top widget is a window */
200 // win = elm_object_top_widget_get(nf);
201 // evas_object_smart_callback_add(win, "rotation,changed", win_rotation_changed_cb, ctxpopup);
203 //---------------------------------------------------------------------------------------------
204 elm_ctxpopup_item_append(ctxpopup, _("IDS_ST_BODY_DELETE"), NULL, setting_storage_ctx_click_softkey_cb, ad);
205 //---------------------------------------------------------------------------------------------
210 elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN);
211 move_more_ctxpopup(ctxpopup);
212 evas_object_show(ctxpopup);
214 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
218 * back button handler
220 * 1. "default" -> delete : back to default
222 static Eina_Bool storageUg_misces_back_cb(void *data, Elm_Object_Item *it)
224 SettingStorageUG *ad = data;
226 retv_if(data == NULL, EINA_TRUE);
227 retv_if(NULL != ad->del_worker, EINA_FALSE);
229 setting_view_change(ad->misces_view, ad->main_view, ad);
234 static inline Evas_Object *_create_ly_misces_no_item(Evas_Object *parent)
236 Evas_Object *layout, *icon;
238 layout = elm_layout_add(parent);
239 elm_layout_theme_set(layout, "layout", "nocontents", "default");
240 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
241 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
243 icon = elm_image_add(layout);
244 elm_image_file_set(icon, SETTING_ICON_PATH_CFG "/00_nocontents_text.png", NULL);
245 elm_object_part_content_set(layout, "nocontents.image", icon);
247 elm_object_domain_translatable_part_text_set(layout, "elm.text", SETTING_PACKAGE,
248 STORAGEUG_STR_NO_FILES);
249 elm_layout_signal_emit(layout, "text,disabled", "");
254 static inline Evas_Object *_create_ly_app_default(Evas_Object *parent)
258 layout = elm_layout_add(parent);
259 elm_layout_theme_set(layout, "layout", "application", "default");
260 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
261 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
266 static inline void _update_navibar_buttons(SettingStorageUG *ad)
268 /*update delete item buttons*/
269 if (ad->misces_checked > 0) {
270 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") == NULL) {
271 elm_object_item_part_content_set(ad->misces_navi_it, "title_left_btn", ad->title_left_btn);
273 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") == NULL) {
274 elm_object_item_part_content_set(ad->misces_navi_it, "title_right_btn", ad->title_right_btn);
277 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn") != NULL) {
278 elm_object_item_part_content_unset(ad->misces_navi_it, "title_left_btn");
279 evas_object_hide(ad->title_left_btn);
281 if (ad->misces_navi_it && elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn") != NULL) {
282 elm_object_item_part_content_unset(ad->misces_navi_it, "title_right_btn");
283 evas_object_hide(ad->title_right_btn);
288 static bool storageUg_misces_media_item_cb(media_info_h media, void *data)
291 char *media_id = NULL;
292 char *file_path = NULL;
293 char *display_name = NULL;
294 SettingStorageUG *ad = data;
296 retv_if(NULL == media, true);
297 retv_if(NULL == data, false);
299 media_info_get_file_path(media, &file_path);
300 if (!ecore_file_exists(file_path)) {
305 media_info_get_media_id(media, &media_id);
306 media_info_get_display_name(media, &display_name);
308 node = calloc(1, sizeof(Node_Info));
310 node->id = strdup(media_id);
311 node->path = strdup(file_path);
312 node->name = strdup(display_name);
313 ad->misces_list = eina_list_append(ad->misces_list, node);
322 static void storageUg_misces_clear_list(Eina_List *list)
325 Node_Info *node = NULL;
327 EINA_LIST_FOREACH(list, l, node) {
333 eina_list_free(list);
336 static inline void storageUg_meisces_get_list(SettingStorageUG *ad)
340 filter_h filter = NULL;
344 if (ad->misces_list) {
345 storageUg_misces_clear_list(ad->misces_list);
346 ad->misces_list = NULL;
350 condition = "(MEDIA_TYPE=4) and MEDIA_PATH LIKE \'/opt/usr/media/%%\'";
352 condition = "(MEDIA_TYPE=4) and (MEDIA_PATH LIKE \'/opt/usr/media/.tmp_download/%%\'"
353 "or MEDIA_PATH LIKE \'/opt/usr/media/.video-hub/%%\'"
354 "or MEDIA_PATH LIKE \'/opt/usr/media/Camera/%%\'"
355 "or MEDIA_PATH LIKE \'/opt/usr/media/Downloads/%%\'"
356 "or MEDIA_PATH LIKE \'/opt/usr/media/Images/%%\'"
357 "or MEDIA_PATH LIKE \'/opt/usr/media/Others/%%\'"
358 "or MEDIA_PATH LIKE \'/opt/usr/media/Sounds/%%\'"
359 "or MEDIA_PATH LIKE \'/opt/usr/media/Videos/%%\'"
360 "or MEDIA_PATH LIKE \'/opt/usr/media/lost+found/%%\')";
364 ret = media_filter_create(&filter);
365 if (ret != MEDIA_CONTENT_ERROR_NONE) {
366 SETTING_TRACE_ERROR("media_filter_create() Fail(%d)", ret);
369 ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
370 if (ret != MEDIA_CONTENT_ERROR_NONE) {
371 media_filter_destroy(filter);
372 SETTING_TRACE_ERROR("media_filter_set_condition() Fail(%d)", ret);
376 ret = media_info_foreach_media_from_db(filter, storageUg_misces_media_item_cb, ad);
377 if (ret != MEDIA_CONTENT_ERROR_NONE) {
378 media_filter_destroy(filter);
379 SETTING_TRACE_ERROR("media_info_foreach_media_from_db() Fail(%d)", ret);
383 ret = media_filter_destroy(filter);
384 if (ret != MEDIA_CONTENT_ERROR_NONE) {
385 SETTING_TRACE_ERROR("media_filter_destroy() Fail(%d)", ret);
389 ad->misces_sz_all = eina_list_count(ad->misces_list);
392 static void storageUg_misces_handle_selecting(SettingStorageUG *ad)
394 Evas_Object *toolbar;
398 if (ad->misces_checked == ad->misces_sz_all)
399 ad->misces_is_select_all = EINA_TRUE;
401 ad->misces_is_select_all = EINA_FALSE;
403 /* text set and timeout set */
404 if (0 < ad->misces_checked) {
405 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
407 snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_checked);
408 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", text);
410 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
411 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
413 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
414 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
416 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
417 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
421 static int storageUg_compare_str(const void *data1, const void *data2)
423 return safeStrCmp(data1, data2);
426 static void storageUg_misces_handle_sel_list(SettingStorageUG *ad, char *id,
432 SETTING_TRACE("----- checked : %d ", ad->misces_checked);
433 ad->misces_checked++;
434 ad->misces_sel_list = eina_list_append(ad->misces_sel_list, strdup(id));
436 SETTING_TRACE("----- un-checked : %d", ad->misces_checked);
439 ad->misces_checked--;
440 found = eina_list_search_unsorted_list(ad->misces_sel_list, storageUg_compare_str,
442 free(eina_list_data_get(found));
443 ad->misces_sel_list = eina_list_remove_list(ad->misces_sel_list, found);
446 /*update delete item buttons*/
447 _update_navibar_buttons(ad);
450 static void storageUg_misces_genlist_sel(void *data, Evas_Object *obj,
455 SettingStorageUG *ad = data;
456 Elm_Object_Item *item = event_info;
457 Setting_GenGroupItem_Data *d_item = NULL;
459 ret_if(data == NULL);
461 elm_genlist_item_selected_set(item, 0);
462 d_item = elm_object_item_data_get(item);
464 node = d_item->userdata;
466 setting_update_gl_item_chk_status(d_item, !(d_item->chk_status));
468 storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
469 storageUg_misces_handle_selecting(ad);
473 if (NULL == ad->misces_lo_noitem) {
474 ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
476 Evas_Object *btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
477 elm_object_disabled_set(btn, EINA_TRUE);
478 ad->gl_misces = NULL;
480 if (ad->misces_lo_noitem) {
481 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
489 static void storageUg_misces_genlist_chk_cb(void *data, Evas_Object *obj,
495 SettingStorageUG *ad;
496 Setting_GenGroupItem_Data *d_item = data;
498 ret_if(data == NULL);
500 node = d_item->userdata;
504 d_item->chk_status = elm_check_state_get(obj);
506 storageUg_misces_handle_sel_list(ad, node->id, d_item->chk_status);
507 storageUg_misces_handle_selecting(ad);
509 SETTING_TRACE_ERROR(">>>>>>>>> node is NULL");
515 static inline void storageUg_misces_clear_sel_list(Eina_List *list)
520 EINA_LIST_FOREACH(list, l, node)
522 eina_list_free(list);
528 * "Select All" - check button handler
530 static inline void setting_storage_select_all_chk_btn_cb(void *data, Evas_Object *obj, void *event_info)
534 retm_if(data == NULL, "Data parameter is NULL");
535 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
536 SettingStorageUG *ad = (SettingStorageUG *)list_item->userdata;
538 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
539 ad->misces_is_select_all = elm_check_state_get(obj);
541 SETTING_TRACE_ERROR("1");
546 Evas_Object *toolbar;
547 Node_Info *node = NULL;
548 Setting_GenGroupItem_Data *item_data = NULL;
551 SETTING_TRACE_ERROR("2 : ad->misces_is_select_all--->%d", ad->misces_is_select_all);
552 SETTING_TRACE_ERROR("ad->misces_list--->%x", ad->misces_list);
553 EINA_LIST_FOREACH(ad->misces_list, l, node) {
554 if (node && node->data) {
555 item_data = node->data;
556 SETTING_TRACE_ERROR("2.1");
558 item_data->chk_status = ad->misces_is_select_all;
559 SETTING_TRACE_ERROR("2.2");
560 elm_object_item_data_set(item_data->item, item_data);
561 SETTING_TRACE_ERROR("2.3");
562 storageUg_misces_handle_sel_list(ad, node->id, item_data->chk_status);
563 SETTING_TRACE_ERROR("2.4");
568 SETTING_TRACE_ERROR("3");
569 elm_genlist_realized_items_update(ad->gl_misces);
571 SETTING_TRACE_ERROR("4");
572 bool select_all_state = ad->misces_is_select_all;
573 if (select_all_state) {
574 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
576 snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_sz_all);
577 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", text);
579 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
580 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
581 ad->misces_checked = ad->misces_sz_all;
583 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
584 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
586 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
587 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
588 ad->misces_checked = 0;
589 SETTING_TRACE_ERROR("********** SET TO ZERO ad->misces_checked = 0");
591 SETTING_TRACE_ERROR("5");
595 * Delete 'Select All' item in genlist
597 static inline void storageUg_misces_gl_remove_select_all_item(SettingStorageUG *ad)
600 Evas_Object *gl = ad->gl_misces;
602 Elm_Object_Item *it = elm_genlist_first_item_get(gl);
604 elm_object_item_del (it);
611 * "Select All" check button
613 static inline void storageUg_misces_gl_append_select_all_item(SettingStorageUG *ad)
617 Setting_GenGroupItem_Data *item_data = NULL;
620 evas_object_data_set(ad->gl_misces, "InsertType", "Prepend");
622 item_data = setting_create_Gendial_field_def(ad->gl_misces,
623 &(itc_1text_1icon), storageUg_misces_sel_all_clicked, ad,
624 SWALLOW_Type_1ICON_1RADIO, NULL, NULL, checked, _("IDS_ST_BODY_SELECT_ALL"), NULL,
625 setting_storage_select_all_chk_btn_cb);
628 item_data->userdata = ad;
629 item_data->isItemHideFlag = TRUE;
631 SETTING_TRACE_ERROR("item_data is NULL");
634 evas_object_data_set(ad->gl_misces, "InsertType", "");
639 static inline void storageUg_misces_gl_append_items(SettingStorageUG *ad)
644 Eina_List *found, *cur, *tmp_sel_list;
645 Setting_GenGroupItem_Data *item_data = NULL;
647 tmp_sel_list = ad->misces_sel_list;
648 ad->misces_sel_list = NULL;
650 EINA_LIST_FOREACH(ad->misces_list, cur, node) {
654 found = eina_list_search_unsorted_list(tmp_sel_list, storageUg_compare_str,
658 storageUg_misces_handle_sel_list(ad, node->id, 1);
663 item_data = setting_create_Gendial_field_def(ad->gl_misces,
664 &(itc_1text_1icon), storageUg_misces_genlist_sel, ad,
665 SWALLOW_Type_1CHECK_RIGHT_INVISIBLE, NULL, NULL, checked, node->name, node->path,
666 storageUg_misces_genlist_chk_cb);
669 item_data->userdata = node;
670 node->data = item_data;
672 item_data->isItemHideFlag = TRUE;
674 SETTING_TRACE_ERROR("item_data is NULL");
677 storageUg_misces_handle_selecting(ad);
678 storageUg_misces_clear_sel_list(tmp_sel_list);
681 static inline Evas_Object *storageUg_misces_genlist(Evas_Object *parent)
683 Evas_Object *genlist;
685 genlist = elm_genlist_add(parent);
686 if (NULL == genlist) {
687 SETTING_TRACE_ERROR("elm_genlist_add() Fail");
690 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
691 elm_genlist_homogeneous_set(genlist, EINA_TRUE);
692 elm_genlist_block_count_set(genlist, 2);
693 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
694 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
695 evas_object_show(genlist);
700 static void storageUg_misces_delete_list(SettingStorageUG *ad)
702 SETTING_TRACE("Entering storageUg_misces_delete_list");
706 ad->misces_checked = 0;
707 Setting_GenGroupItem_Data *item_data = NULL;
709 /* Elm_Object_Item *it = elm_genlist_first_item_get(ad->gl_misces); */
710 Elm_Object_Item *it = elm_genlist_nth_item_get(ad->gl_misces, 1); /* second */
713 item_data = elm_object_item_data_get(it);
714 it = elm_genlist_item_next_get(it);
715 if (item_data != NULL) {
716 SETTING_TRACE("chk_status: %d", item_data->chk_status);
717 if (item_data->chk_status) {
718 elm_object_item_del(item_data->item);
719 Node_Info *node = item_data->userdata;
722 ad->misces_list = eina_list_remove(ad->misces_list, node);
732 ad->misces_sz_all = eina_list_count(ad->misces_list);
734 SETTING_TRACE("ad->misces_sz_all - %d", ad->misces_sz_all);
735 if (0 == ad->misces_sz_all) {
737 if (elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn")) {
738 Evas_Object *btn_done = elm_object_item_part_content_unset(ad->misces_navi_it, "title_right_btn");
739 evas_object_hide(btn_done);
742 if (elm_object_item_part_content_get(ad->misces_navi_it, "title_left_btn")) {
743 Evas_Object *btn_cancel = elm_object_item_part_content_unset(ad->misces_navi_it, "title_left_btn");
744 evas_object_hide(btn_cancel);
746 if (NULL == ad->misces_lo_noitem) {
747 ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
750 ad->gl_misces = NULL;
752 if (ad->misces_lo_noitem) {
753 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
762 static void storageUg_misces_add_list(SettingStorageUG *ad)
764 Evas_Object *toolbar, *btn;
765 Evas_Object *lo_new = NULL;
767 SETTING_TRACE("Entering storageUg_misces_add_list");
771 ad->misces_checked = 0;
772 ad->misces_is_select_all = EINA_FALSE;
774 if (0 == ad->misces_sz_all) {
775 if (NULL == ad->misces_lo_noitem) {
776 lo_new = ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
778 btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
780 elm_object_disabled_set(btn, EINA_TRUE);
781 ad->gl_misces = NULL;
785 elm_genlist_clear(ad->gl_misces);
787 lo_new = ad->gl_misces = storageUg_misces_genlist(ad->navi);
789 storageUg_misces_gl_append_items(ad);
791 ad->misces_lo_noitem = NULL;
795 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", lo_new);
798 /* disable toolbar object */
799 if (0 == ad->misces_checked) {
800 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
802 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
806 void storageUg_misces_delete_files_cb(int fn_result, SettingStorageUG *ad)
810 ad->del_worker = NULL;
813 SETTING_TRACE("After deleting, updating the file list");
815 storageUg_misces_delete_list(ad);
817 if (SETTING_RETURN_SUCCESS != fn_result) {
818 SETTING_TRACE_ERROR("storageUg_misces_delete_files() Fail(%d)", fn_result);
819 storageUg_fail_popup(ad);
824 evas_object_del(ad->popup);
828 if (ad->misces_navi_it) {
829 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
830 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
836 * [controller] delete actual files with ad->misces_list
839 static int storageUg_misces_delete_files(SettingStorageUG *ad)
842 Node_Info *node = NULL;
843 Setting_GenGroupItem_Data *item_data = NULL;
845 retv_if(NULL == ad, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
847 EINA_LIST_FOREACH(ad->misces_list, l, node) {
849 item_data = node->data;
851 if (!item_data->chk_status)
854 if (EINA_TRUE == ecore_file_remove(node->path)) {
855 media_content_scan_file(node->path);
857 SETTING_TRACE_ERROR("failed to ecore_file_remove");
858 return SETTING_RETURN_FAIL;
861 storageUG_STOP_POINT;
864 return SETTING_RETURN_SUCCESS;
869 * [UI] Done button -> create popup -> button handler
871 static void storageUg_misces_delete_resp(void *data, Evas_Object *obj,
875 SettingStorageUG *ad = data;
877 ret_if(NULL == data);
880 response_type = btn_type(obj);
883 evas_object_del(ad->popup);
887 if (POPUP_RESPONSE_OK != response_type) {
888 SETTING_TRACE("CANCEL");
892 SETTING_TRACE(">>>>> checked : %d before deletion ", ad->misces_checked);
894 if (ad->misces_checked) {
895 ad->popup = setting_create_popup_with_progressbar(ad, ad->win, PROGRESSBAR_STYLE,
896 NULL, NULL, storageUg_popup_del, 0, TRUE, TRUE, 0);
899 storageUg_stop_async_worker(ad->del_worker);
900 ad->del_worker = storageUg_start_async_worker(storageUg_misces_delete_files,
901 storageUg_misces_delete_files_cb, ad);
903 ad->popup = setting_create_popup(ad, ad->win, NULL,
904 STORAGEUG_STR_NO_SELECTED, storageUg_popup_del,
905 SETTING_STORAGE_POPUP_TIMER, FALSE, FALSE, 0);
911 * Done button handler for 'delete'
913 static void storageUg_misces_delete_cb(void *data, Evas_Object *obj, void *event_info)
915 SettingStorageUG *ad = (SettingStorageUG *) data;
917 ret_if(NULL == data);
919 ad->popup = setting_create_popup(ad, ad->win, NULL,
920 STORAGEUG_STR_DELETE_Q, storageUg_misces_delete_resp,
922 2, STORAGEUG_STR_DELETE, STORAGEUG_STR_CANCEL);
927 * Genlist Touch handler
928 * @todo setting_storage_select_all_chk_btn_cb is similar to this function
930 static void storageUg_misces_sel_all_clicked(void *data, Evas_Object *obj, void *event_info)
934 Evas_Object *toolbar;
935 Node_Info *node = NULL;
936 SettingStorageUG *ad = data;
937 //Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
939 Setting_GenGroupItem_Data *item_data = NULL;
941 SETTING_TRACE_ERROR("1");
943 ret_if(data == NULL);
945 ad->misces_is_select_all = elm_check_state_get(obj);
947 SETTING_TRACE_ERROR("2 : ad->misces_is_select_all--->%d", ad->misces_is_select_all);
948 SETTING_TRACE_ERROR("ad->misces_list--->%x", ad->misces_list);
949 EINA_LIST_FOREACH(ad->misces_list, l, node) {
950 if (node && node->data) {
951 item_data = node->data;
952 SETTING_TRACE_ERROR("2.1");
954 item_data->chk_status = (ad->misces_is_select_all == 1) ? 0 : 1;
955 SETTING_TRACE_ERROR("2.2");
956 elm_object_item_data_set(item_data->item, item_data);
957 SETTING_TRACE_ERROR("2.3");
958 storageUg_misces_handle_sel_list(ad, node->id, item_data->chk_status);
959 SETTING_TRACE_ERROR("2.4");
964 SETTING_TRACE_ERROR("3");
965 elm_genlist_realized_items_update(ad->gl_misces);
967 SETTING_TRACE_ERROR("4");
968 bool select_all_state = (ad->misces_is_select_all == 1) ? 0 : 1;
970 if (select_all_state) {
971 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0};
973 snprintf(text, sizeof(text), _(STORAGEUG_STR_N_SELECTED), ad->misces_sz_all);
974 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", text);
976 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
977 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_FALSE);
978 ad->misces_checked = ad->misces_sz_all;
980 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
981 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
983 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
984 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
985 ad->misces_checked = 0;
986 SETTING_TRACE_ERROR("********** SET TO ZERO ad->misces_checked = 0");
988 SETTING_TRACE_ERROR("5");
992 * Naviframe 'cancel' button handler
995 storageUg_misces_cancel_cb(void *data, Evas_Object *obj, void *event_info)
998 setting_retm_if(data == NULL, "data is NULL");
999 SettingStorageUG *ad = data;
1001 //ad->misces_ctx_popup_selected = true;
1002 if (ad->misces_ctx_popup_selected) {
1004 SETTING_TRACE_ERROR("ad->misces_ctx_popup_selected == true");
1007 ad->misces_ctx_popup_selected = false;
1009 // 1. remove 1st item of genlist
1010 storageUg_misces_gl_remove_select_all_item(ad);
1011 // 2. remove all 'toggle' from all list
1012 _genlist_check_hide(ad, true);
1014 // remove sub text of naviframe title
1015 elm_object_item_part_text_set(ad->misces_navi_it, "subtitle", "");
1016 elm_object_item_signal_emit(ad->misces_navi_it, "elm,state,subtitle,hide", "elm");
1018 Evas_Object *toolbar = NULL;
1019 toolbar = elm_object_item_part_content_get(ad->misces_navi_it, "toolbar");
1020 elm_object_item_disabled_set(elm_toolbar_last_item_get(toolbar), EINA_TRUE);
1021 ad->misces_checked = 0;
1025 if (ad->misces_list) {
1026 storageUg_misces_clear_list(ad->misces_list);
1027 ad->misces_list = NULL;
1031 // change button style
1032 _update_navibar_buttons(ad);
1034 SETTING_TRACE_ERROR("********** SET TO ZERO ad->misces_checked = 0");
1037 SETTING_TRACE_ERROR("ad->misces_ctx_popup_selected == false, go naviframe_back");
1038 elm_naviframe_item_pop(ad->navi);
1045 setting_storage_click_softkey_delete_cb(void *data, Evas_Object *obj, void *event_info)
1047 SETTING_TRACE_BEGIN;
1049 retm_if(data == NULL, "Data parameter is NULL");
1051 SettingStorageUG *ad = (SettingStorageUG *) data;
1056 //--------------------------------------------------
1057 // name: "storageview_layout";
1058 //--------------------------------------------------
1059 static int storageUg_misces_create(void *data)
1061 SettingStorageUG *ad = data;
1062 Evas_Object *sel_all = NULL;
1064 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1066 /*first get misc file count*/
1067 storageUg_meisces_get_list(ad);
1069 if (ad->misces_sz_all > 0) {
1072 storageUg_misces_add_list(ad);
1074 elm_object_focus_set(ad->gl_misces, EINA_TRUE);
1076 // IDS_ST_BODY_MISCELLANEOUS_FILES
1078 ad->misces_navi_it = setting_push_layout_navi_bar(_(IDS_ST_BODY_MISCELLANEOUS_FILES),
1080 (setting_call_back_func)storageUg_misces_back_cb,
1083 ad, NULL, ad->navi, NULL);
1085 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->gl_misces);
1087 /* Title Cancel Button */
1088 ad->title_left_btn = elm_button_add(ad->navi);
1089 elm_object_style_set(ad->title_left_btn, "naviframe/title_cancel");
1090 evas_object_smart_callback_add(ad->title_left_btn, "clicked", storageUg_misces_cancel_cb, ad);
1092 /* Title Done Button */
1093 ad->title_right_btn = elm_button_add(ad->navi);
1094 elm_object_style_set(ad->title_right_btn, "naviframe/title_done");
1095 evas_object_smart_callback_add(ad->title_right_btn, "clicked", storageUg_misces_delete_cb, ad);
1098 ad->misces_navi_it = setting_push_layout_navi_bar(_(IDS_ST_BODY_MISCELLANEOUS_FILES),
1102 (setting_call_back_func)storageUg_misces_back_cb,
1105 ad, NULL, ad->navi, NULL);
1107 if (NULL == ad->misces_lo_noitem) {
1108 ad->misces_lo_noitem = _create_ly_misces_no_item(ad->navi);
1110 Evas_Object *btn = elm_object_item_part_content_get(ad->misces_navi_it, "title_right_btn");
1111 elm_object_disabled_set(btn, EINA_TRUE);
1112 ad->gl_misces = NULL;
1114 if (ad->misces_lo_noitem) {
1115 elm_object_item_part_content_set(ad->misces_navi_it, "elm.swallow.content", ad->misces_lo_noitem);
1119 elm_naviframe_item_pop_cb_set(ad->misces_navi_it, storageUg_misces_back_cb, ad);
1121 // Add ctx popup handler
1122 Evas_Object* btn = elm_button_add(ad->navi);
1123 elm_object_style_set(btn, "naviframe/more/default");
1124 evas_object_smart_callback_add(btn, "clicked", create_ctxpopup_more_button_cb, ad);
1125 elm_object_item_part_content_set(ad->misces_navi_it, "toolbar_more_btn", btn);
1127 setting_view_storage_misc.is_create = 1;
1129 return SETTING_RETURN_SUCCESS;
1132 static int storageUg_misces_destroy(void *data)
1134 SettingStorageUG *ad = data;
1136 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1139 evas_object_del(ad->popup);
1143 if (ad->del_worker) {
1144 storageUg_stop_async_worker(ad->del_worker);
1145 ad->del_worker = NULL;
1148 if (ad->misces_list) {
1149 storageUg_misces_clear_list(ad->misces_list);
1150 ad->misces_list = NULL;
1153 if (ad->misces_sel_list) {
1154 storageUg_misces_clear_sel_list(ad->misces_sel_list);
1155 ad->misces_sel_list = NULL;
1158 ad->misces_navi_it = NULL;
1159 ad->gl_misces = NULL;
1160 ad->misces_lo_noitem = NULL;
1161 ad->misces_checked = 0;
1163 setting_view_storage_misc.is_create = 0;
1164 elm_naviframe_item_pop(ad->navi);
1166 return SETTING_RETURN_SUCCESS;
1169 static int storageUg_misces_update(void *data)
1171 SettingStorageUG *ad = data;
1173 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1175 storageUg_misces_add_list(ad);
1176 return SETTING_RETURN_SUCCESS;
1179 static int storageUg_misces_cleanup(void *data)
1181 return storageUg_misces_destroy(data);
1185 void storageUg_misc_init(SettingStorageUG *ad)
1188 ret_if(ad->misces_view);
1190 setting_view_storage_misc.create = storageUg_misces_create;
1191 setting_view_storage_misc.destroy = storageUg_misces_destroy;
1192 setting_view_storage_misc.update = storageUg_misces_update;
1193 setting_view_storage_misc.cleanup = storageUg_misces_cleanup;
1195 ad->misces_view = &setting_view_storage_misc;