diff options
Diffstat (limited to 'src/common/mp-view-manager.c')
-rwxr-xr-x | src/common/mp-view-manager.c | 1235 |
1 files changed, 1235 insertions, 0 deletions
diff --git a/src/common/mp-view-manager.c b/src/common/mp-view-manager.c new file mode 100755 index 0000000..09dfe77 --- /dev/null +++ b/src/common/mp-view-manager.c @@ -0,0 +1,1235 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + + +#include "mp-view-manager.h" +#include "mp-edit-view.h" +#include "mp-playlist-view.h" +#include "mp-track-view.h" +#include "mp-common.h" +#include "mp-menu.h" +#include "mp-play-view.h" +#include "mp-search.h" +#include "mp-widget.h" +#include "mp-library.h" +#include "mp-util.h" + +#define MP_OPTION_HEADER_COND(type) type == MP_VIEW_CONTENT_NEW_PLAYLIST\ + || type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP\ + || type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT + +typedef struct +{ + mp_view_content_t content_type; + int view_index; + Evas_Object *view_layout; + Evas_Object *controlbar; + Elm_Object_Item *control_buttons[MP_NAVI_CONTROL_BUTTON_MAX]; + Elm_Object_Item *edit_button; + Elm_Object_Item *search_button; + Elm_Object_Item *cancel_button; + Elm_Object_Item *navi_item; +} mp_view_histroy_t; + + +void +mp_view_manager_push_view_content(view_data_t * view_data, Evas_Object * content, mp_view_content_t type) +{ + int view_idx = -1; + mp_view_histroy_t *last_history; + + startfunc; + + MP_CHECK(view_data); + MP_CHECK_VIEW_DATA(view_data); + MP_CHECK(content); + MP_CHECK(view_data->navibar); + + struct appdata *ad = view_data->ad; + MP_CHECK(ad); + + Elm_Object_Item *navi_item = elm_naviframe_top_item_get(view_data->navibar); + if (navi_item) + { + Evas_Object *top_view = elm_object_item_content_get(navi_item); + MP_CHECK(top_view); + + mp_view_layout_progress_timer_freeze(top_view); + } + + view_idx = mp_view_manager_count_view_content(view_data); + DEBUG_TRACE("view_idx: %d", view_idx); + last_history = calloc(sizeof(mp_view_histroy_t), 1); + + last_history->content_type = type; + last_history->view_index = view_idx; + last_history->view_layout = content; + + /* + last_history->navi_item = + elm_navigationbar_ex_item_push(view_data->navibar, content, "music/title_option_header"); + */ + if(MP_VIEW_CONTENT_PLAY == type || MP_OPTION_HEADER_COND(type)) + { + elm_naviframe_prev_btn_auto_pushed_set(view_data->navibar, EINA_FALSE); + last_history->navi_item = + elm_naviframe_item_push(view_data->navibar, NULL, NULL, NULL, content, "1line/music"); + } + else + last_history->navi_item = + elm_naviframe_item_push(view_data->navibar, NULL, NULL, NULL, content, "1line/music"); + + mp_view_manager_set_option_header_visible(last_history->navi_item, last_history->content_type); + + if(view_idx == 0) + { + mp_library_controlbar_visible_set(ad, true); + elm_naviframe_item_title_visible_set(last_history->navi_item, false); + } + else + mp_library_controlbar_visible_set(ad, false); + + evas_object_data_set(content, "navi_item", last_history->navi_item); + + if (view_idx) //It shouldn't be set true when first navi content is pushed. Effect finished callback not called in this case.. + ad->navi_effect_in_progress = TRUE; + + ad->view_history = g_list_append(ad->view_history, last_history); + + endfunc; + +} + +/* Musc call this api befor del navigationbar. it prevent destroying info ug layout*/ +void +mp_view_manager_unswallow_info_ug_layout(struct appdata *ad) +{ + MP_CHECK(ad); +} + +void +mp_view_manager_pop_view_content(view_data_t * view_data, bool pop_to_first, bool pop_content) +{ + MP_CHECK(view_data); + MP_CHECK_VIEW_DATA(view_data); + + struct appdata *ad = view_data->ad; + MP_CHECK(ad); + + GList *view_item = g_list_last(ad->view_history); + MP_CHECK(view_item); + MP_CHECK(view_data->navibar); + + mp_view_histroy_t *last_history = view_item->data; + + mp_view_manager_unswallow_info_ug_layout(ad); + + if (!pop_to_first) + { + elm_naviframe_item_pop(view_data->navibar); + ad->navi_effect_in_progress = TRUE; + SAFE_FREE(view_item->data); + ad->view_history = + g_list_delete_link(ad->view_history, view_item); + view_item = g_list_last(ad->view_history); + last_history = view_item->data; + } + else + { + if (last_history->view_index == 0) + { + DEBUG_TRACE(""); + return; + } + elm_naviframe_item_pop_to(elm_naviframe_bottom_item_get(view_data->navibar)); + while (last_history->view_index > 0) + { + SAFE_FREE(view_item->data); + ad->view_history = + g_list_delete_link(ad->view_history, view_item); + view_item = g_list_last(ad->view_history); + MP_CHECK(view_item); + last_history = view_item->data; + } + } + + mp_view_manager_set_option_header_visible(last_history->navi_item, last_history->content_type); + + Elm_Object_Item *navi_item = elm_naviframe_top_item_get(view_data->navibar); + MP_CHECK(navi_item); + Evas_Object *top_view = elm_object_item_content_get(navi_item); + MP_CHECK(top_view); + + mp_view_layout_progress_timer_thaw(top_view); + +} + +void +mp_view_manager_pop_to_view_content(view_data_t * view_data, mp_view_content_t type) +{ + MP_CHECK(view_data); + MP_CHECK_VIEW_DATA(view_data); + + struct appdata *ad = view_data->ad; + MP_CHECK(ad); + + GList *view_item = g_list_last(ad->view_history); + MP_CHECK(view_item); + MP_CHECK(view_data->navibar); + + mp_view_histroy_t *last_history = view_item->data; + bool find_view = false; + + mp_view_manager_unswallow_info_ug_layout(ad); + + if (last_history->content_type != type) { + while (last_history->view_index > 0) + { + DEBUG_TRACE("Content type: %d", last_history->content_type); + if (last_history->content_type == type) + { + find_view = true; + } + SAFE_FREE(view_item->data); + ad->view_history = + g_list_delete_link(ad->view_history, view_item); + view_item = g_list_last(ad->view_history); + MP_CHECK(view_item); + last_history = view_item->data; + + if (find_view) + { + elm_naviframe_item_pop_to(last_history->navi_item); + break; + } + } + } + + mp_view_manager_set_option_header_visible(last_history->navi_item, last_history->content_type); + + Elm_Object_Item *navi_item = elm_naviframe_top_item_get(view_data->navibar); + MP_CHECK(navi_item); + Evas_Object *top_view = elm_object_item_content_get(navi_item); + MP_CHECK(top_view); + + mp_view_layout_progress_timer_thaw(top_view); + +} + +int +mp_view_manager_count_view_content(view_data_t * view_data) +{ + MP_CHECK_VAL(view_data, -1); + MP_CHECK_VIEW_DATA(view_data); + + GList *histroy = view_data->ad->view_history; + mp_retvm_if(!histroy, 0, "last_item not exist"); + + return g_list_length(histroy); +} + +Evas_Object * +mp_view_manager_get_last_view_layout(struct appdata * ad) +{ + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK_NULL(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK_NULL(last_history); + + return last_history->view_layout; +} + +Elm_Object_Item * +mp_view_manager_get_play_view_navi_item(struct appdata *ad) +{ + startfunc; + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + mp_view_histroy_t *history; + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *item = g_list_last(ad->view_history); + MP_CHECK_NULL(item); + + do + { + history = item->data; + if (history->content_type == MP_VIEW_CONTENT_PLAY) + { + return history->navi_item; + } + item = g_list_previous(item); + } + while (item); + + return NULL; +} + +void +mp_view_manager_play_view_title_label_set(struct appdata *ad, const char *title) +{ + startfunc; + Elm_Object_Item *navi_item; + MP_CHECK(ad); + + navi_item = mp_view_manager_get_play_view_navi_item(ad); + if(navi_item) + elm_object_item_text_set(navi_item, title); + +} + +Evas_Object * +mp_view_manager_get_first_view_layout(struct appdata *ad) +{ + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *first_item = g_list_first(ad->view_history); + MP_CHECK_NULL(first_item); + + mp_view_histroy_t *last_history = first_item->data; + MP_CHECK_NULL(last_history); + + return last_history->view_layout; +} + +Evas_Object * +mp_view_manager_get_edit_view_layout(struct appdata * ad) +{ + mp_view_histroy_t *history = NULL; + + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *item = g_list_last(ad->view_history); + MP_CHECK_FALSE(item); + + do + { + history = item->data; + if (history->content_type == MP_VIEW_CONTENT_EDIT) + { + return history->view_layout; + } + item = g_list_previous(item); + } + while (item); + + return NULL; +} + + +bool +mp_view_manager_is_play_view(struct appdata * ad) +{ + MP_CHECK_FALSE(ad); + MP_CHECK_FALSE(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_FALSE(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_FALSE(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK_FALSE(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK_FALSE(last_history); + + if (last_history->content_type == MP_VIEW_CONTENT_PLAY) + return TRUE; + else + return FALSE; + +} + +Evas_Object * +mp_view_manager_get_view_layout(struct appdata * ad, mp_view_content_t type) +{ + mp_view_histroy_t *history = NULL; + + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *item = g_list_last(ad->view_history); + MP_CHECK_FALSE(item); + + do + { + history = item->data; + if (history->content_type == type) + { + return history->view_layout; + } + item = g_list_previous(item); + } + while (item); + + return NULL; +} + + +void +mp_view_manager_update_list_contents(view_data_t * view_data, bool update_edit_list) +{ + MP_CHECK(view_data); + MP_CHECK_VIEW_DATA(view_data); + + mp_view_histroy_t *history = NULL; + struct appdata *ad = view_data->ad; + MP_CHECK(ad); + + GList *item = g_list_last(ad->view_history); + MP_CHECK(item); + do + { + history = item->data; + if (history->content_type == MP_VIEW_CONTENT_LIST) + { + mp_layout_data_t *layout_data = evas_object_data_get(history->view_layout, "layout_data"); + if(layout_data) + { + if(layout_data->edit_mode && !update_edit_list) + { + DEBUG_TRACE("skip update edit view"); + item = g_list_previous(item); + continue; + } + if(layout_data->album_delete_flag) + { + DEBUG_TRACE("skip update album view or artist view"); + item = g_list_previous(item); + continue; + } + } + mp_view_layout_update(history->view_layout); + } + item = g_list_previous(item); + } + while (item); + +} + +void +_mp_view_manager_set_back_button(Evas_Object * navibar, mp_view_histroy_t * last_history, Evas_Smart_Cb cb, void *data) +{ + MP_CHECK(last_history); + + Evas_Object *button = NULL; + if(cb) + { + button = mp_widget_create_button(navibar, "naviframe/back_btn/music/default", NULL, NULL, cb, data); + elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_PREV_BTN, button); + } + else + { + elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL); + } +} + +void +_mp_view_manager_set_title_button(Evas_Object * navibar, mp_view_histroy_t * last_history, char *label, char *icon_path, + mp_navi_control_button_type type, Evas_Smart_Cb cb, void *data) +{ + startfunc; + Evas_Object *button = NULL; + Evas_Object *control_bar = NULL; + + MP_CHECK(navibar); + MP_CHECK(last_history); + + if (!last_history->controlbar) + { + last_history->controlbar = elm_toolbar_add(navibar); + elm_toolbar_shrink_mode_set(last_history->controlbar, ELM_TOOLBAR_SHRINK_EXPAND); + if(MP_OPTION_HEADER_COND(last_history->content_type)) + { + elm_object_style_set(last_history->controlbar, "music/naviframe"); + elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_OPTIONHEADER, last_history->controlbar); + } + else + { + elm_object_style_set(last_history->controlbar, "music/naviframe"); + elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_CONTROLBAR, last_history->controlbar); + } + } + + control_bar = last_history->controlbar; + MP_CHECK(control_bar); + + if(MP_OPTION_HEADER_COND(last_history->content_type)) + { + if (label || icon_path) + { + + button = elm_button_add(control_bar); + elm_object_style_set(button, "music/navigationbar_control/multiline"); + + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5); + + if (label) + elm_object_text_set(button, label); + + evas_object_smart_callback_add(button, "clicked", cb, data); + elm_object_focus_allow_set(button, EINA_FALSE); /* Cancel the rename mode without be focused */ + + evas_object_show(button); + } + + last_history->control_buttons[type] = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL); + elm_object_item_part_content_set(last_history->control_buttons[type], "object", button); + + if (label) + { + if (!strcmp(GET_SYS_STR("IDS_COM_SK_EDIT"), label) ||!strcmp(GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), label)) + { + last_history->edit_button = last_history->control_buttons[type]; + } + else if (!strcmp(GET_SYS_STR("IDS_COM_SK_SEARCH"), label)) + { + last_history->search_button = last_history->control_buttons[type]; + } + else if (!strcmp(GET_SYS_STR("IDS_COM_SK_CANCEL"), label)) + { + last_history->cancel_button = last_history->control_buttons[type]; + } + } + } + else + { + if(!icon_path && !label) { + last_history->control_buttons[type] = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(last_history->control_buttons[type], EINA_TRUE); + } + else + { + button = elm_button_add(control_bar); + elm_object_style_set(button, "music/bottom_control"); + + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5); + + evas_object_smart_callback_add(button, "clicked", cb, data); + elm_object_focus_allow_set(button, EINA_FALSE); /* Cancel the rename mode without be focused */ + + if(icon_path) + { + Evas_Object *icon = elm_icon_add(control_bar); + elm_icon_file_set(icon, icon_path, NULL); + elm_object_content_set(button, icon); + } + + evas_object_show(button); + + Elm_Object_Item *item = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL); + elm_object_item_part_content_set(item, "object", button); + last_history->control_buttons[type] = item; + } + + if (label) + { + if (!strcmp(GET_SYS_STR("IDS_COM_SK_EDIT"), label) ||!strcmp(GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), label)) + { + last_history->edit_button = last_history->control_buttons[type]; + } + else if (!strcmp(GET_SYS_STR("IDS_COM_SK_SEARCH"), label)) + { + last_history->search_button = last_history->control_buttons[type]; + } + else if (!strcmp(GET_SYS_STR("IDS_COM_SK_CANCEL"), label)) + { + last_history->cancel_button = last_history->control_buttons[type]; + } + } + } +} + +void +mp_view_manager_set_title_and_buttons(view_data_t * view_data, char *title, void *data) +{ + startfunc; + Evas_Object *content = NULL; + int i = 0; + + MP_CHECK(view_data); + MP_CHECK_VIEW_DATA(view_data); + + struct appdata *ad = view_data->ad; + MP_CHECK(ad); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK(last_history); + + content = last_history->view_layout; + MP_CHECK(content); + + Evas_Object *navibar = view_data->navibar; + MP_CHECK(navibar); + + if (title) + { + DEBUG_TRACE("title: %s", title); + elm_object_item_text_set(last_history->navi_item, title); + } + + //delete all buttons... + + for (i = 0; i < MP_NAVI_CONTROL_BUTTON_MAX; i++) + { + if (last_history->control_buttons[i]) + { + elm_object_item_del(last_history->control_buttons[i]); + last_history->control_buttons[i] = NULL; + } + } + last_history->edit_button = NULL; + last_history->search_button = NULL; + last_history->cancel_button = NULL; + + //destroy back button + _mp_view_manager_set_back_button(navibar, last_history, NULL, NULL); + + if (last_history->content_type == MP_VIEW_CONTENT_LIST) + { + mp_layout_data_t *layout_data = evas_object_data_get(last_history->view_layout, "layout_data"); + MP_CHECK(layout_data); + MP_CHECK_LAYOUT_DATA(layout_data); + + DEBUG_TRACE("MP_VIEW_CONTENT_LIST. category: %d, rename mode: %d, add tracks : %d ", + layout_data->category, layout_data->rename_mode, layout_data->ad->b_add_tracks); + DEBUG_TRACE("layout_data->playlist_id: %d", layout_data->playlist_id); + + if (layout_data->edit_mode) + { + if (layout_data->ad->b_add_tracks) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), + MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON1, + mp_track_view_add_to_playlist_done_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_CANCEL"), MP_ICON_NAVI_CANCEL, + MP_NAVI_CONTROL_BUTTON5, + mp_track_view_add_to_playlist_cancel_cb, data); + } + else + { + if (layout_data->category == MP_LAYOUT_TRACK_LIST) + { + DEBUG_TRACE(""); + if (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST) + { + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_OPT_REMOVE"), + MP_ICON_NAVI_DELETE, + MP_NAVI_CONTROL_BUTTON1, + mp_edit_view_delete_cb, data); + } + else + { + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_OPT_DELETE"), + MP_ICON_NAVI_DELETE, + MP_NAVI_CONTROL_BUTTON1, + mp_edit_view_delete_cb, data); + } + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), MP_ICON_NAVI_ADD_TO_PLST, + MP_NAVI_CONTROL_BUTTON3, + mp_edit_view_add_to_plst_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5, + mp_edit_view_cencel_cb, data); + + } + else if (layout_data->category == MP_LAYOUT_GROUP_LIST) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), MP_ICON_NAVI_ADD_TO_PLST, + MP_NAVI_CONTROL_BUTTON1, + mp_edit_view_add_to_plst_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5, + mp_edit_view_cencel_cb, data); + + } + else + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_OPT_DELETE"), + MP_ICON_NAVI_DELETE, MP_NAVI_CONTROL_BUTTON1, + mp_edit_view_delete_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5, + mp_edit_view_cencel_cb, data); + + } + } + + } + else + { + if(!layout_data->ad->b_add_tracks) + _mp_view_manager_set_back_button(navibar, last_history, mp_common_back_button_cb, view_data); + + if (title) + layout_data->navibar_title = g_strdup(title); + + if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type + || AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type) + layout_data->navibar_title = g_strdup(layout_data->type_str); + + layout_data->callback_data = data; + if (layout_data->category != MP_LAYOUT_PLAYLIST_LIST) + { + if (layout_data->ad->b_add_tracks) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), + MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON5, + mp_track_view_add_to_playlist_done_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON1, + mp_track_view_add_to_playlist_cancel_cb, + data); + } + else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYLIST) + { + if (!mp_view_manager_get_view_layout(ad, MP_VIEW_CONTENT_SEARCH)) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_EDIT"), MP_ICON_NAVI_EDIT, + MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + if (layout_data->playlist_id > 0) + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_ADD"), + MP_ICON_NAVI_NEW, + MP_NAVI_CONTROL_BUTTON3, + mp_playlist_view_add_button_cb, + data); + else + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_SEARCH"), + MP_ICON_NAVI_SEARCH, + MP_NAVI_CONTROL_BUTTON3, + mp_common_search_button_cb, + data); + + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + } + else + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_EDIT"), MP_ICON_NAVI_EDIT, + MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + } + } + else + { + if (layout_data->category == MP_LAYOUT_GROUP_LIST) + { + if (!mp_view_manager_get_view_layout(ad, MP_VIEW_CONTENT_SEARCH)) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), + MP_ICON_NAVI_EDIT, + MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON2, + NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_SEARCH"), + MP_ICON_NAVI_SEARCH, + MP_NAVI_CONTROL_BUTTON3, + mp_common_search_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON4, + NULL, NULL); + } + else + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), + MP_ICON_NAVI_EDIT, + MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON2, + NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON3, + NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON4, + NULL, NULL); + } + } + else + { + if (!mp_view_manager_get_view_layout(ad, MP_VIEW_CONTENT_SEARCH)) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_EDIT"), + MP_ICON_NAVI_EDIT, + MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON2, + NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_SEARCH"), + MP_ICON_NAVI_SEARCH, + MP_NAVI_CONTROL_BUTTON3, + mp_common_search_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON4, + NULL, NULL); + } + else + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_EDIT"), + MP_ICON_NAVI_EDIT, + MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON2, + NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON3, + NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, + NULL, MP_NAVI_CONTROL_BUTTON4, + NULL, NULL); + } + } + } + } + else + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_EDIT"), + MP_ICON_NAVI_EDIT, MP_NAVI_CONTROL_BUTTON1, + mp_common_edit_button_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, + GET_STR("IDS_MUSIC_BODY_CREATE_PLAYLIST"), MP_ICON_NAVI_NEW, + MP_NAVI_CONTROL_BUTTON2, + mp_playlist_view_create_playlist_button_cb, + data); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_SEARCH"), + MP_ICON_NAVI_SEARCH, MP_NAVI_CONTROL_BUTTON3, + mp_common_search_button_cb, data); + } + } + + } + else if (last_history->content_type == MP_VIEW_CONTENT_NEW_PLAYLIST) + { + DEBUG_TRACE("MP_VIEW_CONTENT_NEW_PLAYLIST. "); + mp_layout_data_t *layout_data = evas_object_data_get(last_history->view_layout, "layout_data"); + if (layout_data) + { + MP_CHECK_LAYOUT_DATA(layout_data); + if (layout_data->view_mode == MP_VIEW_MODE_EDIT) + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"), + MP_ICON_NAVI_DONE, MP_NAVI_CONTROL_BUTTON1, + mp_edit_view_create_new_done_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, + GET_SYS_STR("IDS_COM_SK_CANCEL"), MP_ICON_NAVI_CANCEL, + MP_NAVI_CONTROL_BUTTON4, + mp_edit_view_create_new_cancel_cb, data); + } + } + else + { + DEBUG_TRACE(""); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"), + MP_ICON_NAVI_DONE, MP_NAVI_CONTROL_BUTTON1, + mp_playlist_view_create_new_done_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON4, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5, + mp_playlist_view_create_new_cancel_cb, data); + } + } + else if (last_history->content_type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP) + { + DEBUG_TRACE("MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP. "); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"), + MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON1, + mp_menu_add_to_play_list_done_create_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON4, + mp_menu_add_to_play_list_cancel_create_cb, data); + } + else if (last_history->content_type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT) + { + DEBUG_TRACE("MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP. "); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"), + MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON1, + mp_edit_view_create_new_done_cb, data); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON2, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL, + MP_NAVI_CONTROL_BUTTON3, NULL, NULL); + _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_CANCEL"), + MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON4, + mp_edit_view_create_new_cancel_cb, data); + } + else if (last_history->content_type == MP_VIEW_CONTENT_SEARCH) + { + DEBUG_TRACE("MP_VIEW_CONTENT_SEARCH. "); + _mp_view_manager_set_back_button(navibar, last_history, mp_common_back_button_cb, view_data); + } + else if (last_history->content_type == MP_VIEW_CONTENT_PLAY) + { + DEBUG_TRACE("MP_VIEW_CONTENT_PLAY. "); + mp_play_view_set_snd_path_sensitivity(ad); + } + else if (last_history->content_type == MP_VIEW_CONTENT_INFO) + { + DEBUG_TRACE("MP_VIEW_CONTENT_INFO. "); + _mp_view_manager_set_back_button(navibar, last_history, mp_play_view_info_back_cb, ad); + } + else + { + WARN_TRACE("unexpected value: %d", last_history->content_type); + } +} + +void +mp_view_manager_set_now_playing(view_data_t * view_data, bool show) +{ + MP_CHECK(view_data); + MP_CHECK_VIEW_DATA(view_data); + + mp_view_histroy_t *history = NULL; + struct appdata *ad = view_data->ad; + MP_CHECK(ad); + + GList *item = g_list_last(ad->view_history); + GList *last_item = item; + MP_CHECK(item); + do + { + history = item->data; + if (history->content_type == MP_VIEW_CONTENT_LIST) + { + if (show) + { + mp_view_layout_show_now_playing(history->view_layout); + if(item != last_item) //freeze timer not to update every view. update top view. + mp_view_layout_progress_timer_freeze(history->view_layout); + mp_view_layout_set_now_playing_info(history->view_layout); + } + else + mp_view_layout_hide_now_playing(history->view_layout); + } + item = g_list_previous(item); + } + while (item); + +} + +void +mp_view_manager_freeze_progress_timer(struct appdata *ad) +{ + Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad); + if (top_view) + mp_view_layout_progress_timer_freeze(top_view); + + mp_play_view_progress_timer_freeze(ad); +} + +void +mp_view_manager_thaw_progress_timer(struct appdata *ad) +{ + mp_retm_if(!ad->prohibit_aul_relaunch, "app is in background. not thaw progress timer.. "); + + Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad); + if (top_view) + mp_view_layout_progress_timer_thaw(top_view); + + mp_play_view_progress_timer_thaw(ad); +} + +Elm_Object_Item * +mp_view_manager_get_edit_controlbar_item(struct appdata *ad) +{ + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK_NULL(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK_NULL(last_history); + + return last_history->edit_button; +} + +Elm_Object_Item * +mp_view_manager_get_search_controlbar_item(struct appdata * ad) +{ + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK_NULL(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK_NULL(last_history); + + return last_history->search_button; +} + +Elm_Object_Item * +mp_view_manager_get_cancel_controlbar_item(struct appdata * ad) +{ + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK_NULL(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK_NULL(last_history); + + return last_history->cancel_button; +} + + +Elm_Object_Item * +mp_view_manager_get_controlbar_item(struct appdata * ad, mp_navi_control_button_type type) +{ + MP_CHECK_NULL(ad); + MP_CHECK_NULL(ad->library); + + Evas_Object *cur_view = ad->library->cur_view; + MP_CHECK_NULL(cur_view); + + view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data"); + MP_CHECK_NULL(cur_view_data); + MP_CHECK_VIEW_DATA(cur_view_data); + + GList *last_item = g_list_last(ad->view_history); + MP_CHECK_NULL(last_item); + + mp_view_histroy_t *last_history = last_item->data; + MP_CHECK_NULL(last_history); + + return last_history->control_buttons[type]; +} + +void +mp_view_manager_pop_info_view(struct appdata *ad) +{ + MP_CHECK(ad); + MP_CHECK(ad->library); + MP_CHECK(ad->playing_view); + + view_data_t *view_data = evas_object_data_get(ad->library->cur_view, "view_data"); + MP_CHECK(view_data); + + mp_view_manager_pop_to_view_content(view_data, MP_VIEW_CONTENT_PLAY); + + MP_CHECK(ad->playing_view); + if (ad->playing_view->layout) + evas_object_show(ad->playing_view->layout); +} + +void +mp_view_manager_pop_play_view(struct appdata *ad) +{ + MP_CHECK(ad); + MP_CHECK(ad->library); + + view_data_t *view_data; + + view_data = evas_object_data_get(ad->library->cur_view, "view_data"); + MP_CHECK(view_data); + + if (ad->playing_view) + mp_view_manager_pop_to_view_content(view_data, MP_VIEW_CONTENT_PLAY); +} + +void +mp_view_manager_clear(struct appdata *ad) +{ + MP_CHECK(ad); + + GList *view_item = g_list_last(ad->view_history); + + while (ad->view_history) + { + SAFE_FREE(view_item->data); + ad->view_history = + g_list_delete_link(ad->view_history, ad->view_history); + } + +} + +void +mp_view_manager_set_option_header_visible(Elm_Object_Item *navi_item, mp_view_content_t content_type) +{ + DEBUG_TRACE("content type: %d", content_type); + if(MP_OPTION_HEADER_COND(content_type)) + elm_object_item_signal_emit(navi_item, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_OPEN); + else + elm_object_item_signal_emit(navi_item, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_CLOSE); + +} + |