diff options
Diffstat (limited to 'src/widget/mf-ug-popup.c')
-rw-r--r-- | src/widget/mf-ug-popup.c | 599 |
1 files changed, 599 insertions, 0 deletions
diff --git a/src/widget/mf-ug-popup.c b/src/widget/mf-ug-popup.c new file mode 100644 index 0000000..d789a51 --- /dev/null +++ b/src/widget/mf-ug-popup.c @@ -0,0 +1,599 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.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 <notification.h> + +#include "mf-ug-util.h" +#include "mf-ug-winset.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-cb.h" +#include "mf-ug-resource.h" + +#define MF_UG_POPUP_STYLE_MIN_MENUSTYLE "min_menustyle" +#define MF_UG_POPUP_MENUSTYLE_WIDTH (614*elm_config_scale_get()) +#define MF_UG_POPUP_MENUSTYLE_HEIGHT(x) ((113*x-1)*elm_config_scale_get()) +#define MF_UG_POPUP_MENUSTYLE_HEIGHT_MAX (408*elm_config_scale_get()) +Elm_Genlist_Item_Class ug_listby_itc; +#define MF_UG_ITEM_COUNT 4 + +typedef struct { + int index; + ugData* ugd; +} ugListByData_s; + +static int __mf_ug_popup_get_list_by_selected_item(void *data) +{ + ug_mf_retvm_if(data == NULL, 0, "data is NULL"); + ugData *ugd = (ugData *)data; + + int iSortTypeValue = ugd->ug_Status.ug_iSortType; + + int ret = -1; + switch (iSortTypeValue) { + case MF_UG_SORT_BY_DATE_O2R: + case MF_UG_SORT_BY_DATE_R2O: + ret = 1; + break; + case MF_UG_SORT_BY_TYPE_A2Z: + case MF_UG_SORT_BY_TYPE_Z2A: + ret = 3; + break; + case MF_UG_SORT_BY_NAME_A2Z: + case MF_UG_SORT_BY_NAME_Z2A: + ret = 0; + break; + case MF_UG_SORT_BY_SIZE_S2L: + case MF_UG_SORT_BY_SIZE_L2S: + ret = 2; + break; + default: + ret = 0; + break; + } + return ret; +} + + +static char *__mf_ug_popup_get_genlist_label(void *data, Evas_Object * obj, const char *part) +{ + ugListByData_s *params = (ugListByData_s *) data; + assert(params); + ugData *ugd = params->ugd; + assert(ugd); + assert(part); + + char *ret = NULL; + if (!strcmp(part, "elm.text")) { + switch (params->index) { + case 0: /**< Sort by file name ascending */ + ret = g_strdup(MF_UG_LABEL_NAME); + break; + case 1: /**< Sort by file size ascending */ + ret = g_strdup(MF_UG_LABEL_DATE); + break; + case 2: /**< Sort by file date ascending */ + ret = g_strdup(MF_UG_LABEL_SIZE); + break; + case 3: /**< Sort by file type ascending */ + ret = g_strdup(MF_UG_LABEL_TYPE); + break; + default: + break; + } + return ret; + } + return NULL; +} + +static Evas_Object* __mf_ug_popup_get_genlist_icon(void *data, Evas_Object * obj, const char *part) +{ + ugListByData_s *params = (ugListByData_s *) data; + assert(params); + ugData *ugd = params->ugd; + assert(ugd); + assert(part); + + if (!strcmp(part, "elm.icon")) { + Evas_Object *radio = NULL; + radio = elm_radio_add(obj); + elm_object_focus_set(radio, EINA_FALSE); + elm_radio_state_value_set(radio, params->index); + elm_radio_group_add(radio, ugd->ug_Status.ug_pRadioGroup); + elm_radio_value_set(radio, ugd->ug_Status.ug_iRadioValue); + evas_object_show(radio); + return radio; + } + return NULL; +} + +static void __mf_ug_popup_genlist_select(void *data, Evas_Object * obj, void *event_info) +{ + assert(data); + assert(event_info); + ugListByData_s *params = NULL; + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + if (item != NULL) { + params = (ugListByData_s *) elm_object_item_data_get(item); + if (params != NULL && params->ugd != NULL) { + params->ugd->ug_Status.ug_iSelectedSortType = params->index; + elm_radio_value_set(params->ugd->ug_Status.ug_pRadioGroup, params->index); + } + } +} + +/****************************** +** Prototype : mfPopupCreate +** Description : +** Input : void *data +** ePopMode popupMode +** char *title +** char *context +** char *first_btn_text +** char *second_btn_text +** char *third_btn_text +** Evas_Smart_Cb func +** void* param +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__ug_mf_popup_button_create(Evas_Object *parent, const char *label) +{ + Evas_Object *btn = NULL; + btn = elm_button_add(parent); + if (label) { + elm_object_text_set(btn, label); + } + return btn; + +} + +static Evas_Object *__mf_ug_popup_box_set(Evas_Object *parent, Evas_Object *content, int item_cnt) +{ + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + ug_mf_retvm_if(content == NULL, NULL, "content is NULL"); + ug_mf_retvm_if(item_cnt < 0, NULL, "content is NULL"); + + Evas_Object *box = elm_box_add(parent); + if (item_cnt > MF_UG_ITEM_COUNT) { + evas_object_size_hint_min_set(box, MF_UG_POPUP_MENUSTYLE_WIDTH, + MF_UG_POPUP_MENUSTYLE_HEIGHT(item_cnt)); + } else { + evas_object_size_hint_min_set(box, MF_UG_POPUP_MENUSTYLE_WIDTH, + MF_UG_POPUP_MENUSTYLE_HEIGHT(item_cnt)); + } + + evas_object_show(content); + elm_box_pack_end(box, content); + return box; +} + +Evas_Object *mf_ug_popup_create_search(void *data, Evas_Smart_Cb func, void *param) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + Evas_Object *popup = NULL; + Evas_Object *btn1 = NULL; + Evas_Object *box = NULL; + Evas_Object *content = NULL; + Evas_Object *label = NULL; + + popup = elm_popup_add(ugd->ug_MainWindow.ug_pMainLayout); + elm_object_style_set(popup,"min_menustyle"); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + ugd->ug_MainWindow.ug_pNormalPopup = popup; + + + + btn1 = elm_button_add(popup); + elm_object_text_set(btn1, MF_UG_LABEL_CANCEL); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", func, param); + + box = elm_box_add(popup); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + content = elm_layout_add(popup); + elm_layout_file_set(content, UG_EDJ_NAVIGATIONBAR, UG_GRP_SEARCH_PATH); + + evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(content, EVAS_HINT_FILL, EVAS_HINT_FILL); + + label = elm_label_add(content); + ugd->ug_MainWindow.ug_pSearchLabel = label; + elm_object_style_set(label, "popup/default"); + elm_label_wrap_width_set(label, 720); + elm_label_ellipsis_set(label, EINA_TRUE); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(label, "Test"); + + + elm_object_part_content_set(content, "path", label); + evas_object_show(label); + elm_box_pack_end(box, content); + + evas_object_size_hint_min_set(box, 720, 300); + evas_object_size_hint_max_set(box, 720, 300); + + evas_object_show(btn1); + evas_object_show(content); + evas_object_show(box); + + elm_object_content_set(popup, box); + + evas_object_show(popup); + return popup; +} + +Evas_Object *mf_ug_popup_create(void *data, mf_ug_popup_mode popupMode, char *title, const char *context, const char *first_btn_text, const char *second_btn_text, + const char *third_btn_text, Evas_Smart_Cb func, void *param) +{ + Evas_Object *popup; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + + Evas_Object *genlist; + Evas_Object *radio_group = NULL; + Evas_Object *box = NULL; + Evas_Object *btn1 = NULL; + Evas_Object *btn2 = NULL; + int index = 0; + int listby_selected= 0; + + popup = elm_popup_add(ugd->ug_MainWindow.ug_pMainLayout); + ugd->ug_MainWindow.ug_pNormalPopup = popup; + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + if (title) { + elm_object_part_text_set(popup, "title,text", title); + } + if (context && popupMode != UG_POPMODE_PROGRESSBAR) { + elm_object_text_set(popup, context); + } + switch (popupMode) { + case UG_POPMODE_TEXT: + case UG_POPMODE_TITLE_TEXT: + elm_popup_timeout_set(popup, 3); + if (func) { + evas_object_smart_callback_add(popup, "timeout", (Evas_Smart_Cb) func, param); + } + break; + case UG_POPMODE_TEXT_TWO_BTN: + case UG_POPMODE_TITLE_TEXT_TWO_BTN: + btn1 = __ug_mf_popup_button_create(popup, first_btn_text); + btn2 = __ug_mf_popup_button_create(popup, second_btn_text); + + evas_object_smart_callback_add(btn1, "clicked", func, param); + evas_object_smart_callback_add(btn2, "clicked", func, param); + elm_object_part_content_set(popup, "button1", btn1); + elm_object_part_content_set(popup, "button2", btn2); + break; + case UG_POPMODE_TEXT_BTN: + case UG_POPMODE_TITLE_TEXT_BTN: + btn1 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_OK); + evas_object_smart_callback_add(btn1, "clicked", func, param); + elm_object_part_content_set(popup, "button1", btn1); + break; + case UG_POPMODE_SEARCH: + btn1 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_CANCEL); + evas_object_smart_callback_add(btn1, "clicked", func, param); + elm_object_part_content_set(popup, "button1", btn1); + break; + case UG_POPMODE_LIST_BY: + elm_object_style_set(popup, MF_UG_POPUP_STYLE_MIN_MENUSTYLE); + + btn1 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_ASCENDING); + evas_object_smart_callback_add(btn1, "clicked", func, param); + elm_object_part_content_set(popup, "button1", btn1); + + btn2 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_DESCENDING); + evas_object_smart_callback_add(btn2, "clicked", func, param); + elm_object_part_content_set(popup, "button2", btn2); + + if (ugd->ug_Status.ug_pRadioGroup) { + evas_object_del(ugd->ug_Status.ug_pRadioGroup); + ugd->ug_Status.ug_pRadioGroup = NULL; + } + + radio_group = elm_radio_add(ugd->ug_MainWindow.ug_pWindow); + elm_object_focus_set(radio_group, EINA_FALSE); + elm_radio_value_set(radio_group, 0); + evas_object_hide(radio_group); + ugd->ug_Status.ug_pRadioGroup = radio_group; + + listby_selected = __mf_ug_popup_get_list_by_selected_item(ugd); + ugd->ug_Status.ug_iRadioValue = listby_selected; + + ug_listby_itc.item_style = "1text.1icon.2"; + ug_listby_itc.func.text_get = __mf_ug_popup_get_genlist_label; + ug_listby_itc.func.content_get = __mf_ug_popup_get_genlist_icon; + ug_listby_itc.func.state_get = NULL; + ug_listby_itc.func.del = NULL; + genlist = elm_genlist_add(popup); + elm_object_focus_set(genlist, EINA_FALSE); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + for (index = 0; index < MF_UG_ITEM_COUNT; index++) { + ugListByData_s *item_data = malloc(sizeof(ugListByData_s)); + if (item_data == NULL) + continue; + + item_data->index = index; + item_data->ugd = ugd; + elm_genlist_item_append(genlist, &ug_listby_itc, (void *)item_data, NULL, + ELM_GENLIST_ITEM_NONE, __mf_ug_popup_genlist_select, popup); + } + + box = __mf_ug_popup_box_set(popup, genlist, MF_UG_ITEM_COUNT); + elm_object_content_set(popup, box); + evas_object_smart_callback_add(popup, "response", func, param); + + break; + default: + evas_object_del(popup); + return NULL; + } + evas_object_show(popup); + return popup; +} + +void mf_ug_popup_indicator_popup(const char *text) +{ + ug_mf_retm_if(text == NULL, "text is NULL"); + int ret = notification_status_message_post(text); + ug_debug("status_message_post()... [0x%x]!", ret); + if (ret != 0) { + ug_debug("status_message_post()... [0x%x]!", ret); + } + return ; +} + +static void _move_ctxpopup(void *data, Evas_Object *parent, Evas_Object *ctxpopup ) +{ + elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, + ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_RIGHT, + ELM_CTXPOPUP_DIRECTION_DOWN); + + if (parent) { + int x = 0; + int y = 0; + int w = 0; + int h = 0; + + evas_object_geometry_get(parent, &x, &y, &w, &h); + evas_object_move(ctxpopup, x+w/2, + y + h/2); + } +} +static void _ctxpopup_hide_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(obj == NULL, "obj is NULL"); + evas_object_del(obj); + obj = NULL; + UG_TRACE_END; +} + + +void mf_ug_context_popup_create_more(void *data, Evas_Object *parent) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + UG_SAFE_FREE_OBJ(ugd->ug_MainWindow.ug_pContextPopup); + + Evas_Object *ctxpopup = elm_ctxpopup_add(ugd->ug_MainWindow.ug_pNaviBar); + ugd->ug_MainWindow.ug_pContextPopup = ctxpopup; + Elm_Object_Item *it = NULL; + + if (ugd->ug_UiGadget.ug_iSelectMode == EXPORT_MODE || ugd->ug_UiGadget.ug_iSelectMode == SAVE_MODE) { + /*Search*/ + it = elm_ctxpopup_item_append(ctxpopup, MF_UG_LABEL_CREATE, NULL, mf_ug_cb_create_new_folder, ugd); + } + _move_ctxpopup(ugd, parent, ctxpopup); + evas_object_show(ctxpopup); + + if(ctxpopup) + { + evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ugd); + } + UG_TRACE_END; +} + +static Evas_Object *__mf_ug_popup_entry_create(Evas_Object *parent) +{ + Evas_Object *en = NULL; + + en = elm_entry_add(parent); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_entry_select_all(en); + elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_AUTO); + + Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en); + + elm_entry_single_line_set(en, EINA_TRUE); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(en); + + return en; + +} + +static char *__new_folder_text_get(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + + int error_code = 0; + char *fileName = NULL; + char *fullpath = (char *)malloc(sizeof(char) * MYFILE_FILE_PATH_LEN_MAX); + if (fullpath == NULL) { + return NULL; + } + GString *dest_fullpath = NULL; + + memset(fullpath, 0, MYFILE_FILE_PATH_LEN_MAX); + fileName = elm_entry_markup_to_utf8(MF_UG_LABEL_FOLDER); + snprintf(fullpath, (MYFILE_FILE_PATH_LEN_MAX), "%s/%s", (char *)ugd->ug_Status.ug_pPath->str, fileName); + + dest_fullpath = g_string_new(fullpath); + + + if (mf_ug_fm_svc_wrapper_detect_duplication(dest_fullpath)) { + ug_debug("dectetion result is TRUE\ndest_fullpath is %s\n", dest_fullpath->str); + error_code = mf_ug_fm_svc_wrapper_file_auto_rename(ugd, dest_fullpath, FILE_NAME_WITH_BRACKETS, &dest_fullpath); + ug_debug("rename result is %s\n", dest_fullpath->str); + memset(fullpath, 0, strlen(fullpath)); + int len = strlen(ugd->ug_Status.ug_pPath->str) + 1; + strncpy(fullpath, dest_fullpath->str + len, MYFILE_FILE_PATH_LEN_MAX); + /*memset(fileName,0,strlen(fileName));*/ + + UG_SAFE_FREE_CHAR(fileName); + fileName = elm_entry_markup_to_utf8(fullpath); + } + + /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/ + + + UG_SAFE_FREE_CHAR(fullpath); + UG_SAFE_FREE_GSTRING(dest_fullpath); + return fileName; +} +static void __mf_ug_popup_show_vk_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + Evas_Object *pEntry = NULL; + + evas_object_del(ugd->ug_MainWindow.ug_pNormalPopup); + + ugd->ug_MainWindow.ug_pNormalPopup = NULL; + + pEntry = ugd->ug_MainWindow.ug_pEntry; + elm_entry_cursor_end_set(ugd->ug_MainWindow.ug_pEntry); + + elm_object_focus_set(ugd->ug_MainWindow.ug_pEntry, EINA_TRUE); + + UG_TRACE_END; + +} + + +static void __mf_ug_popup_create_folder_imf_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + const char *entry_data = NULL; + char *name = NULL; + char new_str[MYFILE_FILE_NAME_LEN_MAX] = { '\0', }; + + entry_data = elm_entry_entry_get(ugd->ug_MainWindow.ug_pEntry); + ug_mf_retm_if(entry_data == NULL, "entry_data is null"); + name = elm_entry_markup_to_utf8(entry_data); + ug_mf_retm_if(name == NULL, "name is null"); + + ug_error("name is [%s]", name); + if (mf_ug_file_attr_is_valid_name(name) != MYFILE_ERR_NONE) { + strncpy(new_str, name, MYFILE_FILE_NAME_LEN_MAX - 1); + if (strlen(name) > 0) + new_str[strlen(name) - 1] = '\0'; + elm_entry_entry_set(ugd->ug_MainWindow.ug_pEntry, new_str); + elm_entry_cursor_end_set(ugd->ug_MainWindow.ug_pEntry); + elm_object_focus_set(ugd->ug_MainWindow.ug_pEntry, EINA_FALSE); + + UG_SAFE_FREE_OBJ(ugd->ug_MainWindow.ug_pNormalPopup); + ugd->ug_MainWindow.ug_pNormalPopup = mf_ug_popup_create(ugd, UG_POPMODE_TEXT, NULL, MF_UG_LABEL_ILLEGAL_CHAR, NULL, NULL, + NULL, __mf_ug_popup_show_vk_cb, ugd); + } + UG_SAFE_FREE_CHAR(name); + UG_TRACE_END; +} + +Evas_Object *mf_ug_popup_create_new_folder_popup(void *data, char *context) +{ + + UG_TRACE_BEGIN; + ug_mf_retvm_if(data == NULL, NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + Evas_Object *popup; + Evas_Object *layout; + char *text = NULL; + static Elm_Entry_Filter_Limit_Size limit_filter_data; + + popup = elm_popup_add(ugd->ug_MainWindow.ug_pMainLayout); + elm_object_focus_set(popup, EINA_FALSE); + + layout = elm_layout_add(popup); + elm_object_focus_set(layout, EINA_FALSE); + elm_layout_file_set(layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_POPUP); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + Evas_Object *en = NULL; + en = __mf_ug_popup_entry_create(layout); + + text = __new_folder_text_get(ugd); + limit_filter_data.max_char_count = MYFILE_FILE_NAME_LEN_MAX; + elm_entry_entry_set(en, text); + elm_entry_cursor_end_set(en); + UG_SAFE_FREE_CHAR(text); + + elm_entry_markup_filter_append(en, elm_entry_filter_limit_size, + &limit_filter_data); + elm_object_part_content_set(layout, "elm.swallow.content", en); + + edje_object_part_text_set(elm_layout_edje_get(layout), "title.text", context); + evas_object_smart_callback_add(en, "maxlength,reached", mf_ug_cb_reach_max_len_cb, ugd); + evas_object_smart_callback_add(en, "changed", __mf_ug_popup_create_folder_imf_changed_cb, ugd); + ugd->ug_MainWindow.ug_pEntry = en; + + elm_object_content_set(popup, layout); + + + Evas_Object *btn1 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_OK); + elm_object_style_set(btn1, "popup_button/default"); + Evas_Object *btn2 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_CANCEL); + elm_object_style_set(btn2, "popup_button/default"); + + evas_object_smart_callback_add(btn1, "clicked", mf_ug_cb_save_cb, ugd); + evas_object_smart_callback_add(btn2, "clicked", mf_ug_cb_cancel_new_folder_cb, ugd); + elm_object_part_content_set(popup, "button1", btn1); + elm_object_part_content_set(popup, "button2", btn2); + + evas_object_show(popup); + + return popup; +} + |