2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "mp-edit-view.h"
18 #include "mp-view-layout.h"
19 #include "mp-library.h"
22 #include "mp-widget.h"
23 #include "mp-common.h"
25 #include "mp-playlist-mgr.h"
26 #include "mp-playlist-view.h"
27 #include "mp-ctxpopup.h"
30 MP_EDIT_THREAD_FEEDBACK_UNABLE_TO_ADD_PLST,
31 MP_EDIT_THREAD_FEEDBACK_CANCEL_BY_EXCEPTION,
32 } mp_edit_thread_feedback_e;
35 mp_edit_view_back_button_cb(void *data, Evas_Object * obj, void *event_info)
37 view_data_t *view_data = (view_data_t *) data;
39 MP_CHECK_VIEW_DATA(view_data);
41 mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
43 evas_object_smart_callback_del(obj, "clicked", mp_edit_view_back_button_cb);
44 mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
48 _mp_edit_view_get_view_title(mp_layout_data_t * layout_data)
50 const char *title = NULL;
51 title = "IDS_COM_BODY_EDIT";
57 mp_edit_view_share_cb(void *data, Evas_Object * obj, void *event_info)
61 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
62 MP_CHECK(layout_data);
63 MP_CHECK_LAYOUT_DATA(layout_data);
65 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
67 if (layout_data->checked_count <= 0)
69 mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_NOTHING_SELECTED"));
73 mp_ctxpopup_create(obj, MP_CTXPOPUP_LIST_SHARE, data, layout_data->ad);
79 mp_edit_view_create_new_cancel_cb(void *data, Evas_Object * obj, void *event_info)
82 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
83 MP_CHECK(layout_data);
84 MP_CHECK_LAYOUT_DATA(layout_data);
86 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
88 view_data_t *view_data = layout_data->view_data;
90 MP_CHECK_VIEW_DATA(view_data);
92 mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
96 mp_edit_view_create_new_done_cb(void *data, Evas_Object * obj, void *event_info)
99 mp_playlist_h playlist_handle = NULL;
100 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
101 MP_CHECK(layout_data);
102 MP_CHECK_LAYOUT_DATA(layout_data);
104 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
106 view_data_t *view_data = layout_data->view_data;
108 MP_CHECK_VIEW_DATA(view_data);
110 struct appdata *ad = view_data->ad;
113 char *converted_name = NULL;
114 Evas_Object *entry = mp_widget_editfield_entry_get(ad->editfiled_new_playlist);
115 const char *name = elm_entry_entry_get(entry);
116 if (name == NULL || strlen(name) == 0)
118 name = elm_object_part_text_get(ad->editfiled_new_playlist, "elm.guidetext");
120 converted_name = elm_entry_markup_to_utf8(name);
122 if(layout_data->edit_playlist_handle)
124 mp_media_info_playlist_handle_destroy(layout_data->edit_playlist_handle);
125 layout_data->edit_playlist_handle = NULL;
128 plst_uid = mp_util_create_playlist(ad, converted_name, &playlist_handle);
129 IF_FREE(converted_name);
134 mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
136 layout_data->edit_playlist_id = plst_uid;
137 layout_data->edit_playlist_handle = playlist_handle;
138 mp_edit_view_excute_edit(layout_data, MP_EDIT_ADD_TO_PLAYLIST);
140 if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
141 mp_view_manager_update_list_contents(view_data, FALSE);
146 _mp_edit_view_create_playlist_cb(void *data, Evas_Object * obj, void *event_info)
150 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
151 MP_CHECK_LAYOUT_DATA(layout_data);
152 MP_CHECK(layout_data->ad);
154 view_data_t *view_data = layout_data->view_data;
156 MP_CHECK_VIEW_DATA(view_data);
157 Evas_Object *create_plst_layout = NULL;
158 char *new_playlist_name = NULL;
160 new_playlist_name = mp_util_get_new_playlist_name();
161 create_plst_layout = mp_common_create_editfield_layout(view_data->navibar, view_data->ad, new_playlist_name);
162 IF_FREE(new_playlist_name);
163 mp_retm_if(create_plst_layout == NULL, "create_plst_layout is NULL");
166 Elm_Object_Item *it = mp_view_manager_push_view_content(view_data, create_plst_layout, MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT);
167 elm_object_item_text_set(it, GET_STR("IDS_MUSIC_BODY_CREATE_PLAYLIST"));
168 mp_language_mgr_register_object_item(it, "IDS_MUSIC_BODY_CREATE_PLAYLIST");
170 Evas_Object *btn = mp_widget_create_button(create_plst_layout, "naviframe/toolbar/default", GET_SYS_STR("IDS_COM_OPT_SAVE"), NULL, mp_edit_view_create_new_done_cb, layout_data);
171 elm_object_item_part_content_set(it, "title_toolbar_button1", btn);
172 btn = mp_widget_create_button(create_plst_layout, "naviframe/back_btn/default", NULL, NULL, mp_playlist_view_create_new_cancel_cb, view_data);
173 elm_object_item_part_content_set(it, "title_prev_btn", btn);
175 mp_common_add_keypad_state_callback(layout_data->ad->conformant, create_plst_layout, it);
177 mp_view_manager_set_back_button(create_plst_layout, it, mp_playlist_view_create_new_cancel_cb, view_data);
179 evas_object_show(create_plst_layout);
181 mp_popup_destroy(layout_data->ad);
185 _mp_edit_view_add_to_playlist_cb(void *data, Evas_Object * obj, void *event_info)
190 mp_layout_data_t *layout_data = (mp_layout_data_t *) evas_object_data_get(obj, "layout_data");
191 MP_CHECK(layout_data);
192 MP_CHECK_LAYOUT_DATA(layout_data);
194 layout_data->edit_playlist_id = (int)data;
195 mp_popup_destroy(layout_data->ad);
196 mp_edit_view_excute_edit(layout_data, MP_EDIT_ADD_TO_PLAYLIST);
199 static void _mp_edit_view_popup_del_cb(void *data, Evas * e, Evas_Object * eo, void *event_info)
201 mp_media_list_h list = data;
202 mp_media_info_group_list_destroy(list);
206 mp_edit_view_add_to_plst_cb(void *data, Evas_Object * obj, void *event_info)
209 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
210 MP_CHECK(layout_data);
211 MP_CHECK_LAYOUT_DATA(layout_data);
212 MP_CHECK(layout_data->ad);
214 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
216 bool b_from_more_btn = false;
217 if (layout_data->ad->more_btn_popup)
218 b_from_more_btn = true;
220 mp_evas_object_del(layout_data->ad->more_btn_popup);
222 Evas_Object *popup = NULL;
224 if (layout_data->checked_count <= 0)
226 mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_NOTHING_SELECTED"));
230 popup = mp_genlist_popup_create(layout_data->ad->win_main, MP_POPUP_ADD_TO_PLST, data, layout_data->ad);
231 evas_object_data_set(popup, "layout_data", layout_data);
232 mp_retm_if(!popup, "popup is NULL !!!");
234 Evas_Object *genlist = evas_object_data_get(popup, "genlist");
235 evas_object_data_set(genlist, "layout_data", layout_data);
237 mp_genlist_popup_item_append(popup, GET_STR("IDS_MUSIC_OPT_CREATE_PLAYLIST"), NULL,
238 _mp_edit_view_create_playlist_cb, layout_data);
239 int i = 0, count = -1, ret = -1;
241 ret = mp_media_info_group_list_count(MP_GROUP_BY_PLAYLIST, NULL, NULL, &count);
244 ERROR_TRACE("Error in mp_media_info_group_list_count (%d)\n", ret);
250 mp_media_list_h list = NULL;
252 ret = mp_media_info_group_list_create(&list, MP_GROUP_BY_PLAYLIST, NULL, NULL, 0, count);
255 WARN_TRACE("Fail to get playlist");
258 for (i = 0; i < count; i++)
262 mp_media_info_h item = NULL;
263 item = mp_media_info_group_list_nth_item(list, i);
265 ret = mp_media_info_group_get_main_info(item, &name);
266 mp_retm_if(ret != 0, "Fail to get value");
267 ret = mp_media_info_group_get_playlist_id(item, &id);
268 mp_retm_if(ret != 0, "Fail to get value");
270 mp_genlist_popup_item_append(popup, name, NULL, _mp_edit_view_add_to_playlist_cb, (void *)id);
273 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _mp_edit_view_popup_del_cb, list);
276 evas_object_show(popup);
280 _mp_edit_view_edit_idler_cb(void *data)
282 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
283 struct appdata *ad = NULL;
284 mp_genlist_item_data_t *item = NULL;
285 mp_media_info_h item_handle = NULL;
291 bool error_occured = FALSE;
293 MP_CHECK_FALSE(layout_data);
294 MP_CHECK_LAYOUT_DATA(layout_data);
296 ad = layout_data->ad;
299 if (!layout_data->current_edit_item)
301 WARN_TRACE("CHECK here...");
305 if(elm_genlist_item_select_mode_get(layout_data->current_edit_item) == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
307 layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
311 item = elm_object_item_data_get(layout_data->current_edit_item);
315 WARN_TRACE("CHECK here...");
319 if (MP_TRACK_BY_ALBUM == layout_data->track_type
320 || MP_TRACK_BY_ARTIST == layout_data->track_type)
321 layout_data->category = MP_LAYOUT_TRACK_LIST;
325 if (layout_data->edit_operation == MP_EDIT_DELETE)
327 switch (layout_data->category)
329 case MP_LAYOUT_PLAYLIST_LIST:
331 layout_data->current_edit_item =
332 elm_genlist_item_next_get(layout_data->current_edit_item);
333 item_handle = (item->handle);
336 WARN_TRACE("CHECK here...");
340 ret = mp_media_info_group_get_playlist_id(item_handle, &plst_id);
341 MP_CHECK_EXCEP(ret == 0);
343 ret = mp_media_info_playlist_delete_from_db(plst_id);
344 MP_CHECK_EXCEP(ret == 0);
346 DEBUG_TRACE("playlist (%d) deleted", plst_id);
347 elm_object_item_del(item->it);
348 layout_data->item_count--;
349 layout_data->checked_count--;
353 case MP_LAYOUT_TRACK_LIST:
355 layout_data->current_edit_item =
356 elm_genlist_item_next_get(layout_data->current_edit_item);
357 item_handle = (item->handle);
360 if (layout_data->playlist_id >= 0)
363 ret = mp_media_info_get_playlist_member_id(item_handle, &member_id);
364 MP_CHECK_EXCEP(ret == 0);
365 ret = mp_media_info_playlist_remove_media(layout_data->playlist_handle, member_id);
366 MP_CHECK_EXCEP(ret == 0);
367 DEBUG_TRACE("playlist id = %d, id = %d", plst_id, uid);
369 else if (layout_data->track_type == MP_TRACK_BY_ADDED_TIME)
371 ret = mp_media_info_set_added_time(item_handle, 0);
372 MP_CHECK_EXCEP(ret == 0);
374 else if (layout_data->track_type == MP_TRACK_BY_PLAYED_TIME)
376 ret = mp_media_info_set_played_time(item_handle, 0);
377 MP_CHECK_EXCEP(ret == 0);
379 else if (layout_data->track_type == MP_TRACK_BY_FAVORITE)
381 ret = mp_media_info_set_favorite(item_handle, false);
382 MP_CHECK_EXCEP(ret == 0);
384 else if (layout_data->track_type == MP_TRACK_BY_PLAYED_COUNT)
386 ret = mp_media_info_set_played_count(item_handle, 0);
387 MP_CHECK_EXCEP(ret == 0);
391 ret = mp_media_info_get_media_id(item_handle, &fid);
392 ret = mp_media_info_get_file_path(item_handle, &file_path);
393 MP_CHECK_EXCEP(ret == 0);
394 if (mp_util_delete_track(layout_data->ad, fid, file_path, false) != MP_FILE_DELETE_ERR_NONE)
396 DEBUG_TRACE("Fail to delete item, fid: %d, path: %s",
398 layout_data->error_count++;
399 error_occured = true;
405 if (MP_TRACK_BY_ARTIST == layout_data->track_type) {
406 if(!elm_genlist_item_parent_get(elm_genlist_item_next_get(item->it))
407 && !elm_genlist_item_parent_get(elm_genlist_item_prev_get(item->it)))
409 elm_object_item_del(elm_genlist_item_parent_get(item->it));
413 elm_genlist_item_update(elm_genlist_item_parent_get(item->it));
415 } else if (MP_TRACK_BY_ALBUM == layout_data->track_type) {
416 /* update group title */
417 elm_genlist_item_update(layout_data->album_group);
419 elm_object_item_del(item->it);
420 layout_data->item_count--;
421 layout_data->checked_count--;
426 WARN_TRACE("unexpected case...");
429 mp_common_set_toolbar_button_sensitivity(layout_data, layout_data->checked_count);
433 WARN_TRACE("Unsupported operation...");
438 layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
440 if (layout_data->current_edit_item)
444 DEBUG_TRACE("no more items");
448 mp_popup_response(ad->popup[MP_POPUP_PROGRESS], MP_POPUP_YES);
449 layout_data->edit_idler = NULL;
454 if (layout_data->group_track_handle)
456 mp_media_info_list_destroy(layout_data->group_track_handle);
457 layout_data->group_track_handle = NULL;
459 mp_popup_response(ad->popup[MP_POPUP_PROGRESS], MP_POPUP_NO);
460 layout_data->edit_idler = NULL;
467 _mp_edit_view_progress_popup_response_cb(void *data, Evas_Object * obj, void *event_info)
470 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
471 MP_CHECK(layout_data);
472 MP_CHECK_LAYOUT_DATA(layout_data);
474 mp_evas_object_del(obj);
476 struct appdata *ad = layout_data->ad;
479 if (layout_data->edit_idler)
481 ecore_idler_del(layout_data->edit_idler);
482 layout_data->edit_idler = NULL;
485 if (layout_data->edit_thread)
487 ecore_thread_cancel(layout_data->edit_thread);
488 layout_data->edit_thread = NULL;
491 if (layout_data->group_track_handle)
493 mp_media_info_list_destroy(layout_data->group_track_handle);
494 layout_data->group_track_handle = NULL;
497 if(mp_view_manager_count_view_content(layout_data->view_data) >= 1)
498 mp_view_manager_update_list_contents(layout_data->view_data, TRUE);
500 int selected_count = layout_data->selected_count;
502 mp_edit_view_cencel_cb(layout_data, NULL, NULL);
504 DEBUG_TRACE("selected_count, %d, error_count: %d", selected_count, layout_data->error_count);
506 if (layout_data->edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
509 mp_util_post_status_message(layout_data->ad, GET_STR("IDS_MUSIC_POP_ADDED"));
513 if ((selected_count == 1) && layout_data->error_count)
515 if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
516 && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
518 mp_util_post_status_message(layout_data->ad, GET_SYS_STR("IDS_COM_POP_FAILED"));
522 mp_util_post_status_message(layout_data->ad, GET_SYS_STR("IDS_COM_POP_FAILED"));
527 if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
528 && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
530 mp_util_post_status_message(layout_data->ad, GET_SYS_STR("IDS_COM_POP_REMOVED"));
534 mp_util_post_status_message(layout_data->ad, GET_SYS_STR("IDS_COM_POP_DELETED"));
539 layout_data->ad->edit_in_progress = false;
541 if (layout_data->edit_operation == MP_EDIT_ADD_TO_PLAYLIST && layout_data->ad->b_add_tracks)
543 layout_data->ad->b_add_tracks = FALSE;
544 mp_view_layout_reset_select_all(layout_data);
545 elm_toolbar_item_selected_set(layout_data->ad->library->ctltab_plist, EINA_TRUE);
548 mp_util_post_status_message(ad, GET_STR("IDS_MUSIC_POP_ADDED"));
554 _mp_edit_view_add_to_plst_thread(void *data, Ecore_Thread *thread)
556 mp_layout_data_t *layout_data = data;
557 MP_CHECK(layout_data);
558 MP_CHECK_LAYOUT_DATA(layout_data);
560 struct appdata *ad = layout_data->ad;
563 mp_genlist_item_data_t *item = NULL;
564 mp_media_info_h item_handle = NULL;
569 if (MP_TRACK_BY_ALBUM == layout_data->track_type || MP_TRACK_BY_ARTIST == layout_data->track_type)
570 layout_data->category = MP_LAYOUT_TRACK_LIST;
572 while (layout_data->current_edit_item)
574 if (ecore_thread_check(thread)) { // pending cancellation
575 WARN_TRACE("popup cancel clicked");
579 if(elm_genlist_item_select_mode_get(layout_data->current_edit_item) == ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
581 layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
585 item = elm_object_item_data_get(layout_data->current_edit_item);
588 WARN_TRACE("CHECK here...");
589 ecore_thread_feedback(thread, (void *)MP_EDIT_THREAD_FEEDBACK_CANCEL_BY_EXCEPTION);
595 layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
599 #ifdef MP_PLAYLIST_MAX_ITEM_COUNT
600 if (layout_data->playlist_track_count >= MP_PLAYLIST_MAX_ITEM_COUNT)
602 DEBUG_TRACE("unable to add more tracks...");
603 ecore_thread_feedback(thread, (void *)MP_EDIT_THREAD_FEEDBACK_CANCEL_BY_EXCEPTION);
607 switch (layout_data->category) {
608 case MP_LAYOUT_TRACK_LIST:
610 item_handle = (item->handle);
613 ret = mp_media_info_get_media_id(item_handle, &fid);
614 MP_CHECK_EXCEP(ret == 0);
616 if (!mp_util_add_to_playlist_by_key(layout_data->edit_playlist_id, fid))
618 ecore_thread_feedback(thread, (void *)MP_EDIT_THREAD_FEEDBACK_UNABLE_TO_ADD_PLST);
619 ecore_thread_feedback(thread, (void *)MP_EDIT_THREAD_FEEDBACK_CANCEL_BY_EXCEPTION);
623 layout_data->playlist_track_count++;
626 layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
629 case MP_LAYOUT_GROUP_LIST:
631 item_handle = (item->handle);
634 mp_track_type_e item_type = MP_TRACK_ALL;
636 mp_media_info_h item = NULL;
638 if (layout_data->view_data->view_type == MP_VIEW_TYPE_FOLDER)
640 ret = mp_media_info_group_get_folder_id(item_handle, &title);
644 ret = mp_media_info_group_get_main_info(item_handle, &title);
646 MP_CHECK_EXCEP(ret == 0);
647 MP_CHECK_EXCEP(title);
649 item_type = mp_menu_get_track_type_by_group(layout_data->group_type);
650 if (!layout_data->group_track_handle)
652 ret = mp_media_info_list_count(item_type, title, NULL, NULL, 0, &count);
654 MP_CHECK_EXCEP(ret == 0);
655 MP_CHECK_EXCEP(count > 0);
656 mp_debug("track_count: %d", count);
658 ret = mp_media_info_list_create(&layout_data->group_track_handle, item_type, title, NULL, NULL, 0, 0, count);
659 MP_CHECK_EXCEP(ret == 0);
661 layout_data->edit_track_index = count - 1;
662 layout_data->group_item_delete_error = false;
665 item = mp_media_info_list_nth_item(layout_data->group_track_handle, layout_data->edit_track_index);
666 ret = mp_media_info_get_media_id(item, &fid);
667 MP_CHECK_EXCEP(ret == 0);
669 if (!mp_util_add_to_playlist_by_key(layout_data->edit_playlist_id, fid))
671 ecore_thread_feedback(thread, (void *)MP_EDIT_THREAD_FEEDBACK_CANCEL_BY_EXCEPTION);
675 layout_data->playlist_track_count++;
677 if (layout_data->edit_track_index <= 0)
679 DEBUG_TRACE("all tracks in %s added.", title);
680 layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
681 mp_media_info_list_destroy(layout_data->group_track_handle);
682 layout_data->group_track_handle = NULL;
685 layout_data->edit_track_index--;
691 WARN_TRACE("unexpected case...");
697 if (layout_data->group_track_handle) {
698 mp_media_info_list_destroy(layout_data->group_track_handle);
699 layout_data->group_track_handle = NULL;
704 _mp_edit_view_edit_thread_notify_cb(void *data, Ecore_Thread *thread, void *msg_data)
707 mp_layout_data_t *layout_data = data;
708 MP_CHECK(layout_data);
709 MP_CHECK_LAYOUT_DATA(layout_data);
711 struct appdata *ad = layout_data->ad;
714 mp_edit_thread_feedback_e feedback = (mp_edit_thread_feedback_e)msg_data;
716 case MP_EDIT_THREAD_FEEDBACK_UNABLE_TO_ADD_PLST:
717 mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD"));
720 case MP_EDIT_THREAD_FEEDBACK_CANCEL_BY_EXCEPTION:
721 mp_popup_response(ad->popup[MP_POPUP_PROGRESS], MP_POPUP_NO);
725 WARN_TRACE("Not defined feedback .. [%d]", feedback);
730 _mp_edit_view_edit_thread_end_cb(void *data, Ecore_Thread *thread)
732 WARN_TRACE("thread_end");
733 mp_layout_data_t *layout_data = data;
734 MP_CHECK(layout_data);
735 MP_CHECK_LAYOUT_DATA(layout_data);
736 layout_data->edit_thread = NULL;
738 struct appdata *ad = layout_data->ad;
741 mp_popup_response(ad->popup[MP_POPUP_PROGRESS], MP_POPUP_YES);
745 _mp_edit_view_edit_thread_cancel_cb(void *data, Ecore_Thread *thread)
747 WARN_TRACE("thread_cancel");
751 mp_edit_view_excute_edit(mp_layout_data_t * layout_data, mp_edit_operation_t edit_operation)
753 MP_CHECK(layout_data);
754 MP_CHECK_LAYOUT_DATA(layout_data);
756 struct appdata *ad = layout_data->ad;
759 Elm_Object_Item *first_item = elm_genlist_first_item_get(layout_data->genlist);
760 MP_CHECK(first_item);
761 layout_data->current_edit_item = first_item;
763 if (layout_data->edit_idler)
765 ecore_idler_del(layout_data->edit_idler);
766 layout_data->edit_idler = NULL;
769 layout_data->selected_count = layout_data->checked_count;
770 layout_data->error_count = 0;
771 layout_data->group_track_handle = NULL;
772 layout_data->group_item_delete_error = false;
773 layout_data->edit_operation = edit_operation;
775 if (edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
777 mp_media_info_list_count(MP_TRACK_BY_PLAYLIST, NULL, NULL, NULL, layout_data->edit_playlist_id, &layout_data->playlist_track_count);
778 DEBUG_TRACE("number of tracks in playlist: %d", layout_data->playlist_track_count);
779 #ifdef MP_PLAYLIST_MAX_ITEM_COUNT
780 if (layout_data->playlist_track_count >= MP_PLAYLIST_MAX_ITEM_COUNT)
782 if (layout_data->ad->b_add_tracks)
784 layout_data->ad->b_add_tracks = FALSE;
785 mp_view_layout_reset_select_all(layout_data);
786 elm_toolbar_item_selected_set(layout_data->ad->library->ctltab_plist, EINA_TRUE);
788 char *fmt_str = GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE");
789 char *noti_str = g_strdup_printf(fmt_str, MP_PLAYLIST_MAX_ITEM_COUNT);
790 mp_util_post_status_message(ad, noti_str);
798 if (edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
800 mp_popup_create(ad->win_main, MP_POPUP_PROGRESS, GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), layout_data,
801 _mp_edit_view_progress_popup_response_cb, ad);
803 layout_data->edit_thread = ecore_thread_feedback_run(
804 _mp_edit_view_add_to_plst_thread,
805 _mp_edit_view_edit_thread_notify_cb,
806 _mp_edit_view_edit_thread_end_cb,
807 _mp_edit_view_edit_thread_cancel_cb,
808 (const void *)layout_data,
811 if (!layout_data->edit_thread) {
812 mp_popup_response(ad->popup[MP_POPUP_PROGRESS], MP_POPUP_NO);
817 layout_data->edit_idler = ecore_idler_add(_mp_edit_view_edit_idler_cb, layout_data);
819 DEBUG_TRACE("layout_data->category=%d=====layout_data->view_data->view_type=%d\n",
820 layout_data->category, layout_data->view_data->view_type);
821 if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
822 && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
824 mp_popup_create(ad->win_main, MP_POPUP_PROGRESS, GET_SYS_STR("IDS_COM_SK_REMOVE"), layout_data,
825 _mp_edit_view_progress_popup_response_cb, ad);
829 mp_popup_create(ad->win_main, MP_POPUP_PROGRESS, GET_SYS_STR("IDS_COM_OPT_DELETE"), layout_data,
830 _mp_edit_view_progress_popup_response_cb, ad);
833 ad->edit_in_progress = true;
838 _mp_edit_view_excute_delete_cb(void *data, Evas_Object * obj, void *event_info)
841 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
842 MP_CHECK(layout_data);
843 MP_CHECK_LAYOUT_DATA(layout_data);
845 MP_CHECK(layout_data->ad);
846 layout_data->ad->popup_delete = NULL;
848 mp_evas_object_del(obj);
850 int response = (int)event_info;
851 if (response == MP_POPUP_NO)
855 ERROR_TRACE("0x%x", layout_data->layout);
856 mp_edit_view_excute_edit(layout_data, MP_EDIT_DELETE);
863 mp_edit_view_cencel_cb(void *data, Evas_Object * obj, void *event_info)
866 struct appdata *ad = NULL;
867 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
868 MP_CHECK(layout_data);
869 MP_CHECK_LAYOUT_DATA(layout_data);
871 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
873 ad = layout_data->ad;
875 mp_view_layout_set_edit_mode(layout_data, false);
876 mp_util_unset_rename(layout_data); /* Cancel the rename mode */
881 mp_edit_view_delete_cb(void *data, Evas_Object * obj, void *event_info)
884 struct appdata *ad = NULL;
885 mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
886 MP_CHECK(layout_data);
887 MP_CHECK_LAYOUT_DATA(layout_data);
888 ERROR_TRACE("0x%x", layout_data->layout);
890 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
892 if (layout_data->checked_count <= 0)
894 mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_NOTHING_SELECTED"));
898 ad = layout_data->ad;
900 Evas_Object *popup = mp_popup_create(ad->win_main, MP_POPUP_NORMAL, NULL, layout_data, _mp_edit_view_excute_delete_cb, ad);
901 evas_object_data_set(popup, "layout_data", layout_data);
902 ad->popup_delete = popup;
904 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
905 if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
906 && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
908 elm_object_text_set(popup, GET_STR("IDS_MUSIC_POP_REMOVE_Q"));
912 elm_object_text_set(popup, GET_SYS_STR("IDS_COM_POP_DELETE_Q"));
915 mp_popup_button_set(popup, MP_POPUP_BTN_1, GET_SYS_STR("IDS_COM_SK_YES"), MP_POPUP_YES);
916 mp_popup_button_set(popup, MP_POPUP_BTN_2, GET_SYS_STR("IDS_COM_SK_NO"), MP_POPUP_NO);
918 evas_object_show(popup);
923 mp_edit_view_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info)
925 mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
926 mp_retm_if(!layout_data, "layout_data is NULL !!!!");
927 MP_CHECK_LAYOUT_DATA(layout_data);
929 mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
931 Elm_Object_Item *gli = (Elm_Object_Item *) event_info;
932 elm_genlist_item_selected_set(gli, FALSE);
934 if (elm_genlist_item_flip_get(gli))
939 mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) elm_object_item_data_get(gli);
941 item->checked = !item->checked;
944 layout_data->checked_count++;
946 layout_data->checked_count--;
948 if (layout_data->select_all_layout)
950 if (layout_data->item_count == layout_data->checked_count)
951 layout_data->select_all_checked = EINA_TRUE;
953 layout_data->select_all_checked = EINA_FALSE;
955 elm_check_state_pointer_set(layout_data->select_all_checkbox, &layout_data->select_all_checked);
958 elm_genlist_item_fields_update(item->it, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
959 mp_util_create_selectioninfo_with_count(layout_data->layout, layout_data->checked_count);
960 mp_common_set_toolbar_button_sensitivity(layout_data, layout_data->checked_count);
964 mp_edit_view_create(view_data_t * view_data)
967 MP_CHECK_NULL(view_data);
968 MP_CHECK_VIEW_DATA(view_data);
971 mp_common_hide_search_ise_context(view_data);
973 Evas_Object *top_view = mp_view_manager_get_last_view_layout(view_data->ad);
974 mp_retvm_if(!top_view, NULL, "top view must exist...");
975 mp_layout_data_t *layout_data = evas_object_data_get(top_view, "layout_data");
976 MP_CHECK_LAYOUT_DATA(layout_data);
978 if (layout_data->category == MP_LAYOUT_TRACK_LIST && layout_data->track_type == MP_TRACK_BY_PLAYLIST)
981 mp_view_layout_set_layout_data(top_view, MP_LAYOUT_EDIT_MODE, TRUE, MP_LAYOUT_REORDER_MODE, reorder, -1);
983 mp_view_layout_set_edit_mode(layout_data, true);
985 const char *title = NULL;
986 if(mp_view_manager_count_view_content(view_data) > 1)
987 title = _mp_edit_view_get_view_title(layout_data);
989 mp_view_manager_set_title_and_buttons(view_data, title, layout_data);
990 mp_common_set_toolbar_button_sensitivity(layout_data, 0);
997 mp_edit_view_get_selected_track_list(void *data, GList **p_list)
999 struct appdata *ad = data;
1002 Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad);
1003 MP_CHECK_FALSE(top_view);
1005 mp_layout_data_t *layout_data = evas_object_data_get(top_view, "layout_data");
1006 MP_CHECK_FALSE(layout_data); /* not list layout */
1008 if (layout_data->category != MP_LAYOUT_TRACK_LIST || !layout_data->edit_mode)
1010 mp_debug("Not track list (edit mode)");
1014 if (layout_data->checked_count > 0)
1016 Elm_Object_Item *gl_item = elm_genlist_first_item_get(layout_data->genlist);
1019 mp_genlist_item_data_t *item = elm_object_item_data_get(gl_item);
1020 if (item && item->checked) {
1021 mp_media_info_get_file_path(item->handle, &path);
1023 *p_list = g_list_append(*p_list, path);
1027 gl_item = elm_genlist_item_next_get(gl_item);